NuwanSameera 9 years ago
commit 94014a802e

@ -3,15 +3,14 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>device-mgt-iot-androidsense</artifactId>
<artifactId>androidsense-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.0.4-SNAPSHOT</version>
<version>2.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>org.wso2.carbon.device.mgt.iot.androidsense.service.impl</artifactId>
<version>2.0.4-SNAPSHOT</version>
<artifactId>org.wso2.carbon.device.mgt.iot.androidsense.api</artifactId>
<packaging>war</packaging>
<name>WSO2 Carbon - Android Sense API</name>
<description>WSO2 Carbon - Android Sense Service-API Implementation</description>
@ -98,7 +97,6 @@
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.mgt.analytics.data.publisher</artifactId>
<version>1.1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>

@ -141,6 +141,22 @@ public class AndroidSenseMQTTConnector extends MQTTTransportHandler {
String sensorName = null;
PrivilegedCarbonContext.startTenantFlow();
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
DeviceManagementProviderService deviceManagementProviderService =
(DeviceManagementProviderService) ctx.getOSGiService(DeviceManagementProviderService.class, null);
if (deviceManagementProviderService != null) {
DeviceIdentifier identifier = new DeviceIdentifier(deviceId, AndroidSenseConstants.DEVICE_TYPE);
Device device = deviceManagementProviderService.getDevice(identifier);
if (device != null) {
String owner = device.getEnrolmentInfo().getOwner();
ctx.setUsername(owner);
ctx.setTenantDomain(MultitenantUtils.getTenantDomain(owner), true);
} else {
return;
}
} else {
return;
}
ctx.setTenantDomain("carbon.super", true);
for (SensorData sensor : sensorData) {
if (sensor.key.equals("battery")) {
@ -254,6 +270,8 @@ public class AndroidSenseMQTTConnector extends MQTTTransportHandler {
}
} catch (JsonSyntaxException e) {
throw new TransportHandlerException("Invalid message format " + mqttMessage.toString());
} catch (DeviceManagementException e) {
throw new TransportHandlerException("Invalid device id " + deviceId);
} finally {
PrivilegedCarbonContext.endTenantFlow();
}

@ -56,18 +56,10 @@
org.osgi.framework,
org.osgi.service.component,
org.apache.commons.logging,
javax.xml.bind.*;resolution:=optional,
javax.naming;resolution:=optional,
javax.sql;resolution:=optional,
javax.xml.bind.annotation.*;resolution:=optional,
javax.xml.parsers;resolution:=optional,
javax.net;resolution:=optional,
javax.net.ssl;resolution:=optional,
org.w3c.dom;resolution:=optional,
org.wso2.carbon.device.mgt.common.*,
org.wso2.carbon.device.mgt.common,
org.wso2.carbon.context.*,
org.wso2.carbon.ndatasource.core,
org.wso2.carbon.device.mgt.iot.*,
org.wso2.carbon.device.mgt.extensions.feature.mgt.*,
org.wso2.carbon.utils.*

@ -30,6 +30,8 @@ import java.util.List;
public class AndroidSenseManagerService implements DeviceManagementService {
private DeviceManager deviceManager;
private static final String SUPER_TENANT_DOMAIN = "carbon.super";
@Override
public String getType() {
return AndroidSenseConstants.DEVICE_TYPE;
@ -37,7 +39,7 @@ public class AndroidSenseManagerService implements DeviceManagementService {
@Override
public String getProviderTenantDomain() {
return "carbon.super";
return SUPER_TENANT_DOMAIN;
}
@Override

@ -34,7 +34,7 @@
<modules>
<module>org.wso2.carbon.device.mgt.iot.androidsense.analytics</module>
<module>org.wso2.carbon.device.mgt.iot.androidsense.service.impl</module>
<module>org.wso2.carbon.device.mgt.iot.androidsense.api</module>
<module>org.wso2.carbon.device.mgt.iot.androidsense.plugin</module>
<module>org.wso2.carbon.device.mgt.iot.androidsense.ui</module>
</modules>

@ -21,15 +21,14 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>device-mgt-iot-arduino</artifactId>
<artifactId>arduino-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.0.4-SNAPSHOT</version>
<version>2.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>org.wso2.carbon.device.mgt.iot.arduino.service.impl</artifactId>
<version>2.0.4-SNAPSHOT</version>
<artifactId>org.wso2.carbon.device.mgt.iot.arduino.api</artifactId>
<packaging>war</packaging>
<name>WSO2 Carbon - IoT Server Arduino Service API</name>
<description>WSO2 Carbon - Arduino Service API Implementation</description>
@ -55,12 +54,7 @@
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.apimgt.application.extension</artifactId>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.mgt.jwt.client.extension</artifactId>
<artifactId>org.wso2.carbon.identity.jwt.client.extension</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
@ -90,7 +84,6 @@
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.mgt.analytics.data.publisher</artifactId>
<version>1.1.0-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
@ -139,7 +132,7 @@
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>org.wso2.carbon.device.mgt.iot.arduino.plugin.impl</artifactId>
<artifactId>org.wso2.carbon.device.mgt.iot.arduino.plugin</artifactId>
<scope>provided</scope>
</dependency>
@ -162,11 +155,6 @@
<artifactId>jsr311-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.apimgt.annotations</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.apimgt.webapp.publisher</artifactId>

@ -33,10 +33,10 @@ import org.wso2.carbon.device.mgt.iot.arduino.plugin.constants.ArduinoConstants;
import org.wso2.carbon.device.mgt.iot.exception.DeviceControllerException;
import org.wso2.carbon.device.mgt.iot.util.ZipArchive;
import org.wso2.carbon.device.mgt.iot.util.ZipUtil;
import org.wso2.carbon.device.mgt.jwt.client.extension.JWTClient;
import org.wso2.carbon.device.mgt.jwt.client.extension.JWTClientManager;
import org.wso2.carbon.device.mgt.jwt.client.extension.dto.AccessTokenInfo;
import org.wso2.carbon.device.mgt.jwt.client.extension.exception.JWTClientException;
import org.wso2.carbon.identity.jwt.client.extension.JWTClient;
import org.wso2.carbon.identity.jwt.client.extension.JWTClientManager;
import org.wso2.carbon.identity.jwt.client.extension.dto.AccessTokenInfo;
import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException;
import org.wso2.carbon.user.api.UserStoreException;
import javax.ws.rs.core.Response;
import java.nio.ByteBuffer;

@ -28,7 +28,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>org.wso2.carbon.device.mgt.iot.arduino.plugin.impl</artifactId>
<artifactId>org.wso2.carbon.device.mgt.iot.arduino.plugin</artifactId>
<packaging>bundle</packaging>
<name>WSO2 Carbon - IoT Server Arduino Management Plugin</name>
<description>WSO2 Carbon - Arduino Management/Control Plugin Implementation</description>
@ -64,18 +64,10 @@
org.osgi.framework,
org.osgi.service.component,
org.apache.commons.logging,
javax.xml.bind.*;resolution:=optional,
javax.naming;resolution:=optional,
javax.sql;resolution:=optional,
javax.xml.bind.annotation.*;resolution:=optional,
javax.xml.parsers;resolution:=optional,
javax.net;resolution:=optional,
javax.net.ssl;resolution:=optional,
org.w3c.dom;resolution:=optional,
org.wso2.carbon.device.mgt.common.*,
org.wso2.carbon.device.mgt.common,
org.wso2.carbon.context.*,
org.wso2.carbon.ndatasource.core,
org.wso2.carbon.device.mgt.iot.*,
org.wso2.carbon.device.mgt.extensions.feature.mgt.*,
org.wso2.carbon.utils.*

@ -32,6 +32,7 @@ import java.util.List;
public class ArduinoManagerService implements DeviceManagementService {
private DeviceManager deviceManager;
private final static String DEVICE_TYPE_PROVIDER_DOMAIN = "carbon.super";
@Override
public String getType() {
@ -40,7 +41,7 @@ public class ArduinoManagerService implements DeviceManagementService {
@Override
public String getProviderTenantDomain() {
return "carbon.super";
return DEVICE_TYPE_PROVIDER_DOMAIN;
}
@Override

@ -35,8 +35,8 @@
<modules>
<module>org.wso2.carbon.device.mgt.iot.arduino.analytics</module>
<module>org.wso2.carbon.device.mgt.iot.arduino.service.impl</module>
<module>org.wso2.carbon.device.mgt.iot.arduino.plugin.impl</module>
<module>org.wso2.carbon.device.mgt.iot.arduino.api</module>
<module>org.wso2.carbon.device.mgt.iot.arduino.plugin</module>
<module>org.wso2.carbon.device.mgt.iot.arduino.ui</module>
</modules>

@ -4,15 +4,14 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>device-mgt-iot-digitaldisplay</artifactId>
<artifactId>digital-display-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.0.4-SNAPSHOT</version>
<version>2.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>org.wso2.carbon.device.mgt.iot.digitaldisplay.service.impl</artifactId>
<version>2.0.4-SNAPSHOT</version>
<artifactId>org.wso2.carbon.device.mgt.iot.digitaldisplay.api</artifactId>
<packaging>war</packaging>
<name>WSO2 Carbon - IoT Server DigitalDisplay API</name>
<description>WSO2 Carbon - Digital Display Service API Implementation</description>
@ -49,23 +48,7 @@
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.apimgt.application.extension</artifactId>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.mgt.jwt.client.extension</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.apimgt.application.extension</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.mgt.analytics</artifactId>
<artifactId>org.wso2.carbon.device.mgt.analytics.data.publisher</artifactId>
<scope>provided</scope>
<exclusions>
<exclusion>
@ -241,7 +224,7 @@
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.mgt.jwt.client.extension</artifactId>
<artifactId>org.wso2.carbon.identity.jwt.client.extension</artifactId>
<scope>provided</scope>
</dependency>
<dependency>

@ -34,10 +34,10 @@ import org.wso2.carbon.device.mgt.iot.digitaldisplay.plugin.constants.DigitalDis
import org.wso2.carbon.device.mgt.iot.exception.DeviceControllerException;
import org.wso2.carbon.device.mgt.iot.util.ZipArchive;
import org.wso2.carbon.device.mgt.iot.util.ZipUtil;
import org.wso2.carbon.device.mgt.jwt.client.extension.JWTClient;
import org.wso2.carbon.device.mgt.jwt.client.extension.JWTClientManager;
import org.wso2.carbon.device.mgt.jwt.client.extension.dto.AccessTokenInfo;
import org.wso2.carbon.device.mgt.jwt.client.extension.exception.JWTClientException;
import org.wso2.carbon.identity.jwt.client.extension.JWTClient;
import org.wso2.carbon.identity.jwt.client.extension.JWTClientManager;
import org.wso2.carbon.identity.jwt.client.extension.dto.AccessTokenInfo;
import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException;
import org.wso2.carbon.user.api.UserStoreException;
import javax.ws.rs.core.Response;

@ -47,18 +47,10 @@
org.osgi.framework,
org.osgi.service.component,
org.apache.commons.logging,
javax.xml.bind.*;resolution:=optional,
javax.naming;resolution:=optional,
javax.sql;resolution:=optional,
javax.xml.bind.annotation.*;resolution:=optional,
javax.xml.parsers;resolution:=optional,
javax.net,
javax.net.ssl,
org.w3c.dom,
org.wso2.carbon.device.mgt.common.*,
org.wso2.carbon.device.mgt.common,
org.wso2.carbon.context.*,
org.wso2.carbon.ndatasource.core,
org.wso2.carbon.device.mgt.iot.*,
org.wso2.carbon.device.mgt.extensions.feature.mgt.*,
org.wso2.carbon.utils.*

@ -30,6 +30,8 @@ import java.util.List;
public class DigitalDisplayManagerService implements DeviceManagementService{
private DeviceManager deviceManager;
private final static String DEVICE_TYPE_PROVIDER_DOMAIN = "carbon.super";
@Override
public String getType() {
return DigitalDisplayConstants.DEVICE_TYPE;
@ -37,7 +39,7 @@ public class DigitalDisplayManagerService implements DeviceManagementService{
@Override
public String getProviderTenantDomain() {
return "carbon.super";
return DEVICE_TYPE_PROVIDER_DOMAIN;
}
@Override

@ -33,7 +33,7 @@
<url>http://wso2.org</url>
<modules>
<module>org.wso2.carbon.device.mgt.iot.digitaldisplay.service.impl</module>
<module>org.wso2.carbon.device.mgt.iot.digitaldisplay.api</module>
<module>org.wso2.carbon.device.mgt.iot.digitaldisplay.plugin</module>
<module>org.wso2.carbon.device.mgt.iot.digitaldisplay.ui</module>
</modules>

@ -1,14 +1,13 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>device-mgt-iot-droneanalyzer</artifactId>
<artifactId>drone-analyzer-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.0.4-SNAPSHOT</version>
<version>2.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl</artifactId>
<version>2.0.4-SNAPSHOT</version>
<artifactId>org.wso2.carbon.device.mgt.iot.droneanalyzer.api</artifactId>
<packaging>war</packaging>
<name>WSO2 Carbon - IoT Server Drone Analyzer API</name>
<url>http://maven.apache.org</url>
@ -35,7 +34,6 @@
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.mgt.analytics.data.publisher</artifactId>
<version>1.1.0-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
@ -231,12 +229,7 @@
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.apimgt.application.extension</artifactId>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.mgt.jwt.client.extension</artifactId>
<artifactId>org.wso2.carbon.identity.jwt.client.extension</artifactId>
<scope>provided</scope>
</dependency>
<dependency>

@ -35,10 +35,10 @@ import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConsta
import org.wso2.carbon.device.mgt.iot.exception.DeviceControllerException;
import org.wso2.carbon.device.mgt.iot.util.ZipArchive;
import org.wso2.carbon.device.mgt.iot.util.ZipUtil;
import org.wso2.carbon.device.mgt.jwt.client.extension.JWTClient;
import org.wso2.carbon.device.mgt.jwt.client.extension.JWTClientManager;
import org.wso2.carbon.device.mgt.jwt.client.extension.dto.AccessTokenInfo;
import org.wso2.carbon.device.mgt.jwt.client.extension.exception.JWTClientException;
import org.wso2.carbon.identity.jwt.client.extension.JWTClient;
import org.wso2.carbon.identity.jwt.client.extension.JWTClientManager;
import org.wso2.carbon.identity.jwt.client.extension.dto.AccessTokenInfo;
import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException;
import org.wso2.carbon.user.api.UserStoreException;
import javax.ws.rs.core.Response;
import java.nio.ByteBuffer;

@ -49,18 +49,10 @@
org.osgi.framework,
org.osgi.service.component,
org.apache.commons.logging,
javax.xml.bind.*;resolution:=optional,
javax.naming;resolution:=optional,
javax.sql;resolution:=optional,
javax.xml.bind.annotation.*;resolution:=optional,
javax.xml.parsers;resolution:=optional,
javax.net;resolution:=optional,
javax.net.ssl;resolution:=optional,
org.w3c.dom;resolution:=optional,
org.wso2.carbon.device.mgt.common.*,
org.wso2.carbon.device.mgt.common,
org.wso2.carbon.context.*,
org.wso2.carbon.ndatasource.core,
org.wso2.carbon.device.mgt.iot.*,
org.wso2.carbon.device.mgt.extensions.feature.mgt.*,
org.wso2.carbon.utils.*

@ -29,9 +29,10 @@ import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConsta
import java.util.List;
public class DroneAnalyzerManagerService implements DeviceManagementService {
private DeviceManager deviceManager;
private final static String DEVICE_TYPE_PROVIDER_DOMAIN = "carbon.super";
@Override
public String getType() {
return DroneConstants.DEVICE_TYPE;
@ -95,7 +96,7 @@ public class DroneAnalyzerManagerService implements DeviceManagementService {
@Override
public String getProviderTenantDomain() {
return "carbon.super";
return DEVICE_TYPE_PROVIDER_DOMAIN;
}
@Override

@ -34,7 +34,7 @@
<modules>
<module>org.wso2.carbon.device.mgt.iot.droneanalyzer.ui</module>
<module>org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl</module>
<module>org.wso2.carbon.device.mgt.iot.droneanalyzer.api</module>
<module>org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin</module>
</modules>

@ -1,42 +0,0 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.iot.api;
public class DeviceUsageDTO {
private String time;
private String value;
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}

@ -20,12 +20,7 @@ package org.wso2.carbon.device.mgt.iot.api;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.CarbonContext;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
import org.wso2.carbon.device.mgt.common.*;
import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration;
import org.wso2.carbon.device.mgt.common.license.mgt.License;
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
@ -33,56 +28,20 @@ import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.device.mgt.iot.exception.DeviceControllerException;
import org.wso2.carbon.device.mgt.iot.sensormgt.SensorDataManager;
import org.wso2.carbon.device.mgt.iot.sensormgt.SensorRecord;
import javax.jws.WebService;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import org.wso2.carbon.device.mgt.iot.util.APIUtil;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@WebService public class DevicesManagerService {
private static Log log = LogFactory.getLog(DevicesManagerService.class);
@Context //injected response proxy supporting multiple thread
private HttpServletResponse response;
private PrivilegedCarbonContext ctx;
private DeviceManagementProviderService getServiceProvider() {
String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain();
PrivilegedCarbonContext.startTenantFlow();
ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
ctx.setTenantDomain(tenantDomain, true);
if (log.isDebugEnabled()) {
log.debug("Getting thread local carbon context for tenant domain: " + tenantDomain);
}
return (DeviceManagementProviderService) ctx.getOSGiService(DeviceManagementProviderService.class, null);
}
public class DevicesManagerService {
private void endTenantFlow() {
PrivilegedCarbonContext.endTenantFlow();
ctx = null;
if (log.isDebugEnabled()) {
log.debug("Tenant flow ended");
}
}
private static final Log log = LogFactory.getLog(DevicesManagerService.class);
private Device[] getActiveDevices(List<Device> devices){
private Device[] getActiveDevices(List<Device> devices) {
List<Device> activeDevices = new ArrayList<>();
if (devices != null) {
for (Device device : devices) {
@ -94,29 +53,27 @@ import java.util.List;
return activeDevices.toArray(new Device[activeDevices.size()]);
}
@Path("/device/user/{username}/all")
@Path("/devices/users/{userName}")
@GET
@Consumes("application/json")
@Produces("application/json")
public Device[] getDevicesOfUser(@PathParam("username") String username) {
public Response getDevicesOfUser(@PathParam("userName") String userName) {
try {
List<Device> devices = this.getServiceProvider().getDevicesOfUser(username);
return this.getActiveDevices(devices);
List<Device> devices = APIUtil.getDeviceManagementService()
.getDevicesOfUser(userName);
Device[] devicesArr = this.getActiveDevices(devices);
return Response.status(Response.Status.OK).entity(devicesArr).build();
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/user/{username}/all/count")
@Path("/devices/users/{userName}/count")
@GET
@Consumes("application/json")
@Produces("application/json")
public int getDeviceCount(@PathParam("username") String username){
public Response getDeviceCount(@PathParam("userName") String userName) {
try {
List<Device> devices = this.getServiceProvider().getDevicesOfUser(username);
List<Device> devices = APIUtil.getDeviceManagementService()
.getDevicesOfUser(userName);
if (devices != null) {
List<Device> activeDevices = new ArrayList<>();
for (Device device : devices) {
@ -124,191 +81,182 @@ import java.util.List;
activeDevices.add(device);
}
}
return activeDevices.size();
return Response.status(Response.Status.OK).entity(activeDevices.size()).build();
}
return 0;
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return 0;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/identifier/{identifier}")
@Path("/devices/{deviceType}/{identifier}")
@GET
@Consumes("application/json")
@Produces("application/json")
public Device getDevice(@PathParam("type") String type, @PathParam("identifier") String identifier){
public Response getDevice(@PathParam("deviceType") String deviceType,
@PathParam("identifier") String identifier) {
try{
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(identifier);
deviceIdentifier.setType(type);
return this.getServiceProvider().getDevice(deviceIdentifier);
deviceIdentifier.setType(deviceType);
Device device = APIUtil.getDeviceManagementService().getDevice(
deviceIdentifier);
if (device != null) {
return Response.status(Response.Status.OK).entity(device).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/all")
@Path("/devices/types")
@GET
@Consumes("application/json")
@Produces("application/json")
public DeviceType[] getDeviceTypes(){
try{
List<DeviceType> deviceTypes = this.getServiceProvider().getAvailableDeviceTypes();
return deviceTypes.toArray(new DeviceType[deviceTypes.size()]);
public Response getDeviceTypes() {
try {
List<DeviceType> deviceTypes = APIUtil.getDeviceManagementService()
.getAvailableDeviceTypes();
DeviceType[] deviceTypesArr = deviceTypes.toArray(new DeviceType[deviceTypes.size()]);
return Response.status(Response.Status.OK).entity(deviceTypesArr).build();
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/all")
@Path("/devices/{deviceType}")
@GET
@Consumes("application/json")
@Produces("application/json")
public Device[] getAllDevices(@PathParam("type") String type){
try{
List<Device> devices = this.getServiceProvider().getAllDevices(type);
return this.getActiveDevices(devices);
public Response getAllDevices(@PathParam("deviceType") String deviceType) {
try {
List<Device> devices = APIUtil.getDeviceManagementService()
.getAllDevices(deviceType);
Device[] devicesArr = this.getActiveDevices(devices);
return Response.status(Response.Status.OK).entity(devicesArr).build();
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/all")
@Path("/devices")
@GET
@Consumes("application/json")
@Produces("application/json")
public Device[] getAllDevices(){
try{
List<Device> devices = this.getServiceProvider().getAllDevices();
return this.getActiveDevices(devices);
public Response getAllDevices() {
try {
List<Device> devices = APIUtil.getDeviceManagementService()
.getAllDevices();
return Response.status(Response.Status.OK).entity(this.getActiveDevices(devices)).build();
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/config")
@Path("/devices/{deviceType}/config")
@GET
@Consumes("application/json")
@Produces("application/json")
public TenantConfiguration getConfiguration(@PathParam("type") String type){
public Response getConfiguration(@PathParam("deviceType") String deviceType) {
try {
return this.getServiceProvider().getConfiguration(type);
TenantConfiguration tenantConfiguration = APIUtil.getDeviceManagementService().getConfiguration(deviceType);
if (tenantConfiguration != null) {
return Response.status(Response.Status.OK).entity(tenantConfiguration).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/role/{role}/all")
@Path("/devices/search/role")
@GET
@Consumes("application/json")
@Produces("application/json")
public Device[] getAllDevicesOfRole(@PathParam("role") String roleName){
try{
List<Device> devices = this.getServiceProvider().getAllDevicesOfRole(roleName);
return this.getActiveDevices(devices);
public Response getAllDevicesOfRole(@QueryParam("roleName") String roleName) {
try {
List<Device> devices = APIUtil.getDeviceManagementService()
.getAllDevicesOfRole(roleName);
Device[] devicesArr = this.getActiveDevices(devices);
return Response.status(Response.Status.OK).entity(devicesArr).build();
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/name/{name}/all")
@Path("/devices/search/name")
@GET
@Consumes("application/json")
@Produces("application/json")
public Device[] getDevicesByName(@PathParam("name") String name) {
try{
List<Device> devices = this.getServiceProvider().getDevicesByName(name);
return this.getActiveDevices(devices);
public Response getDevicesByName(@PathParam("deviceName") String deviceName) {
try {
List<Device> devices = APIUtil.getDeviceManagementService()
.getDevicesByName(deviceName);
Device[] devicesArr = this.getActiveDevices(devices);
return Response.status(Response.Status.OK).entity(devicesArr).build();
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/identifier/{identifier}/status")
@Path("/devices/{deviceType}/{identifier}/status")
@PUT
@Consumes("application/json")
@Produces("application/json")
void updateDeviceEnrolmentInfo(@PathParam("type") String type, @PathParam("identifier") String identifier,
@FormParam("status") EnrolmentInfo.Status status) {
DeviceManagementProviderService providerService = this.getServiceProvider();
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setType(type);
deviceIdentifier.setId(identifier);
public Response updateDeviceEnrolmentInfo(@PathParam("deviceType") String deviceType,
@PathParam("identifier") String identifier,
@FormParam("status") EnrolmentInfo.Status status) {
try {
DeviceManagementProviderService providerService = APIUtil.getDeviceManagementService();
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setType(deviceType);
deviceIdentifier.setId(identifier);
Device device = providerService.getDevice(deviceIdentifier);
providerService.updateDeviceEnrolmentInfo(device, status);
return Response.status(Response.Status.NO_CONTENT).build();
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/status/{status}/all")
@Path("/devices/search/status")
@GET
@Consumes("application/json")
@Produces("application/json")
public Device[] getDevicesByStatus(@PathParam("status") EnrolmentInfo.Status status) {
try{
List<Device> devices = this.getServiceProvider().getDevicesByStatus(status);
return this.getActiveDevices(devices);
public Response getDevicesByStatus(@QueryParam("status") EnrolmentInfo.Status status) {
try {
List<Device> devices = APIUtil.getDeviceManagementService()
.getDevicesByStatus(status);
Device[] devicesArr = this.getActiveDevices(devices);
return Response.status(Response.Status.OK).entity(devicesArr).build();
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/license")
@Path("/devices/{deviceType}/license")
@GET
@Consumes("application/json")
@Produces("application/json")
public License getLicense(@PathParam("type") String type, @QueryParam("languageCode") String languageCode) {
try{
return this.getServiceProvider().getLicense(type, languageCode);
public Response getLicense(@PathParam("deviceType") String deviceType,
@QueryParam("languageCode") String languageCode) {
try {
License license = APIUtil.getDeviceManagementService().getLicense(
deviceType, languageCode);
if (license != null) {
return Response.status(Response.Status.OK).entity(license).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/license")
@Path("/devices/{deviceType}/license")
@POST
@Consumes("application/json")
@Produces("application/json")
public void addLicense(@PathParam("type") String type, @FormParam("provider") String provider,
@FormParam("name") String name, @FormParam("version") String version,
@FormParam("language") String language, @FormParam("validFrom") Date validFrom,
@FormParam("validTo") Date validTo, @FormParam("text") String text) {
try{
public Response addLicense(@PathParam("deviceType") String deviceType,
@FormParam("provider") String provider, @FormParam("name") String name,
@FormParam("version") String version, @FormParam("language") String language,
@FormParam("validFrom") Date validFrom, @FormParam("validTo") Date validTo,
@FormParam("text") String text) {
try {
License license = new License();
license.setProvider(provider);
license.setName(name);
@ -317,26 +265,27 @@ import java.util.List;
license.setValidFrom(validFrom);
license.setValidTo(validTo);
license.setText(text);
this.getServiceProvider().addLicense(type, license);
APIUtil.getDeviceManagementService().addLicense(deviceType, license);
return Response.status(Response.Status.NO_CONTENT).build();
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/identifier/{identifier}")
@Path("/devices/{deviceType}/{identifier}/enrollment")
@PUT
@Consumes("application/json")
@Produces("application/json")
boolean modifyEnrollment(@PathParam("type") String type, @PathParam("identifier") String identifier,
@FormParam("name") String name, @FormParam("description") String description,
@FormParam("enrollmentId") int enrollmentId,
@FormParam("dateOfEnrolment") long dateOfEnrolment,
@FormParam("dateOfLastUpdate") long dateOfLastUpdate,
@FormParam("ownership") EnrolmentInfo.OwnerShip ownership,
@FormParam("status") EnrolmentInfo.Status status,
@FormParam("owner") String owner) {
public Response modifyEnrollment(@PathParam("deviceType") String deviceType,
@PathParam("identifier") String identifier,
@FormParam("name") String name,
@FormParam("description") String description,
@FormParam("groupId") int groupId,
@FormParam("enrollmentId") int enrollmentId,
@FormParam("dateOfEnrolment") long dateOfEnrolment,
@FormParam("dateOfLastUpdate") long dateOfLastUpdate,
@FormParam("ownership") EnrolmentInfo.OwnerShip ownership,
@FormParam("status") EnrolmentInfo.Status status,
@FormParam("owner") String owner) {
EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
enrolmentInfo.setId(enrollmentId);
@ -347,33 +296,36 @@ import java.util.List;
enrolmentInfo.setOwner(owner);
Device device = new Device();
device.setType(type);
device.setType(deviceType);
device.setDeviceIdentifier(identifier);
device.setName(name);
device.setDescription(description);
device.setEnrolmentInfo(enrolmentInfo);
try {
return this.getServiceProvider().modifyEnrollment(device);
boolean isModified = APIUtil.getDeviceManagementService()
.modifyEnrollment(device);
if (isModified) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device")
@Path("/devices/{deviceType}/{identifier}/enrollment")
@POST
@Consumes("application/json")
@Produces("application/json")
boolean enrollDevice(@FormParam("type") String type, @FormParam("identifier") String identifier,
@FormParam("name") String name, @FormParam("description") String description,
@FormParam("enrollmentId") int enrollmentId,
@FormParam("dateOfEnrolment") long dateOfEnrolment,
@FormParam("dateOfLastUpdate") long dateOfLastUpdate,
@FormParam("ownership") EnrolmentInfo.OwnerShip ownership,
@FormParam("status") EnrolmentInfo.Status status,
@FormParam("owner") String owner) {
public Response enrollDevice(@PathParam("deviceType") String deviceType, @PathParam("identifier") String identifier,
@FormParam("name") String name, @FormParam("description") String description,
@FormParam("groupId") int groupId,
@FormParam("enrollmentId") int enrollmentId,
@FormParam("dateOfEnrolment") long dateOfEnrolment,
@FormParam("dateOfLastUpdate") long dateOfLastUpdate,
@FormParam("ownership") EnrolmentInfo.OwnerShip ownership,
@FormParam("status") EnrolmentInfo.Status status,
@FormParam("owner") String owner) {
EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
enrolmentInfo.setId(enrollmentId);
@ -384,197 +336,232 @@ import java.util.List;
enrolmentInfo.setOwner(owner);
Device device = new Device();
device.setType(type);
device.setType(deviceType);
device.setDeviceIdentifier(identifier);
device.setName(name);
device.setDescription(description);
device.setEnrolmentInfo(enrolmentInfo);
try {
return this.getServiceProvider().enrollDevice(device);
boolean isModified = APIUtil.getDeviceManagementService().enrollDevice(
device);
if (isModified) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/tenantconfiguration")
@Path("/devices/tenant/configuration")
@GET
@Consumes("application/json")
@Produces("application/json")
public TenantConfiguration getConfiguration(){
public Response getTenantConfiguration() {
try {
return this.getServiceProvider().getConfiguration();
TenantConfiguration tenantConfiguration = APIUtil.getDeviceManagementService().getConfiguration();
if (tenantConfiguration != null) {
return Response.status(Response.Status.OK).entity(tenantConfiguration).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/tenantconfiguration")
@Path("/devices/tenant/configuration")
@POST
@Consumes("application/json")
@Produces("application/json")
public boolean saveConfiguration(@FormParam("tenantConfiguration") TenantConfiguration tenantConfiguration){
public Response saveTenantConfiguration(@FormParam("tenantConfiguration") TenantConfiguration tenantConfiguration) {
try {
return this.getServiceProvider().saveConfiguration(tenantConfiguration);
boolean isSaved = APIUtil.getDeviceManagementService()
.saveConfiguration(tenantConfiguration);
if (isSaved) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/identifier/{identifier}")
@Path("/devices/{deviceType}/{identifier}")
@DELETE
@Consumes("application/json")
@Produces("application/json")
public boolean disenrollDevice(@PathParam("type") String type, @PathParam("identifier") String identifier){
public Response disenrollDevice(@PathParam("deviceType") String deviceType,
@PathParam("identifier") String identifier) {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setType(type);
deviceIdentifier.setType(deviceType);
deviceIdentifier.setId(identifier);
try {
return this.getServiceProvider().disenrollDevice(deviceIdentifier);
boolean isDisEnrolled = APIUtil.getDeviceManagementService()
.disenrollDevice(deviceIdentifier);
if (isDisEnrolled) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/identifier/{identifier}/enrolled")
@Path("/devices/{deviceType}/{identifier}/enrollment")
@GET
@Consumes("application/json")
@Produces("application/json")
public boolean isEnrolled(@PathParam("type") String type, @PathParam("identifier") String identifier){
public Response isEnrolled(@PathParam("deviceType") String deviceType,
@PathParam("identifier") String identifier) {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setType(type);
deviceIdentifier.setType(deviceType);
deviceIdentifier.setId(identifier);
try {
return this.getServiceProvider().isEnrolled(deviceIdentifier);
boolean isEnrolled = APIUtil.getDeviceManagementService().isEnrolled(
deviceIdentifier);
if (isEnrolled) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/identifier/{identifier}/active")
@Path("/devices/{deviceType}/{identifier}/status")
@GET
@Consumes("application/json")
@Produces("application/json")
public boolean isActive(@PathParam("type") String type, @PathParam("identifier") String identifier){
public Response isActive(@PathParam("deviceType") String deviceType,
@PathParam("identifier") String identifier) {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setType(type);
deviceIdentifier.setType(deviceType);
deviceIdentifier.setId(identifier);
try {
return this.getServiceProvider().isActive(deviceIdentifier);
boolean isActive = APIUtil.getDeviceManagementService().isActive(
deviceIdentifier);
if (isActive) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/identifier/{identifier}/active")
@Path("/devices/{deviceType}/{identifier}/status")
@PUT
@Consumes("application/json")
@Produces("application/json")
public boolean setActive(@PathParam("type") String type, @PathParam("identifier") String identifier,
@FormParam("status") boolean status){
public Response changeDeviceStatus(@PathParam("deviceType") String deviceType,
@PathParam("identifier") String identifier,
@FormParam("status") boolean status) {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setType(type);
deviceIdentifier.setType(deviceType);
deviceIdentifier.setId(identifier);
try {
return this.getServiceProvider().setActive(deviceIdentifier, status);
boolean isActivated = APIUtil.getDeviceManagementService().setActive(
deviceIdentifier, status);
if (isActivated) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/identifier/{identifier}/ownership")
@Path("/devices/{deviceType}/{identifier}/ownership")
@PUT
@Consumes("application/json")
@Produces("application/json")
public boolean setOwnership(@PathParam("type") String type, @PathParam("identifier") String identifier,
@FormParam("ownership") String ownership){
public Response setOwnership(@PathParam("deviceType") String deviceType,
@PathParam("identifier") String identifier,
@FormParam("ownership") String ownership) {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setType(type);
deviceIdentifier.setType(deviceType);
deviceIdentifier.setId(identifier);
try {
return this.getServiceProvider().setOwnership(deviceIdentifier, ownership);
boolean isOwnershipChanged = APIUtil.getDeviceManagementService()
.setOwnership(deviceIdentifier, ownership);
if (isOwnershipChanged) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/identifier/{identifier}/status")
@Path("/devices/{deviceType}/{identifier}/enrollment/status")
@PUT
@Consumes("application/json")
@Produces("application/json")
public boolean setStatus(@PathParam("type") String type, @PathParam("identifier") String identifier,
@FormParam("owner") String owner, @FormParam("status") EnrolmentInfo.Status status){
public Response setStatus(@PathParam("deviceType") String deviceType,
@PathParam("identifier") String identifier, @FormParam("owner") String owner,
@FormParam("status") EnrolmentInfo.Status status) {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setType(type);
deviceIdentifier.setType(deviceType);
deviceIdentifier.setId(identifier);
try {
return this.getServiceProvider().setStatus(deviceIdentifier, owner, status);
boolean isStatusChanged = APIUtil.getDeviceManagementService()
.setStatus(deviceIdentifier, owner, status);
if (isStatusChanged) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/identifier/{identifier}/sensor/{sensorName}")
@Path("/devices/{deviceType}/{identifier}/sensors/{sensorName}")
@POST
@Consumes("application/json")
@Produces("application/json")
public boolean setSensorValue(@PathParam("type") String type, @PathParam("identifier") String deviceId,
@PathParam("sensorName") String sensorName,
@HeaderParam("sensorValue") String sensorValue){
try {
return SensorDataManager.getInstance().setSensorRecord(deviceId, sensorName, sensorValue, Calendar
.getInstance().getTimeInMillis());
} finally {
this.endTenantFlow();
public Response setSensorValue(@PathParam("deviceType") String deviceType,
@PathParam("identifier") String deviceId,
@PathParam("sensorName") String sensorName,
@FormParam("sensorValue") String sensorValue) {
boolean isValueSet = SensorDataManager.getInstance().setSensorRecord(deviceId, sensorName,
sensorValue, Calendar.getInstance().getTimeInMillis());
if (isValueSet) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/device/type/{type}/identifier/{identifier}/sensor/{sensorName}")
@Path("/devices/{deviceType}/{identifier}/sensors/{sensorName}")
@GET
@Consumes("application/json")
@Produces("application/json")
public SensorRecord getSensorValue(@PathParam("type") String type, @PathParam("identifier") String deviceId,
@PathParam("sensorName") String sensorName, @HeaderParam("defaultValue") String defaultValue){
public Response getSensorValue(@PathParam("deviceType") String deviceType,
@PathParam("identifier") String deviceId,
@PathParam("sensorName") String sensorName,
@QueryParam("defaultValue") String defaultValue) {
try {
return SensorDataManager.getInstance().getSensorRecord(deviceId, sensorName);
SensorRecord sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId, sensorName);
if (sensorRecord != null) {
return Response.status(Response.Status.OK).entity(sensorRecord).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (DeviceControllerException e) {
log.error("Error on reading sensor value: " + e.getMessage());
if(defaultValue != null){
return new SensorRecord(defaultValue, Calendar.getInstance().getTimeInMillis());
}else{
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
if (defaultValue != null) {
SensorRecord sensorRecord = new SensorRecord(defaultValue,
Calendar.getInstance().getTimeInMillis());
return Response.status(Response.Status.OK).entity(sensorRecord).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} finally {
this.endTenantFlow();
}
}
}
}

@ -21,21 +21,16 @@ package org.wso2.carbon.device.mgt.iot.api;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.CarbonContext;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.PaginationRequest;
import org.wso2.carbon.device.mgt.common.PaginationResult;
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser;
import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService;
import org.wso2.carbon.device.mgt.iot.util.APIUtil;
import org.wso2.carbon.device.mgt.iot.util.ResponsePayload;
import javax.jws.WebService;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
@ -45,12 +40,10 @@ import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import java.util.Date;
import java.util.List;
@WebService
public class GroupManagerService {
private static final String DEFAULT_ADMIN_ROLE = "admin";
@ -69,46 +62,21 @@ public class GroupManagerService {
private static Log log = LogFactory.getLog(GroupManagerService.class);
@Context //injected response proxy supporting multiple threads
private HttpServletResponse response;
private PrivilegedCarbonContext ctx;
private GroupManagementProviderService getServiceProvider() {
String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain();
String username = CarbonContext.getThreadLocalCarbonContext().getUsername();
PrivilegedCarbonContext.startTenantFlow();
ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
ctx.setTenantDomain(tenantDomain, true);
if (log.isDebugEnabled()) {
log.debug("Getting thread local carbon context for tenant domain: " + tenantDomain);
}
return (GroupManagementProviderService) ctx.getOSGiService(GroupManagementProviderService.class, null);
}
private void endTenantFlow() {
PrivilegedCarbonContext.endTenantFlow();
ctx = null;
if (log.isDebugEnabled()) {
log.debug("Tenant flow ended");
}
}
@Path("/group")
@Path("/groups")
@POST
@Consumes("application/json")
@Produces("application/json")
public Response createGroup(@FormParam("name") String name,
@FormParam("username") String username,
@FormParam("description") String description) {
public Response createGroup(@FormParam("groupName") String groupName,
@FormParam("userName") String username,
@FormParam("description") String description) {
DeviceGroup group = new DeviceGroup();
group.setName(name);
group.setName(username);
group.setDescription(description);
group.setOwner(username);
group.setDateOfCreation(new Date().getTime());
group.setDateOfLastUpdate(new Date().getTime());
boolean isAdded = false;
try {
GroupManagementProviderService groupManagementService = this.getServiceProvider();
GroupManagementProviderService groupManagementService = APIUtil.getGroupManagementProviderService();
int groupId = groupManagementService.createGroup(group, DEFAULT_ADMIN_ROLE, DEFAULT_ADMIN_PERMISSIONS);
if (groupId == -2) {
ResponsePayload responsePayload = new ResponsePayload();
@ -134,451 +102,374 @@ public class GroupManagerService {
}
} catch (GroupManagementException e) {
return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
} finally {
this.endTenantFlow();
}
}
@Path("/group/id/{groupId}")
@Path("/groups/{groupId}")
@PUT
@Consumes("application/json")
@Produces("application/json")
public boolean updateGroup(@PathParam("groupId") int groupId, @FormParam("name") String name,
@FormParam("username") String username,
@FormParam("description") String description) {
if (!isAuthorized(username, groupId, "/permission/device-mgt/admin/groups/modify")) {
response.setStatus(Response.Status.FORBIDDEN.getStatusCode());
return false;
}
public Response updateGroup(@PathParam("groupId") int groupId, @FormParam("groupName") String groupName,
@FormParam("userName") String userName,
@FormParam("description") String description) {
try {
GroupManagementProviderService groupManagementService = this.getServiceProvider();
GroupManagementProviderService groupManagementService = APIUtil.getGroupManagementProviderService();
DeviceGroup group = groupManagementService.getGroup(groupId);
group.setName(name);
group.setName(groupName);
group.setDescription(description);
group.setOwner(username);
group.setOwner(userName);
group.setDateOfLastUpdate(new Date().getTime());
response.setStatus(Response.Status.OK.getStatusCode());
Response.status(Response.Status.OK.getStatusCode());
groupManagementService.updateGroup(group);
return true;
return Response.status(Response.Status.NO_CONTENT).build();
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/group/id/{groupId}")
@Path("/groups/{groupId}")
@DELETE
@Consumes("application/json")
@Produces("application/json")
public boolean deleteGroup(@PathParam("groupId") int groupId,
@QueryParam("username") String username) {
if (!isAuthorized(username, groupId, "/permission/device-mgt/admin/groups/delete")) {
response.setStatus(Response.Status.FORBIDDEN.getStatusCode());
return false;
public Response deleteGroup(@PathParam("groupId") int groupId, @QueryParam("userName") String userName) {
if (!checkAuthorize(getCurrentUserName(), groupId, "/permission/device-mgt/admin/groups/delete")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
boolean isDeleted = false;
try {
response.setStatus(Response.Status.OK.getStatusCode());
isDeleted = this.getServiceProvider().deleteGroup(groupId);
boolean isDeleted = APIUtil.getGroupManagementProviderService().deleteGroup(
groupId);
if (isDeleted) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage());
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return isDeleted;
}
@Path("/group/id/{groupId}")
@Path("/groups/{groupId}")
@GET
@Consumes("application/json")
@Produces("application/json")
public DeviceGroup getGroup(@PathParam("groupId") int groupId,
@FormParam("username") String username) {
DeviceGroup deviceGroup = null;
public Response getGroup(@PathParam("groupId") int groupId) {
try {
response.setStatus(Response.Status.OK.getStatusCode());
deviceGroup = this.getServiceProvider().getGroup(groupId);
DeviceGroup deviceGroup = APIUtil.getGroupManagementProviderService().getGroup(
groupId);
if (deviceGroup != null) {
return Response.status(Response.Status.OK).entity(deviceGroup).build();
} else {
return Response.status(Response.Status.NOT_FOUND).build();
}
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return deviceGroup;
}
@Path("/group/name/{groupName}")
@Path("/groups/search")
@GET
@Consumes("application/json")
@Produces("application/json")
public DeviceGroup[] findGroups(@PathParam("groupName") String groupName,
@FormParam("username") String username) {
DeviceGroup[] deviceGroups = null;
public Response findGroups(@QueryParam("groupName") String groupName,
@QueryParam("userName") String userName) {
try {
List<DeviceGroup> groups = this.getServiceProvider().findInGroups(groupName, username);
deviceGroups = new DeviceGroup[groups.size()];
response.setStatus(Response.Status.OK.getStatusCode());
List<DeviceGroup> groups = APIUtil.getGroupManagementProviderService()
.findInGroups(groupName, userName);
DeviceGroup[] deviceGroups = new DeviceGroup[groups.size()];
groups.toArray(deviceGroups);
return Response.status(Response.Status.OK).entity(deviceGroups).build();
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return deviceGroups;
}
@Path("/group/user/{username}/all")
@Path("/groups")
@GET
@Consumes("application/json")
@Produces("application/json")
public DeviceGroup[] getGroups(@PathParam("username") String username,
@QueryParam("permission") String permission) {
DeviceGroup[] deviceGroups = null;
public Response getGroups(@QueryParam("userName") String userName,
@QueryParam("permission") String permission) {
try {
GroupManagementProviderService groupManagementService = this.getServiceProvider();
GroupManagementProviderService groupManagementService = APIUtil.getGroupManagementProviderService();
List<DeviceGroup> groups;
if (permission != null) {
groups = groupManagementService.getGroups(username, permission);
groups = groupManagementService.getGroups(userName, permission);
} else {
groups = groupManagementService.getGroups(username);
groups = groupManagementService.getGroups(userName);
}
deviceGroups = new DeviceGroup[groups.size()];
response.setStatus(Response.Status.OK.getStatusCode());
DeviceGroup[] deviceGroups = new DeviceGroup[groups.size()];
groups.toArray(deviceGroups);
return Response.status(Response.Status.OK).entity(deviceGroups).build();
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return deviceGroups;
}
@Path("/group/user/{username}/all/count")
@Path("/groups/count")
@GET
@Consumes("application/json")
@Produces("application/json")
public int getGroupCount(@PathParam("username") String username) {
int count = -1;
public Response getGroupCount(@QueryParam("userName") String userName) {
try {
response.setStatus(Response.Status.OK.getStatusCode());
count = this.getServiceProvider().getGroupCount(username);
int count = APIUtil.getGroupManagementProviderService().getGroupCount(userName);
return Response.status(Response.Status.OK).entity(count).build();
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return count;
}
@Path("/group/id/{groupId}/share")
@POST
@Consumes("application/json")
@Path("/groups/{groupId}/share")
@PUT
@Produces("application/json")
public boolean shareGroup(@FormParam("username") String username,
@FormParam("shareUser") String shareUser,
@PathParam("groupId") int groupId,
@FormParam("role") String sharingRole) {
if (!isAuthorized(username, groupId, "/permission/device-mgt/admin/groups/share")) {
response.setStatus(Response.Status.FORBIDDEN.getStatusCode());
return false;
public Response shareGroup(@FormParam("userName") String userName,
@FormParam("shareUser") String shareUser, @PathParam("groupId") int groupId,
@FormParam("roleName") String sharingRole) {
if (!checkAuthorize(getCurrentUserName(), groupId, "/permission/device-mgt/admin/groups/share")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
boolean isShared = false;
try {
response.setStatus(Response.Status.OK.getStatusCode());
isShared = this.getServiceProvider().shareGroup(shareUser, groupId, sharingRole);
boolean isShared = APIUtil.getGroupManagementProviderService().shareGroup(
shareUser, groupId, sharingRole);
if (isShared) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return isShared;
}
@Path("/group/id/{groupId}/unshare")
@POST
@Consumes("application/json")
@Path("/groups/{groupId}/unshare")
@PUT
@Produces("application/json")
public boolean unShareGroup(@FormParam("username") String username,
@FormParam("unShareUser") String unShareUser,
@PathParam("groupId") int groupId,
@FormParam("role") String sharingRole) {
if (!isAuthorized(username, groupId, "/permission/device-mgt/admin/groups/share")) {
response.setStatus(Response.Status.FORBIDDEN.getStatusCode());
return false;
public Response unShareGroup(@FormParam("userName") String userName,
@FormParam("unShareUser") String unShareUser,
@PathParam("groupId") int groupId,
@FormParam("roleName") String sharingRole) {
if (!checkAuthorize(getCurrentUserName(), groupId, "/permission/device-mgt/admin/groups/share")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
boolean isUnShared = false;
try {
response.setStatus(Response.Status.OK.getStatusCode());
isUnShared = this.getServiceProvider().unshareGroup(unShareUser, groupId, sharingRole);
boolean isUnShared = APIUtil.getGroupManagementProviderService().unshareGroup(
unShareUser, groupId, sharingRole);
if (isUnShared) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return isUnShared;
}
@Path("/group/id/{groupId}/role")
@POST
@Consumes("application/json")
@Path("/groups/{groupId}/share/roles/{roleName}/permissions")
@PUT
@Produces("application/json")
public boolean addSharing(@FormParam("username") String username,
@PathParam("groupId") int groupId,
@FormParam("role") String roleName,
@FormParam("permissions") String[] permissions) {
if (!isAuthorized(username, groupId, "/permission/device-mgt/admin/groups/share")) {
response.setStatus(Response.Status.FORBIDDEN.getStatusCode());
return false;
public Response addSharing(@QueryParam("userName") String userName, @PathParam("groupId") int groupId,
@PathParam("roleName") String roleName,
@FormParam("permissions") String[] permissions) {
if (!checkAuthorize(getCurrentUserName(), groupId, "/permission/device-mgt/admin/groups/share")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
boolean isAdded = false;
try {
response.setStatus(Response.Status.OK.getStatusCode());
isAdded = this.getServiceProvider().addGroupSharingRole(username, groupId, roleName, permissions);
boolean isAdded = APIUtil.getGroupManagementProviderService().addGroupSharingRole(
userName, groupId, roleName, permissions);
if (isAdded) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return isAdded;
}
@Path("/group/id/{groupId}/role/{role}")
@DELETE
@Consumes("application/json")
@Path("/groups/{groupId}/share/roles/{roleName}/permissions")
@Produces("application/json")
public boolean removeSharing(@QueryParam("username") String username,
@PathParam("groupId") int groupId,
@PathParam("role") String roleName) {
if (!isAuthorized(username, groupId, "/permission/device-mgt/admin/groups/share")) {
response.setStatus(Response.Status.FORBIDDEN.getStatusCode());
}
boolean isRemoved = false;
try {
response.setStatus(Response.Status.OK.getStatusCode());
isRemoved = this.getServiceProvider().removeGroupSharingRole(groupId, roleName);
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
public Response removeSharing(@QueryParam("userName") String userName, @PathParam("groupId") int groupId,
@PathParam("roleName") String roleName) {
if (!checkAuthorize(getCurrentUserName(), groupId, "/permission/device-mgt/admin/groups/share")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
return isRemoved;
}
@Path("/group/id/{groupId}/role/all")
@GET
@Consumes("application/json")
@Produces("application/json")
public String[] getRoles(@PathParam("groupId") int groupId) {
String[] rolesArray = null;
try {
List<String> roles = this.getServiceProvider().getRoles(groupId);
rolesArray = new String[roles.size()];
response.setStatus(Response.Status.OK.getStatusCode());
roles.toArray(rolesArray);
boolean isRemoved = APIUtil.getGroupManagementProviderService().removeGroupSharingRole(
groupId, roleName);
if (isRemoved) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return rolesArray;
}
@Path("/group/id/{groupId}/{user}/role/all")
@GET
@Consumes("application/json")
@Path("/groups/{groupId}/share/roles")
@Produces("application/json")
public String[] getRoles(@PathParam("user") String user, @PathParam("groupId") int groupId) {
String[] rolesArray = null;
public Response getRoles(@PathParam("groupId") int groupId, @QueryParam("userName") String userName) {
try {
List<String> roles = this.getServiceProvider().getRoles(user, groupId);
rolesArray = new String[roles.size()];
response.setStatus(Response.Status.OK.getStatusCode());
List<String> roles;
if (userName != null && !userName.isEmpty()) {
roles = APIUtil.getGroupManagementProviderService().getRoles(userName,
groupId);
} else {
roles = APIUtil.getGroupManagementProviderService().getRoles(groupId);
}
String[] rolesArray = new String[roles.size()];
roles.toArray(rolesArray);
return Response.status(Response.Status.OK).entity(rolesArray).build();
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return rolesArray;
}
@Path("/group/id/{groupId}/user/all")
@GET
@Consumes("application/json")
@Path("/groups/{groupId}/users")
@Produces("application/json")
public GroupUser[] getUsers(@PathParam("groupId") int groupId) {
GroupUser[] usersArray = null;
public Response getUsers(@PathParam("groupId") int groupId) {
try {
List<GroupUser> users = this.getServiceProvider().getUsers(groupId);
usersArray = new GroupUser[users.size()];
response.setStatus(Response.Status.OK.getStatusCode());
List<GroupUser> users = APIUtil.getGroupManagementProviderService().getUsers(
groupId);
GroupUser[] usersArray = new GroupUser[users.size()];
users.toArray(usersArray);
return Response.status(Response.Status.OK).entity(usersArray).build();
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return usersArray;
}
@Path("/group/id/{groupId}/device/all")
@GET
@Consumes("application/json")
@Path("/groups/{groupId}/devices/all")
@Produces("application/json")
public Device[] getDevices(@PathParam("groupId") int groupId) {
Device[] deviceArray = null;
public Response getDevices(@PathParam("groupId") int groupId) {
try {
List<Device> devices = this.getServiceProvider().getDevices(groupId);
deviceArray = new Device[devices.size()];
response.setStatus(Response.Status.OK.getStatusCode());
List<Device> devices = APIUtil.getGroupManagementProviderService().getDevices(
groupId);
Device[] deviceArray = new Device[devices.size()];
devices.toArray(deviceArray);
return Response.status(Response.Status.OK).entity(deviceArray).build();
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return deviceArray;
}
@Path("/group/id/{groupId}/device/count")
@GET
@Consumes("application/json")
@Path("/groups/{groupId}/devices/count")
@Produces("application/json")
public int getDeviceCount(@PathParam("groupId") int groupId) {
public Response getDeviceCount(@PathParam("groupId") int groupId) {
try {
return this.getServiceProvider().getDeviceCount(groupId);
int count = APIUtil.getGroupManagementProviderService().getDeviceCount(groupId);
return Response.status(Response.Status.OK).entity(count).build();
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
return -1;
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/group/id/{groupId}/device")
@GET
@Consumes("application/json")
@Produces("application/json")
public List<Device> getDevices(@PathParam("groupId") int groupId,
@QueryParam("index") int index,
@QueryParam("limit") int limit) {
try {
PaginationRequest request = new PaginationRequest(index, limit);
return this.getServiceProvider().getDevices(groupId, request);
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
return null;
} finally {
this.endTenantFlow();
}
}
@Path("/group/id/{groupId}/device/assign")
@PUT
@Consumes("application/json")
@Path("/groups/{groupId}/devices/{deviceType}/{deviceId}")
@Produces("application/json")
public boolean addDevice(@PathParam("groupId") int groupId,
@FormParam("deviceId") String deviceId,
@FormParam("deviceType") String deviceType,
@FormParam("username") String username) {
if (!isAuthorized(username, groupId, "/permission/device-mgt/admin/groups/add_devices")) {
response.setStatus(Response.Status.FORBIDDEN.getStatusCode());
return false;
public Response addDevice(@PathParam("groupId") int groupId, @PathParam("deviceId") String deviceId,
@PathParam("deviceType") String deviceType,
@FormParam("userName") String userName) {
if (!checkAuthorize(getCurrentUserName(), groupId,
"/permission/device-mgt/admin/groups/add_devices")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
boolean isAdded = false;
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(deviceId, deviceType);
response.setStatus(Response.Status.OK.getStatusCode());
isAdded = this.getServiceProvider().addDevice(deviceIdentifier, groupId);
boolean isAdded = APIUtil.getGroupManagementProviderService().addDevice(
deviceIdentifier, groupId);
if (isAdded) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return isAdded;
}
@Path("/group/id/{groupId}/device/assign")
@DELETE
@Consumes("application/json")
@Path("/groups/{groupId}/devices/{deviceType}/{deviceId}")
@Produces("application/json")
public boolean removeDevice(@PathParam("groupId") int groupId,
@FormParam("deviceId") String deviceId,
@FormParam("deviceType") String deviceType,
@FormParam("username") String username) {
if (!isAuthorized(username, groupId, "/permission/device-mgt/admin/groups/remove_devices")) {
response.setStatus(Response.Status.FORBIDDEN.getStatusCode());
return false;
public Response removeDevice(@PathParam("groupId") int groupId, @PathParam("deviceId") String deviceId,
@PathParam("deviceType") String deviceType) {
if (!checkAuthorize(getCurrentUserName(), groupId,
"/permission/device-mgt/admin/groups/remove_devices")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
boolean isRemoved = false;
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(deviceId, deviceType);
response.setStatus(Response.Status.OK.getStatusCode());
isRemoved = this.getServiceProvider().removeDevice(deviceIdentifier, groupId);
boolean isRemoved = APIUtil.getGroupManagementProviderService().removeDevice(
deviceIdentifier, groupId);
if (isRemoved) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return isRemoved;
}
@Path("/group/id/{groupId}/user/{username}/permissions")
@GET
@Consumes("application/json")
@Path("/groups/{groupId}/users/{userName}/permissions")
@Produces("application/json")
public String[] getPermissions(@PathParam("username") String username,
public Response getPermissions(@PathParam("userName") String userName,
@PathParam("groupId") int groupId) {
String[] permissions = null;
try {
response.setStatus(Response.Status.OK.getStatusCode());
permissions = this.getServiceProvider().getPermissions(username, groupId);
String[] permissions = APIUtil.getGroupManagementProviderService()
.getPermissions(userName, groupId);
return Response.status(Response.Status.OK).entity(permissions).build();
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return permissions;
}
@Path("/group/id/{groupId}/user/{username}/authorized")
@GET
@Consumes("application/json")
@Path("/groups/{groupId}/users/{userName}/authorized")
@Produces("application/json")
public boolean isAuthorized(@PathParam("username") String username,
@PathParam("groupId") int groupId,
@QueryParam("permission") String permission) {
boolean isAuthorized = false;
public Response isAuthorized(@PathParam("userName") String userName, @PathParam("groupId") int groupId,
@QueryParam("permission") String permission) {
boolean isAuthorized = checkAuthorize(userName, groupId, permission);
if (isAuthorized) {
return Response.status(Response.Status.OK).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
private boolean checkAuthorize(String userName, int groupId, String permission) {
try {
response.setStatus(Response.Status.OK.getStatusCode());
isAuthorized = this.getServiceProvider().isAuthorized(username, groupId, permission);
return APIUtil.getGroupManagementProviderService().isAuthorized(userName, groupId, permission);
} catch (GroupManagementException e) {
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
log.error(e.getErrorMessage(), e);
} finally {
this.endTenantFlow();
log.error(e.getMessage(), e);
return false;
}
return isAuthorized;
}
}
private String getCurrentUserName() {
return PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
}
}

@ -24,6 +24,7 @@ import org.wso2.carbon.context.CarbonContext;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.iot.util.APIUtil;
import org.wso2.carbon.policy.mgt.common.Policy;
import org.wso2.carbon.policy.mgt.common.PolicyAdministratorPoint;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
@ -40,190 +41,108 @@ import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import java.util.List;
@WebService
public class PolicyManagementService {
private static Log log = LogFactory.getLog(PolicyManagementService.class);
@Context //injected response proxy supporting multiple thread
private HttpServletResponse response;
private PrivilegedCarbonContext ctx;
private PolicyManagerService getPolicyServiceProvider() throws DeviceManagementException {
String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain();
PrivilegedCarbonContext.startTenantFlow();
ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
ctx.setTenantDomain(tenantDomain, true);
if (log.isDebugEnabled()) {
log.debug("Getting thread local carbon context for tenant domain: " + tenantDomain);
}
PolicyManagerService policyManagerService = (PolicyManagerService) ctx.getOSGiService(
PolicyManagerService.class, null);
if (policyManagerService == null) {
String msg = "Policy Management service not initialized";
log.error(msg);
throw new DeviceManagementException(msg);
}
return policyManagerService;
}
private void endTenantFlow() {
PrivilegedCarbonContext.endTenantFlow();
ctx = null;
if (log.isDebugEnabled()) {
log.debug("Tenant flow ended");
}
}
private static final Log log = LogFactory.getLog(PolicyManagementService.class);
@POST
@Path("/inactive-policy")
@Path("/policies/inactive")
@Produces("application/json")
public boolean addPolicy(Policy policy) {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyAdministratorPoint pap = policyManagerService.getPAP();
pap.addPolicy(policy);
response.setStatus(Response.Status.CREATED.getStatusCode());
if (log.isDebugEnabled()) {
log.debug("Policy has been added successfully.");
}
return true;
} catch (PolicyManagementException e) {
String error = "Policy Management related exception.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
}
public Response addInactivePolicy(@FormParam("policy") Policy policy) {
return addPolicy(policy);
}
@POST
@Path("/active-policy")
@Path("/policies/active")
@Produces("application/json")
public boolean addActivePolicy(Policy policy) {
public Response addActivePolicy(@FormParam("policy") Policy policy) {
policy.setActive(true);
return addPolicy(policy);
}
private Response addPolicy(Policy policy) {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
PolicyAdministratorPoint pap = policyManagerService.getPAP();
pap.addPolicy(policy);
response.setStatus(Response.Status.CREATED.getStatusCode());
if (log.isDebugEnabled()) {
log.debug("Policy has been added successfully.");
}
return true;
} catch (PolicyManagementException e) {
return Response.status(Response.Status.NO_CONTENT).build();
} catch (PolicyManagementException e) {
String error = "Policy Management related exception.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@GET
@Path("/policies")
@Produces("application/json")
public Policy[] getAllPolicies() {
public Response getAllPolicies() {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
PolicyAdministratorPoint policyAdministratorPoint = policyManagerService.getPAP();
List<Policy> policies = policyAdministratorPoint.getPolicies();
return policyAdministratorPoint.getPolicies().toArray(new Policy[policies.size()]);
} catch (PolicyManagementException e) {
Policy[] policyArr = policyAdministratorPoint.getPolicies().toArray(new Policy[policies.size()]);
return Response.status(Response.Status.OK).entity(policyArr).build();
} catch (PolicyManagementException e) {
String error = "Policy Management related exception";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@GET
@Path("/policies/{policyId}")
@Produces("application/json")
@Path("/{id}")
public Policy getPolicy(@PathParam("id") int policyId) {
public Response getPolicy(@PathParam("policyId") int policyId) {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
PolicyAdministratorPoint policyAdministratorPoint = policyManagerService.getPAP();
Policy policy = policyAdministratorPoint.getPolicy(policyId);
if (policy != null) {
if (log.isDebugEnabled()) {
log.debug("Sending policy for ID " + policyId);
}
return policy;
return Response.status(Response.Status.OK).entity(policy).build();
} else {
log.error("Policy for ID " + policyId + " not found.");
response.setStatus(Response.Status.NOT_FOUND.getStatusCode());
return null;
return Response.status(Response.Status.NOT_FOUND).build();
}
} catch (PolicyManagementException e) {
} catch (PolicyManagementException e) {
String error = "Policy Management related exception";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@GET
@Path("/count")
public int getPolicyCount() {
@Path("/policies/inactive/count")
@Produces("application/json")
public Response getPolicyCount() {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
PolicyAdministratorPoint policyAdministratorPoint = policyManagerService.getPAP();
return policyAdministratorPoint.getPolicyCount();
} catch (PolicyManagementException e) {
int policyCount = policyAdministratorPoint.getPolicyCount();
return Response.status(Response.Status.OK).entity(policyCount).build();
} catch (PolicyManagementException e) {
String error = "Policy Management related exception";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return -1;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return -1;
} finally {
this.endTenantFlow();
}
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@PUT
@Path("/{id}")
@Path("/policies/{policyId}")
@Produces("application/json")
public boolean updatePolicy(Policy policy, @PathParam("id") int policyId) {
public Response updatePolicy(@FormParam("policy") Policy policy, @PathParam("policyId") int policyId) {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
PolicyAdministratorPoint pap = policyManagerService.getPAP();
Policy previousPolicy = pap.getPolicy(policyId);
policy.setProfile(pap.getProfile(previousPolicy.getProfileId()));
@ -232,64 +151,49 @@ public class PolicyManagementService {
if (log.isDebugEnabled()) {
log.debug("Policy with ID " + policyId + " has been updated successfully.");
}
return true;
} catch (PolicyManagementException e) {
return Response.status(Response.Status.NO_CONTENT).build();
} catch (PolicyManagementException e) {
String error = "Policy Management related exception";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@PUT
@Path("/priorities")
@Path("/policies/priorities")
@Consumes("application/json")
@Produces("application/json")
public boolean updatePolicyPriorities(List<Policy> priorityUpdatedPolicies) {
public Response updatePolicyPriorities(@FormParam("policies") List<Policy> priorityUpdatedPolicies) {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
PolicyAdministratorPoint pap = policyManagerService.getPAP();
boolean policiesUpdated = pap.updatePolicyPriorities(priorityUpdatedPolicies);
if (policiesUpdated) {
if (log.isDebugEnabled()) {
log.debug("Policy Priorities successfully updated.");
}
return true;
return Response.status(Response.Status.NO_CONTENT).build();
} else {
if (log.isDebugEnabled()) {
log.debug("Policy priorities did not update. Bad Request.");
}
response.setStatus(Response.Status.BAD_REQUEST.getStatusCode());
return false;
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
} catch (PolicyManagementException e) {
} catch (PolicyManagementException e) {
String error = "Exception in updating policy priorities.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@DELETE
@Path("/{id}")
@Path("/policies/{policyId}")
@Produces("application/json")
public boolean deletePolicy(@PathParam("id") int policyId) {
public Response deletePolicy(@PathParam("policyId") int policyId) {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
PolicyAdministratorPoint pap = policyManagerService.getPAP();
Policy policy = pap.getPolicy(policyId);
boolean policyDeleted = pap.deletePolicy(policy);
@ -297,211 +201,156 @@ public class PolicyManagementService {
if (log.isDebugEnabled()) {
log.debug("Policy by id:" + policyId + " has been successfully deleted.");
}
return true;
return Response.status(Response.Status.OK).build();
} else {
if (log.isDebugEnabled()) {
log.debug("Policy by id:" + policyId + " does not exist.");
}
response.setStatus(Response.Status.NOT_FOUND.getStatusCode());
return false;
return Response.status(Response.Status.NOT_FOUND).build();
}
} catch (PolicyManagementException e) {
} catch (PolicyManagementException e) {
String error = "Exception in deleting policy by id:" + policyId;
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@PUT
@Path("/policies/{policyId}/activate")
@Produces("application/json")
@Path("/activate/{id}")
public boolean activatePolicy(@PathParam("id") int policyId) {
public Response activatePolicy(@PathParam("policyId") int policyId) {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
PolicyAdministratorPoint pap = policyManagerService.getPAP();
pap.activatePolicy(policyId);
if (log.isDebugEnabled()) {
log.debug("Policy by id:" + policyId + " has been successfully activated.");
}
return true;
} catch (PolicyManagementException e) {
return Response.status(Response.Status.NO_CONTENT).build();
} catch (PolicyManagementException e) {
String error = "Exception in activating policy by id:" + policyId;
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@PUT
@Path("/policies/{policyId}/inactivate")
@Produces("application/json")
@Path("/inactivate/{id}")
public boolean inactivatePolicy(@PathParam("id") int policyId) {
public Response inactivatePolicy(@PathParam("policyId") int policyId) {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
PolicyAdministratorPoint pap = policyManagerService.getPAP();
pap.inactivatePolicy(policyId);
if (log.isDebugEnabled()) {
log.debug("Policy by id:" + policyId + " has been successfully inactivated.");
}
return true;
} catch (PolicyManagementException e) {
return Response.status(Response.Status.NO_CONTENT).build();
} catch (PolicyManagementException e) {
String error = "Exception in inactivating policy by id:" + policyId;
log.error(error, e);
return false;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@PUT
@Path("/policies/publish-changes")
@Produces("application/json")
@Path("/apply-changes")
public boolean applyChanges() {
public Response publishChanges() {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
PolicyAdministratorPoint pap = policyManagerService.getPAP();
pap.publishChanges();
if (log.isDebugEnabled()) {
log.debug("Changes have been successfully updated.");
}
return true;
} catch (PolicyManagementException e) {
return Response.status(Response.Status.NO_CONTENT).build();
} catch (PolicyManagementException e) {
String error = "Exception in applying changes.";
log.error(error, e);
return false;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@GET
@Path("/start-task/{milliseconds}")
public boolean startTaskService(@PathParam("milliseconds") int monitoringFrequency) {
@PUT
@Path("/policies/monitor-task/start")
@Produces("application/json")
public Response startTaskService(@FormParam("milliseconds") int monitoringFrequency) {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
TaskScheduleService taskScheduleService = policyManagerService.getTaskScheduleService();
taskScheduleService.startTask(monitoringFrequency);
if (log.isDebugEnabled()) {
log.debug("Policy monitoring service started successfully.");
}
return true;
return Response.status(Response.Status.NO_CONTENT).build();
} catch (PolicyMonitoringTaskException e) {
String error = "Policy Management related exception.";
log.error(error, e);
return false;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@GET
@Path("/update-task/{milliseconds}")
public boolean updateTaskService(@PathParam("milliseconds") int monitoringFrequency) {
@PUT
@Path("/policies/monitor-task/update")
@Produces("application/json")
public Response updateTaskService(@FormParam("milliseconds") int monitoringFrequency) {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();;
TaskScheduleService taskScheduleService = policyManagerService.getTaskScheduleService();
taskScheduleService.updateTask(monitoringFrequency);
if (log.isDebugEnabled()) {
log.debug("Policy monitoring service updated successfully.");
}
return true;
return Response.status(Response.Status.NO_CONTENT).build();
} catch (PolicyMonitoringTaskException e) {
String error = "Policy Management related exception.";
log.error(error, e);
return false;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@GET
@Path("/stop-task")
public boolean stopTaskService() {
@PUT
@Path("/policies/monitor-task/stop")
@Produces("application/json")
public Response stopTaskService() {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
TaskScheduleService taskScheduleService = policyManagerService.getTaskScheduleService();
taskScheduleService.stopTask();
if (log.isDebugEnabled()) {
log.debug("Policy monitoring service stopped successfully.");
}
return true;
return Response.status(Response.Status.NO_CONTENT).build();
} catch (PolicyMonitoringTaskException e) {
String error = "Policy Management related exception.";
log.error(error, e);
return false;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return false;
} finally {
this.endTenantFlow();
}
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@GET
@Path("/{type}/{id}")
public ComplianceData getComplianceDataOfDevice(@PathParam("id") String deviceId,
@PathParam("type") String deviceType) {
@Path("/policies/compliance/{deviceType}/{deviceId}")
@Produces("application/json")
public Response getComplianceDataOfDevice(@PathParam("deviceId") String deviceId,
@PathParam("deviceType") String deviceType) {
try {
PolicyManagerService policyManagerService = getPolicyServiceProvider();
PolicyManagerService policyManagerService = APIUtil.getPolicyManagerService();
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setType(deviceType);
deviceIdentifier.setId(deviceId);
return policyManagerService.getDeviceCompliance(deviceIdentifier);
} catch (PolicyComplianceException e) {
ComplianceData complianceData = policyManagerService.getDeviceCompliance(deviceIdentifier);
return Response.status(Response.Status.OK).entity(complianceData).build();
} catch (PolicyComplianceException e) {
String error = "Error occurred while getting the compliance data.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} catch (DeviceManagementException e) {
String error = "Error occurred while invoking Policy Management Service.";
log.error(error, e);
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
return null;
} finally {
this.endTenantFlow();
}
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
}
}

@ -0,0 +1,69 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.iot.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService;
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
/**
* This class provides utility functions used by REST-API.
*/
public class APIUtil {
private static Log log = LogFactory.getLog(APIUtil.class);
public static GroupManagementProviderService getGroupManagementProviderService() {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
GroupManagementProviderService groupManagementProviderService =
(GroupManagementProviderService) ctx.getOSGiService(GroupManagementProviderService.class, null);
if (groupManagementProviderService == null) {
String msg = "Group Management service has not initialized.";
log.error(msg);
throw new IllegalStateException(msg);
}
return groupManagementProviderService;
}
public static DeviceManagementProviderService getDeviceManagementService() {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
DeviceManagementProviderService deviceManagementProviderService =
(DeviceManagementProviderService) ctx.getOSGiService(DeviceManagementProviderService.class, null);
if (deviceManagementProviderService == null) {
String msg = "Device Management service has not initialized.";
log.error(msg);
throw new IllegalStateException(msg);
}
return deviceManagementProviderService;
}
public static PolicyManagerService getPolicyManagerService() {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
PolicyManagerService policyManagerService =
(PolicyManagerService) ctx.getOSGiService(PolicyManagerService.class, null);
if (policyManagerService == null) {
String msg = "Policy management service has not initialized.";
log.error(msg);
throw new IllegalStateException(msg);
}
return policyManagerService;
}
}

@ -83,8 +83,8 @@
org.wso2.carbon.utils.*;version="${carbon.kernel.version.range}",
org.wso2.carbon.device.mgt.common.*,
org.eclipse.paho.client.mqttv3.*;version="${eclipse.paho.version}",
javax.ws.rs.core,
javax.xml
javax.xml;resolution:=optional,
javax.net.ssl;resolution:=optional
</Import-Package>
<Export-Package>
!org.wso2.carbon.device.mgt.iot.internal,

@ -33,10 +33,9 @@ import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.wso2.carbon.device.mgt.iot.exception.DeviceControllerException;
import org.wso2.carbon.device.mgt.iot.exception.IoTException;
import org.wso2.carbon.device.mgt.iot.util.IoTUtil;
import javax.ws.rs.core.MediaType;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
@ -54,6 +53,7 @@ public class XmppServerClient {
@SuppressWarnings("unused")
private static final String APPLICATION_JSON_MT = "application/json";
private static final String DEVICEMGT_CONFIG_FILE = "devicemgt-config.xml";
private static final String APPLICATION_JSON = "application/json";
private String xmppEndpoint;
private String xmppUsername;
private String xmppPassword;
@ -100,7 +100,7 @@ public class XmppServerClient {
StringEntity requestEntity;
try {
requestEntity = new StringEntity(jsonRequest, MediaType.APPLICATION_JSON,
requestEntity = new StringEntity(jsonRequest, APPLICATION_JSON,
StandardCharsets.UTF_8.toString());
} catch (UnsupportedEncodingException e) {
return false;
@ -140,7 +140,7 @@ public class XmppServerClient {
EntityUtils.consume(httpResponse.getEntity());
return true;
}
} catch (IOException | IoTException e) {
} catch (IOException e) {
String errorMsg = "Error occured whilst trying a 'POST' at : " + xmppUsersAPIEndpoint;
log.error(errorMsg);
throw new DeviceControllerException(errorMsg, e);
@ -199,7 +199,7 @@ public class XmppServerClient {
return false;
}
} catch (IOException | IoTException e) {
} catch (IOException e) {
String errorMsg = "Error occured whilst trying a 'GET' at : " + xmppCheckUserAPIEndpoint;
log.error(errorMsg);
throw new DeviceControllerException(errorMsg, e);
@ -250,7 +250,7 @@ public class XmppServerClient {
HttpGet httpGet = new HttpGet(xmppSessionsAPIEndpoint);
httpGet.addHeader(HttpHeaders.AUTHORIZATION, authorizationHeader);
httpGet.addHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
httpGet.addHeader(HttpHeaders.ACCEPT, APPLICATION_JSON);
try {
HttpResponse httpResponse = httpClient.execute(httpGet);
@ -266,7 +266,7 @@ public class XmppServerClient {
xmppSessions = new JSONObject(response).getJSONArray("session");
return xmppSessions;
} catch (IOException | IoTException e) {
} catch (IOException e) {
String errorMsg = "Error occured whilst trying a 'GET' at : " + xmppSessionsAPIEndpoint;
log.error(errorMsg);
throw new DeviceControllerException(errorMsg, e);

@ -1,54 +0,0 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.iot.internal;
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.databridge.core.DataBridgeReceiverService;
public class IoTCommonDataHolder {
private static IoTCommonDataHolder thisInstance = new IoTCommonDataHolder();
String trustStoreLocaiton;
String trustStorePassword;
private IoTCommonDataHolder() {
}
public void initialize(){
setTrustStore();
}
public static IoTCommonDataHolder getInstance() {
return thisInstance;
}
private void setTrustStore(){
this.trustStoreLocaiton = ServerConfiguration.getInstance().getFirstProperty("Security.TrustStore.Location");
this.trustStorePassword = ServerConfiguration.getInstance().getFirstProperty("Security.TrustStore.Password");
}
public String getTrustStoreLocation(){
return trustStoreLocaiton;
}
public String getTrustStorePassword(){
return trustStorePassword;
}
}

@ -54,7 +54,6 @@ public class IotDeviceManagementServiceComponent {
/* Initialize the data source configuration */
DeviceManagementConfigurationManager.getInstance().initConfig();
bundleContext.registerService(ServerStartupObserver.class.getName(), new IoTServerStartupListener(), null);
IoTCommonDataHolder.getInstance().initialize();
if (log.isDebugEnabled()) {
log.debug("Iot Device Management Service Component has been successfully activated");
}

@ -22,18 +22,13 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.device.mgt.iot.exception.IoTException;
import org.wso2.carbon.device.mgt.iot.internal.IoTCommonDataHolder;
import org.wso2.carbon.utils.NetworkUtils;
import java.io.BufferedReader;
@ -43,49 +38,33 @@ import java.net.SocketException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
public class IoTUtil {
public static final String HOST_NAME = "HostName";
private static final Log log = LogFactory.getLog(IoTUtil.class);
private static final String HTTPS_PROTOCOL = "https";
/**
* Return a http client instance
*
* @param port - server port
* @param protocol- service endpoint protocol http/https
* @return
*/
public static HttpClient getHttpClient(int port, String protocol)
throws UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException,
KeyManagementException {
SchemeRegistry registry = new SchemeRegistry();
if ("https".equals(protocol)) {
System.setProperty("javax.net.ssl.trustStrore", IoTCommonDataHolder.getInstance().getTrustStoreLocation());
System.setProperty("javax.net.ssl.trustStorePassword",
IoTCommonDataHolder.getInstance().getTrustStorePassword());
if (port >= 0) {
registry.register(new Scheme("https", port, SSLSocketFactory.getSocketFactory()));
} else {
registry.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));
}
} else if ("http".equals(protocol)) {
if (port >= 0) {
registry.register(new Scheme("http", port, PlainSocketFactory.getSocketFactory()));
} else {
registry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
}
throws IOException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
HttpClient httpclient;
if (HTTPS_PROTOCOL.equals(protocol)) {
SSLContextBuilder builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(builder.build());
httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
} else {
httpclient = HttpClients.createDefault();
}
HttpParams params = new BasicHttpParams();
PoolingClientConnectionManager tcm = new PoolingClientConnectionManager(registry);
HttpClient client = new DefaultHttpClient(tcm, params);
return client;
return httpclient;
}
public static String getResponseString(HttpResponse httpResponse) throws IoTException {
public static String getResponseString(HttpResponse httpResponse) throws IOException {
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
@ -95,9 +74,6 @@ public class IoTUtil {
response += readLine;
}
return response;
} catch (IOException e) {
throw new IoTException("Error while reading the response from the remote. "
+ e.getMessage(), e);
} finally {
EntityUtils.consumeQuietly(httpResponse.getEntity());
if (br != null) {

@ -21,16 +21,15 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>device-mgt-iot-raspberrypi</artifactId>
<artifactId>raspberrypi-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.0.4-SNAPSHOT</version>
<version>2.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>org.wso2.carbon.device.mgt.iot.raspberrypi.service.impl</artifactId>
<version>2.0.4-SNAPSHOT</version>
<artifactId>org.wso2.carbon.device.mgt.iot.raspberrypi.api</artifactId>
<packaging>war</packaging>
<name>WSO2 Carbon - IoT Server RaspberryPi API</name>
<description>WSO2 Carbon - RaspberryPi Service API Implementation</description>
@ -93,7 +92,7 @@
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>org.wso2.carbon.device.mgt.iot.raspberrypi.plugin.impl</artifactId>
<artifactId>org.wso2.carbon.device.mgt.iot.raspberrypi.plugin</artifactId>
<scope>provided</scope>
</dependency>
@ -120,7 +119,6 @@
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.mgt.analytics.data.publisher</artifactId>
<version>1.1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
@ -135,7 +133,7 @@
</dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.mgt.jwt.client.extension</artifactId>
<artifactId>org.wso2.carbon.identity.jwt.client.extension</artifactId>
<scope>provided</scope>
</dependency>
<dependency>

@ -37,10 +37,10 @@ import org.wso2.carbon.device.mgt.iot.raspberrypi.plugin.constants.RaspberrypiCo
import org.wso2.carbon.device.mgt.iot.raspberrypi.service.impl.util.APIUtil;
import org.wso2.carbon.device.mgt.iot.util.ZipArchive;
import org.wso2.carbon.device.mgt.iot.util.ZipUtil;
import org.wso2.carbon.device.mgt.jwt.client.extension.JWTClient;
import org.wso2.carbon.device.mgt.jwt.client.extension.JWTClientManager;
import org.wso2.carbon.device.mgt.jwt.client.extension.dto.AccessTokenInfo;
import org.wso2.carbon.device.mgt.jwt.client.extension.exception.JWTClientException;
import org.wso2.carbon.identity.jwt.client.extension.JWTClient;
import org.wso2.carbon.identity.jwt.client.extension.JWTClientManager;
import org.wso2.carbon.identity.jwt.client.extension.dto.AccessTokenInfo;
import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException;
import org.wso2.carbon.user.api.UserStoreException;
import javax.ws.rs.core.Response;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save