diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoControllerServiceImpl.java b/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoControllerServiceImpl.java index 0b7de4e64..076a7bf03 100644 --- a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoControllerServiceImpl.java +++ b/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoControllerServiceImpl.java @@ -31,7 +31,18 @@ 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.sensormgt.SensorDataManager; import org.wso2.carbon.device.mgt.iot.sensormgt.SensorRecord; + import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.Consumes; +import javax.ws.rs.FormParam; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +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.MediaType; import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.Calendar; @@ -51,7 +62,10 @@ public class ArduinoControllerServiceImpl implements ArduinoControllerService { private ConcurrentHashMap deviceToIpMap = new ConcurrentHashMap<>(); @Override - public Response registerDeviceIP(String deviceId, String deviceIP, String devicePort, HttpServletRequest request) { + @Path("device/register/{deviceId}/{ip}/{port}") + @POST + public Response registerDeviceIP(@PathParam("deviceId") String deviceId, @PathParam("ip") String deviceIP, + @PathParam("port") String devicePort, @Context HttpServletRequest request) { String result; if (log.isDebugEnabled()) { log.debug("Got register call from IP: " + deviceIP + " for Device ID: " + deviceId + " of owner: "); @@ -66,7 +80,10 @@ public class ArduinoControllerServiceImpl implements ArduinoControllerService { } @Override - public Response switchBulb(String deviceId, String protocol, String state) { + @Path("device/{deviceId}/bulb") + @POST + public Response switchBulb(@PathParam("deviceId") String deviceId, @QueryParam("protocol") String protocol, + @FormParam("state") String state) { LinkedList deviceControlList = internalControlsQueue.get(deviceId); String operation = "BULB:" + state.toUpperCase(); @@ -82,7 +99,12 @@ public class ArduinoControllerServiceImpl implements ArduinoControllerService { } @Override - public Response requestTemperature(String deviceId, String protocol) { + @Path("device/{deviceId}/temperature") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response requestTemperature(@PathParam("deviceId") String deviceId, + @QueryParam("protocol") String protocol) { try { SensorRecord sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId, @@ -94,6 +116,9 @@ public class ArduinoControllerServiceImpl implements ArduinoControllerService { } @Override + @Path("device/sensor") + @POST + @Consumes(MediaType.APPLICATION_JSON) public Response pushData(DeviceData dataMsg) { String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); String deviceId = dataMsg.deviceId; @@ -110,7 +135,9 @@ public class ArduinoControllerServiceImpl implements ArduinoControllerService { } @Override - public Response readControls(String deviceId, String protocol) { + @Path("device/{deviceId}/controls") + @GET + public Response readControls(@PathParam("deviceId") String deviceId, @QueryParam("protocol") String protocol) { String result; LinkedList deviceControlList = internalControlsQueue.get(deviceId); String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); @@ -138,7 +165,10 @@ public class ArduinoControllerServiceImpl implements ArduinoControllerService { } @Override - public Response pushTemperatureData(final DeviceData dataMsg, HttpServletRequest request) { + @Path("device/temperature") + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response pushTemperatureData(final DeviceData dataMsg, @Context HttpServletRequest request) { String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); String deviceId = dataMsg.deviceId; float temperature = dataMsg.value; @@ -154,7 +184,12 @@ public class ArduinoControllerServiceImpl implements ArduinoControllerService { } @Override - public Response getArduinoTemperatureStats(String deviceId, long from, long to) { + @Path("device/stats/{deviceId}/sensors/temperature") + @GET + @Consumes("application/json") + @Produces("application/json") + public Response getArduinoTemperatureStats(@PathParam("deviceId") String deviceId, @QueryParam("from") long from, + @QueryParam("to") long to) { String fromDate = String.valueOf(from); String toDate = String.valueOf(to); List sensorDatas = new ArrayList<>(); diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoManagerService.java b/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoManagerService.java index eb0524b31..cd0e196fd 100644 --- a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoManagerService.java +++ b/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoManagerService.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 = "arduino_mgt", version = "1.0.0", context = "/arduino_mgt", tags = {"arduino"}) @DeviceType(value = "arduino") public interface ArduinoManagerService { diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoManagerServiceImpl.java b/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoManagerServiceImpl.java index 3ef897128..a5cd8b5e8 100644 --- a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoManagerServiceImpl.java +++ b/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoManagerServiceImpl.java @@ -18,7 +18,6 @@ package org.wso2.carbon.device.mgt.iot.arduino.service.impl; -import org.wso2.carbon.apimgt.annotations.api.API; import org.wso2.carbon.apimgt.application.extension.APIManagementProviderService; import org.wso2.carbon.apimgt.application.extension.dto.ApiApplicationKey; import org.wso2.carbon.apimgt.application.extension.exception.APIManagerException; @@ -27,7 +26,6 @@ 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.extensions.feature.mgt.annotations.DeviceType; import org.wso2.carbon.device.mgt.iot.arduino.service.impl.util.APIUtil; import org.wso2.carbon.device.mgt.iot.arduino.plugin.constants.ArduinoConstants; import org.wso2.carbon.device.mgt.iot.exception.DeviceControllerException; @@ -38,6 +36,16 @@ 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.nio.ByteBuffer; import java.nio.charset.StandardCharsets; @@ -46,15 +54,16 @@ import java.util.Date; import java.util.List; import java.util.UUID; -@API(name = "arduino_mgt", version = "1.0.0", context = "/arduino_mgt", tags = {"arduino"}) -@DeviceType(value = "arduino") +@Path("enrollment") public class ArduinoManagerServiceImpl implements ArduinoManagerService { private static final String KEY_TYPE = "PRODUCTION"; private static ApiApplicationKey apiApplicationKey; @Override - public Response removeDevice(String deviceId) { + @Path("devices/{device_id}") + @DELETE + public Response removeDevice(@PathParam("device_id") String deviceId) { DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(deviceId); deviceIdentifier.setType(ArduinoConstants.DEVICE_TYPE); @@ -71,7 +80,9 @@ public class ArduinoManagerServiceImpl implements ArduinoManagerService { } @Override - 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(ArduinoConstants.DEVICE_TYPE); @@ -93,7 +104,11 @@ public class ArduinoManagerServiceImpl implements ArduinoManagerService { } @Override - 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(ArduinoConstants.DEVICE_TYPE); @@ -106,6 +121,10 @@ public class ArduinoManagerServiceImpl implements ArduinoManagerService { } @Override + @Path("devices") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) public Response getArduinoDevices() { try { List userDevices = APIUtil.getDeviceManagementService().getDevicesOfUser( @@ -125,7 +144,10 @@ public class ArduinoManagerServiceImpl implements ArduinoManagerService { } @Override - public Response downloadSketch(String customDeviceName) { + @Path("devices/download") + @GET + @Produces("application/octet-stream") + public Response downloadSketch(@QueryParam("deviceName") String customDeviceName) { try { ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), customDeviceName); Response.ResponseBuilder rb = Response.ok(zipFile.getZipFile()); @@ -147,7 +169,9 @@ public class ArduinoManagerServiceImpl implements ArduinoManagerService { } @Override - 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()); diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/web.xml b/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/web.xml index c62aa6100..4c3855352 100644 --- a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/web.xml +++ b/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/web.xml @@ -7,56 +7,40 @@ Arduino Arduino - - CXFServlet - org.apache.cxf.transport.servlet.CXFServlet - 1 - + + CXFServlet + org.apache.cxf.transport.servlet.CXFServlet + 1 + + + CXFServlet + /* + + + isAdminService + false + + + doAuthentication + true + + + isSharedWithAllTenants + true + + + providerTenantDomain + carbon.super + + + + managed-api-enabled + true + + + managed-api-owner + admin + - - CXFServlet - /* - - - - isAdminService - false - - - doAuthentication - false - - - isSharedWithAllTenants - true - - - providerTenantDomain - carbon.super - - - - managed-api-enabled - true - - - managed-api-owner - admin - - - managed-api-context-template - /arduino/{version} - - - managed-api-application - arduino - - - managed-api-isSecured - true - - - - - + \ No newline at end of file diff --git a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayControllerService.java b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayControllerService.java index eb0cdcaea..b672380bd 100644 --- a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayControllerService.java +++ b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayControllerService.java @@ -21,11 +21,11 @@ package org.wso2.carbon.device.mgt.iot.digitaldisplay.service.impl; import org.wso2.carbon.apimgt.annotations.api.API; import org.wso2.carbon.device.mgt.extensions.feature.mgt.annotations.DeviceType; import org.wso2.carbon.device.mgt.extensions.feature.mgt.annotations.Feature; -import javax.websocket.server.PathParam; import javax.ws.rs.FormParam; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; @API(name = "digital_display", version = "1.0.0", context = "/digital_display", tags = {"digital_display"}) @@ -54,7 +54,7 @@ public interface DigitalDisplayControllerService { @POST @Feature(code = "terminate-display", name = "Terminate Display", type = "operation", description = "Terminate all running process in Digital Display") - Response terminateDisplay(@PathParam("deviceId") String deviceId, @HeaderParam("sessionId") String sessionId); + Response terminateDisplay(@HeaderParam("sessionId") String sessionId, @PathParam("deviceId") String deviceId); /** * Reboot running digital display diff --git a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayControllerServiceImpl.java b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayControllerServiceImpl.java index 0bb084db6..185c63eba 100644 --- a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayControllerServiceImpl.java +++ b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayControllerServiceImpl.java @@ -20,10 +20,8 @@ package org.wso2.carbon.device.mgt.iot.digitaldisplay.service.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.apimgt.annotations.api.API; import org.wso2.carbon.context.PrivilegedCarbonContext; 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.extensions.feature.mgt.annotations.Feature; import org.wso2.carbon.device.mgt.iot.controlqueue.mqtt.MqttConfig; import org.wso2.carbon.device.mgt.iot.digitaldisplay.service.impl.exception.DigitalDisplayException; @@ -32,13 +30,11 @@ import org.wso2.carbon.device.mgt.iot.digitaldisplay.plugin.constants.DigitalDis import org.wso2.carbon.device.mgt.iot.service.IoTServerStartupListener; import org.wso2.carbon.device.mgt.iot.transport.TransportHandlerException; -import javax.servlet.http.HttpServletResponse; -import javax.websocket.server.PathParam; import javax.ws.rs.FormParam; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; -import javax.ws.rs.core.Context; +import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; public class DigitalDisplayControllerServiceImpl implements DigitalDisplayControllerService { @@ -46,44 +42,9 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro private static Log log = LogFactory.getLog(DigitalDisplayControllerServiceImpl.class); private static DigitalDisplayMQTTConnector digitalDisplayMQTTConnector; - private boolean waitForServerStartup() { - while (!IoTServerStartupListener.isServerReady()) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - return true; - } - } - return false; - } - - public DigitalDisplayMQTTConnector getDigitalDisplayMQTTConnector() { - return DigitalDisplayControllerServiceImpl.digitalDisplayMQTTConnector; - } - - public void setDigitalDisplayMQTTConnector(final - DigitalDisplayMQTTConnector digitalDisplayMQTTConnector) { - - Runnable connector = new Runnable() { - public void run() { - if (waitForServerStartup()) { - return; - } - DigitalDisplayControllerServiceImpl.digitalDisplayMQTTConnector = digitalDisplayMQTTConnector; - if (MqttConfig.getInstance().isEnabled()) { - digitalDisplayMQTTConnector.connect(); - } else { - log.warn("MQTT disabled in 'devicemgt-config.xml'. " + - "Hence, DigitalDisplayMQTTConnector not started."); - } - } - }; - Thread connectorThread = new Thread(connector); - connectorThread.setDaemon(true); - connectorThread.start(); - } - - public Response restartBrowser(String deviceId, String sessionId) { + @Path("device/{deviceId}/restart-browser") + @POST + public Response restartBrowser(@PathParam("deviceId") String deviceId, @HeaderParam("sessionId") String sessionId) { try { sendCommandViaMQTT(deviceId, sessionId + "::" + DigitalDisplayConstants.RESTART_BROWSER_CONSTANT + "::", ""); return Response.ok().build(); @@ -94,7 +55,10 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro } } - public Response terminateDisplay(String deviceId, String sessionId) { + @Path("device/{deviceId}/terminate-display") + @POST + public Response terminateDisplay(@HeaderParam("sessionId") String sessionId, + @PathParam("deviceId") String deviceId) { try { sendCommandViaMQTT(deviceId, sessionId + "::" + DigitalDisplayConstants.TERMINATE_DISPLAY_CONSTANT + "::", ""); return Response.ok().build(); @@ -103,10 +67,11 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro } catch (DigitalDisplayException e) { return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build(); } - } - public Response restartDisplay(String deviceId, String sessionId) { + @Path("device/{deviceId}/restart-display") + @POST + public Response restartDisplay(@PathParam("deviceId") String deviceId, @HeaderParam("sessionId") String sessionId) { try { sendCommandViaMQTT(deviceId, sessionId + "::" + DigitalDisplayConstants.RESTART_DISPLAY_CONSTANT + "::", ""); return Response.ok().build(); @@ -117,7 +82,11 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro } } - public Response editSequence(String deviceId, String name, String attribute, String newValue, String sessionId) { + @Path("device/{deviceId}/edit-sequence") + @POST + public Response editSequence(@PathParam("deviceId") String deviceId, @FormParam("name") String name, + @FormParam("attribute") String attribute, @FormParam("new-value") String newValue, + @HeaderParam("sessionId") String sessionId) { try { String params = name + "|" + attribute + "|" + newValue; sendCommandViaMQTT(deviceId, sessionId + "::" + DigitalDisplayConstants.EDIT_SEQUENCE_CONSTANT + "::", params); @@ -129,7 +98,12 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro } } - public Response uploadContent(String deviceId, String remotePath, String screenName, String sessionId) { + + @Path("device/{deviceId}/upload-content") + @POST + public Response uploadContent(@PathParam("deviceId") String deviceId, @FormParam("remote-path") String remotePath, + @FormParam("screen-name") String screenName, + @HeaderParam("sessionId") String sessionId) { try { String params = remotePath + "|" + screenName; sendCommandViaMQTT(deviceId, sessionId + "::" + DigitalDisplayConstants.UPLOAD_CONTENT_CONSTANT + "::", @@ -142,8 +116,12 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro } } - public Response addNewResource(String deviceId, String type, String time, String path, String name, String position, - String sessionId) { + @Path("device/{deviceId}/add-resource") + @POST + public Response addNewResource(@PathParam("deviceId") String deviceId, @FormParam("type") String type, + @FormParam("time") String time, @FormParam("path") String path, + @FormParam("name") String name, @FormParam("position") String position, + @HeaderParam("sessionId") String sessionId) { String params; try { if (position.isEmpty()) { @@ -161,7 +139,10 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro } } - public Response removeResource(String deviceId, String name, String sessionId) { + @Path("device/{deviceId}/remove-resource") + @POST + public Response removeResource(@PathParam("deviceId") String deviceId, @FormParam("name") String name, + @HeaderParam("sessionId") String sessionId) { try { sendCommandViaMQTT(deviceId, sessionId + "::" + DigitalDisplayConstants.REMOVE_RESOURCE_CONSTANT + "::", name); return Response.ok().build(); @@ -172,7 +153,9 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro } } - public Response restartServer(String deviceId, String sessionId) { + @Path("device/{deviceId}/restart-server") + @POST + public Response restartServer(@PathParam("deviceId") String deviceId, @HeaderParam("sessionId") String sessionId) { try { sendCommandViaMQTT(deviceId, sessionId + "::" + DigitalDisplayConstants.RESTART_SERVER_CONSTANT + "::", ""); return Response.ok().build(); @@ -183,7 +166,10 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro } } - public Response showScreenshot(String deviceId, String sessionId) { + + @Path("device/{deviceId}/screenshot") + @POST + public Response showScreenshot(@PathParam("deviceId") String deviceId, @HeaderParam("sessionId") String sessionId) { try { sendCommandViaMQTT(deviceId, sessionId + "::" + DigitalDisplayConstants.SCREENSHOT_CONSTANT + "::", ""); return Response.ok().build(); @@ -194,7 +180,10 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro } } - public Response getDevicestatus(String deviceId, String sessionId) { + @Path("device/{deviceId}/get-device-status") + @POST + public Response getDevicestatus(@PathParam("deviceId") String deviceId, + @HeaderParam("sessionId") String sessionId) { try { sendCommandViaMQTT(deviceId, sessionId + "::" + DigitalDisplayConstants.GET_DEVICE_STATUS_CONSTANT + "::", ""); return Response.ok().build(); @@ -205,7 +194,9 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro } } - public Response getResources(String deviceId, String sessionId) { + @Path("device/{deviceId}/get-content-list") + @POST + public Response getResources(@PathParam("deviceId") String deviceId, @HeaderParam("sessionId") String sessionId) { try { sendCommandViaMQTT(deviceId, sessionId + "::" + DigitalDisplayConstants.GET_CONTENTLIST_CONSTANT + "::", ""); return Response.ok().build(); @@ -239,4 +230,41 @@ public class DigitalDisplayControllerServiceImpl implements DigitalDisplayContro } } + private boolean waitForServerStartup() { + while (!IoTServerStartupListener.isServerReady()) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + return true; + } + } + return false; + } + + public DigitalDisplayMQTTConnector getDigitalDisplayMQTTConnector() { + return DigitalDisplayControllerServiceImpl.digitalDisplayMQTTConnector; + } + + public void setDigitalDisplayMQTTConnector(final + DigitalDisplayMQTTConnector digitalDisplayMQTTConnector) { + + Runnable connector = new Runnable() { + public void run() { + if (waitForServerStartup()) { + return; + } + DigitalDisplayControllerServiceImpl.digitalDisplayMQTTConnector = digitalDisplayMQTTConnector; + if (MqttConfig.getInstance().isEnabled()) { + digitalDisplayMQTTConnector.connect(); + } else { + log.warn("MQTT disabled in 'devicemgt-config.xml'. " + + "Hence, DigitalDisplayMQTTConnector not started."); + } + } + }; + Thread connectorThread = new Thread(connector); + connectorThread.setDaemon(true); + connectorThread.start(); + } + } diff --git a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayManagerService.java b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayManagerService.java index 300fb211a..a33412eab 100644 --- a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayManagerService.java +++ b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayManagerService.java @@ -24,7 +24,6 @@ import org.wso2.carbon.device.mgt.extensions.feature.mgt.annotations.DeviceType; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; -import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -33,6 +32,7 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +@Path("enrollment") @API(name = "digital_display_mgt", version = "1.0.0", context = "/digital_display_mgt", tags = {"digital_display"}) @DeviceType(value = "digital_display") public interface DigitalDisplayManagerService { diff --git a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayManagerServiceImpl.java b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayManagerServiceImpl.java index 382a22c6f..c15a16fb6 100644 --- a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayManagerServiceImpl.java +++ b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/java/org/wso2/carbon/device/mgt/iot/digitaldisplay/service/impl/DigitalDisplayManagerServiceImpl.java @@ -40,6 +40,15 @@ 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; @@ -47,38 +56,16 @@ import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.UUID; +@Path("enrollment") public class DigitalDisplayManagerServiceImpl implements DigitalDisplayManagerService { private static Log log = LogFactory.getLog(DigitalDisplayManagerServiceImpl.class); private static final String KEY_TYPE = "PRODUCTION"; private static ApiApplicationKey apiApplicationKey; - private boolean register(String deviceId, String name) { - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(deviceId); - deviceIdentifier.setType(DigitalDisplayConstants.DEVICE_TYPE); - try { - 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(DigitalDisplayConstants.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) { DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(deviceId); deviceIdentifier.setType(DigitalDisplayConstants.DEVICE_TYPE); @@ -95,7 +82,9 @@ public class DigitalDisplayManagerServiceImpl implements DigitalDisplayManagerSe } } - 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(DigitalDisplayConstants.DEVICE_TYPE); @@ -115,8 +104,11 @@ public class DigitalDisplayManagerServiceImpl implements DigitalDisplayManagerSe return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build(); } } - - 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(DigitalDisplayConstants.DEVICE_TYPE); @@ -128,10 +120,12 @@ public class DigitalDisplayManagerServiceImpl implements DigitalDisplayManagerSe return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build(); } } - - public Response downloadSketch(String deviceName) { + @Path("devices/download") + @GET + @Produces("application/octet-stream") + public Response downloadSketch(@QueryParam("deviceName") String customDeviceName) { try { - ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), deviceName); + ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), customDeviceName); Response.ResponseBuilder response = Response.ok(FileUtils.readFileToByteArray(zipFile.getZipFile())); response.type("application/zip"); response.header("Content-Disposition", "attachment; filename=\"" + zipFile.getFileName() + "\""); @@ -153,6 +147,31 @@ public class DigitalDisplayManagerServiceImpl implements DigitalDisplayManagerSe } } + private boolean register(String deviceId, String name) { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(deviceId); + deviceIdentifier.setType(DigitalDisplayConstants.DEVICE_TYPE); + try { + 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(DigitalDisplayConstants.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 { diff --git a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/webapp/WEB-INF/cxf-servlet.xml index aed7bdb71..b8cdfd331 100644 --- a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/webapp/WEB-INF/cxf-servlet.xml +++ b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -24,7 +24,7 @@ http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> - + diff --git a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/webapp/WEB-INF/web.xml b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/webapp/WEB-INF/web.xml index c6fb5fe50..af70d2124 100644 --- a/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/webapp/WEB-INF/web.xml +++ b/components/iot-plugins/digital-display-plugin/org.wso2.carbon.device.mgt.iot.digitaldisplay.api/src/main/webapp/WEB-INF/web.xml @@ -21,28 +21,16 @@ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> Digital-Display-Agent-Webapp + - JAX-WS/JAX-RS MDM Android Endpoint - JAX-WS/JAX-RS Servlet CXFServlet - - org.apache.cxf.transport.servlet.CXFServlet - + org.apache.cxf.transport.servlet.CXFServlet 1 CXFServlet /* - - - isSharedWithAllTenants - true - - - providerTenantDomain - carbon.super - isAdminService false @@ -51,6 +39,14 @@ doAuthentication true + + isSharedWithAllTenants + true + + + providerTenantDomain + carbon.super + @@ -61,17 +57,5 @@ managed-api-owner admin - - managed-api-context-template - /digital_display/{version} - - - managed-api-application - digital_display - - - managed-api-isSecured - true - - + \ No newline at end of file diff --git a/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneControllerServiceImpl.java b/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneControllerServiceImpl.java index 6e6f0e69e..4c6ca60e5 100644 --- a/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneControllerServiceImpl.java +++ b/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneControllerServiceImpl.java @@ -38,7 +38,10 @@ public class DroneControllerServiceImpl implements DroneControllerService { private ConcurrentHashMap deviceToIpMap = new ConcurrentHashMap<>(); private DroneController droneController = new DroneControllerImpl(); - public Response registerDeviceIP(String deviceId, String deviceIP, String devicePort) { + @Path("device/register/{deviceId}/{ip}/{port}") + @POST + public Response registerDeviceIP(@PathParam("deviceId") String deviceId, @PathParam("ip") String deviceIP, + @PathParam("port") String devicePort) { String result; String deviceHttpEndpoint = deviceIP + ":" + devicePort; deviceToIpMap.put(deviceId, deviceHttpEndpoint); @@ -49,7 +52,10 @@ public class DroneControllerServiceImpl implements DroneControllerService { return Response.ok(Response.Status.OK.getStatusCode()).build(); } - public Response droneController(String deviceId, String action, String duration, String speed) { + @Path("device/{deviceId}/send_command") + @POST + public Response droneController(@PathParam("deviceId") String deviceId, @FormParam("action") String action, + @FormParam("duration") String duration, @FormParam("speed") String speed) { try { DroneAnalyzerServiceUtils.sendControlCommand(droneController, deviceId, action, Double.valueOf(speed), Double.valueOf(duration)); diff --git a/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneManagerService.java b/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneManagerService.java index 377f09eed..535479ad3 100644 --- a/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneManagerService.java +++ b/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneManagerService.java @@ -31,6 +31,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; +@Path("enrollment") @API(name = "drone_analyzer_mgt", version = "1.0.0", context = "/drone_analyzer_mgt", tags = {"drone_analyzer"}) @DeviceType(value = "drone_analyzer") public interface DroneManagerService { diff --git a/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneManagerServiceImpl.java b/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneManagerServiceImpl.java index d9fbfb44b..6066f2de2 100644 --- a/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneManagerServiceImpl.java +++ b/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/impl/DroneManagerServiceImpl.java @@ -40,6 +40,15 @@ 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.Response; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; @@ -48,39 +57,16 @@ import java.util.Date; import java.util.List; import java.util.UUID; +@Path("enrollment") public class DroneManagerServiceImpl implements DroneManagerService { private static org.apache.commons.logging.Log log = LogFactory.getLog(DroneManagerServiceImpl.class); private static final String KEY_TYPE = "PRODUCTION"; private static ApiApplicationKey apiApplicationKey; - private boolean register(String deviceId, String name) { - try { - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(deviceId); - deviceIdentifier.setType(DroneConstants.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); - enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD); - device.setName(name); - device.setType(DroneConstants.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); @@ -96,7 +82,10 @@ public class DroneManagerServiceImpl implements DroneManagerService { } } - 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); @@ -117,7 +106,11 @@ public class DroneManagerServiceImpl implements DroneManagerService { } } - public Response getDevice(String deviceId) { + @Path("devices/{device_id}") + @GET + @Consumes("application/json") + @Produces("application/json") + public Response getDevice(@PathParam("device_id") String deviceId) { try { DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(deviceId); @@ -129,6 +122,10 @@ public class DroneManagerServiceImpl implements DroneManagerService { } } + @Path("devices") + @GET + @Consumes("application/json") + @Produces("application/json") public Response getDroneDevices() { try { List userDevices = APIUtil.getDeviceManagementService().getDevicesOfUser(APIUtil.getAuthenticatedUser()); @@ -147,7 +144,11 @@ public class DroneManagerServiceImpl implements DroneManagerService { } } - public Response downloadSketch(String deviceName, String sketchType) { + @Path("devices/{sketch_type}/download") + @GET + @Produces("application/octet-stream") + public Response downloadSketch(@QueryParam("deviceName") String deviceName, @PathParam("sketch_type") String + sketchType) { //create new device id String deviceId = shortUUID(); @@ -173,10 +174,12 @@ public class DroneManagerServiceImpl implements DroneManagerService { Response.ResponseBuilder rb = Response.ok(zipFile.getZipFile()); rb.header("Content-Disposition", "attachment; filename=\"" + zipFile.getFileName() + "\""); return rb.build(); - } - public Response generateSketchLink(String deviceName, String sketchType) { + @Path("devices/{sketch_type}/generate_link") + @GET + public Response generateSketchLink(@QueryParam("deviceName") String deviceName, + @PathParam("sketch_type") String sketchType) { try { ZipArchive zipFile = createDownloadFile(deviceName, sketchType); Response.ResponseBuilder rb = Response.ok(zipFile.getDeviceId()); @@ -196,6 +199,32 @@ public class DroneManagerServiceImpl implements DroneManagerService { } } + private boolean register(String deviceId, String name) { + try { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(deviceId); + deviceIdentifier.setType(DroneConstants.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); + enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD); + device.setName(name); + device.setType(DroneConstants.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 deviceName, String sketchType) throws DeviceManagementException, JWTClientException, APIManagerException, DeviceControllerException, UserStoreException { diff --git a/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/WEB-INF/web.xml b/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/WEB-INF/web.xml index 2a9646df6..2f18393cf 100644 --- a/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/WEB-INF/web.xml +++ b/components/iot-plugins/drone-analyzer-plugin/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/WEB-INF/web.xml @@ -6,44 +6,41 @@ metadata-complete="true"> WSO2 IoT Server WSO2 IoT Server - - CXFServlet - org.apache.cxf.transport.servlet.CXFServlet - 1 - - - CXFServlet - /* - - - isAdminService - false - - - doAuthentication - false - + + CXFServlet + org.apache.cxf.transport.servlet.CXFServlet + 1 + + + CXFServlet + /* + + + isAdminService + false + + + doAuthentication + true + + + isSharedWithAllTenants + true + + + providerTenantDomain + carbon.super + - - - managed-api-enabled - true - - - managed-api-owner - admin - - - managed-api-context-template - /drone_analyzer/{version} - - - managed-api-application - drone_analyzer - - - managed-api-isSecured - true - - + + + managed-api-enabled + true + + + managed-api-owner + admin + + + \ No newline at end of file diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiControllerService.java b/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiControllerService.java index a6025d0e3..12d5f4389 100644 --- a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiControllerService.java +++ b/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiControllerService.java @@ -71,7 +71,7 @@ public interface RaspberryPiControllerService { @GET @Consumes("application/json") @Produces("application/json") - Response getArduinoTemperatureStats(@PathParam("deviceId") String deviceId, @QueryParam("username") String user, + Response getRaspberryPiTemperatureStats(@PathParam("deviceId") String deviceId, @QueryParam("username") String user, @QueryParam("from") long from, @QueryParam("to") long to); } diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiControllerServiceImpl.java b/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiControllerServiceImpl.java index 81b906a59..b744455d2 100644 --- a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiControllerServiceImpl.java +++ b/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiControllerServiceImpl.java @@ -25,6 +25,7 @@ import org.wso2.carbon.device.mgt.analytics.data.publisher.AnalyticsDataRecord; import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DeviceManagementAnalyticsException; import org.wso2.carbon.device.mgt.analytics.data.publisher.service.DeviceAnalyticsService; import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.extensions.feature.mgt.annotations.Feature; 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.raspberrypi.service.impl.dto.DeviceData; @@ -37,7 +38,16 @@ import org.wso2.carbon.device.mgt.iot.sensormgt.SensorRecord; import org.wso2.carbon.device.mgt.iot.service.IoTServerStartupListener; import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.Consumes; +import javax.ws.rs.FormParam; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +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.MediaType; import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.Calendar; @@ -52,42 +62,10 @@ public class RaspberryPiControllerServiceImpl implements RaspberryPiControllerSe private ConcurrentHashMap deviceToIpMap = new ConcurrentHashMap<>(); private RaspberryPiMQTTConnector raspberryPiMQTTConnector; - private boolean waitForServerStartup() { - while (!IoTServerStartupListener.isServerReady()) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - return true; - } - } - return false; - } - - public RaspberryPiMQTTConnector getRaspberryPiMQTTConnector() { - return raspberryPiMQTTConnector; - } - - public void setRaspberryPiMQTTConnector( - final RaspberryPiMQTTConnector raspberryPiMQTTConnector) { - Runnable connector = new Runnable() { - public void run() { - if (waitForServerStartup()) { - return; - } - RaspberryPiControllerServiceImpl.this.raspberryPiMQTTConnector = raspberryPiMQTTConnector; - if (MqttConfig.getInstance().isEnabled()) { - raspberryPiMQTTConnector.connect(); - } else { - log.warn("MQTT disabled in 'devicemgt-config.xml'. Hence, RaspberryPiMQTTConnector not started."); - } - } - }; - Thread connectorThread = new Thread(connector); - connectorThread.setDaemon(true); - connectorThread.start(); - } - - public Response registerDeviceIP(String deviceId, String deviceIP, String devicePort, HttpServletRequest request) { + @Path("device/register/{deviceId}/{ip}/{port}") + @POST + public Response registerDeviceIP(@PathParam("deviceId") String deviceId, @PathParam("ip") String deviceIP, + @PathParam("port") String devicePort, @Context HttpServletRequest request) { String result; if (log.isDebugEnabled()) { log.debug("Got register call from IP: " + deviceIP + " for Device ID: " + deviceId); @@ -101,7 +79,9 @@ public class RaspberryPiControllerServiceImpl implements RaspberryPiControllerSe return Response.ok().entity(result).build(); } - public Response switchBulb(String deviceId, String state) { + @Path("device/{deviceId}/bulb") + @POST + public Response switchBulb(@PathParam("deviceId") String deviceId, @FormParam("state") String state) { String switchToState = state.toUpperCase(); if (!switchToState.equals(RaspberrypiConstants.STATE_ON) && !switchToState.equals( RaspberrypiConstants.STATE_OFF)) { @@ -122,6 +102,10 @@ public class RaspberryPiControllerServiceImpl implements RaspberryPiControllerSe return Response.ok().build(); } + @Path("device/{deviceId}/readtemperature") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) public Response requestTemperature(@PathParam("deviceId") String deviceId) { SensorRecord sensorRecord = null; if (log.isDebugEnabled()) { @@ -147,7 +131,10 @@ public class RaspberryPiControllerServiceImpl implements RaspberryPiControllerSe return Response.ok().entity(sensorRecord).build(); } - public Response pushTemperatureData(final DeviceData dataMsg, HttpServletRequest request) { + @Path("device/push_temperature") + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response pushTemperatureData(final DeviceData dataMsg, @Context HttpServletRequest request) { String owner = dataMsg.owner; String deviceId = dataMsg.deviceId; String deviceIp = dataMsg.reply; @@ -176,7 +163,13 @@ public class RaspberryPiControllerServiceImpl implements RaspberryPiControllerSe return Response.ok().build(); } - public Response getArduinoTemperatureStats(String deviceId, String user, long from, long to) { + @Path("device/stats/{deviceId}/sensors/temperature") + @GET + @Consumes("application/json") + @Produces("application/json") + public Response getRaspberryPiTemperatureStats(@PathParam("deviceId") String deviceId, + @QueryParam("username") String user, + @QueryParam("from") long from, @QueryParam("to") long to) { String fromDate = String.valueOf(from); String toDate = String.valueOf(to); List sensorDatas = new ArrayList<>(); @@ -208,7 +201,7 @@ public class RaspberryPiControllerServiceImpl implements RaspberryPiControllerSe sensorData.setValue("" + (float) record.getValue(RaspberrypiConstants.SENSOR_TEMPERATURE)); sensorDatas.add(sensorData); } - SensorData[] sensorDetails = sensorDatas.toArray(new SensorData[sensorDatas.size()]); + SensorData[] sensorDetails = sensorDatas.toArray(new SensorData[sensorDatas.size()]); return Response.ok().entity(sensorDetails).build(); } catch (DeviceManagementAnalyticsException e) { String errorMsg = "Error on retrieving stats on table " + sensorTableName + " with query " + query; @@ -218,4 +211,39 @@ public class RaspberryPiControllerServiceImpl implements RaspberryPiControllerSe } } + private boolean waitForServerStartup() { + while (!IoTServerStartupListener.isServerReady()) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + return true; + } + } + return false; + } + + public RaspberryPiMQTTConnector getRaspberryPiMQTTConnector() { + return raspberryPiMQTTConnector; + } + + public void setRaspberryPiMQTTConnector( + final RaspberryPiMQTTConnector raspberryPiMQTTConnector) { + Runnable connector = new Runnable() { + public void run() { + if (waitForServerStartup()) { + return; + } + RaspberryPiControllerServiceImpl.this.raspberryPiMQTTConnector = raspberryPiMQTTConnector; + if (MqttConfig.getInstance().isEnabled()) { + raspberryPiMQTTConnector.connect(); + } else { + log.warn("MQTT disabled in 'devicemgt-config.xml'. Hence, RaspberryPiMQTTConnector not started."); + } + } + }; + Thread connectorThread = new Thread(connector); + connectorThread.setDaemon(true); + connectorThread.start(); + } + } diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiManagerService.java b/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiManagerService.java index 294c27b3e..cd4d2cb25 100644 --- a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiManagerService.java +++ b/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiManagerService.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 = "raspberrypi_mgt", version = "1.0.0", context = "/raspberrypi_mgt", tags = {"raspberrypi"}) @DeviceType(value = "raspberrypi") public interface RaspberryPiManagerService { @@ -43,7 +44,7 @@ public interface RaspberryPiManagerService { @Path("devices/{device_id}") @PUT Response updateDevice(@PathParam("device_id") String deviceId, - @QueryParam("name") String name); + @QueryParam("name") String name); @Path("devices/{device_id}") @GET @@ -57,16 +58,15 @@ public interface RaspberryPiManagerService { @Produces(MediaType.APPLICATION_JSON) Response getRaspberrypiDevices(); - @Path("devices/{sketch_type}/download") @GET @Produces(MediaType.APPLICATION_JSON) - Response downloadSketch(@QueryParam("deviceName") String deviceName, @PathParam("sketch_type") String - sketchType); + Response downloadSketch(@QueryParam("deviceName") String deviceName, + @PathParam("sketch_type") String sketchType); @Path("devices/{sketch_type}/generate_link") @GET Response generateSketchLink(@QueryParam("deviceName") String deviceName, - @PathParam("sketch_type") String sketchType); + @PathParam("sketch_type") String sketchType); } diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiManagerServiceImpl.java b/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiManagerServiceImpl.java index 5151a6fa9..6d0281694 100644 --- a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiManagerServiceImpl.java +++ b/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiManagerServiceImpl.java @@ -43,6 +43,15 @@ 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; @@ -52,39 +61,16 @@ import java.util.Date; import java.util.List; import java.util.UUID; +@Path("enrollment") public class RaspberryPiManagerServiceImpl implements RaspberryPiManagerService { private static Log log = LogFactory.getLog(RaspberryPiManagerServiceImpl.class); - private static final String KEY_TYPE = "PRODUCTION"; private static ApiApplicationKey apiApplicationKey; - private boolean register(String deviceId, String name) { - try { - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(deviceId); - deviceIdentifier.setType(RaspberrypiConstants.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(RaspberrypiConstants.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); @@ -101,7 +87,9 @@ public class RaspberryPiManagerServiceImpl implements RaspberryPiManagerService } } - 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(RaspberrypiConstants.DEVICE_TYPE); @@ -123,7 +111,11 @@ public class RaspberryPiManagerServiceImpl implements RaspberryPiManagerService } } - 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(RaspberrypiConstants.DEVICE_TYPE); @@ -136,6 +128,10 @@ public class RaspberryPiManagerServiceImpl implements RaspberryPiManagerService } } + @Path("devices") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) public Response getRaspberrypiDevices() { try { List userDevices = APIUtil.getDeviceManagementService().getDevicesOfUser( @@ -154,7 +150,12 @@ public class RaspberryPiManagerServiceImpl implements RaspberryPiManagerService } } - 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, sketchType); Response.ResponseBuilder response = Response.ok(FileUtils.readFileToByteArray(zipFile.getZipFile())); @@ -178,8 +179,10 @@ public class RaspberryPiManagerServiceImpl implements RaspberryPiManagerService } } - public Response generateSketchLink(String deviceName, String sketchType) { - + @Path("devices/{sketch_type}/generate_link") + @GET + public Response generateSketchLink(@QueryParam("deviceName") String deviceName, + @PathParam("sketch_type") String sketchType) { try { ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), deviceName, sketchType); Response.ResponseBuilder rb = Response.ok(zipFile.getDeviceId()); @@ -199,6 +202,30 @@ public class RaspberryPiManagerServiceImpl implements RaspberryPiManagerService } } + private boolean register(String deviceId, String name) { + try { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(deviceId); + deviceIdentifier.setType(RaspberrypiConstants.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(RaspberrypiConstants.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, String sketchType) throws DeviceManagementException, JWTClientException, APIManagerException, DeviceControllerException, diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/web.xml b/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/web.xml index f2fe934b8..623d182b7 100644 --- a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/web.xml +++ b/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/web.xml @@ -7,48 +7,40 @@ RaspberryPi RaspberryPi - - CXFServlet - org.apache.cxf.transport.servlet.CXFServlet - 1 - + + CXFServlet + org.apache.cxf.transport.servlet.CXFServlet + 1 + + + CXFServlet + /* + + + isAdminService + false + + + doAuthentication + true + + + isSharedWithAllTenants + true + + + providerTenantDomain + carbon.super + + + + managed-api-enabled + true + + + managed-api-owner + admin + - - CXFServlet - /* - - - - isAdminService - false - - - doAuthentication - true - - - - - managed-api-enabled - true - - - managed-api-owner - admin - - - managed-api-context-template - /raspberrypi/{version} - - - managed-api-application - raspberrypi - - - managed-api-isSecured - true - - - - + \ No newline at end of file diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmControllerService.java b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmControllerService.java index 4281934c1..a46762b21 100644 --- a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmControllerService.java +++ b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmControllerService.java @@ -56,7 +56,7 @@ public interface VirtualFireAlarmControllerService { * @return a custom message indicating whether the DeviceID to IP mapping was successful. */ @POST - @Path("register/{deviceId}/{ip}/{port}") + @Path("device/register/{deviceId}/{ip}/{port}") Response registerDeviceIP(@PathParam("deviceId") String deviceId, @PathParam("ip") String deviceIP, @PathParam("port") String devicePort, @Context HttpServletRequest request); @@ -72,7 +72,7 @@ public interface VirtualFireAlarmControllerService { * (Case-Insensitive String) */ @POST - @Path("{deviceId}/buzz") + @Path("device/{deviceId}/buzz") @Feature(code = "buzz", name = "Buzzer On / Off", type = "operation", description = "Switch on/off Virtual Fire Alarm Buzzer. (On / Off)") Response switchBuzzer(@PathParam("deviceId") String deviceId, @QueryParam("protocol") String protocol, @@ -89,7 +89,7 @@ public interface VirtualFireAlarmControllerService { * whose temperature reading was requested. */ @GET - @Path("{deviceId}/temperature") + @Path("device/{deviceId}/temperature") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Feature(code = "temperature", name = "Temperature", type = "monitor", @@ -105,7 +105,7 @@ public interface VirtualFireAlarmControllerService { * @param dataMsg the temperature data received from the device in JSON format complying to type 'DeviceData'. */ @POST - @Path("temperature") + @Path("device/temperature") @Consumes(MediaType.APPLICATION_JSON) Response pushTemperatureData(final DeviceData dataMsg); @@ -123,7 +123,7 @@ public interface VirtualFireAlarmControllerService { * @return an HTTP Response object with either the CA-Cert or the CA-Capabilities according to the operation. */ @GET - @Path("scep") + @Path("device/scep") Response scepRequest(@QueryParam("operation") String operation, @QueryParam("message") String message); @@ -140,13 +140,13 @@ public interface VirtualFireAlarmControllerService { * @return an HTTP Response object with the signed certificate for the device by the CA of the SCEP Server. */ @POST - @Path("scep") + @Path("device/scep") Response scepRequestPost(@QueryParam("operation") String operation, InputStream inputStream); /** * Retrieve Sensor data for the device type */ - @Path("stats/{deviceId}/sensors/{sensorName}") + @Path("device/stats/{deviceId}/sensors/{sensorName}") @GET @Consumes("application/json") @Produces("application/json") diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmControllerServiceImpl.java b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmControllerServiceImpl.java index 60fb360d3..b776a3e63 100644 --- a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmControllerServiceImpl.java +++ b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmControllerServiceImpl.java @@ -28,6 +28,7 @@ import org.wso2.carbon.device.mgt.analytics.data.publisher.AnalyticsDataRecord; import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DeviceManagementAnalyticsException; import org.wso2.carbon.device.mgt.analytics.data.publisher.service.DeviceAnalyticsService; import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.extensions.feature.mgt.annotations.Feature; import org.wso2.carbon.device.mgt.iot.controlqueue.mqtt.MqttConfig; import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppConfig; import org.wso2.carbon.device.mgt.iot.exception.DeviceControllerException; @@ -47,6 +48,15 @@ import org.wso2.carbon.device.mgt.iot.virtualfirealarm.service.impl.util.scep.SC import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.constants.VirtualFireAlarmConstants; import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.Consumes; +import javax.ws.rs.FormParam; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +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.MediaType; import javax.ws.rs.core.Response; import java.io.InputStream; @@ -80,127 +90,10 @@ public class VirtualFireAlarmControllerServiceImpl implements VirtualFireAlarmCo // holds a mapping of the IP addresses to Device-IDs for HTTP communication private ConcurrentHashMap deviceToIpMap = new ConcurrentHashMap<>(); - private boolean waitForServerStartup() { - while (!IoTServerStartupListener.isServerReady()) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - return true; - } - } - return false; - } - - /** - * Fetches the `SecurityManager` specific to this VirtualFirealarm controller service. - * - * @return the 'SecurityManager' instance bound to the 'securityManager' variable of this service. - */ - @SuppressWarnings("Unused") - public SecurityManager getSecurityManager() { - return securityManager; - } - - /** - * Sets the `securityManager` variable of this VirtualFirealarm controller service. - * - * @param securityManager a 'SecurityManager' object that handles the encryption, decryption, signing and validation - * of incoming messages from VirtualFirealarm device-types. - */ - @SuppressWarnings("Unused") - public void setSecurityManager(SecurityManager securityManager) { - this.securityManager = securityManager; - securityManager.initVerificationManager(); - } - - /** - * Fetches the `VirtualFireAlarmXMPPConnector` specific to this VirtualFirealarm controller service. - * - * @return the 'VirtualFireAlarmXMPPConnector' instance bound to the 'virtualFireAlarmXMPPConnector' variable of - * this service. - */ - @SuppressWarnings("Unused") - public VirtualFireAlarmXMPPConnector getVirtualFireAlarmXMPPConnector() { - return virtualFireAlarmXMPPConnector; - } - - /** - * Sets the `virtualFireAlarmXMPPConnector` variable of this VirtualFirealarm controller service. - * - * @param virtualFireAlarmXMPPConnector a 'VirtualFireAlarmXMPPConnector' object that handles all XMPP related - * communications of any connected VirtualFirealarm device-type - */ - @SuppressWarnings("Unused") - public void setVirtualFireAlarmXMPPConnector( - final VirtualFireAlarmXMPPConnector virtualFireAlarmXMPPConnector) { - Runnable connector = new Runnable() { - public void run() { - if (waitForServerStartup()) { - return; - } - VirtualFireAlarmControllerServiceImpl.this.virtualFireAlarmXMPPConnector = virtualFireAlarmXMPPConnector; - - if (XmppConfig.getInstance().isEnabled()) { - Runnable xmppStarter = new Runnable() { - @Override - public void run() { - virtualFireAlarmXMPPConnector.initConnector(); - virtualFireAlarmXMPPConnector.connect(); - } - }; - - Thread xmppStarterThread = new Thread(xmppStarter); - xmppStarterThread.setDaemon(true); - xmppStarterThread.start(); - } else { - log.warn("XMPP disabled in 'devicemgt-config.xml'. Hence, VirtualFireAlarmXMPPConnector not started."); - } - } - }; - Thread connectorThread = new Thread(connector); - connectorThread.setDaemon(true); - connectorThread.start(); - } - - /** - * Fetches the `VirtualFireAlarmMQTTConnector` specific to this VirtualFirealarm controller service. - * - * @return the 'VirtualFireAlarmMQTTConnector' instance bound to the 'virtualFireAlarmMQTTConnector' variable of - * this service. - */ - @SuppressWarnings("Unused") - public VirtualFireAlarmMQTTConnector getVirtualFireAlarmMQTTConnector() { - return virtualFireAlarmMQTTConnector; - } - - /** - * Sets the `virtualFireAlarmMQTTConnector` variable of this VirtualFirealarm controller service. - * - * @param virtualFireAlarmMQTTConnector a 'VirtualFireAlarmMQTTConnector' object that handles all MQTT related - * communications of any connected VirtualFirealarm device-type - */ - @SuppressWarnings("Unused") - public void setVirtualFireAlarmMQTTConnector( - final VirtualFireAlarmMQTTConnector virtualFireAlarmMQTTConnector) { - Runnable connector = new Runnable() { - public void run() { - if (waitForServerStartup()) { - return; - } - VirtualFireAlarmControllerServiceImpl.this.virtualFireAlarmMQTTConnector = virtualFireAlarmMQTTConnector; - if (MqttConfig.getInstance().isEnabled()) { - virtualFireAlarmMQTTConnector.connect(); - } else { - log.warn("MQTT disabled in 'devicemgt-config.xml'. Hence, VirtualFireAlarmMQTTConnector not started."); - } - } - }; - Thread connectorThread = new Thread(connector); - connectorThread.setDaemon(true); - connectorThread.start(); - } - - public Response registerDeviceIP(String deviceId, String deviceIP, String devicePort, HttpServletRequest request) { + @POST + @Path("device/register/{deviceId}/{ip}/{port}") + public Response registerDeviceIP(@PathParam("deviceId") String deviceId, @PathParam("ip") String deviceIP, + @PathParam("port") String devicePort, @Context HttpServletRequest request) { String result; if (log.isDebugEnabled()) { log.debug("Got register call from IP: " + deviceIP + " for Device ID: " + deviceId); @@ -214,7 +107,10 @@ public class VirtualFireAlarmControllerServiceImpl implements VirtualFireAlarmCo return Response.ok().entity(result).build(); } - public Response switchBuzzer(String deviceId, String protocol, String state) { + @POST + @Path("device/{deviceId}/buzz") + public Response switchBuzzer(@PathParam("deviceId") String deviceId, @QueryParam("protocol") String protocol, + @FormParam("state") String state) { String switchToState = state.toUpperCase(); if (!switchToState.equals(VirtualFireAlarmConstants.STATE_ON) && !switchToState.equals( VirtualFireAlarmConstants.STATE_OFF)) { @@ -252,7 +148,12 @@ public class VirtualFireAlarmControllerServiceImpl implements VirtualFireAlarmCo } } - public Response requestTemperature(String deviceId, String protocol) { + @GET + @Path("device/{deviceId}/temperature") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response requestTemperature(@PathParam("deviceId") String deviceId, + @QueryParam("protocol") String protocol) { SensorRecord sensorRecord = null; String protocolString = protocol.toUpperCase(); if (log.isDebugEnabled()) { @@ -289,6 +190,9 @@ public class VirtualFireAlarmControllerServiceImpl implements VirtualFireAlarmCo } } + @POST + @Path("device/temperature") + @Consumes(MediaType.APPLICATION_JSON) public Response pushTemperatureData(final DeviceData dataMsg) { String deviceId = dataMsg.deviceId; String deviceIp = dataMsg.reply; @@ -312,7 +216,9 @@ public class VirtualFireAlarmControllerServiceImpl implements VirtualFireAlarmCo return Response.ok().build(); } - public Response scepRequest(String operation, String message) { + @GET + @Path("device/scep") + public Response scepRequest(@QueryParam("operation") String operation, @QueryParam("message") String message) { if (log.isDebugEnabled()) { log.debug("Invoking SCEP operation " + operation); } @@ -362,7 +268,6 @@ public class VirtualFireAlarmControllerServiceImpl implements VirtualFireAlarmCo if (log.isDebugEnabled()) { log.debug("Invoking GetCACaps"); } - try { CertificateManagementService certificateManagementService = VirtualFireAlarmServiceUtils. getCertificateManagementService(); @@ -373,16 +278,15 @@ public class VirtualFireAlarmControllerServiceImpl implements VirtualFireAlarmCo } catch (VirtualFireAlarmException e) { log.error("Error occurred while enrolling the device", e); } - } else { log.error("Invalid SCEP operation " + operation); } - return Response.serverError().build(); - } - public Response scepRequestPost(String operation, InputStream inputStream) { + @POST + @Path("device/scep") + public Response scepRequestPost(@QueryParam("operation") String operation, InputStream inputStream) { if (log.isDebugEnabled()) { log.debug("Invoking SCEP operation " + operation); } @@ -404,7 +308,14 @@ public class VirtualFireAlarmControllerServiceImpl implements VirtualFireAlarmCo return Response.serverError().build(); } - public Response getVirtualFirealarmStats(String deviceId, String sensor, String user, long from, long to) { + @Path("device/stats/{deviceId}/sensors/{sensorName}") + @GET + @Consumes("application/json") + @Produces("application/json") + public Response getVirtualFirealarmStats(@PathParam("deviceId") String deviceId, + @PathParam("sensorName") String sensor, + @QueryParam("username") String user, @QueryParam("from") long from, + @QueryParam("to") long to) { try { String fromDate = String.valueOf(from); String toDate = String.valueOf(to); @@ -448,6 +359,126 @@ public class VirtualFireAlarmControllerServiceImpl implements VirtualFireAlarmCo return Response.status(Response.Status.BAD_REQUEST).build(); } + private boolean waitForServerStartup() { + while (!IoTServerStartupListener.isServerReady()) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + return true; + } + } + return false; + } + + /** + * Fetches the `SecurityManager` specific to this VirtualFirealarm controller service. + * + * @return the 'SecurityManager' instance bound to the 'securityManager' variable of this service. + */ + @SuppressWarnings("Unused") + public SecurityManager getSecurityManager() { + return securityManager; + } + + /** + * Sets the `securityManager` variable of this VirtualFirealarm controller service. + * + * @param securityManager a 'SecurityManager' object that handles the encryption, decryption, signing and validation + * of incoming messages from VirtualFirealarm device-types. + */ + @SuppressWarnings("Unused") + public void setSecurityManager(SecurityManager securityManager) { + this.securityManager = securityManager; + securityManager.initVerificationManager(); + } + + /** + * Fetches the `VirtualFireAlarmXMPPConnector` specific to this VirtualFirealarm controller service. + * + * @return the 'VirtualFireAlarmXMPPConnector' instance bound to the 'virtualFireAlarmXMPPConnector' variable of + * this service. + */ + @SuppressWarnings("Unused") + public VirtualFireAlarmXMPPConnector getVirtualFireAlarmXMPPConnector() { + return virtualFireAlarmXMPPConnector; + } + + /** + * Sets the `virtualFireAlarmXMPPConnector` variable of this VirtualFirealarm controller service. + * + * @param virtualFireAlarmXMPPConnector a 'VirtualFireAlarmXMPPConnector' object that handles all XMPP related + * communications of any connected VirtualFirealarm device-type + */ + @SuppressWarnings("Unused") + public void setVirtualFireAlarmXMPPConnector( + final VirtualFireAlarmXMPPConnector virtualFireAlarmXMPPConnector) { + Runnable connector = new Runnable() { + public void run() { + if (waitForServerStartup()) { + return; + } + VirtualFireAlarmControllerServiceImpl.this.virtualFireAlarmXMPPConnector = virtualFireAlarmXMPPConnector; + + if (XmppConfig.getInstance().isEnabled()) { + Runnable xmppStarter = new Runnable() { + @Override + public void run() { + virtualFireAlarmXMPPConnector.initConnector(); + virtualFireAlarmXMPPConnector.connect(); + } + }; + + Thread xmppStarterThread = new Thread(xmppStarter); + xmppStarterThread.setDaemon(true); + xmppStarterThread.start(); + } else { + log.warn("XMPP disabled in 'devicemgt-config.xml'. Hence, VirtualFireAlarmXMPPConnector not started."); + } + } + }; + Thread connectorThread = new Thread(connector); + connectorThread.setDaemon(true); + connectorThread.start(); + } + + /** + * Fetches the `VirtualFireAlarmMQTTConnector` specific to this VirtualFirealarm controller service. + * + * @return the 'VirtualFireAlarmMQTTConnector' instance bound to the 'virtualFireAlarmMQTTConnector' variable of + * this service. + */ + @SuppressWarnings("Unused") + public VirtualFireAlarmMQTTConnector getVirtualFireAlarmMQTTConnector() { + return virtualFireAlarmMQTTConnector; + } + + /** + * Sets the `virtualFireAlarmMQTTConnector` variable of this VirtualFirealarm controller service. + * + * @param virtualFireAlarmMQTTConnector a 'VirtualFireAlarmMQTTConnector' object that handles all MQTT related + * communications of any connected VirtualFirealarm device-type + */ + @SuppressWarnings("Unused") + public void setVirtualFireAlarmMQTTConnector( + final VirtualFireAlarmMQTTConnector virtualFireAlarmMQTTConnector) { + Runnable connector = new Runnable() { + public void run() { + if (waitForServerStartup()) { + return; + } + VirtualFireAlarmControllerServiceImpl.this.virtualFireAlarmMQTTConnector = virtualFireAlarmMQTTConnector; + if (MqttConfig.getInstance().isEnabled()) { + virtualFireAlarmMQTTConnector.connect(); + } else { + log.warn("MQTT disabled in 'devicemgt-config.xml'. Hence, VirtualFireAlarmMQTTConnector not started."); + } + } + }; + Thread connectorThread = new Thread(connector); + connectorThread.setDaemon(true); + connectorThread.start(); + } + /** * get the event table from the sensor name. */ diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmManagerService.java b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmManagerService.java index 8057ec45d..1d48b0764 100644 --- a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmManagerService.java +++ b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmManagerService.java @@ -32,20 +32,21 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +@Path("enrollment") @API(name = "virtual_firealarm_mgt", version = "1.0.0", context = "/virtual_firealarm_mgt", tags = "virtual_firealarm") @DeviceType(value = "virtual_firealarm") public interface VirtualFireAlarmManagerService { - @Path("{device_id}") + @Path("devices/{device_id}") @DELETE Response removeDevice(@PathParam("device_id") String deviceId); - @Path("{device_id}") + @Path("devices/{device_id}") @PUT Response updateDevice(@PathParam("device_id") String deviceId, @QueryParam("name") String name); - @Path("{device_id}") + @Path("devices/{device_id}") @GET @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @@ -57,13 +58,13 @@ public interface VirtualFireAlarmManagerService { @Produces(MediaType.APPLICATION_JSON) Response getFirealarmDevices(); - @Path("download") + @Path("devices/download") @GET @Produces(MediaType.APPLICATION_JSON) Response downloadSketch(@QueryParam("deviceName") String deviceName, @QueryParam("sketchType") String sketchType); - @Path("generate_link") + @Path("devices/generate_link") @GET Response generateSketchLink(@QueryParam("deviceName") String deviceName, @QueryParam("sketchType") String sketchType); diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmManagerServiceImpl.java b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmManagerServiceImpl.java index f230dac1a..5656a83bd 100644 --- a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmManagerServiceImpl.java +++ b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmManagerServiceImpl.java @@ -41,6 +41,15 @@ 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; @@ -50,38 +59,15 @@ import java.util.Date; import java.util.List; import java.util.UUID; +@Path("enrollment") public class VirtualFireAlarmManagerServiceImpl implements VirtualFireAlarmManagerService { private static final String KEY_TYPE = "PRODUCTION"; private static ApiApplicationKey apiApplicationKey; - private boolean register(String deviceId, String name) { - try { - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(deviceId); - deviceIdentifier.setType(VirtualFireAlarmConstants.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); - enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD); - device.setName(name); - device.setType(VirtualFireAlarmConstants.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); @@ -98,7 +84,9 @@ public class VirtualFireAlarmManagerServiceImpl implements VirtualFireAlarmManag } } - 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); @@ -119,7 +107,11 @@ public class VirtualFireAlarmManagerServiceImpl implements VirtualFireAlarmManag } } - 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); @@ -131,6 +123,10 @@ public class VirtualFireAlarmManagerServiceImpl implements VirtualFireAlarmManag } } + @Path("devices") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) public Response getFirealarmDevices() { try { List userDevices = @@ -149,7 +145,11 @@ public class VirtualFireAlarmManagerServiceImpl implements VirtualFireAlarmManag } } - public Response downloadSketch(String deviceName, String sketchType) { + @Path("devices/download") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response downloadSketch(@QueryParam("deviceName") String deviceName, + @QueryParam("sketchType") String sketchType) { try { ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), deviceName, sketchType); Response.ResponseBuilder response = Response.ok(FileUtils.readFileToByteArray(zipFile.getZipFile())); @@ -170,12 +170,13 @@ public class VirtualFireAlarmManagerServiceImpl implements VirtualFireAlarmManag return Response.status(500).entity(ex.getMessage()).build(); } catch (UserStoreException ex) { return Response.status(500).entity(ex.getMessage()).build(); - } finally { - PrivilegedCarbonContext.endTenantFlow(); } } - public Response generateSketchLink(String deviceName, String sketchType) { + @Path("devices/generate_link") + @GET + public Response generateSketchLink(@QueryParam("deviceName") String deviceName, + @QueryParam("sketchType") String sketchType) { try { ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), deviceName, sketchType); Response.ResponseBuilder rb = Response.ok(zipFile.getDeviceId()); @@ -192,8 +193,32 @@ public class VirtualFireAlarmManagerServiceImpl implements VirtualFireAlarmManag return Response.status(500).entity(ex.getMessage()).build(); } catch (UserStoreException ex) { return Response.status(500).entity(ex.getMessage()).build(); - } finally { - PrivilegedCarbonContext.endTenantFlow(); + } + } + + private boolean register(String deviceId, String name) { + try { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(deviceId); + deviceIdentifier.setType(VirtualFireAlarmConstants.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); + enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD); + device.setName(name); + device.setType(VirtualFireAlarmConstants.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/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/cxf-servlet.xml index 6dd0282d3..62608adfb 100644 --- a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/cxf-servlet.xml +++ b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -23,7 +23,7 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> - + @@ -31,14 +31,6 @@ - - - - - - - - diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/web.xml b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/web.xml index 0689ffaf0..2f18393cf 100644 --- a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/web.xml +++ b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/web.xml @@ -7,59 +7,40 @@ WSO2 IoT Server WSO2 IoT Server - - CXFServlet - org.apache.cxf.transport.servlet.CXFServlet - 1 - - - - - CXFServlet - /* - - - - isAdminService - false - - - doAuthentication - false - - - - - managed-api-enabled - true - - - managed-api-owner - admin - + + CXFServlet + org.apache.cxf.transport.servlet.CXFServlet + 1 + + + CXFServlet + /* + - managed-api-context-template - /virtual_firealarm/{version} + isAdminService + false - managed-api-application - virtual_firealarm + doAuthentication + true + + + isSharedWithAllTenants + true + + + providerTenantDomain + carbon.super - - managed-api-isSecured - true - - - - - - - - - - - - + + + managed-api-enabled + true + + + managed-api-owner + admin + - + \ No newline at end of file