diff --git a/modules/distribution/src/assembly/bin.xml b/modules/distribution/src/assembly/bin.xml
index c41947e2..ada1ad48 100644
--- a/modules/distribution/src/assembly/bin.xml
+++ b/modules/distribution/src/assembly/bin.xml
@@ -771,14 +771,6 @@
755
-
-
- ${pom.artifactId}-${pom.version}/repository/deployment/server/webapps
-
- devicemgt_admin.war
-
diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/common/Constants.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/common/Constants.java
index da35a066..9cb594c5 100644
--- a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/common/Constants.java
+++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/common/Constants.java
@@ -86,11 +86,11 @@ public class Constants {
public static final String EMAIL_ERROR = "user.com";
public static final String USER_NAME = "user";
public static final String SHORT_USER_NAME = "us";
- public static final String SHORT_USER_NAME_ERROR_MSG = "Username must be between 3 and 30 characters long.";
+ public static final String SHORT_USER_NAME_ERROR_MSG = "Provided username is invalid.";
public static final String FIRST_NAME_ERROR_MSG = "Firstname is a required field. It cannot be empty.";
public static final String LAST_NAME_ERROR_MSG = "Lastname is a required field. It cannot be empty.";
public static final String NO_EMAIL_ERROR_MSG = "Email is a required field. It cannot be empty.";
- public static final String WRONG_EMAIL_ERROR_MSG = "Provided email is invalid. Please check.";
+ public static final String WRONG_EMAIL_ERROR_MSG = "Provided email is invalid.";
}
diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml b/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml
index 3b2623fb..6df79fcd 100644
--- a/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml
+++ b/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml
@@ -28,17 +28,19 @@
-
+
-
+
+
diff --git a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupControllerService.java b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupControllerService.java
index 07d64723..9f8be82c 100644
--- a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupControllerService.java
+++ b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupControllerService.java
@@ -31,27 +31,14 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-@API( name="connectedcup", version="1.0.0", context="/connectedcup" , tags = {"connectedcup"})
-@DeviceType( value = "connectedcup")
+@API(name = "connectedcup", version = "1.0.0", context = "/connectedcup", tags = {"connectedcup"})
+@DeviceType(value = "connectedcup")
public interface ConnectedCupControllerService {
- @Path("device/coffeelevel")
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- @Feature(code = "coffeelevel", name = "Coffee Level", type = "monitor",
- description = "Request Coffee Level from Connected cup")
- Response readCoffeeLevel(@HeaderParam("owner") String owner, @HeaderParam("deviceId") String deviceId);
-
- @Path("device/temperature")
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- @Feature(code = "temperature", name = "Temperature", type = "monitor",
- description = "Request Temperature reading from Connected cup")
- Response readTemperature(@HeaderParam("owner") String owner, @HeaderParam("deviceId") String deviceId);
-
-
@Path("device/ordercoffee")
@POST
+ @Feature(code = "ordercoffee", name = "Order Coffee", type = "control",
+ description = "Order coffee cup")
Response orderCoffee(@QueryParam("deviceId") String deviceId, @QueryParam("deviceOwner") String deviceOwner);
}
diff --git a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupControllerServiceImpl.java b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupControllerServiceImpl.java
index c60c2b08..2ca55b9a 100644
--- a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupControllerServiceImpl.java
+++ b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupControllerServiceImpl.java
@@ -24,11 +24,16 @@ import org.coffeeking.connectedcup.plugin.constants.ConnectedCupConstants;
import org.coffeeking.api.transport.ConnectedCupMQTTConnector;
import org.wso2.carbon.device.mgt.iot.controlqueue.mqtt.MqttConfig;
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 org.wso2.carbon.device.mgt.iot.service.IoTServerStartupListener;
import org.wso2.carbon.device.mgt.iot.transport.TransportHandlerException;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class ConnectedCupControllerServiceImpl implements ConnectedCupControllerService {
@@ -36,6 +41,17 @@ public class ConnectedCupControllerServiceImpl implements ConnectedCupController
private static Log log = LogFactory.getLog(ConnectedCupControllerServiceImpl.class);
private static ConnectedCupMQTTConnector connectedCupMQTTConnector;
+ @Path("device/ordercoffee")
+ @POST
+ public Response orderCoffee(@QueryParam("deviceId") String deviceId, @QueryParam("deviceOwner") String deviceOwner) {
+ log.info("Coffee ordered....!");
+
+ if (log.isDebugEnabled()) {
+ log.debug("Sending request to read liquid level value of device [" + deviceId + "] via MQTT");
+ }
+ return Response.ok().entity("Coffee ordered.").build();
+ }
+
public ConnectedCupMQTTConnector getConnectedCupMQTTConnector() {
return ConnectedCupControllerServiceImpl.connectedCupMQTTConnector;
}
@@ -73,46 +89,4 @@ public class ConnectedCupControllerServiceImpl implements ConnectedCupController
return false;
}
- public Response readCoffeeLevel(String owner, String deviceId) {
- if (log.isDebugEnabled()) {
- log.debug("Sending request to read liquid level value of device [" + deviceId + "] via MQTT");
- }
-
- try {
- String mqttResource = ConnectedCupConstants.LEVEL_CONTEXT.replace("/", "");
- connectedCupMQTTConnector.publishDeviceData(owner, deviceId, mqttResource, "");
-
- SensorRecord sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId,
- ConnectedCupConstants.SENSOR_LEVEL);
- return Response.ok().entity(sensorRecord).build();
- } catch (DeviceControllerException | TransportHandlerException e) {
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
- }
- }
-
- public Response readTemperature(String owner, String deviceId) {
-
- if (log.isDebugEnabled()) {
- log.debug("Sending request to read connected cup temperature of device " + "[" + deviceId + "] via MQTT");
- }
- try {
- String mqttResource = ConnectedCupConstants.TEMPERATURE_CONTEXT.replace("/", "");
- connectedCupMQTTConnector.publishDeviceData(owner, deviceId, mqttResource, "");
-
- SensorRecord sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId,
- ConnectedCupConstants.SENSOR_TEMPERATURE);
- return Response.ok().entity(sensorRecord).build();
- } catch (DeviceControllerException | TransportHandlerException e) {
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
- }
- }
-
- public Response orderCoffee(String deviceId, String deviceOwner) {
- log.info("Coffee ordered....!");
-
- if (log.isDebugEnabled()) {
- log.debug("Sending request to read liquid level value of device [" + deviceId + "] via MQTT");
- }
- return Response.ok().entity("Coffee ordered.").build();
- }
-}
\ No newline at end of file
+}
diff --git a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupManagerService.java b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupManagerService.java
index dc353e5c..d0f563b3 100644
--- a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupManagerService.java
+++ b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupManagerService.java
@@ -32,6 +32,7 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+@Path("enrollment")
@API( name="connectedcup_mgt", version="1.0.0", context="/connectedcup_mgt", tags = {"connectedcup"})
@DeviceType("connectedcup")
public interface ConnectedCupManagerService {
diff --git a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupManagerServiceImpl.java b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupManagerServiceImpl.java
index 3e6a3d5e..317ec1b6 100644
--- a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupManagerServiceImpl.java
+++ b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/ConnectedCupManagerServiceImpl.java
@@ -26,42 +26,30 @@ 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 javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+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.MediaType;
import javax.ws.rs.core.Response;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.UUID;
-public class ConnectedCupManagerServiceImpl implements ConnectedCupManagerService{
+@Path("enrollment")
+public class ConnectedCupManagerServiceImpl implements ConnectedCupManagerService {
private static Log log = LogFactory.getLog(ConnectedCupManagerServiceImpl.class);
- private boolean register(String deviceId, String name) {
- try {
- DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
- deviceIdentifier.setId(deviceId);
- deviceIdentifier.setType(ConnectedCupConstants.DEVICE_TYPE);
- if (APIUtil.getDeviceManagementService().isEnrolled(deviceIdentifier)) {
- return false;
- }
- Device device = new Device();
- device.setDeviceIdentifier(deviceId);
- EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
- enrolmentInfo.setDateOfEnrolment(new Date().getTime());
- enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
- enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE);
- device.setName(name);
- device.setType(ConnectedCupConstants.DEVICE_TYPE);
- enrolmentInfo.setOwner(APIUtil.getAuthenticatedUser());
- device.setEnrolmentInfo(enrolmentInfo);
- boolean added = APIUtil.getDeviceManagementService().enrollDevice(device);
- return added;
- } catch (DeviceManagementException e) {
- return false;
- }
- }
-
- public Response removeDevice(String deviceId) {
+ @Path("devices/{device_id}")
+ @DELETE
+ public Response removeDevice(@PathParam("device_id") String deviceId) {
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
@@ -78,7 +66,9 @@ public class ConnectedCupManagerServiceImpl implements ConnectedCupManagerServic
}
}
- public Response updateDevice(String deviceId, String name) {
+ @Path("devices/{device_id}")
+ @PUT
+ public Response updateDevice(@PathParam("device_id") String deviceId, @QueryParam("name") String name) {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
deviceIdentifier.setType(ConnectedCupConstants.DEVICE_TYPE);
@@ -100,7 +90,11 @@ public class ConnectedCupManagerServiceImpl implements ConnectedCupManagerServic
}
}
- public Response getDevice(String deviceId) {
+ @Path("devices/{device_id}")
+ @GET
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getDevice(@PathParam("device_id") String deviceId) {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
deviceIdentifier.setType(ConnectedCupConstants.DEVICE_TYPE);
@@ -113,6 +107,31 @@ public class ConnectedCupManagerServiceImpl implements ConnectedCupManagerServic
}
}
+ private boolean register(String deviceId, String name) {
+ try {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId(deviceId);
+ deviceIdentifier.setType(ConnectedCupConstants.DEVICE_TYPE);
+ if (APIUtil.getDeviceManagementService().isEnrolled(deviceIdentifier)) {
+ return false;
+ }
+ Device device = new Device();
+ device.setDeviceIdentifier(deviceId);
+ EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
+ enrolmentInfo.setDateOfEnrolment(new Date().getTime());
+ enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
+ enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE);
+ device.setName(name);
+ device.setType(ConnectedCupConstants.DEVICE_TYPE);
+ enrolmentInfo.setOwner(APIUtil.getAuthenticatedUser());
+ device.setEnrolmentInfo(enrolmentInfo);
+ boolean added = APIUtil.getDeviceManagementService().enrollDevice(device);
+ return added;
+ } catch (DeviceManagementException e) {
+ return false;
+ }
+ }
+
private static String shortUUID() {
UUID uuid = UUID.randomUUID();
long l = ByteBuffer.wrap(uuid.toString().getBytes(StandardCharsets.UTF_8)).getLong();
diff --git a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/transport/ConnectedCupMQTTConnector.java b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/transport/ConnectedCupMQTTConnector.java
index 9018c1cc..be5f9ae7 100644
--- a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/transport/ConnectedCupMQTTConnector.java
+++ b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/transport/ConnectedCupMQTTConnector.java
@@ -31,7 +31,6 @@ import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.device.mgt.iot.config.server.DeviceManagementConfigurationManager;
import org.wso2.carbon.device.mgt.iot.controlqueue.mqtt.MqttConfig;
-import org.wso2.carbon.device.mgt.iot.sensormgt.SensorDataManager;
import org.wso2.carbon.device.mgt.iot.transport.TransportHandlerException;
import org.wso2.carbon.device.mgt.iot.transport.mqtt.MQTTTransportHandler;
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
@@ -138,18 +137,6 @@ public class ConnectedCupMQTTConnector extends MQTTTransportHandler {
String owner = device.getEnrolmentInfo().getOwner();
ctx.setTenantDomain(MultitenantUtils.getTenantDomain(owner), true);
ctx.setUsername(owner);
- switch (messageData[0]) {
- case "temperature":
- SensorDataManager.getInstance().setSensorRecord(deviceId, ConnectedCupConstants.SENSOR_TEMPERATURE,
- String.valueOf(messageData[1]),
- Calendar.getInstance().getTimeInMillis());
- break;
- case "coffeelevel":
- SensorDataManager.getInstance().setSensorRecord(deviceId, ConnectedCupConstants.SENSOR_LEVEL,
- String.valueOf(messageData[1]),
- Calendar.getInstance().getTimeInMillis());
- break;
- }
if (!ConnectedCupServiceUtils.publishToDAS(deviceId, messageData[0], Float.parseFloat
(messageData[1]))) {
log.error("MQTT Subscriber: Publishing data to DAS failed.");
diff --git a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/util/ConnectedCupServiceUtils.java b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/util/ConnectedCupServiceUtils.java
index b985aef5..efbe8ebb 100644
--- a/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/util/ConnectedCupServiceUtils.java
+++ b/modules/samples/connectedcup/component/api/src/main/java/org/coffeeking/api/util/ConnectedCupServiceUtils.java
@@ -28,7 +28,7 @@ import org.apache.http.impl.nio.client.HttpAsyncClients;
import org.coffeeking.connectedcup.plugin.constants.ConnectedCupConstants;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
-import org.wso2.carbon.device.mgt.analytics.data.publisher.service.DeviceAnalyticsService;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import javax.ws.rs.HttpMethod;
@@ -195,8 +195,8 @@ public class ConnectedCupServiceUtils {
public static boolean publishToDAS(String deviceId, String sensor, float values) {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
- DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService(
- DeviceAnalyticsService.class, null);
+ EventsPublisherService deviceAnalyticsService = (EventsPublisherService) ctx.getOSGiService(
+ EventsPublisherService.class, null);
String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
Object metdaData[] = {owner, ConnectedCupConstants.DEVICE_TYPE, deviceId, System.currentTimeMillis()};
Object payloadData[] = {values};
diff --git a/modules/samples/connectedcup/component/api/src/main/webapp/WEB-INF/web.xml b/modules/samples/connectedcup/component/api/src/main/webapp/WEB-INF/web.xml
index be105f99..55a9dd85 100644
--- a/modules/samples/connectedcup/component/api/src/main/webapp/WEB-INF/web.xml
+++ b/modules/samples/connectedcup/component/api/src/main/webapp/WEB-INF/web.xml
@@ -21,27 +21,31 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
ConnectedCup-Webapp
+
- JAX-WS/JAX-RS Endpoint
- JAX-WS/JAX-RS Servlet
CXFServlet
-
- org.apache.cxf.transport.servlet.CXFServlet
-
+ org.apache.cxf.transport.servlet.CXFServlet
1
CXFServlet
/*
-
isAdminService
false
doAuthentication
- false
+ true
+
+
+ isSharedWithAllTenants
+ true
+
+
+ providerTenantDomain
+ carbon.super
@@ -53,17 +57,5 @@
managed-api-owner
admin
-
- managed-api-context-template
- /connectedcup/{version}
-
-
- managed-api-application
- connectedcup
-
-
- managed-api-isSecured
- true
-
diff --git a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorControllerService.java b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorControllerService.java
index 3bf43fb4..99ae365f 100644
--- a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorControllerService.java
+++ b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorControllerService.java
@@ -45,42 +45,6 @@ public interface CurrentSensorControllerService {
Response registerDeviceIP(@PathParam("owner") String owner, @PathParam("deviceId") String deviceId,
@PathParam("ip") String deviceIP, @PathParam("port") String devicePort);
- /**
- * @param deviceId
- * @return
- */
- @Path("device/read-current")
- @GET
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- @Feature(code = "read-current", name = "Current", type = "monitor",
- description = "Request current reading from Arduino agent")
- Response requestCurrent(@HeaderParam("deviceId") String deviceId);
-
- /**
- * @param deviceId
- * @return
- */
- @Path("device/read-power")
- @GET
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- @Feature(code = "read-power", name = "Power", type = "monitor",
- description = "Request power reading from Arduino agent")
- Response requestPower(@HeaderParam("deviceId") String deviceId);
-
- /**
- * @param deviceId
- * @return
- */
- @Path("device/read-flowrate")
- @GET
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- @Feature(code = "read-flowrate", name = "Flow Rate", type = "monitor",
- description = "Request flow rate reading from Arduino agent")
- Response requestFlowRate(@HeaderParam("deviceId") String deviceId);
-
/**
* @param dataMsg
*/
diff --git a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorControllerServiceImpl.java b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorControllerServiceImpl.java
index 419ab13f..0b3bf815 100644
--- a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorControllerServiceImpl.java
+++ b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorControllerServiceImpl.java
@@ -24,10 +24,17 @@ import org.homeautomation.currentsensor.api.dto.DeviceJSON;
import org.homeautomation.currentsensor.api.util.CurrentSensorServiceUtils;
import org.homeautomation.currentsensor.plugin.constants.CurrentSensorConstants;
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 org.wso2.carbon.device.mgt.iot.service.IoTServerStartupListener;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.Calendar;
import java.util.concurrent.ConcurrentHashMap;
@@ -37,18 +44,10 @@ public class CurrentSensorControllerServiceImpl implements CurrentSensorControll
private static Log log = LogFactory.getLog(CurrentSensorControllerServiceImpl.class);
private ConcurrentHashMap deviceToIpMap = new ConcurrentHashMap<>();
- private boolean waitForServerStartup() {
- while (!IoTServerStartupListener.isServerReady()) {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- return true;
- }
- }
- return false;
- }
-
- public Response registerDeviceIP(String owner, String deviceId, String deviceIP, String devicePort) {
+ @Path("device/register/{owner}/{deviceId}/{ip}/{port}")
+ @POST
+ public Response registerDeviceIP(@PathParam("owner") String owner, @PathParam("deviceId") String deviceId,
+ @PathParam("ip") String deviceIP, @PathParam("port") String devicePort) {
//TODO:: Need to get IP from the request itself
String result;
@@ -64,48 +63,15 @@ public class CurrentSensorControllerServiceImpl implements CurrentSensorControll
return Response.ok().entity(result).build();
}
- public Response requestCurrent(String deviceId) {
- SensorRecord sensorRecord = null;
- try {
- sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId,
- CurrentSensorConstants.SENSOR_CURRENT);
- } catch (DeviceControllerException e) {
- Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
- }
-
- return Response.ok().entity(sensorRecord).build();
- }
-
- public Response requestPower(String deviceId) {
- SensorRecord sensorRecord = null;
- try {
- sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId,
- CurrentSensorConstants.SENSOR_POWER);
- } catch (DeviceControllerException e) {
- Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
- }
- return Response.ok().entity(sensorRecord).build();
- }
-
- public Response requestFlowRate(String deviceId) {
- SensorRecord sensorRecord = null;
- try {
- sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId,
- CurrentSensorConstants.SENSOR_FLOWRATE);
- } catch (DeviceControllerException e) {
- Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
- }
- return Response.ok().entity(sensorRecord).build();
- }
-
+ @Path("device/push-data")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
public Response pushData(final DeviceJSON dataMsg) {
-
String owner = dataMsg.owner;
String deviceId = dataMsg.deviceId;
String deviceIp = dataMsg.reply;
float current = dataMsg.current;
float flow_rate = dataMsg.flow_rate;
-
String registeredIp = deviceToIpMap.get(deviceId);
if (registeredIp == null) {
@@ -117,19 +83,6 @@ public class CurrentSensorControllerServiceImpl implements CurrentSensorControll
" is already registered under some other IP. Re-registration required");
return Response.status(Response.Status.CONFLICT.getStatusCode()).build();
}
-
- SensorDataManager.getInstance().setSensorRecord(deviceId, CurrentSensorConstants.SENSOR_CURRENT,
- String.valueOf(current),
- Calendar.getInstance().getTimeInMillis());
-
- SensorDataManager.getInstance().setSensorRecord(deviceId, CurrentSensorConstants.SENSOR_POWER,
- String.valueOf(current * 230),
- Calendar.getInstance().getTimeInMillis());
-
- SensorDataManager.getInstance().setSensorRecord(deviceId, CurrentSensorConstants.SENSOR_FLOWRATE,
- String.valueOf(flow_rate),
- Calendar.getInstance().getTimeInMillis());
-
if (!CurrentSensorServiceUtils.publishToDASCurrent(dataMsg.deviceId, current)) {
log.warn("An error occured whilst trying to publish pin data of Current Sensor Data with ID [" + deviceId +
"] of owner [" + owner + "]");
@@ -150,4 +103,15 @@ public class CurrentSensorControllerServiceImpl implements CurrentSensorControll
return Response.ok().build();
}
+ private boolean waitForServerStartup() {
+ while (!IoTServerStartupListener.isServerReady()) {
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ return true;
+ }
+ }
+ return false;
+ }
+
}
diff --git a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorManagerService.java b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorManagerService.java
index 46e50a6f..a6a4a941 100644
--- a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorManagerService.java
+++ b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorManagerService.java
@@ -32,6 +32,7 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+@Path("enrollment")
@API(name = "currentsensor_mgt", version = "1.0.0", context = "/currentsensor_mgt", tags = {"currentsensor"})
@DeviceType(value = "currentsensor")
public interface CurrentSensorManagerService {
diff --git a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorManagerServiceImpl.java b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorManagerServiceImpl.java
index ef39365b..800b922c 100644
--- a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorManagerServiceImpl.java
+++ b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/CurrentSensorManagerServiceImpl.java
@@ -22,7 +22,6 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.apimgt.application.extension.dto.ApiApplicationKey;
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.homeautomation.currentsensor.api.util.APIUtil;
@@ -39,44 +38,31 @@ import org.wso2.carbon.device.mgt.iot.util.ZipArchive;
import org.wso2.carbon.device.mgt.iot.util.ZipUtil;
import org.wso2.carbon.user.api.UserStoreException;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+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.MediaType;
import javax.ws.rs.core.Response;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.UUID;
+@Path("enrollment")
class CurrentSensorManagerServiceImpl implements CurrentSensorManagerService {
private static Log log = LogFactory.getLog(CurrentSensorManagerServiceImpl.class);
private static ApiApplicationKey apiApplicationKey;
private static final String KEY_TYPE = "PRODUCTION";
- private boolean register(String deviceId, String name) {
- try {
- DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
- deviceIdentifier.setId(deviceId);
- deviceIdentifier.setType(CurrentSensorConstants.DEVICE_TYPE);
- if (APIUtil.getDeviceManagementService().isEnrolled(deviceIdentifier)) {
- return false;
- }
- Device device = new Device();
- device.setDeviceIdentifier(deviceId);
- EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
- enrolmentInfo.setDateOfEnrolment(new Date().getTime());
- enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
- enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE);
- device.setName(name);
- device.setType(CurrentSensorConstants.DEVICE_TYPE);
- enrolmentInfo.setOwner(APIUtil.getAuthenticatedUser());
- device.setEnrolmentInfo(enrolmentInfo);
- boolean added = APIUtil.getDeviceManagementService().enrollDevice(device);
- return added;
- } catch (DeviceManagementException e) {
- return false;
- }
- }
-
- public Response removeDevice(String deviceId) {
+ @Path("devices/{device_id}")
+ @DELETE
+ public Response removeDevice(@PathParam("device_id") String deviceId) {
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
@@ -93,7 +79,9 @@ class CurrentSensorManagerServiceImpl implements CurrentSensorManagerService {
}
}
- public Response updateDevice(String deviceId, String name) {
+ @Path("devices/{device_id}")
+ @PUT
+ public Response updateDevice(@PathParam("device_id") String deviceId, @QueryParam("name") String name) {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
deviceIdentifier.setType(CurrentSensorConstants.DEVICE_TYPE);
@@ -115,7 +103,11 @@ class CurrentSensorManagerServiceImpl implements CurrentSensorManagerService {
}
}
- public Response getDevice(String deviceId) {
+ @Path("devices/{device_id}")
+ @GET
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getDevice(@PathParam("device_id") String deviceId) {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
deviceIdentifier.setType(CurrentSensorConstants.DEVICE_TYPE);
@@ -128,7 +120,11 @@ class CurrentSensorManagerServiceImpl implements CurrentSensorManagerService {
}
}
- public Response downloadSketch(String deviceName, String sketchType) {
+ @Path("devices/{sketch_type}/download")
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response downloadSketch(@QueryParam("deviceName") String deviceName,
+ @PathParam("sketch_type") String sketchType) {
try {
ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), deviceName);
Response.ResponseBuilder rb = Response.ok(zipFile.getZipFile());
@@ -149,6 +145,31 @@ class CurrentSensorManagerServiceImpl implements CurrentSensorManagerService {
}
}
+ private boolean register(String deviceId, String name) {
+ try {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId(deviceId);
+ deviceIdentifier.setType(CurrentSensorConstants.DEVICE_TYPE);
+ if (APIUtil.getDeviceManagementService().isEnrolled(deviceIdentifier)) {
+ return false;
+ }
+ Device device = new Device();
+ device.setDeviceIdentifier(deviceId);
+ EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
+ enrolmentInfo.setDateOfEnrolment(new Date().getTime());
+ enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
+ enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE);
+ device.setName(name);
+ device.setType(CurrentSensorConstants.DEVICE_TYPE);
+ enrolmentInfo.setOwner(APIUtil.getAuthenticatedUser());
+ device.setEnrolmentInfo(enrolmentInfo);
+ boolean added = APIUtil.getDeviceManagementService().enrollDevice(device);
+ return added;
+ } catch (DeviceManagementException e) {
+ return false;
+ }
+ }
+
private ZipArchive createDownloadFile(String owner, String deviceName)
throws DeviceManagementException, JWTClientException, DeviceControllerException, APIManagerException,
UserStoreException {
@@ -166,14 +187,14 @@ class CurrentSensorManagerServiceImpl implements CurrentSensorManagerService {
apiApplicationKey = apiManagementProviderService.generateAndRetrieveApplicationKeys(
CurrentSensorConstants.DEVICE_TYPE, tags, KEY_TYPE, applicationUsername, true);
}
- JWTClient jwtClient = JWTClientManager.getInstance().getJWTClient();
+ JWTClient jwtClient = APIUtil.getJWTClientManagerService().getJWTClient();
String scopes = "device_type_" + CurrentSensorConstants.DEVICE_TYPE + " device_" + deviceId;
AccessTokenInfo accessTokenInfo = jwtClient.getAccessToken(apiApplicationKey.getConsumerKey(),
apiApplicationKey.getConsumerSecret(), owner,
scopes);
//create token
- String accessToken = accessTokenInfo.getAccess_token();
- String refreshToken = accessTokenInfo.getRefresh_token();
+ String accessToken = accessTokenInfo.getAccessToken();
+ String refreshToken = accessTokenInfo.getRefreshToken();
//Register the device with CDMF
boolean status = register(deviceId, deviceName);
if (!status) {
diff --git a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/util/APIUtil.java b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/util/APIUtil.java
index 1bf609e1..07325ebd 100644
--- a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/util/APIUtil.java
+++ b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/util/APIUtil.java
@@ -5,6 +5,7 @@ import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.apimgt.application.extension.APIManagementProviderService;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerService;
/**
* This class provides utility functions used by REST-API.
@@ -52,4 +53,17 @@ public class APIUtil {
}
return apiManagementProviderService;
}
+
+ public static JWTClientManagerService getJWTClientManagerService() {
+ PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
+ JWTClientManagerService jwtClientManagerService =
+ (JWTClientManagerService) ctx.getOSGiService(JWTClientManagerService.class, null);
+ if (jwtClientManagerService == null) {
+ String msg = "JWT Client manager service has not initialized.";
+ log.error(msg);
+ throw new IllegalStateException(msg);
+ }
+ return jwtClientManagerService;
+ }
+
}
diff --git a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/util/CurrentSensorServiceUtils.java b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/util/CurrentSensorServiceUtils.java
index e6b4d4b0..ff9c2767 100644
--- a/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/util/CurrentSensorServiceUtils.java
+++ b/modules/samples/currentsensor/component/api/src/main/java/org/homeautomation/currentsensor/api/util/CurrentSensorServiceUtils.java
@@ -23,7 +23,7 @@ import org.apache.commons.logging.LogFactory;
import org.homeautomation.currentsensor.plugin.constants.CurrentSensorConstants;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
-import org.wso2.carbon.device.mgt.analytics.data.publisher.service.DeviceAnalyticsService;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService;
public class CurrentSensorServiceUtils {
@@ -34,8 +34,8 @@ public class CurrentSensorServiceUtils {
public static boolean publishToDASCurrent(String deviceId, float current) {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
- DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService(
- DeviceAnalyticsService.class, null);
+ EventsPublisherService deviceAnalyticsService = (EventsPublisherService) ctx.getOSGiService(
+ EventsPublisherService.class, null);
String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
Object metdaData[] = {owner, CurrentSensorConstants.DEVICE_TYPE, deviceId, System.currentTimeMillis()};
Object payloadData[] = {current};
@@ -50,8 +50,8 @@ public class CurrentSensorServiceUtils {
public static boolean publishToDASPower(String deviceId, float power) {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
- DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService(
- DeviceAnalyticsService.class, null);
+ EventsPublisherService deviceAnalyticsService = (EventsPublisherService) ctx.getOSGiService(
+ EventsPublisherService.class, null);
String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
Object metdaData[] = {owner, CurrentSensorConstants.DEVICE_TYPE, deviceId, System.currentTimeMillis()};
Object payloadData[] = {power};
@@ -66,8 +66,8 @@ public class CurrentSensorServiceUtils {
public static boolean publishToDASFlowRate(String deviceId, float flowRate) {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
- DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService(
- DeviceAnalyticsService.class, null);
+ EventsPublisherService deviceAnalyticsService = (EventsPublisherService) ctx.getOSGiService(
+ EventsPublisherService.class, null);
String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
Object metdaData[] = {owner, CurrentSensorConstants.DEVICE_TYPE, deviceId, System.currentTimeMillis()};
Object payloadData[] = {flowRate};
diff --git a/modules/samples/currentsensor/component/api/src/main/webapp/WEB-INF/web.xml b/modules/samples/currentsensor/component/api/src/main/webapp/WEB-INF/web.xml
index d5258879..d9dd952f 100644
--- a/modules/samples/currentsensor/component/api/src/main/webapp/WEB-INF/web.xml
+++ b/modules/samples/currentsensor/component/api/src/main/webapp/WEB-INF/web.xml
@@ -21,40 +21,41 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
Current-Sensor-Agent-Webapp
+
- JAX-WS/JAX-RS IOT Current Sensor Endpoint
- JAX-WS/JAX-RS Servlet
CXFServlet
-
- org.apache.cxf.transport.servlet.CXFServlet
-
+ org.apache.cxf.transport.servlet.CXFServlet
1
CXFServlet
/*
-
-
- managed-api-enabled
- true
+ isAdminService
+ false
- managed-api-owner
- admin
+ doAuthentication
+ true
- managed-api-context-template
- /currentsensor/{version}
+ isSharedWithAllTenants
+ true
- managed-api-application
- currentsensor
+ providerTenantDomain
+ carbon.super
+
+
- managed-api-isSecured
+ managed-api-enabled
true
+
+ managed-api-owner
+ admin
+
diff --git a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerControllerService.java b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerControllerService.java
index df06e2b5..39d22998 100644
--- a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerControllerService.java
+++ b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerControllerService.java
@@ -77,22 +77,6 @@ public interface DoorManagerControllerService {
@HeaderParam("protocol") String protocol,
@FormParam("state") String state);
- /**
- * Request current status of door lock safe
- *
- * @param owner owner of the device
- * @param deviceId unique identifier for given device
- * @param protocol transport protocol which is being using here MQTT
- */
- @GET
- @Path("device/current-status")
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- @Feature(code = "current-status", name = "Door Locker Status", type = "monitor",
- description = "Request current status of door safe")
- Response requestStatusOfDoorLockSafe(@HeaderParam("owner") String owner, @HeaderParam("deviceId") String deviceId,
- @HeaderParam("protocol") String protocol);
-
/**
* @param userInfo user information which are required to test given user is authorized to open requested door
* @return if user is authorized open the the door allow to open it
diff --git a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerControllerServiceImpl.java b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerControllerServiceImpl.java
index 08b4f220..3b7def7b 100644
--- a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerControllerServiceImpl.java
+++ b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerControllerServiceImpl.java
@@ -38,22 +38,27 @@ import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.extensions.feature.mgt.annotations.DeviceType;
import org.wso2.carbon.device.mgt.iot.controlqueue.mqtt.MqttConfig;
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 org.wso2.carbon.device.mgt.iot.service.IoTServerStartupListener;
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 org.wso2.carbon.user.api.UserStoreManager;
-import javax.ws.rs.core.Context;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
-public class DoorManagerControllerServiceImpl implements DoorManagerControllerService{
+public class DoorManagerControllerServiceImpl implements DoorManagerControllerService {
private static Log log = LogFactory.getLog(DoorManagerControllerServiceImpl.class);
private static String CURRENT_STATUS = "doorLockerCurrentStatus";
@@ -66,7 +71,6 @@ public class DoorManagerControllerServiceImpl implements DoorManagerControllerSe
doorManager = new DoorManager();
}
- @Context //injected response proxy supporting multiple thread
private boolean waitForServerStartup() {
while (!IoTServerStartupListener.isServerReady()) {
try {
@@ -102,9 +106,14 @@ public class DoorManagerControllerServiceImpl implements DoorManagerControllerSe
connectorThread.start();
}
-
- public Response assignUserToLock(String owner, String deviceId, String protocol, String cardNumber, String userName,
- String emailAddress) {
+ @Path("device/assign-user")
+ @POST
+ public Response assignUserToLock(@HeaderParam("owner") String owner,
+ @HeaderParam("deviceId") String deviceId,
+ @HeaderParam("protocol") String protocol,
+ @FormParam("cardNumber") String cardNumber,
+ @FormParam("userName") String userName,
+ @FormParam("emailAddress") String emailAddress) {
if (userName != null && cardNumber != null && deviceId != null) {
try {
@@ -119,22 +128,22 @@ public class DoorManagerControllerServiceImpl implements DoorManagerControllerSe
apiApplicationKey = apiManagementProviderService.generateAndRetrieveApplicationKeys(
DoorManagerConstants.DEVICE_TYPE, tags, KEY_TYPE, applicationUsername, true);
}
- JWTClient jwtClient = JWTClientManager.getInstance().getJWTClient();
+ JWTClient jwtClient = APIUtil.getJWTClientManagerService().getJWTClient();
String scopes = "device_type_" + DoorManagerConstants.DEVICE_TYPE + " device_" + deviceId;
AccessTokenInfo accessTokenInfo = jwtClient.getAccessToken(apiApplicationKey.getConsumerKey(),
apiApplicationKey.getConsumerSecret(), owner, scopes);
- String accessToken = accessTokenInfo.getAccess_token();
+ String accessToken = accessTokenInfo.getAccessToken();
if (accessToken == null) {
return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
}
Map claims = new HashMap<>();
claims.put(DoorManagerConstants.DEVICE_CLAIMS_ACCESS_TOKEN, accessToken);
claims.put(DoorManagerConstants.DEVICE_CLAIMS_REFRESH_TOKEN,
- accessTokenInfo.getRefresh_token());
+ accessTokenInfo.getRefreshToken());
claims.put(DoorManagerConstants.DEVICE_CLAIMS_CARD_NUMBER, cardNumber);
userStoreManager.setUserClaimValues(userName, claims, null);
- doorLockSafe.setAccessToken(accessTokenInfo.getAccess_token());
- doorLockSafe.setRefreshToken(accessTokenInfo.getRefresh_token());
+ doorLockSafe.setAccessToken(accessTokenInfo.getAccessToken());
+ doorLockSafe.setRefreshToken(accessTokenInfo.getRefreshToken());
doorLockSafe.setDeviceId(deviceId);
doorLockSafe.setOwner(owner);
doorLockSafe.setEmailAddress(emailAddress);
@@ -162,7 +171,12 @@ public class DoorManagerControllerServiceImpl implements DoorManagerControllerSe
}
}
- public Response changeStatusOfDoorLockSafe(String owner, String deviceId, String protocol, String state) {
+ @Path("device/change-status")
+ @POST
+ public Response changeStatusOfDoorLockSafe(@HeaderParam("owner") String owner,
+ @HeaderParam("deviceId") String deviceId,
+ @HeaderParam("protocol") String protocol,
+ @FormParam("state") String state) {
try {
int lockerCurrentState;
if (state.toUpperCase().equals("LOCK")) {
@@ -170,8 +184,6 @@ public class DoorManagerControllerServiceImpl implements DoorManagerControllerSe
} else {
lockerCurrentState = 1;
}
- SensorDataManager.getInstance().setSensorRecord(deviceId, CURRENT_STATUS,
- String.valueOf(lockerCurrentState), Calendar.getInstance().getTimeInMillis());
doorManagerMQTTConnector.sendCommandViaMQTT(owner, deviceId, "DoorManager:", state.toUpperCase());
return Response.ok().build();
} catch (DeviceManagementException e) {
@@ -181,16 +193,11 @@ public class DoorManagerControllerServiceImpl implements DoorManagerControllerSe
}
}
- public Response requestStatusOfDoorLockSafe(String owner, String deviceId, String protocol) {
- SensorRecord sensorRecord = null;
- try {
- sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId, CURRENT_STATUS);
- return Response.ok(sensorRecord).entity(sensorRecord).build();
- } catch (DeviceControllerException e) {
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
- }
- }
-
+ @GET
+ @Path("device/get-user-info")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ @SuppressWarnings("unchecked")
public Response get_user_info(final UserInfo userInfo) {
if (userInfo.userName != null && userInfo.cardNumber != null && userInfo.deviceId != null) {
try {
diff --git a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerManagerService.java b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerManagerService.java
index 4ad85fa7..0f7e39c6 100644
--- a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerManagerService.java
+++ b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerManagerService.java
@@ -32,6 +32,7 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+@Path("enrollment")
@SuppressWarnings("NonJaxWsWebServices")
@DeviceType(value = "doormanager")
@API(name = "doormanager_mgt", version = "1.0.0", context = "/doormanager_mgt" , tags = {"doormanager"})
@@ -41,7 +42,6 @@ public interface DoorManagerManagerService {
@DELETE
Response removeDevice(@PathParam("device_id") String deviceId);
-
@Path("devices/{device_id}")
@PUT
Response updateDevice(@PathParam("device_id") String deviceId, @QueryParam("name") String name);
diff --git a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerManagerServiceImpl.java b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerManagerServiceImpl.java
index e3d8fde0..399279d3 100644
--- a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerManagerServiceImpl.java
+++ b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/DoorManagerManagerServiceImpl.java
@@ -37,66 +37,38 @@ 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.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.servlet.http.HttpServletResponse;
-import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+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.MediaType;
+
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.UUID;
-public class DoorManagerManagerServiceImpl implements DoorManagerManagerService{
+@Path("enrollment")
+public class DoorManagerManagerServiceImpl implements DoorManagerManagerService {
private static Log log = LogFactory.getLog(DoorManagerManagerServiceImpl.class);
- @Context //injected response proxy supporting multiple thread
- private HttpServletResponse response;
private static ApiApplicationKey apiApplicationKey;
private static final String KEY_TYPE = "PRODUCTION";
- /**
- * Generate UUID
- *
- * @return generated UUID
- */
- private static String shortUUID() {
- UUID uuid = UUID.randomUUID();
- long l = ByteBuffer.wrap(uuid.toString().getBytes(StandardCharsets.UTF_8)).getLong();
- return Long.toString(l, Character.MAX_RADIX);
- }
-
- private boolean register(String deviceId,String name) {
-
- try {
- DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
- deviceIdentifier.setId(deviceId);
- deviceIdentifier.setType(DoorManagerConstants.DEVICE_TYPE);
- if (APIUtil.getDeviceManagementService().isEnrolled(deviceIdentifier)) {
- return false;
- }
- Device device = new Device();
- device.setDeviceIdentifier(deviceId);
- EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
- enrolmentInfo.setDateOfEnrolment(new Date().getTime());
- enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
- enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE);
- device.setName(name);
- device.setType(DoorManagerConstants.DEVICE_TYPE);
- enrolmentInfo.setOwner(APIUtil.getAuthenticatedUser());
- device.setEnrolmentInfo(enrolmentInfo);
- boolean added = APIUtil.getDeviceManagementService().enrollDevice(device);
- return added;
- } catch (DeviceManagementException e) {
- return false;
- }
- }
-
- public Response removeDevice(String deviceId) {
+ @Path("devices/{device_id}")
+ @DELETE
+ public Response removeDevice(@PathParam("device_id") String deviceId) {
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
@@ -113,7 +85,9 @@ public class DoorManagerManagerServiceImpl implements DoorManagerManagerService{
}
}
- public Response updateDevice(String deviceId, String name) {
+ @Path("devices/{device_id}")
+ @PUT
+ public Response updateDevice(@PathParam("device_id") String deviceId, @QueryParam("name") String name) {
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
@@ -134,7 +108,11 @@ public class DoorManagerManagerServiceImpl implements DoorManagerManagerService{
}
}
- public Response getDevice(String deviceId) {
+ @Path("devices/{device_id}")
+ @GET
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getDevice(@PathParam("device_id") String deviceId) {
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
@@ -146,7 +124,10 @@ public class DoorManagerManagerServiceImpl implements DoorManagerManagerService{
}
}
- public Response downloadSketch(String deviceName) {
+ @Path("devices/download")
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response downloadSketch(@QueryParam("deviceName") String deviceName) {
try {
ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), deviceName);
Response.ResponseBuilder response = Response.ok(FileUtils.readFileToByteArray(zipFile.getZipFile()));
@@ -170,7 +151,9 @@ public class DoorManagerManagerServiceImpl implements DoorManagerManagerService{
}
}
- public Response generateSketchLink(String deviceName) {
+ @Path("devices/generate_link")
+ @GET
+ public Response generateSketchLink(@QueryParam("deviceName") String deviceName){
try {
ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), deviceName);
Response.ResponseBuilder rb = Response.ok(zipFile.getDeviceId());
@@ -207,14 +190,14 @@ public class DoorManagerManagerServiceImpl implements DoorManagerManagerService{
apiApplicationKey = apiManagementProviderService.generateAndRetrieveApplicationKeys(
DoorManagerConstants.DEVICE_TYPE, tags, KEY_TYPE, applicationUsername, true);
}
- JWTClient jwtClient = JWTClientManager.getInstance().getJWTClient();
+ JWTClient jwtClient = APIUtil.getJWTClientManagerService().getJWTClient();
String scopes = "device_type_" + DoorManagerConstants.DEVICE_TYPE + " device_" + deviceId;
AccessTokenInfo accessTokenInfo = jwtClient.getAccessToken(apiApplicationKey.getConsumerKey(),
apiApplicationKey.getConsumerSecret(), owner,
scopes);
//create token
- String accessToken = accessTokenInfo.getAccess_token();
- String refreshToken = accessTokenInfo.getRefresh_token();
+ String accessToken = accessTokenInfo.getAccessToken();
+ String refreshToken = accessTokenInfo.getRefreshToken();
//Register the device with CDMF
boolean status = register(deviceId, deviceName);
if (!status) {
@@ -229,4 +212,40 @@ public class DoorManagerManagerServiceImpl implements DoorManagerManagerService{
return zipFile;
}
+ /**
+ * Generate UUID
+ *
+ * @return generated UUID
+ */
+ private static String shortUUID() {
+ UUID uuid = UUID.randomUUID();
+ long l = ByteBuffer.wrap(uuid.toString().getBytes(StandardCharsets.UTF_8)).getLong();
+ return Long.toString(l, Character.MAX_RADIX);
+ }
+
+ private boolean register(String deviceId, String name) {
+ try {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId(deviceId);
+ deviceIdentifier.setType(DoorManagerConstants.DEVICE_TYPE);
+ if (APIUtil.getDeviceManagementService().isEnrolled(deviceIdentifier)) {
+ return false;
+ }
+ Device device = new Device();
+ device.setDeviceIdentifier(deviceId);
+ EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
+ enrolmentInfo.setDateOfEnrolment(new Date().getTime());
+ enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
+ enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE);
+ device.setName(name);
+ device.setType(DoorManagerConstants.DEVICE_TYPE);
+ enrolmentInfo.setOwner(APIUtil.getAuthenticatedUser());
+ device.setEnrolmentInfo(enrolmentInfo);
+ boolean added = APIUtil.getDeviceManagementService().enrollDevice(device);
+ return added;
+ } catch (DeviceManagementException e) {
+ return false;
+ }
+ }
+
}
diff --git a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/transport/DoorManagerMQTTConnector.java b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/transport/DoorManagerMQTTConnector.java
index dda7f335..cff9d4d8 100644
--- a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/transport/DoorManagerMQTTConnector.java
+++ b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/transport/DoorManagerMQTTConnector.java
@@ -28,7 +28,6 @@ import org.homeautomation.doormanager.plugin.constants.DoorManagerConstants;
import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.iot.controlqueue.mqtt.MqttConfig;
-import org.wso2.carbon.device.mgt.iot.sensormgt.SensorDataManager;
import org.wso2.carbon.device.mgt.iot.transport.TransportHandlerException;
import org.wso2.carbon.device.mgt.iot.transport.mqtt.MQTTTransportHandler;
@@ -117,8 +116,6 @@ public class DoorManagerMQTTConnector extends MQTTTransportHandler {
lockerStatus = 1;
}
try {
- SensorDataManager.getInstance().setSensorRecord(deviceId, "doorLockerCurrentStatus",
- String.valueOf(lockerStatus), Calendar.getInstance().getTimeInMillis());
if (!DoorManagerServiceUtils.publishToDASLockerStatus(owner, deviceId, lockerStatus)) {
log.warn("An error occurred while trying to publish with ID [" + deviceId + "] of owner ["
+ owner + "]");
diff --git a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/util/APIUtil.java b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/util/APIUtil.java
index cda4d25f..6e403b65 100644
--- a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/util/APIUtil.java
+++ b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/util/APIUtil.java
@@ -21,6 +21,7 @@ package org.homeautomation.doormanager.api.util;
import org.wso2.carbon.apimgt.application.extension.APIManagementProviderService;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerService;
/**
* This class provides utility functions used by REST-API.
@@ -65,4 +66,16 @@ public class APIUtil {
}
return apiManagementProviderService;
}
+
+ public static JWTClientManagerService getJWTClientManagerService() {
+ PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
+ JWTClientManagerService jwtClientManagerService =
+ (JWTClientManagerService) ctx.getOSGiService(JWTClientManagerService.class, null);
+ if (jwtClientManagerService == null) {
+ String msg = "JWT Client manager service has not initialized.";
+ throw new IllegalStateException(msg);
+ }
+ return jwtClientManagerService;
+ }
+
}
diff --git a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/util/DoorManagerServiceUtils.java b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/util/DoorManagerServiceUtils.java
index 1a45a021..876ff33c 100644
--- a/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/util/DoorManagerServiceUtils.java
+++ b/modules/samples/doormanager/component/api/src/main/java/org/homeautomation/doormanager/api/util/DoorManagerServiceUtils.java
@@ -23,7 +23,7 @@ import org.apache.commons.logging.LogFactory;
import org.homeautomation.doormanager.plugin.constants.DoorManagerConstants;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
-import org.wso2.carbon.device.mgt.analytics.data.publisher.service.DeviceAnalyticsService;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService;
public class DoorManagerServiceUtils {
@@ -53,8 +53,8 @@ public class DoorManagerServiceUtils {
if (ctx.getTenantDomain(true) == null) {
ctx.setTenantDomain("carbon.super", true);
}
- DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService(
- DeviceAnalyticsService.class, null);
+ EventsPublisherService deviceAnalyticsService = (EventsPublisherService) ctx.getOSGiService(
+ EventsPublisherService.class, null);
Object metaData[] = {owner, DoorManagerConstants.DEVICE_TYPE, deviceId, System.currentTimeMillis()};
try {
deviceAnalyticsService.publishEvent(definition, STREAM_DEFINITION_VERSION, metaData,
diff --git a/modules/samples/doormanager/component/api/src/main/webapp/WEB-INF/web.xml b/modules/samples/doormanager/component/api/src/main/webapp/WEB-INF/web.xml
index ab77f3a7..8f029527 100644
--- a/modules/samples/doormanager/component/api/src/main/webapp/WEB-INF/web.xml
+++ b/modules/samples/doormanager/component/api/src/main/webapp/WEB-INF/web.xml
@@ -21,13 +21,10 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
Sample-Webapp-Controller
+
- JAX-WS/JAX-RS Endpoint
- JAX-WS/JAX-RS Servlet
CXFServlet
-
- org.apache.cxf.transport.servlet.CXFServlet
-
+ org.apache.cxf.transport.servlet.CXFServlet
1
@@ -40,27 +37,25 @@
doAuthentication
- false
-
-
-
- managed-api-enabled
true
- managed-api-owner
- admin
+ isSharedWithAllTenants
+ true
- managed-api-context-template
- /doormanager/{version}
+ providerTenantDomain
+ carbon.super
+
+
- managed-api-application
- doormanager
+ managed-api-enabled
+ true
- managed-api-isSecured
- true
+ managed-api-owner
+ admin
+
diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/database/doormanagerDM_DB.h2.db b/modules/samples/doormanager/feature/feature/src/main/resources/database/doormanagerDM_DB.h2.db
index e3cd583d..da2768b4 100644
Binary files a/modules/samples/doormanager/feature/feature/src/main/resources/database/doormanagerDM_DB.h2.db and b/modules/samples/doormanager/feature/feature/src/main/resources/database/doormanagerDM_DB.h2.db differ
diff --git a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmControllerService.java b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmControllerService.java
index 7cd1e63f..2b500f80 100644
--- a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmControllerService.java
+++ b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmControllerService.java
@@ -51,38 +51,6 @@ public interface FireAlarmControllerService {
@Consumes(MediaType.APPLICATION_JSON)
Response registerDevice(final DeviceJSON agentInfo);
- /**
- * @param owner device owner
- * @param deviceId unique identifier for given device type
- * @param protocol name of supported protocol. here MQTT is used
- * @return sensor record
- */
- @Path("device/read-temperature")
- @GET
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- @Feature(code = "read-temperature", name = "Temperature", type = "monitor",
- description = "Request temperature reading from device")
- Response readTemperature(@HeaderParam("owner") String owner,
- @HeaderParam("deviceId") String deviceId,
- @HeaderParam("protocol") String protocol);
-
- /**
- * @param owner device owner
- * @param deviceId unique identifier for given device type
- * @param protocol name of supported protocol. here MQTT is used
- * @return sensor record
- */
- @Path("device/read-humidity")
- @GET
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- @Feature(code = "read-humidity", name = "Humidity", type = "monitor",
- description = "Request humidity reading from device")
- Response readHumidity(@HeaderParam("owner") String owner,
- @HeaderParam("deviceId") String deviceId,
- @HeaderParam("protocol") String protocol);
-
/**
* @param owner device owner
* @param deviceId unique identifier for given device type
diff --git a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmControllerServiceImpl.java b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmControllerServiceImpl.java
index 41e90d48..ca77c7f3 100644
--- a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmControllerServiceImpl.java
+++ b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmControllerServiceImpl.java
@@ -23,13 +23,19 @@ import org.apache.commons.logging.LogFactory;
import org.homeautomation.firealarm.api.dto.DeviceJSON;
import org.homeautomation.firealarm.api.exception.DeviceTypeException;
import org.homeautomation.firealarm.api.transport.MQTTConnector;
-import org.homeautomation.firealarm.plugin.constants.DeviceTypeConstants;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.iot.controlqueue.mqtt.MqttConfig;
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 org.wso2.carbon.device.mgt.iot.service.IoTServerStartupListener;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class FireAlarmControllerServiceImpl implements FireAlarmControllerService {
@@ -37,6 +43,35 @@ public class FireAlarmControllerServiceImpl implements FireAlarmControllerServic
private static Log log = LogFactory.getLog(FireAlarmControllerServiceImpl.class);
private MQTTConnector mqttConnector;
+ @Path("device/register")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Response registerDevice(final DeviceJSON agentInfo) {
+ if ((agentInfo.deviceId != null) && (agentInfo.owner != null)) {
+ return Response.status(Response.Status.OK).entity("Device has been registered successfully").build();
+ }
+ return Response.status(Response.Status.NOT_ACCEPTABLE).entity("Message body not " +
+ "well-formed and still invalid").build();
+ }
+
+ @Path("device/change-status")
+ @POST
+ public Response changeBuzzerState(@HeaderParam("owner") String owner,
+ @HeaderParam("deviceId") String deviceId,
+ @HeaderParam("protocol") String protocol,
+ @FormParam("state") String state) {
+ try {
+ mqttConnector.sendCommandViaMQTT(owner, deviceId, "buzzer:", state.toUpperCase());
+ return Response.ok().build();
+ } catch (DeviceManagementException e) {
+ log.error(e);
+ return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
+ } catch (DeviceTypeException e) {
+ log.error(e);
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
+ }
+ }
+
private boolean waitForServerStartup() {
while (!IoTServerStartupListener.isServerReady()) {
try {
@@ -74,47 +109,4 @@ public class FireAlarmControllerServiceImpl implements FireAlarmControllerServic
connectorThread.start();
}
- public Response registerDevice(final DeviceJSON agentInfo) {
- if ((agentInfo.deviceId != null) && (agentInfo.owner != null)) {
- return Response.status(Response.Status.OK).entity("Device has been registered successfully").build();
- }
- return Response.status(Response.Status.NOT_ACCEPTABLE).entity("Message body not " +
- "well-formed and still invalid").build();
- }
-
- public Response readTemperature(String owner, String deviceId, String protocol) {
- SensorRecord sensorRecord = null;
- try {
- sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId,
- DeviceTypeConstants.SENSOR_TEMPERATURE);
- } catch (DeviceControllerException e) {
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
- }
- return Response.ok().entity(sensorRecord).build();
- }
-
- public Response readHumidity(String owner, String deviceId, String protocol) {
- SensorRecord sensorRecord = null;
- try {
- sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId,
- DeviceTypeConstants.SENSOR_HUMIDITY);
- } catch (DeviceControllerException e) {
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
- }
- return Response.ok().entity(sensorRecord).build();
- }
-
- public Response changeBuzzerState(String owner, String deviceId, String protocol, String state) {
- try {
- mqttConnector.sendCommandViaMQTT(owner, deviceId, "buzzer:", state.toUpperCase());
- return Response.ok().build();
- } catch (DeviceManagementException e) {
- log.error(e);
- return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
- } catch (DeviceTypeException e) {
- log.error(e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
- }
- }
-
-}
\ No newline at end of file
+}
diff --git a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmManagerService.java b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmManagerService.java
index 24a3513b..17e03801 100644
--- a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmManagerService.java
+++ b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmManagerService.java
@@ -32,6 +32,7 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+@Path("enrollment")
@SuppressWarnings("NonJaxWsWebServices")
@API(name = "firealarm_mgt", version = "1.0.0", context = "/firealarm_mgt" ,tags = {"firealarm"})
@DeviceType(value = "firealarm")
@@ -56,7 +57,6 @@ public interface FireAlarmManagerService {
@Produces(MediaType.APPLICATION_JSON)
Response downloadSketch(@QueryParam("deviceName") String deviceName);
-
@Path("devices/generate_link")
@GET
Response generateSketchLink(@QueryParam("deviceName") String deviceName);
diff --git a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmManagerServiceImpl.java b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmManagerServiceImpl.java
index a7b69160..dbf7f27b 100644
--- a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmManagerServiceImpl.java
+++ b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/FireAlarmManagerServiceImpl.java
@@ -36,11 +36,19 @@ 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.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.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+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.MediaType;
import javax.ws.rs.core.Response;
import java.io.IOException;
import java.nio.ByteBuffer;
@@ -48,51 +56,16 @@ import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.UUID;
+@Path("enrollment")
public class FireAlarmManagerServiceImpl implements FireAlarmManagerService{
private static Log log = LogFactory.getLog(FireAlarmManagerServiceImpl.class);
-
private static ApiApplicationKey apiApplicationKey;
private static final String KEY_TYPE = "PRODUCTION";
- /**
- * Generate UUID
- *
- * @return generated UUID
- */
- private static String shortUUID() {
- UUID uuid = UUID.randomUUID();
- long l = ByteBuffer.wrap(uuid.toString().getBytes(StandardCharsets.UTF_8)).getLong();
- return Long.toString(l, Character.MAX_RADIX);
- }
-
- private boolean register(String deviceId,String name) {
-
- try {
- DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
- deviceIdentifier.setId(deviceId);
- deviceIdentifier.setType(DeviceTypeConstants.DEVICE_TYPE);
- if (APIUtil.getDeviceManagementService().isEnrolled(deviceIdentifier)) {
- return false;
- }
- Device device = new Device();
- device.setDeviceIdentifier(deviceId);
- EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
- enrolmentInfo.setDateOfEnrolment(new Date().getTime());
- enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
- enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE);
- device.setName(name);
- device.setType(DeviceTypeConstants.DEVICE_TYPE);
- enrolmentInfo.setOwner(APIUtil.getAuthenticatedUser());
- device.setEnrolmentInfo(enrolmentInfo);
- boolean added = APIUtil.getDeviceManagementService().enrollDevice(device);
- return added;
- } catch (DeviceManagementException e) {
- return false;
- }
- }
-
- public Response removeDevice(String deviceId) {
+ @Path("devices/{device_id}")
+ @DELETE
+ public Response removeDevice(@PathParam("device_id") String deviceId) {
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
@@ -109,7 +82,9 @@ public class FireAlarmManagerServiceImpl implements FireAlarmManagerService{
}
}
- public Response updateDevice(String deviceId, String name) {
+ @Path("devices/{device_id}")
+ @PUT
+ public Response updateDevice(@PathParam("device_id") String deviceId, @QueryParam("name") String name) {
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
@@ -130,7 +105,11 @@ public class FireAlarmManagerServiceImpl implements FireAlarmManagerService{
}
}
- public Response getDevice(String deviceId) {
+ @Path("devices/{device_id}")
+ @GET
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getDevice(@PathParam("device_id") String deviceId) {
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(deviceId);
@@ -142,7 +121,10 @@ public class FireAlarmManagerServiceImpl implements FireAlarmManagerService{
}
}
- public Response downloadSketch(String deviceName) {
+ @Path("devices/download")
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response downloadSketch(@QueryParam("deviceName") String deviceName) {
try {
ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), deviceName);
Response.ResponseBuilder response = Response.ok(FileUtils.readFileToByteArray(zipFile.getZipFile()));
@@ -166,7 +148,9 @@ public class FireAlarmManagerServiceImpl implements FireAlarmManagerService{
}
}
- public Response generateSketchLink(String deviceName) {
+ @Path("devices/generate_link")
+ @GET
+ public Response generateSketchLink(@QueryParam("deviceName") String deviceName) {
try {
ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), deviceName);
Response.ResponseBuilder rb = Response.ok(zipFile.getDeviceId());
@@ -203,14 +187,14 @@ public class FireAlarmManagerServiceImpl implements FireAlarmManagerService{
apiApplicationKey = apiManagementProviderService.generateAndRetrieveApplicationKeys(
DeviceTypeConstants.DEVICE_TYPE, tags, KEY_TYPE, applicationUsername, true);
}
- JWTClient jwtClient = JWTClientManager.getInstance().getJWTClient();
+ JWTClient jwtClient = APIUtil.getJWTClientManagerService().getJWTClient();
String scopes = "device_type_" + DeviceTypeConstants.DEVICE_TYPE + " device_" + deviceId;
AccessTokenInfo accessTokenInfo = jwtClient.getAccessToken(apiApplicationKey.getConsumerKey(),
apiApplicationKey.getConsumerSecret(), owner,
scopes);
//create token
- String accessToken = accessTokenInfo.getAccess_token();
- String refreshToken = accessTokenInfo.getRefresh_token();
+ String accessToken = accessTokenInfo.getAccessToken();
+ String refreshToken = accessTokenInfo.getRefreshToken();
//Register the device with CDMF
boolean status = register(deviceId, deviceName);
if (!status) {
@@ -225,4 +209,42 @@ public class FireAlarmManagerServiceImpl implements FireAlarmManagerService{
return zipFile;
}
+
+ /**
+ * Generate UUID
+ *
+ * @return generated UUID
+ */
+ private static String shortUUID() {
+ UUID uuid = UUID.randomUUID();
+ long l = ByteBuffer.wrap(uuid.toString().getBytes(StandardCharsets.UTF_8)).getLong();
+ return Long.toString(l, Character.MAX_RADIX);
+ }
+
+ private boolean register(String deviceId,String name) {
+
+ try {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId(deviceId);
+ deviceIdentifier.setType(DeviceTypeConstants.DEVICE_TYPE);
+ if (APIUtil.getDeviceManagementService().isEnrolled(deviceIdentifier)) {
+ return false;
+ }
+ Device device = new Device();
+ device.setDeviceIdentifier(deviceId);
+ EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
+ enrolmentInfo.setDateOfEnrolment(new Date().getTime());
+ enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
+ enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE);
+ device.setName(name);
+ device.setType(DeviceTypeConstants.DEVICE_TYPE);
+ enrolmentInfo.setOwner(APIUtil.getAuthenticatedUser());
+ device.setEnrolmentInfo(enrolmentInfo);
+ boolean added = APIUtil.getDeviceManagementService().enrollDevice(device);
+ return added;
+ } catch (DeviceManagementException e) {
+ return false;
+ }
+ }
+
}
diff --git a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/transport/MQTTConnector.java b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/transport/MQTTConnector.java
index 573402cd..a48f719b 100644
--- a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/transport/MQTTConnector.java
+++ b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/transport/MQTTConnector.java
@@ -27,7 +27,6 @@ import org.homeautomation.firealarm.api.util.ServiceUtils;
import org.homeautomation.firealarm.plugin.constants.DeviceTypeConstants;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.iot.controlqueue.mqtt.MqttConfig;
-import org.wso2.carbon.device.mgt.iot.sensormgt.SensorDataManager;
import org.wso2.carbon.device.mgt.iot.transport.TransportHandlerException;
import org.wso2.carbon.device.mgt.iot.transport.mqtt.MQTTTransportHandler;
@@ -110,12 +109,6 @@ public class MQTTConnector extends MQTTTransportHandler {
log.debug("Received MQTT message for: [OWNER-" + owner + "] & [DEVICE.ID-" + deviceId + "]");
}
if (messageData.length == 4) {
- SensorDataManager.getInstance().setSensorRecord(deviceId, DeviceTypeConstants.SENSOR_TEMPERATURE,
- messageData[1], Calendar.getInstance().getTimeInMillis());
- SensorDataManager.getInstance().setSensorRecord(deviceId, DeviceTypeConstants.SENSOR_HUMIDITY,
- messageData[3], Calendar.getInstance().getTimeInMillis());
-
-
if (!ServiceUtils.publishTemperatureToDAS(owner, deviceId, messageData[1])) {
log.error("MQTT Subscriber: Publishing data to DAS failed.");
}
diff --git a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/util/APIUtil.java b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/util/APIUtil.java
index 66914921..0dd601ed 100644
--- a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/util/APIUtil.java
+++ b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/util/APIUtil.java
@@ -21,6 +21,7 @@ package org.homeautomation.firealarm.api.util;
import org.wso2.carbon.apimgt.application.extension.APIManagementProviderService;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerService;
/**
* This class provides utility functions used by REST-API.
@@ -64,4 +65,16 @@ public class APIUtil {
}
return apiManagementProviderService;
}
+
+ public static JWTClientManagerService getJWTClientManagerService() {
+ PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
+ JWTClientManagerService jwtClientManagerService =
+ (JWTClientManagerService) ctx.getOSGiService(JWTClientManagerService.class, null);
+ if (jwtClientManagerService == null) {
+ String msg = "JWT Client manager service has not initialized.";
+ throw new IllegalStateException(msg);
+ }
+ return jwtClientManagerService;
+ }
+
}
diff --git a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/util/ServiceUtils.java b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/util/ServiceUtils.java
index 536e187d..d2642043 100644
--- a/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/util/ServiceUtils.java
+++ b/modules/samples/firealarm/component/api/src/main/java/org/homeautomation/firealarm/api/util/ServiceUtils.java
@@ -21,7 +21,7 @@ package org.homeautomation.firealarm.api.util;
import org.homeautomation.firealarm.plugin.constants.DeviceTypeConstants;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
-import org.wso2.carbon.device.mgt.analytics.data.publisher.service.DeviceAnalyticsService;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService;
public class ServiceUtils {
@@ -67,8 +67,8 @@ public class ServiceUtils {
if (ctx.getTenantDomain(true) == null) {
ctx.setTenantDomain("carbon.super", true);
}
- DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService(
- DeviceAnalyticsService.class, null);
+ EventsPublisherService deviceAnalyticsService = (EventsPublisherService) ctx.getOSGiService(
+ EventsPublisherService.class, null);
Object metaData[] = {owner, DeviceTypeConstants.DEVICE_TYPE, deviceId, System.currentTimeMillis()};
try {
deviceAnalyticsService.publishEvent(definition, SENSOR_STREAM_VERSION, metaData,
diff --git a/modules/samples/firealarm/component/api/src/main/webapp/WEB-INF/web.xml b/modules/samples/firealarm/component/api/src/main/webapp/WEB-INF/web.xml
index 7f6126d2..0cff816a 100644
--- a/modules/samples/firealarm/component/api/src/main/webapp/WEB-INF/web.xml
+++ b/modules/samples/firealarm/component/api/src/main/webapp/WEB-INF/web.xml
@@ -23,13 +23,10 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
Sample-Webapp-Controller
+
- JAX-WS/JAX-RS Endpoint
- JAX-WS/JAX-RS Servlet
CXFServlet
-
- org.apache.cxf.transport.servlet.CXFServlet
-
+ org.apache.cxf.transport.servlet.CXFServlet
1
@@ -42,27 +39,25 @@
doAuthentication
- false
-
-
-
- managed-api-enabled
true
- managed-api-owner
- admin
+ isSharedWithAllTenants
+ true
- managed-api-context-template
- /firealarm/{version}
+ providerTenantDomain
+ carbon.super
+
+
- managed-api-application
- firealarm
+ managed-api-enabled
+ true
- managed-api-isSecured
- true
+ managed-api-owner
+ admin
+