From 706002b4d578cb8787be768127e2164cb5223ee8 Mon Sep 17 00:00:00 2001 From: charithag Date: Thu, 10 Mar 2016 19:25:50 +0530 Subject: [PATCH 01/13] Fix for https://wso2.org/jira/browse/IOTS-77 --- .../coffeeking/manager/service/ConnectedCupManagerService.java | 1 - .../currentsensor/manager/api/CurrentSensorManagerService.java | 1 - .../doormanager/manager/api/DoorManagerManagerService.java | 1 - .../org/homeautomation/firealarm/manager/api/ManagerService.java | 1 - .../__rootArtifactId__/manager/api/ManagerService.java | 1 - 5 files changed, 5 deletions(-) diff --git a/modules/samples/connectedcup/component/manager/src/main/java/org/coffeeking/manager/service/ConnectedCupManagerService.java b/modules/samples/connectedcup/component/manager/src/main/java/org/coffeeking/manager/service/ConnectedCupManagerService.java index 932a0758..635f3834 100644 --- a/modules/samples/connectedcup/component/manager/src/main/java/org/coffeeking/manager/service/ConnectedCupManagerService.java +++ b/modules/samples/connectedcup/component/manager/src/main/java/org/coffeeking/manager/service/ConnectedCupManagerService.java @@ -88,7 +88,6 @@ public class ConnectedCupManagerService { 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(ConnectedCupConstants.DEVICE_TYPE); enrolmentInfo.setOwner(owner); diff --git a/modules/samples/currentsensor/component/manager/src/main/java/org/homeautomation/currentsensor/manager/api/CurrentSensorManagerService.java b/modules/samples/currentsensor/component/manager/src/main/java/org/homeautomation/currentsensor/manager/api/CurrentSensorManagerService.java index 28e4eee4..e919b0a1 100644 --- a/modules/samples/currentsensor/component/manager/src/main/java/org/homeautomation/currentsensor/manager/api/CurrentSensorManagerService.java +++ b/modules/samples/currentsensor/component/manager/src/main/java/org/homeautomation/currentsensor/manager/api/CurrentSensorManagerService.java @@ -78,7 +78,6 @@ public class CurrentSensorManagerService { 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(CurrentSensorConstants.DEVICE_TYPE); enrolmentInfo.setOwner(owner); diff --git a/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/DoorManagerManagerService.java b/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/DoorManagerManagerService.java index a6183dc3..87eed7b8 100644 --- a/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/DoorManagerManagerService.java +++ b/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/DoorManagerManagerService.java @@ -116,7 +116,6 @@ public class DoorManagerManagerService { 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(DoorManagerConstants.DEVICE_TYPE); enrolmentInfo.setOwner(owner); diff --git a/modules/samples/firealarm/component/manager/src/main/java/org/homeautomation/firealarm/manager/api/ManagerService.java b/modules/samples/firealarm/component/manager/src/main/java/org/homeautomation/firealarm/manager/api/ManagerService.java index 9c4cc572..fd69af6e 100644 --- a/modules/samples/firealarm/component/manager/src/main/java/org/homeautomation/firealarm/manager/api/ManagerService.java +++ b/modules/samples/firealarm/component/manager/src/main/java/org/homeautomation/firealarm/manager/api/ManagerService.java @@ -106,7 +106,6 @@ public class ManagerService { 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(DeviceTypeConstants.DEVICE_TYPE); enrolmentInfo.setOwner(owner); diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/ManagerService.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/ManagerService.java index 1515cd4f..e6853bb6 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/ManagerService.java +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/ManagerService.java @@ -80,7 +80,6 @@ public class ManagerService { 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(DeviceTypeConstants.DEVICE_TYPE); enrolmentInfo.setOwner(owner); From 4f6ab8f6f61fcf1bc5fec9e824de4222b2abf7be Mon Sep 17 00:00:00 2001 From: GPrathap Date: Sun, 13 Mar 2016 21:06:27 +0530 Subject: [PATCH 02/13] changed group id cdmf.devicetype into org.wso2.cdmf.devicetype --- modules/tools/cdmf-devicetype-archetype/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tools/cdmf-devicetype-archetype/pom.xml b/modules/tools/cdmf-devicetype-archetype/pom.xml index 4f4cbfb8..ccef2c78 100644 --- a/modules/tools/cdmf-devicetype-archetype/pom.xml +++ b/modules/tools/cdmf-devicetype-archetype/pom.xml @@ -20,12 +20,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> org.wso2.iot - wso2cdmf-tools + wso2iot-parent 1.0.0-SNAPSHOT ../pom.xml 4.0.0 - cdmf.devicetype + org.wso2.cdmf.devicetype cdmf-devicetype-archetype 1.0.0-SNAPSHOT WSO2 CDMF Device Type Archetype From 70fcea507d8579ab35bfad006a1aecffa01ae62f Mon Sep 17 00:00:00 2001 From: GPrathap Date: Sun, 13 Mar 2016 21:27:28 +0530 Subject: [PATCH 03/13] changed source code according to new API changes --- .../META-INF/maven/archetype-metadata.xml | 1 + .../component/analytics/pom.xml | 5 +- .../component/controller/pom.xml | 49 ++--- .../controller/api/util/ServiceUtils.java | 14 +- .../src/main/webapp/WEB-INF/cxf-servlet.xml | 5 +- .../src/main/webapp/WEB-INF/web.xml | 2 + .../manager/api/ManagerService.java | 170 ++++++++++++------ .../manager/api/util/APIUtil.java | 67 +++++++ .../manager/api/util/ResponsePayload.java | 108 +++++++++++ .../src/main/webapp/META-INF/permissions.xml | 73 ++++++++ .../manager/src/main/webapp/WEB-INF/web.xml | 6 +- .../component/plugin/pom.xml | 53 +++--- .../exception/DeviceTypePluginException.java | 56 ++++++ .../plugin/impl/DeviceTypeManager.java | 71 +++----- .../plugin/impl/DeviceTypeManagerService.java | 16 +- .../plugin/impl/dao/DeviceTypeDAO.java | 34 ++-- .../impl/dao/impl/DeviceTypeDAOImpl.java | 128 ++++++------- .../plugin/impl/dao/util/DeviceTypeUtils.java | 86 +++++++++ .../plugin/impl/util/DevicetypeUtils.java | 38 ---- .../plugin/internal/ServiceComponent.java | 21 +-- .../component/ui/src/assembly/src.xml | 1 + .../device-view.hbs | 11 +- .../public/js/download.js | 63 ++++--- .../type-view.hbs | 38 ++-- 24 files changed, 754 insertions(+), 362 deletions(-) create mode 100644 modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/util/APIUtil.java create mode 100644 modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/util/ResponsePayload.java create mode 100644 modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/webapp/META-INF/permissions.xml create mode 100644 modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/exception/DeviceTypePluginException.java create mode 100644 modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/util/DeviceTypeUtils.java delete mode 100644 modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/util/DevicetypeUtils.java diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/modules/tools/cdmf-devicetype-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml index d2cff1cb..1c326478 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -1,3 +1,4 @@ + - + + + ${groupId} @@ -24,10 +27,10 @@ ../pom.xml 4.0.0 - ${artifactId} + ${project-base-package}.controller ${version} war - ${artifactId} + ${project-base-package}.controller http://wso2.com @@ -37,15 +40,15 @@ ${maven-compiler-plugin.version} UTF-8 - ${wso2.maven.compiler.source} - ${wso2.maven.compiler.target} + ${maven.compiler.source} + ${maven.compiler.target} maven-war-plugin ${maven-war-plugin.version} - ${artifactId} + ${project-base-package}.controller diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/java/__groupId__/__rootArtifactId__/controller/api/util/ServiceUtils.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/java/__groupId__/__rootArtifactId__/controller/api/util/ServiceUtils.java index 391d06a1..89316b94 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/java/__groupId__/__rootArtifactId__/controller/api/util/ServiceUtils.java +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/java/__groupId__/__rootArtifactId__/controller/api/util/ServiceUtils.java @@ -1,4 +1,3 @@ -package ${groupId}.${rootArtifactId}.controller.api.util; /* * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * @@ -16,6 +15,9 @@ package ${groupId}.${rootArtifactId}.controller.api.util; * specific language governing permissions and limitations * under the License. */ + +package ${groupId}.${rootArtifactId}.controller.api.util; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import ${groupId}.${rootArtifactId}.plugin.constants.DeviceTypeConstants; @@ -25,14 +27,11 @@ import org.wso2.carbon.device.mgt.analytics.service.DeviceAnalyticsService; public class ServiceUtils { private static final Log log = LogFactory.getLog(ServiceUtils.class); - - //TODO; replace this tenant domain - private static final String SUPER_TENANT = "carbon.super"; private static final String SENSOR_STREAM_DEFINITION = "org.wso2.iot.devices.${nameOfTheSensor}"; private static final String SENSOR_STREAM_VERSION = "1.0.0"; /** - * sensor data are published to DAS + * Sensor data are published to DAS * @param owner name of device owner * @param deviceId unique identifier of the device * @param sensorValue current value of sensor which is set at agent side @@ -41,7 +40,10 @@ public class ServiceUtils { public static boolean publishToDASSensorValue(String owner, String deviceId, float sensorValue) { PrivilegedCarbonContext.startTenantFlow(); PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - ctx.setTenantDomain(SUPER_TENANT, true); + ctx.setUsername(owner); + if (ctx.getTenantDomain(true) == null) { + ctx.setTenantDomain("carbon.super", true); + } DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService( DeviceAnalyticsService.class, null); Object metdaData[] = {owner, DeviceTypeConstants.DEVICE_TYPE, deviceId, System.currentTimeMillis()}; diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/webapp/WEB-INF/cxf-servlet.xml b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/webapp/WEB-INF/cxf-servlet.xml index b9b31e8c..809e5d85 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/webapp/WEB-INF/cxf-servlet.xml +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -1,5 +1,4 @@ - - diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/webapp/WEB-INF/web.xml b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/webapp/WEB-INF/web.xml index 82d02670..b62b12ea 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/webapp/WEB-INF/web.xml +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/controller/src/main/webapp/WEB-INF/web.xml @@ -1,4 +1,5 @@ + + properties = new ArrayList<>(); + Device.Property accessTokenProperty = new Device.Property(); + accessTokenProperty.setName("accessToken"); + accessTokenProperty.setValue(accessToken); + Device.Property refreshTokenProperty = new Device.Property(); + refreshTokenProperty.setName("refreshToken"); + refreshTokenProperty.setValue(refreshToken); + properties.add(accessTokenProperty); + properties.add(refreshTokenProperty); + device.setProperties(properties); + + boolean added = APIUtil.getDeviceManagementService().enrollDevice(device); if (added) { response.setStatus(Response.Status.OK.getStatusCode()); } else { @@ -93,27 +123,30 @@ public class ManagerService { return added; } catch (DeviceManagementException e) { response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); + log.error(e.getErrorMessage(), e); + return false; + } catch (AccessTokenException e) { + response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); + log.error("Unable to obtain access token", e); return false; - } finally { - deviceManagement.endTenantFlow(); } } /** * Remove installed device + * * @param deviceId unique identifier for device - * @param response + * @param response to request */ @Path("manager/device/remove/{device_id}") @DELETE public void removeDevice(@PathParam("device_id") String deviceId, @Context HttpServletResponse response) { - DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(deviceId); deviceIdentifier.setType(DeviceTypeConstants.DEVICE_TYPE); try { - boolean removed = deviceManagement.getDeviceManagementService().disenrollDevice( + boolean removed = APIUtil.getDeviceManagementService().disenrollDevice( deviceIdentifier); if (removed) { response.setStatus(Response.Status.OK.getStatusCode()); @@ -122,33 +155,32 @@ public class ManagerService { } } catch (DeviceManagementException e) { response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - } finally { - deviceManagement.endTenantFlow(); } } /** * Update device name + * * @param deviceId unique identifier for device - * @param name new name of the device - * @param response - * @return + * @param name new name of the device + * @param response to request + * @return update status */ @Path("manager/device/update/{device_id}") @POST - public boolean updateDevice(@PathParam("device_id") String deviceId, @QueryParam("name") String name, + public boolean updateDevice(@PathParam("device_id") String deviceId, + @QueryParam("name") String name, @Context HttpServletResponse response) { - DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(deviceId); deviceIdentifier.setType(DeviceTypeConstants.DEVICE_TYPE); try { - Device device = deviceManagement.getDeviceManagementService().getDevice(deviceIdentifier); + Device device = APIUtil.getDeviceManagementService().getDevice(deviceIdentifier); device.setDeviceIdentifier(deviceId); device.getEnrolmentInfo().setDateOfLastUpdate(new Date().getTime()); device.setName(name); device.setType(DeviceTypeConstants.DEVICE_TYPE); - boolean updated = deviceManagement.getDeviceManagementService().modifyEnrollment(device); + boolean updated = APIUtil.getDeviceManagementService().modifyEnrollment(device); if (updated) { response.setStatus(Response.Status.OK.getStatusCode()); } else { @@ -158,49 +190,45 @@ public class ManagerService { } catch (DeviceManagementException e) { log.error(e.getErrorMessage()); return false; - } finally { - deviceManagement.endTenantFlow(); } } /** * Get device information + * * @param deviceId unique identifier for device - * @return + * @return device */ @Path("manager/device/{device_id}") @GET @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Device getDevice(@PathParam("device_id") String deviceId) { - DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(deviceId); deviceIdentifier.setType(DeviceTypeConstants.DEVICE_TYPE); try { - return deviceManagement.getDeviceManagementService().getDevice(deviceIdentifier); + return APIUtil.getDeviceManagementService().getDevice(deviceIdentifier); } catch (DeviceManagementException ex) { log.error("Error occurred while retrieving device with Id " + deviceId + "\n" + ex); return null; - } finally { - deviceManagement.endTenantFlow(); } } /** * This will download the agent for given device type - * @param owner owner of the device + * * @param deviceName name of the device which is to be created * @param sketchType name of sketch type - * @return + * @return agent archive */ @Path("manager/device/{sketch_type}/download") @GET @Produces(MediaType.APPLICATION_JSON) - public Response downloadSketch(@QueryParam("owner") String owner, @QueryParam("deviceName") String deviceName, + public Response downloadSketch(@QueryParam("deviceName") String deviceName, @PathParam("sketch_type") String sketchType) { try { - ZipArchive zipFile = createDownloadFile(owner, deviceName, sketchType); + ZipArchive zipFile = createDownloadFile(APIUtil.getAuthenticatedUser(), deviceName, sketchType); Response.ResponseBuilder response = Response.ok(FileUtils.readFileToByteArray(zipFile.getZipFile())); response.type("application/zip"); response.header("Content-Disposition", "attachment; filename=\"" + zipFile.getFileName() + "\""); @@ -218,12 +246,47 @@ public class ManagerService { } } + /** + * This will give link to generated agent + * + * @param deviceName name of the device which is to be created + * @param sketchType name of sketch type + * @return link to generated agent + */ + @Path("manager/device/{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); + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("Sending Requested sketch by type: " + sketchType + + " and id: " + zipFile.getDeviceId() + "."); + responsePayload.setResponseContent(zipFile.getDeviceId()); + return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + } catch (IllegalArgumentException ex) { + return Response.status(HttpStatus.SC_BAD_REQUEST).entity(ex.getMessage()).build(); + } catch (DeviceManagementException ex) { + log.error("Error occurred while creating device with name " + deviceName + "\n", ex); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(ex.getMessage()).build(); + } catch (AccessTokenException ex) { + log.error(ex.getMessage(), ex); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(ex.getMessage()).build(); + } catch (DeviceControllerException ex) { + log.error(ex.getMessage(), ex); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(ex.getMessage()).build(); + } + } + /** * Make zip file which include all the agent source codes and configuration file - * @param owner owner of the device + * + * @param owner owner of the device * @param deviceName name of device * @param sketchType name of sketch type - * @return + * @return zip archive file * @throws DeviceManagementException * @throws AccessTokenException * @throws DeviceControllerException @@ -234,7 +297,7 @@ public class ManagerService { throw new IllegalArgumentException("Error on createDownloadFile() Owner is null!"); } //create new device id - String deviceId = shortUUID(); + String deviceId = APIUtil.shortUUID(); KeyGenerationUtil.createApplicationKeys(DeviceTypeConstants.DEVICE_TYPE); TokenClient accessTokenClient = new TokenClient(DeviceTypeConstants.DEVICE_TYPE); AccessTokenInfo accessTokenInfo = accessTokenClient.getAccessToken(owner, deviceId); @@ -244,26 +307,15 @@ public class ManagerService { //adding registering data boolean status; //Register the device with CDMF - status = register(deviceId, deviceName, owner); + status = register(deviceId, deviceName); if (!status) { String msg = "Error occurred while registering the device with " + "id: " + deviceId + " owner:" + owner; throw new DeviceManagementException(msg); } ZipUtil ziputil = new ZipUtil(); - ZipArchive zipFile = ziputil.createZipFile(owner, SUPER_TENANT, sketchType, deviceId, deviceName, accessToken, - refreshToken); + ZipArchive zipFile = ziputil.createZipFile(owner, APIUtil.getTenantDomainOfUser(), sketchType, deviceId, + deviceName, accessToken, refreshToken); zipFile.setDeviceId(deviceId); return zipFile; } - - /** - * Generate UUID - * @return - */ - private static String shortUUID() { - UUID uuid = UUID.randomUUID(); - long l = ByteBuffer.wrap(uuid.toString().getBytes(StandardCharsets.UTF_8)).getLong(); - return Long.toString(l, Character.MAX_RADIX); - } - } diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/util/APIUtil.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/util/APIUtil.java new file mode 100644 index 00000000..76b758fa --- /dev/null +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/util/APIUtil.java @@ -0,0 +1,67 @@ +/* +* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +* +* WSO2 Inc. licenses this file to you under the Apache License, +* Version 2.0 (the "License"); you may not use this file except +* in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +package ${groupId}.${rootArtifactId}.manager.api.util; + +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; +import java.util.UUID; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; + +/** + * This class provides utility functions used by REST-API. + */ +public class APIUtil { + + public static String getAuthenticatedUser() { + PrivilegedCarbonContext threadLocalCarbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + String username = threadLocalCarbonContext.getUsername(); + String tenantDomain = threadLocalCarbonContext.getTenantDomain(); + if (username.endsWith(tenantDomain)) { + return username.substring(0, username.lastIndexOf("@")); + } + return username; + } + + public static String getTenantDomainOfUser() { + PrivilegedCarbonContext threadLocalCarbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + return threadLocalCarbonContext.getTenantDomain(); + } + + public static DeviceManagementProviderService getDeviceManagementService() { + PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + DeviceManagementProviderService deviceManagementProviderService = + (DeviceManagementProviderService) ctx.getOSGiService(DeviceManagementProviderService.class, null); + if (deviceManagementProviderService == null) { + String msg = "Device Management service has not initialized."; + throw new IllegalStateException(msg); + } + return deviceManagementProviderService; + } + + /** + * Generate UUID + * @return + */ + public static String shortUUID() { + UUID uuid = UUID.randomUUID(); + long l = ByteBuffer.wrap(uuid.toString().getBytes(StandardCharsets.UTF_8)).getLong(); + return Long.toString(l, Character.MAX_RADIX); + } +} diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/util/ResponsePayload.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/util/ResponsePayload.java new file mode 100644 index 00000000..221ea08f --- /dev/null +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/java/__groupId__/__rootArtifactId__/manager/api/util/ResponsePayload.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package ${groupId}.${rootArtifactId}.manager.api.util; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class ResponsePayload { + + private int statusCode; + private String messageFromServer; + private Object responseContent; + + public static ResponsePayloadBuilder statusCode(int statusCode) { + ResponsePayload message = new ResponsePayload(); + return message.getBuilder().statusCode(statusCode); + } + + public static ResponsePayloadBuilder messageFromServer( + String messageFromServer) { + ResponsePayload message = new ResponsePayload(); + return message.getBuilder().messageFromServer(messageFromServer); + } + + public static ResponsePayloadBuilder responseContent(String responseContent) { + ResponsePayload message = new ResponsePayload(); + return message.getBuilder().responseContent(responseContent); + } + + @XmlElement + public int getStatusCode() { + return statusCode; + } + + public void setStatusCode(int statusCode) { + this.statusCode = statusCode; + } + + @XmlElement + public String getMessageFromServer() { + return messageFromServer; + } + + public void setMessageFromServer(String messageFromServer) { + this.messageFromServer = messageFromServer; + } + + @XmlElement + public Object getResponseContent() { + return responseContent; + } + + public void setResponseContent(Object responseContent) { + this.responseContent = responseContent; + } + + private ResponsePayloadBuilder getBuilder() { + return new ResponsePayloadBuilder(); + } + + public class ResponsePayloadBuilder { + + private int statusCode; + private String messageFromServer; + private Object responseContent; + + public ResponsePayloadBuilder statusCode(int statusCode) { + this.statusCode = statusCode; + return this; + } + + public ResponsePayloadBuilder messageFromServer(String messageFromServer) { + this.messageFromServer = messageFromServer; + return this; + } + + public ResponsePayloadBuilder responseContent(String responseContent) { + this.responseContent = responseContent; + return this; + } + + public ResponsePayload build() { + ResponsePayload payload = new ResponsePayload(); + payload.setStatusCode(statusCode); + payload.setMessageFromServer(messageFromServer); + payload.setResponseContent(responseContent); + return payload; + } + } + +} diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/webapp/META-INF/permissions.xml b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/webapp/META-INF/permissions.xml new file mode 100644 index 00000000..f7ba3b39 --- /dev/null +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/webapp/META-INF/permissions.xml @@ -0,0 +1,73 @@ + + + + + + + + + + Get device + /device-mgt/user/devices/list + /manager/device/* + GET + emm_admin,emm_user + + + Add device + /device-mgt/user/devices/add + /manager/device/register + PUT + emm_admin,emm_user + + + Download device + /device-mgt/user/devices/add + /manager/device/${deviceType}/download + GET + emm_admin,emm_user + + + Generate link to download + /device-mgt/user/devices/add + /manager/device/${deviceType}/generate_link + GET + emm_admin,emm_user + + + Update device + /device-mgt/user/devices/update + /manager/device/update/* + POST + emm_admin,emm_user + + + Remove device + /device-mgt/user/devices/remove + /manager/device/remove/* + DELETE + emm_admin,emm_user + + \ No newline at end of file diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/webapp/WEB-INF/web.xml b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/webapp/WEB-INF/web.xml index 1eb2df06..2b8745c0 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/webapp/WEB-INF/web.xml +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/manager/src/main/webapp/WEB-INF/web.xml @@ -1,4 +1,5 @@ + + - Sample-Webapp-Manager + ${deviceType}-Webapp-Manager JAX-WS/JAX-RS Endpoint JAX-WS/JAX-RS Servlet @@ -40,7 +42,7 @@ doAuthentication - false + true diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/pom.xml b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/pom.xml index 145a5dd2..aacd1e22 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/pom.xml +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/pom.xml @@ -1,21 +1,24 @@ - - + + + ${groupId} @@ -25,9 +28,9 @@ 4.0.0 ${version} - ${artifactId} + ${project-base-package}.plugin bundle - ${artifactId} + ${project-base-package}.plugin http://wso2.org @@ -41,8 +44,8 @@ ${maven-compiler-plugin.version} UTF-8 - ${wso2.maven.compiler.source} - ${wso2.maven.compiler.target} + ${maven.compiler.source} + ${maven.compiler.target} @@ -52,8 +55,8 @@ true - ${artifactId} - ${artifactId} + ${project-base-package}.plugin + ${project-base-package}.plugin ${version} IoT Server Impl Bundle ${project-base-package}.plugin.internal @@ -70,7 +73,7 @@ org.wso2.carbon.device.mgt.common.*, org.wso2.carbon.context.*, org.wso2.carbon.ndatasource.core, - org.wso2.carbon.device.mgt.iot.*, + org.wso2.carbon.device.mgt.iot.* !${project-base-package}.plugin.internal, diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/exception/DeviceTypePluginException.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/exception/DeviceTypePluginException.java new file mode 100644 index 00000000..dbccaf06 --- /dev/null +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/exception/DeviceTypePluginException.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package ${groupId}.${rootArtifactId}.plugin.exception; + +public class DeviceTypePluginException extends Exception { + + private String errorMessage; + + public DeviceTypePluginException(String msg, Exception nestedEx) { + super(msg, nestedEx); + setErrorMessage(msg); + } + + public DeviceTypePluginException(String message, Throwable cause) { + super(message, cause); + setErrorMessage(message); + } + + public DeviceTypePluginException(String msg) { + super(msg); + setErrorMessage(msg); + } + + public DeviceTypePluginException() { + super(); + } + + public DeviceTypePluginException(Throwable cause) { + super(cause); + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + +} \ No newline at end of file diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/DeviceTypeManager.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/DeviceTypeManager.java index ea68ae25..eb591f0c 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/DeviceTypeManager.java +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/DeviceTypeManager.java @@ -18,18 +18,20 @@ package ${groupId}.${rootArtifactId}.plugin.impl; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import ${groupId}.${rootArtifactId}.plugin.impl.dao.DeviceTypeDAO; +import ${groupId}.${rootArtifactId}.plugin.exception.DeviceTypePluginException; import org.wso2.carbon.device.mgt.common.*; +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.DeviceManager; +import org.wso2.carbon.device.mgt.common.EnrolmentInfo; +import org.wso2.carbon.device.mgt.common.FeatureManager; import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration; import org.wso2.carbon.device.mgt.common.license.mgt.License; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOFactoryInterface; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dto.IotDevice; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.util.IotDeviceManagementUtil; import java.util.ArrayList; import java.util.List; @@ -40,9 +42,10 @@ import java.util.List; */ public class DeviceTypeManager implements DeviceManager { - private static final IotDeviceManagementDAOFactoryInterface iotDeviceManagementDAOFactory = new DeviceTypeDAO(); private static final Log log = LogFactory.getLog(DeviceTypeManager.class); + private static final DeviceTypeDAO deviceTypeDAO = new DeviceTypeDAO(); + @Override public FeatureManager getFeatureManager() { return null; @@ -64,18 +67,17 @@ public class DeviceTypeManager implements DeviceManager { @Override public boolean enrollDevice(Device device) throws DeviceManagementException { boolean status; - IotDevice iotDevice = IotDeviceManagementUtil.convertToIotDevice(device); try { if (log.isDebugEnabled()) { log.debug("Enrolling a new ${rootArtifactId} device : " + device.getDeviceIdentifier()); } DeviceTypeDAO.beginTransaction(); - status = iotDeviceManagementDAOFactory.getIotDeviceDAO().addIotDevice(iotDevice); + status = deviceTypeDAO.getDeviceTypeDAO().addDevice(device); DeviceTypeDAO.commitTransaction(); - } catch (IotDeviceManagementDAOException e) { + } catch (DeviceTypePluginException e) { try { DeviceTypeDAO.rollbackTransaction(); - } catch (IotDeviceManagementDAOException iotDAOEx) { + } catch (DeviceTypePluginException iotDAOEx) { log.warn("Error occurred while roll back the device enrol transaction :" + device.toString(), iotDAOEx); } String msg = "Error while enrolling the ${rootArtifactId} device : " + device.getDeviceIdentifier(); @@ -88,19 +90,17 @@ public class DeviceTypeManager implements DeviceManager { @Override public boolean modifyEnrollment(Device device) throws DeviceManagementException { boolean status; - IotDevice iotDevice = IotDeviceManagementUtil.convertToIotDevice(device); try { if (log.isDebugEnabled()) { log.debug("Modifying the ${rootArtifactId} device enrollment data"); } DeviceTypeDAO.beginTransaction(); - status = iotDeviceManagementDAOFactory.getIotDeviceDAO() - .updateIotDevice(iotDevice); + status = deviceTypeDAO.getDeviceTypeDAO().updateDevice(device); DeviceTypeDAO.commitTransaction(); - } catch (IotDeviceManagementDAOException e) { + } catch (DeviceTypePluginException e) { try { DeviceTypeDAO.rollbackTransaction(); - } catch (IotDeviceManagementDAOException iotDAOEx) { + } catch (DeviceTypePluginException iotDAOEx) { String msg = "Error occurred while roll back the update device transaction :" + device.toString(); log.warn(msg, iotDAOEx); } @@ -120,13 +120,12 @@ public class DeviceTypeManager implements DeviceManager { log.debug("Dis-enrolling ${rootArtifactId} device : " + deviceId); } DeviceTypeDAO.beginTransaction(); - status = iotDeviceManagementDAOFactory.getIotDeviceDAO() - .deleteIotDevice(deviceId.getId()); + status = deviceTypeDAO.getDeviceTypeDAO().deleteDevice(deviceId.getId()); DeviceTypeDAO.commitTransaction(); - } catch (IotDeviceManagementDAOException e) { + } catch (DeviceTypePluginException e) { try { DeviceTypeDAO.rollbackTransaction(); - } catch (IotDeviceManagementDAOException iotDAOEx) { + } catch (DeviceTypePluginException iotDAOEx) { String msg = "Error occurred while roll back the device dis enrol transaction :" + deviceId.toString(); log.warn(msg, iotDAOEx); } @@ -144,13 +143,12 @@ public class DeviceTypeManager implements DeviceManager { if (log.isDebugEnabled()) { log.debug("Checking the enrollment of ${rootArtifactId} device : " + deviceId.getId()); } - IotDevice iotDevice = - iotDeviceManagementDAOFactory.getIotDeviceDAO().getIotDevice( - deviceId.getId()); + Device iotDevice = + deviceTypeDAO.getDeviceTypeDAO().getDevice(deviceId.getId()); if (iotDevice != null) { isEnrolled = true; } - } catch (IotDeviceManagementDAOException e) { + } catch (DeviceTypePluginException e) { String msg = "Error while checking the enrollment status of ${rootArtifactId} device : " + deviceId.getId(); log.error(msg, e); @@ -177,10 +175,8 @@ public class DeviceTypeManager implements DeviceManager { if (log.isDebugEnabled()) { log.debug("Getting the details of ${rootArtifactId} device : " + deviceId.getId()); } - IotDevice iotDevice = iotDeviceManagementDAOFactory.getIotDeviceDAO(). - getIotDevice(deviceId.getId()); - device = IotDeviceManagementUtil.convertToDevice(iotDevice); - } catch (IotDeviceManagementDAOException e) { + device = deviceTypeDAO.getDeviceTypeDAO().getDevice(deviceId.getId()); + } catch (DeviceTypePluginException e) { String msg = "Error while fetching the ${rootArtifactId} device : " + deviceId.getId(); log.error(msg, e); throw new DeviceManagementException(msg, e); @@ -222,19 +218,17 @@ public class DeviceTypeManager implements DeviceManager { @Override public boolean updateDeviceInfo(DeviceIdentifier deviceIdentifier, Device device) throws DeviceManagementException { boolean status; - IotDevice iotDevice = IotDeviceManagementUtil.convertToIotDevice(device); try { if (log.isDebugEnabled()) { log.debug("updating the details of ${rootArtifactId} device : " + deviceIdentifier); } DeviceTypeDAO.beginTransaction(); - status = iotDeviceManagementDAOFactory.getIotDeviceDAO() - .updateIotDevice(iotDevice); + status = deviceTypeDAO.getDeviceTypeDAO().updateDevice(device); DeviceTypeDAO.commitTransaction(); - } catch (IotDeviceManagementDAOException e) { + } catch (DeviceTypePluginException e) { try { DeviceTypeDAO.rollbackTransaction(); - } catch (IotDeviceManagementDAOException iotDAOEx) { + } catch (DeviceTypePluginException iotDAOEx) { String msg = "Error occurred while roll back the update device info transaction :" + device.toString(); log.warn(msg, iotDAOEx); } @@ -248,20 +242,13 @@ public class DeviceTypeManager implements DeviceManager { @Override public List getAllDevices() throws DeviceManagementException { - List devices = null; + List devices; try { if (log.isDebugEnabled()) { log.debug("Fetching the details of all ${rootArtifactId} devices"); } - List iotDevices = - iotDeviceManagementDAOFactory.getIotDeviceDAO().getAllIotDevices(); - if (iotDevices != null) { - devices = new ArrayList(); - for (IotDevice iotDevice : iotDevices) { - devices.add(IotDeviceManagementUtil.convertToDevice(iotDevice)); - } - } - } catch (IotDeviceManagementDAOException e) { + devices = deviceTypeDAO.getDeviceTypeDAO().getAllDevices(); + } catch (DeviceTypePluginException e) { String msg = "Error while fetching all ${rootArtifactId} devices."; log.error(msg, e); throw new DeviceManagementException(msg, e); diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/DeviceTypeManagerService.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/DeviceTypeManagerService.java index 56e4ed4a..f325f8d9 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/DeviceTypeManagerService.java +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/DeviceTypeManagerService.java @@ -1,4 +1,3 @@ -package ${groupId}.${rootArtifactId}.plugin.impl; /* * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * @@ -16,6 +15,9 @@ package ${groupId}.${rootArtifactId}.plugin.impl; * specific language governing permissions and limitations * under the License. */ + +package ${groupId}.${rootArtifactId}.plugin.impl; + import ${groupId}.${rootArtifactId}.plugin.constants.DeviceTypeConstants; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceManagementException; @@ -53,7 +55,7 @@ public class DeviceTypeManagerService implements DeviceManagementService{ @Override public void init() throws DeviceManagementException { - deviceManager= new DeviceTypeManager(); + this.deviceManager = new DeviceTypeManager(); } @Override @@ -67,7 +69,7 @@ public class DeviceTypeManagerService implements DeviceManagementService{ } @Override - public void notifyOperationToDevices(Operation operation, List list) throws + public void notifyOperationToDevices(Operation operation, List deviceIds) throws DeviceManagementException { } @@ -90,17 +92,19 @@ public class DeviceTypeManagerService implements DeviceManagementService{ } @Override - public void installApplicationForDevices(Operation operation, List list) + public void installApplicationForDevices(Operation operation, List deviceIdentifiers) throws ApplicationManagementException { } @Override - public void installApplicationForUsers(Operation operation, List list) + public void installApplicationForUsers(Operation operation, List userNameList) throws ApplicationManagementException { + } @Override - public void installApplicationForUserRoles(Operation operation, List list) + public void installApplicationForUserRoles(Operation operation, List userRoleList) throws ApplicationManagementException { + } } diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/DeviceTypeDAO.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/DeviceTypeDAO.java index 2ad3c658..3c3e315f 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/DeviceTypeDAO.java +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/DeviceTypeDAO.java @@ -1,4 +1,3 @@ -package ${groupId}.${rootArtifactId}.plugin.impl.dao; /* * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * @@ -17,14 +16,13 @@ package ${groupId}.${rootArtifactId}.plugin.impl.dao; * under the License. */ +package ${groupId}.${rootArtifactId}.plugin.impl.dao; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import ${groupId}.${rootArtifactId}.plugin.constants.DeviceTypeConstants; import ${groupId}.${rootArtifactId}.plugin.impl.dao.impl.DeviceTypeDAOImpl; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceDAO; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOFactory; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOFactoryInterface; +import ${groupId}.${rootArtifactId}.plugin.exception.DeviceTypePluginException; import javax.naming.Context; @@ -34,19 +32,17 @@ import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; -public class DeviceTypeDAO extends IotDeviceManagementDAOFactory - implements IotDeviceManagementDAOFactoryInterface { +public class DeviceTypeDAO{ private static final Log log = LogFactory.getLog(DeviceTypeDAO.class); static DataSource dataSource; // package local variable - private static ThreadLocal currentConnection = new ThreadLocal(); + private static ThreadLocal currentConnection = new ThreadLocal<>(); public DeviceTypeDAO() { initDeviceTypeDAO(); } - @Override - public IotDeviceDAO getIotDeviceDAO() { + public DeviceTypeDAOImpl getDeviceTypeDAO() { return new DeviceTypeDAOImpl(); } @@ -60,29 +56,29 @@ public class DeviceTypeDAO extends IotDeviceManagementDAOFactory } } - public static void beginTransaction() throws IotDeviceManagementDAOException { + public static void beginTransaction() throws DeviceTypePluginException { try { Connection conn = dataSource.getConnection(); conn.setAutoCommit(false); currentConnection.set(conn); } catch (SQLException e) { - throw new IotDeviceManagementDAOException("Error occurred while retrieving datasource connection", e); + throw new DeviceTypePluginException("Error occurred while retrieving datasource connection", e); } } - public static Connection getConnection() throws IotDeviceManagementDAOException { + public static Connection getConnection() throws DeviceTypePluginException { if (currentConnection.get() == null) { try { currentConnection.set(dataSource.getConnection()); } catch (SQLException e) { - throw new IotDeviceManagementDAOException("Error occurred while retrieving data source connection", + throw new DeviceTypePluginException("Error occurred while retrieving data source connection", e); } } return currentConnection.get(); } - public static void commitTransaction() throws IotDeviceManagementDAOException { + public static void commitTransaction() throws DeviceTypePluginException { try { Connection conn = currentConnection.get(); if (conn != null) { @@ -94,13 +90,13 @@ public class DeviceTypeDAO extends IotDeviceManagementDAOFactory } } } catch (SQLException e) { - throw new IotDeviceManagementDAOException("Error occurred while committing the transaction", e); + throw new DeviceTypePluginException("Error occurred while committing the transaction", e); } finally { closeConnection(); } } - public static void closeConnection() throws IotDeviceManagementDAOException { + public static void closeConnection() throws DeviceTypePluginException { Connection con = currentConnection.get(); if(con != null){ @@ -113,7 +109,7 @@ public class DeviceTypeDAO extends IotDeviceManagementDAOFactory currentConnection.remove(); } - public static void rollbackTransaction() throws IotDeviceManagementDAOException { + public static void rollbackTransaction() throws DeviceTypePluginException { try { Connection conn = currentConnection.get(); if (conn != null) { @@ -125,7 +121,7 @@ public class DeviceTypeDAO extends IotDeviceManagementDAOFactory } } } catch (SQLException e) { - throw new IotDeviceManagementDAOException("Error occurred while rollback the transaction", e); + throw new DeviceTypePluginException("Error occurred while rollback the transaction", e); } finally { closeConnection(); } diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/impl/DeviceTypeDAOImpl.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/impl/DeviceTypeDAOImpl.java index 945b9a37..87adcd02 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/impl/DeviceTypeDAOImpl.java +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/impl/DeviceTypeDAOImpl.java @@ -21,11 +21,11 @@ package ${groupId}.${rootArtifactId}.plugin.impl.dao.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import ${groupId}.${rootArtifactId}.plugin.constants.DeviceTypeConstants; +import ${groupId}.${rootArtifactId}.plugin.exception.DeviceTypePluginException; import ${groupId}.${rootArtifactId}.plugin.impl.dao.DeviceTypeDAO; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceDAO; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.util.IotDeviceManagementDAOUtil; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dto.IotDevice; +import ${groupId}.${rootArtifactId}.plugin.impl.dao.util.DeviceTypeUtils; +import org.wso2.carbon.device.mgt.common.Device; + import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -38,175 +38,157 @@ import java.util.Map; /** * Implements IotDeviceDAO for ${deviceType} Devices. */ -public class DeviceTypeDAOImpl implements IotDeviceDAO { +public class DeviceTypeDAOImpl { private static final Log log = LogFactory.getLog(DeviceTypeDAOImpl.class); - @Override - public IotDevice getIotDevice(String iotDeviceId) throws IotDeviceManagementDAOException { + public Device getDevice(String deviceId) throws DeviceTypePluginException { Connection conn = null; PreparedStatement stmt = null; - IotDevice iotDevice = null; + Device iotDevice = null; ResultSet resultSet = null; try { - conn = ${groupId}.${rootArtifactId}.plugin.impl.dao.DeviceTypeDAO.getConnection(); + conn = DeviceTypeDAO.getConnection(); String selectDBQuery = "SELECT ${deviceType}_DEVICE_ID, DEVICE_NAME" + " FROM ${deviceType}_DEVICE WHERE ${deviceType}_DEVICE_ID = ?"; stmt = conn.prepareStatement(selectDBQuery); - stmt.setString(1, iotDeviceId); + stmt.setString(1, deviceId); resultSet = stmt.executeQuery(); if (resultSet.next()) { - iotDevice = new IotDevice(); - iotDevice.setIotDeviceName(resultSet.getString( + iotDevice = new Device(); + iotDevice.setName(resultSet.getString( DeviceTypeConstants.DEVICE_PLUGIN_DEVICE_NAME)); - Map propertyMap = new HashMap(); - - - iotDevice.setDeviceProperties(propertyMap); - + List propertyList = new ArrayList<>(); + iotDevice.setProperties(propertyList); if (log.isDebugEnabled()) { - log.debug("${deviceType} device " + iotDeviceId + " data has been fetched from " + + log.debug("${deviceType} device " + deviceId + " data has been fetched from " + "${deviceType} database."); } } } catch (SQLException e) { - String msg = "Error occurred while fetching ${deviceType} device : '" + iotDeviceId + "'"; + String msg = "Error occurred while fetching ${deviceType} device : '" + deviceId + "'"; log.error(msg, e); - throw new IotDeviceManagementDAOException(msg, e); + throw new DeviceTypePluginException(msg, e); } finally { - IotDeviceManagementDAOUtil.cleanupResources(stmt, resultSet); + DeviceTypeUtils.cleanupResources(stmt, resultSet); DeviceTypeDAO.closeConnection(); } - return iotDevice; } - @Override - public boolean addIotDevice(IotDevice iotDevice) throws IotDeviceManagementDAOException { + public boolean addDevice(Device device) throws DeviceTypePluginException { boolean status = false; - Connection conn = null; + Connection conn; PreparedStatement stmt = null; try { - conn = ${groupId}.${rootArtifactId}.plugin.impl.dao.DeviceTypeDAO.getConnection(); + conn = DeviceTypeDAO.getConnection(); String createDBQuery = "INSERT INTO ${deviceType}_DEVICE(${deviceType}_DEVICE_ID, DEVICE_NAME) VALUES (?, ?)"; - stmt = conn.prepareStatement(createDBQuery); - stmt.setString(1, iotDevice.getIotDeviceId()); - stmt.setString(2, iotDevice.getIotDeviceName()); - if (iotDevice.getDeviceProperties() == null) { - iotDevice.setDeviceProperties(new HashMap()); - } - - + stmt.setString(1, device.getDeviceIdentifier()); + stmt.setString(2, device.getName()); int rows = stmt.executeUpdate(); if (rows > 0) { status = true; if (log.isDebugEnabled()) { - log.debug("${deviceType} device " + iotDevice.getIotDeviceId() + " data has been" + + log.debug("${deviceType} device " + device.getDeviceIdentifier() + " data has been" + " added to the ${deviceType} database."); } } } catch (SQLException e) { String msg = "Error occurred while adding the ${deviceType} device '" + - iotDevice.getIotDeviceId() + "' to the ${deviceType} db."; + device.getDeviceIdentifier() + "' to the ${deviceType} db."; log.error(msg, e); - throw new IotDeviceManagementDAOException(msg, e); + throw new DeviceTypePluginException(msg, e); } finally { - IotDeviceManagementDAOUtil.cleanupResources(stmt, null); + DeviceTypeUtils.cleanupResources(stmt, null); } return status; } - @Override - public boolean updateIotDevice(IotDevice iotDevice) throws IotDeviceManagementDAOException { + public boolean updateDevice(Device device) throws DeviceTypePluginException { boolean status = false; Connection conn = null; PreparedStatement stmt = null; try { - conn = ${groupId}.${rootArtifactId}.plugin.impl.dao.DeviceTypeDAO.getConnection(); + conn = DeviceTypeDAO.getConnection(); String updateDBQuery = "UPDATE ${deviceType}_DEVICE SET DEVICE_NAME = ? WHERE ${deviceType}_DEVICE_ID = ?"; stmt = conn.prepareStatement(updateDBQuery); - if (iotDevice.getDeviceProperties() == null) { - iotDevice.setDeviceProperties(new HashMap()); + if (device.getProperties() == null) { + device.setProperties(new ArrayList()); } - stmt.setString(1, iotDevice.getIotDeviceName()); - stmt.setString(2, iotDevice.getIotDeviceId()); + stmt.setString(1, device.getName()); + stmt.setString(2, device.getDeviceIdentifier()); int rows = stmt.executeUpdate(); if (rows > 0) { status = true; if (log.isDebugEnabled()) { - log.debug("${deviceType} device " + iotDevice.getIotDeviceId() + " data has been" + + log.debug("${deviceType} device " + device.getDeviceIdentifier() + " data has been" + " modified."); } } } catch (SQLException e) { String msg = "Error occurred while modifying the ${deviceType} device '" + - iotDevice.getIotDeviceId() + "' data."; + device.getDeviceIdentifier() + "' data."; log.error(msg, e); - throw new IotDeviceManagementDAOException(msg, e); + throw new DeviceTypePluginException(msg, e); } finally { - IotDeviceManagementDAOUtil.cleanupResources(stmt, null); + DeviceTypeUtils.cleanupResources(stmt, null); } return status; } - @Override - public boolean deleteIotDevice(String iotDeviceId) throws IotDeviceManagementDAOException { + public boolean deleteDevice(String deviceId) throws DeviceTypePluginException { boolean status = false; Connection conn = null; PreparedStatement stmt = null; try { - conn = ${groupId}.${rootArtifactId}.plugin.impl.dao.DeviceTypeDAO.getConnection(); + conn = DeviceTypeDAO.getConnection(); String deleteDBQuery = "DELETE FROM ${deviceType}_DEVICE WHERE ${deviceType}_DEVICE_ID = ?"; stmt = conn.prepareStatement(deleteDBQuery); - stmt.setString(1, iotDeviceId); + stmt.setString(1, deviceId); int rows = stmt.executeUpdate(); if (rows > 0) { status = true; if (log.isDebugEnabled()) { - log.debug("${deviceType} device " + iotDeviceId + " data has deleted" + + log.debug("${deviceType} device " + deviceId + " data has deleted" + " from the ${deviceType} database."); } } } catch (SQLException e) { - String msg = "Error occurred while deleting ${deviceType} device " + iotDeviceId; + String msg = "Error occurred while deleting ${deviceType} device " + deviceId; log.error(msg, e); - throw new IotDeviceManagementDAOException(msg, e); + throw new DeviceTypePluginException(msg, e); } finally { - IotDeviceManagementDAOUtil.cleanupResources(stmt, null); + DeviceTypeUtils.cleanupResources(stmt, null); } return status; } - @Override - public List getAllIotDevices() throws IotDeviceManagementDAOException { + public List getAllDevices() throws DeviceTypePluginException { Connection conn = null; PreparedStatement stmt = null; ResultSet resultSet = null; - IotDevice iotDevice; - List iotDevices = new ArrayList(); + Device device; + List iotDevices = new ArrayList<>(); try { - conn = ${groupId}.${rootArtifactId}.plugin.impl.dao.DeviceTypeDAO.getConnection(); + conn = DeviceTypeDAO.getConnection(); String selectDBQuery = "SELECT ${deviceType}_DEVICE_ID, DEVICE_NAME " + "FROM ${deviceType}_DEVICE"; stmt = conn.prepareStatement(selectDBQuery); resultSet = stmt.executeQuery(); while (resultSet.next()) { - iotDevice = new IotDevice(); - iotDevice.setIotDeviceId(resultSet.getString(DeviceTypeConstants.DEVICE_PLUGIN_DEVICE_ID)); - iotDevice.setIotDeviceName(resultSet.getString(DeviceTypeConstants.DEVICE_PLUGIN_DEVICE_NAME)); - - Map propertyMap = new HashMap(); - - iotDevice.setDeviceProperties(propertyMap); - iotDevices.add(iotDevice); + device = new Device(); + device.setDeviceIdentifier(resultSet.getString(DeviceTypeConstants.DEVICE_PLUGIN_DEVICE_ID)); + device.setName(resultSet.getString(DeviceTypeConstants.DEVICE_PLUGIN_DEVICE_NAME)); + List propertyList = new ArrayList<>(); + device.setProperties(propertyList); } if (log.isDebugEnabled()) { log.debug("All ${deviceType} device details have fetched from ${deviceType} database."); @@ -215,12 +197,10 @@ public class DeviceTypeDAOImpl implements IotDeviceDAO { } catch (SQLException e) { String msg = "Error occurred while fetching all ${deviceType} device data'"; log.error(msg, e); - throw new IotDeviceManagementDAOException(msg, e); + throw new DeviceTypePluginException(msg, e); } finally { - IotDeviceManagementDAOUtil.cleanupResources(stmt, resultSet); + DeviceTypeUtils.cleanupResources(stmt, resultSet); DeviceTypeDAO.closeConnection(); } - } - } diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/util/DeviceTypeUtils.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/util/DeviceTypeUtils.java new file mode 100644 index 00000000..6daa1bcc --- /dev/null +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/dao/util/DeviceTypeUtils.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * you may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package ${groupId}.${rootArtifactId}.plugin.impl.dao.util; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.common.Device; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +/** + * Contains utility methods used by ${rootArtifactId} plugin. + */ +public class DeviceTypeUtils { + + private static Log log = LogFactory.getLog(DeviceTypeUtils.class); + + public static String getDeviceProperty(List deviceProperties, String propertyKey) { + String deviceProperty = ""; + for (Device.Property property : deviceProperties) { + if (propertyKey.equals(property.getName())) { + deviceProperty = property.getValue(); + } + } + return deviceProperty; + } + + public static Device.Property getProperty(String property, String value) { + if (property != null) { + Device.Property prop = new Device.Property(); + prop.setName(property); + prop.setValue(value); + return prop; + } + return null; + } + + public static void cleanupResources(Connection conn, PreparedStatement stmt, ResultSet rs) { + if (rs != null) { + try { + rs.close(); + } catch (SQLException e) { + log.warn("Error occurred while closing result set", e); + } + } + if (stmt != null) { + try { + stmt.close(); + } catch (SQLException e) { + log.warn("Error occurred while closing prepared statement", e); + } + } + if (conn != null) { + try { + conn.close(); + } catch (SQLException e) { + log.warn("Error occurred while closing database connection", e); + } + } + } + + public static void cleanupResources(PreparedStatement stmt, ResultSet rs) { + cleanupResources(null, stmt, rs); + } + +} diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/util/DevicetypeUtils.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/util/DevicetypeUtils.java deleted file mode 100644 index 2a31fea3..00000000 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/impl/util/DevicetypeUtils.java +++ /dev/null @@ -1,38 +0,0 @@ -package ${groupId}.${rootArtifactId}.plugin.impl.util; -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * you may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.Map; - -/** - * Contains utility methods used by ${rootArtifactId} plugin. - */ -public class DevicetypeUtils { - - private static Log log = LogFactory.getLog(DevicetypeUtils.class); - - public static String getDeviceProperty(Map deviceProperties, String property) { - String deviceProperty = deviceProperties.get(property); - if (deviceProperty == null) { - return ""; - } - return deviceProperty; - } -} diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/internal/ServiceComponent.java b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/internal/ServiceComponent.java index 37378194..767999aa 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/internal/ServiceComponent.java +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/plugin/src/main/java/__groupId__/__rootArtifactId__/plugin/internal/ServiceComponent.java @@ -25,22 +25,13 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentContext; import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService; -import org.wso2.carbon.device.mgt.iot.service.DeviceTypeService; /** * @scr.component name="${groupId}.${rootArtifactId}.plugin.internal.ServiceComponent" * immediate="true" - * @scr.reference name="org.wso2.carbon.device.mgt.iot.service.DeviceTypeService" - * interface="org.wso2.carbon.device.mgt.iot.service.DeviceTypeService" - * cardinality="1..1" - * policy="dynamic" - * bind="setDeviceTypeService" - * unbind="unsetDeviceTypeService" */ public class ServiceComponent { - - private ServiceRegistration serviceRegistration; private static final Log log = LogFactory.getLog(ServiceComponent.class); @@ -76,14 +67,4 @@ public class ServiceComponent { log.error("Error occurred while de-activating Iot Device Management bundle", e); } } - - protected void setDeviceTypeService(DeviceTypeService deviceTypeService) { - if (log.isDebugEnabled()) { - log.debug("Data source service set to mobile service component"); - } - } - - protected void unsetDeviceTypeService(DeviceTypeService deviceTypeService) { - //do nothing - } -} \ No newline at end of file +} diff --git a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/ui/src/assembly/src.xml b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/ui/src/assembly/src.xml index 8e784014..2a47dc4d 100644 --- a/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/ui/src/assembly/src.xml +++ b/modules/tools/cdmf-devicetype-archetype/src/main/resources/archetype-resources/component/ui/src/assembly/src.xml @@ -1,3 +1,4 @@ + - - IoTServer_Sensor_Script + IoTServer_${nameOfTheSensor}_Script 0 * * * * ? diff --git a/modules/samples/doormanager/component/analytics/src/main/resources/carbonapps/Sensor/artifacts.xml b/modules/samples/doormanager/component/analytics/src/main/resources/carbonapps/smartLock/artifacts.xml similarity index 67% rename from modules/samples/doormanager/component/analytics/src/main/resources/carbonapps/Sensor/artifacts.xml rename to modules/samples/doormanager/component/analytics/src/main/resources/carbonapps/smartLock/artifacts.xml index eab2a8d1..4385705f 100644 --- a/modules/samples/doormanager/component/analytics/src/main/resources/carbonapps/Sensor/artifacts.xml +++ b/modules/samples/doormanager/component/analytics/src/main/resources/carbonapps/smartLock/artifacts.xml @@ -18,11 +18,10 @@ --> - - - - + + + + From 5dd57a157e56695cf53988bf4e563d645e615e82 Mon Sep 17 00:00:00 2001 From: GPrathap Date: Sun, 13 Mar 2016 21:51:16 +0530 Subject: [PATCH 07/13] changing source code according to new API changes --- .../doormanager/component/controller/pom.xml | 12 +- .../api/DoorManagerControllerService.java | 490 ++++------- .../api/util/DoorManagerServiceUtils.java | 35 +- .../api/DoorManagerManagerService.java | 680 +++++++-------- .../doormanager/manager/api/util/APIUtil.java | 54 ++ .../manager/api/util/ResponsePayload.java | 108 +++ .../src/main/webapp/META-INF/permissions.xml | 73 ++ .../manager/src/main/webapp/WEB-INF/web.xml | 2 +- .../doormanager/component/plugin/pom.xml | 80 +- .../DoorManagerDeviceMgtPluginException.java | 18 +- ...orManagerManager.java => DoorManager.java} | 81 +- .../impl/DoorManagerManagerService.java | 113 --- .../plugin/impl/DoorManagerService.java | 113 +++ .../plugin/impl/dao/DoorLockSafe.java | 28 +- .../plugin/impl/dao/DoorManagerDAO.java | 188 +++-- .../impl/dao/impl/DoorManagerDAOImpl.java | 777 +++++++++--------- .../impl/dao/util/DoorManagerUtils.java | 4 +- .../plugin/impl/util/DoorManagerUtils.java | 39 - ...DoorManagerManagementServiceComponent.java | 29 +- .../device-view.hbs | 1 + .../device-view.js | 22 +- .../public/js/device-stats.js | 56 -- .../public/js/download.js | 108 ++- .../type-view.hbs | 61 +- 24 files changed, 1595 insertions(+), 1577 deletions(-) create mode 100644 modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/util/APIUtil.java create mode 100644 modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/util/ResponsePayload.java create mode 100644 modules/samples/doormanager/component/manager/src/main/webapp/META-INF/permissions.xml rename modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/{DoorManagerManager.java => DoorManager.java} (75%) delete mode 100644 modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManagerManagerService.java create mode 100644 modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManagerService.java delete mode 100644 modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/util/DoorManagerUtils.java delete mode 100644 modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/js/device-stats.js diff --git a/modules/samples/doormanager/component/controller/pom.xml b/modules/samples/doormanager/component/controller/pom.xml index 9d222daf..68a46768 100644 --- a/modules/samples/doormanager/component/controller/pom.xml +++ b/modules/samples/doormanager/component/controller/pom.xml @@ -15,19 +15,19 @@ * specific language governing permissions and limitations * under the License. */--> - org.homeautomation - component + doormanager-component 1.0.0-SNAPSHOT ../pom.xml 4.0.0 - ${groupId}.doormanager.controller + org.homeautomation.doormanager.controller 1.0.0-SNAPSHOT war - ${groupId}.doormanager.controller + org.homeautomation.doormanager.controller http://wso2.com @@ -45,7 +45,7 @@ maven-war-plugin ${maven-war-plugin.version} - ${groupId}.doormanager.controller + org.homeautomation.doormanager.controller @@ -53,7 +53,7 @@ org.homeautomation - ${project-base-package}.plugin + org.homeautomation.doormanager.plugin diff --git a/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/DoorManagerControllerService.java b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/DoorManagerControllerService.java index eb51bf19..511acf0b 100644 --- a/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/DoorManagerControllerService.java +++ b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/DoorManagerControllerService.java @@ -20,18 +20,19 @@ package org.homeautomation.doormanager.controller.api; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.homeautomation.doormanager.controller.api.dto.DeviceJSON; +import org.homeautomation.doormanager.controller.api.dto.UserInfo; import org.homeautomation.doormanager.controller.api.exception.DoorManagerException; -import org.homeautomation.doormanager.controller.api.util.DoorManagerMQTTConnector; +import org.homeautomation.doormanager.controller.api.transport.DoorManagerMQTTConnector; import org.homeautomation.doormanager.plugin.constants.DoorManagerConstants; import org.homeautomation.doormanager.plugin.exception.DoorManagerDeviceMgtPluginException; +import org.homeautomation.doormanager.plugin.impl.DoorManager; import org.homeautomation.doormanager.plugin.impl.dao.DoorLockSafe; -import org.homeautomation.doormanager.plugin.impl.dao.DoorManagerDAO; +import org.json.JSONException; +import org.json.JSONObject; import org.wso2.carbon.apimgt.annotations.api.API; import org.wso2.carbon.apimgt.annotations.device.DeviceType; import org.wso2.carbon.apimgt.annotations.device.feature.Feature; import org.wso2.carbon.context.CarbonContext; -import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.iot.DeviceManagement; @@ -45,63 +46,37 @@ import org.wso2.carbon.device.mgt.iot.sensormgt.SensorDataManager; import org.wso2.carbon.device.mgt.iot.sensormgt.SensorRecord; import org.wso2.carbon.user.api.UserStoreException; import org.wso2.carbon.user.api.UserStoreManager; -import org.wso2.carbon.user.core.service.RealmService; import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.Consumes; import javax.ws.rs.FormParam; -import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.GET; import javax.ws.rs.Produces; +import javax.ws.rs.Consumes; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.Calendar; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +@SuppressWarnings("NonJaxWsWebServices") @API(name = "doormanager", version = "1.0.0", context = "/doormanager") @DeviceType(value = "doormanager") public class DoorManagerControllerService { - private static final DoorManagerDAO DOOR_MANAGER_DAO = new DoorManagerDAO(); - private static Log log = LogFactory.getLog(DoorManagerControllerService.class); - private HttpServletResponse response; + private static String CURRENT_STATUS = "doorLockerCurrentStatus"; + private DoorManager doorManager; private DoorManagerMQTTConnector doorManagerMQTTConnector; - private ConcurrentHashMap deviceToIpMap = new ConcurrentHashMap<>(); - - private PrivilegedCarbonContext ctx; - - @Context //injected response proxy supporting multiple thread - private UserStoreManager getUserStoreManager() throws UserStoreException { - String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); - PrivilegedCarbonContext.startTenantFlow(); - ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - ctx.setTenantDomain(tenantDomain, true); - if (log.isDebugEnabled()) { - log.debug("Getting thread local carbon context for tenant domain: " + tenantDomain); - } - RealmService realmService = (RealmService) ctx.getOSGiService(RealmService.class, null); - return realmService.getTenantUserRealm(ctx.getTenantId()).getUserStoreManager(); - } - - /** - * Ends tenant flow. - */ - private void endTenantFlow() { - PrivilegedCarbonContext.endTenantFlow(); - ctx = null; - if (log.isDebugEnabled()) { - log.debug("Tenant flow ended"); - } + DoorManagerControllerService() { + doorManager = new DoorManager(); } + @Context //injected response proxy supporting multiple thread private boolean waitForServerStartup() { while (!DeviceManagement.isServerReady()) { try { @@ -128,7 +103,7 @@ public class DoorManagerControllerService { doorManagerMQTTConnector.connect(); } else { log.warn("MQTT disabled in 'devicemgt-config.xml'. Hence, DoorManagerMQTTConnector" + - " not started."); + " not started."); } } }; @@ -137,220 +112,83 @@ public class DoorManagerControllerService { connectorThread.start(); } + /** + * Assign new user to lock + * + * @param owner owner of the device + * @param deviceId unique identifier for given device + * @param protocol transport protocol which is being using here MQTT + * @param cardNumber RFID card number + * @param userName user name of RFID card owner + * @param emailAddress email address of RFID card owner + */ @Path("controller/assign_user") @POST @Feature(code = "assign_user", name = "Assign new user to lock", type = "operation", - description = "Add new access card to user to control the lock with given policy") - public void assignUseToLock(@HeaderParam("owner") String owner, - @HeaderParam("deviceId") String deviceId, - @HeaderParam("protocol") String protocol, - @FormParam("policy") String policy, - @FormParam("cardNumber") String cardNumber, - @FormParam("userName") String userName, - @FormParam("emailAddress") String emailAddress, - @Context HttpServletResponse response) { - try { - if (userName != null && cardNumber != null && deviceId != null) { - try { - UserStoreManager userStoreManager = this.getUserStoreManager(); - DoorLockSafe doorLockSafe = new DoorLockSafe(); - if (userStoreManager.isExistingUser(userName)) { - TokenClient accessTokenClient = new TokenClient(DoorManagerConstants.DEVICE_TYPE); - AccessTokenInfo accessTokenInfo = accessTokenClient.getAccessToken(deviceId, userName); - String accessToken = accessTokenInfo.getAccess_token(); - if (accessToken == null) { - response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); - return; - } - Map claims = new HashMap<>(); - claims.put("http://wso2.org/claims/lock/accesstoken", accessToken); - claims.put("http://wso2.org/claims/lock/refreshtoken", accessTokenInfo.getRefresh_token()); - claims.put("http://wso2.org/claims/lock/cardnumber", cardNumber); - userStoreManager.setUserClaimValues(userName, claims, null); - doorLockSafe.setAccessToken(accessTokenInfo.getAccess_token()); - doorLockSafe.setRefreshToken(accessTokenInfo.getRefresh_token()); - doorLockSafe.setDeviceId(deviceId); - doorLockSafe.setOwner(owner); - doorLockSafe.setEmailAddress(emailAddress); - doorLockSafe.setUIDofUser(cardNumber); - doorLockSafe.setPolicy(policy); - doorLockSafe.setSerialNumber(deviceId); - boolean status; - try { - DoorManagerDAO.beginTransaction(); - status = DOOR_MANAGER_DAO.getAutomaticDoorLockerDeviceDAO().registerDoorLockSafe(doorLockSafe); - DoorManagerDAO.commitTransaction(); - if (status) { - response.setStatus(Response.Status.OK.getStatusCode()); - } else { - response.setStatus(Response.Status.FORBIDDEN.getStatusCode()); - } - } catch (DoorManagerDeviceMgtPluginException e) { - try { - DoorManagerDAO.rollbackTransaction(); - } catch (DoorManagerDeviceMgtPluginException e1) { - String msg = "Error while updating the enrollment of the Door Manager Locker device : " - + doorLockSafe.getOwner(); - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - log.error(msg, e); - } - } + description = "Add new access card to user to control the lock ") + public void assignUserToLock(@HeaderParam("owner") String owner, + @HeaderParam("deviceId") String deviceId, + @HeaderParam("protocol") String protocol, + @FormParam("cardNumber") String cardNumber, + @FormParam("userName") String userName, + @FormParam("emailAddress") String emailAddress, + @Context HttpServletResponse response) { - response.setStatus(Response.Status.OK.getStatusCode()); - } else { - response.setStatus(Response.Status.NOT_FOUND.getStatusCode()); - } - } catch (UserStoreException e) { - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - log.error(e); - } - } else { - response.setStatus(Response.Status.BAD_REQUEST.getStatusCode()); - } - - } catch (AccessTokenException e) { - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - log.error(e); - } - } - - /* @Path("controller/registerNewUser") - @POST - @Feature(code = "registerNewUser", name = "Assign to new user", type = "operation", - description = "Assign to new user") - public void registerDoorLockSafe(@HeaderParam("owner") String owner, - @HeaderParam("deviceId") String deviceId, - @HeaderParam("protocol") String protocol, - @FormParam("policy") String policy, - @FormParam("UIDofRFID") String UIDofRFID, - @FormParam("userName") String userName, - @FormParam("emailAddress") String emailAddress, - @Context HttpServletResponse response) { - try { - TokenClient accessTokenClient = new TokenClient(DoorManagerConstants.DEVICE_TYPE); - AccessTokenInfo accessTokenInfo = accessTokenClient.getAccessToken(deviceId, UIDofRFID); - DoorLockSafe doorLockSafe = new DoorLockSafe(); - String accessToken = accessTokenInfo.getAccess_token(); - if (accessToken == null) { - response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); - } else { - if (emailAddress != null && UIDofRFID != null && deviceId != null) { - boolean status; - doorLockSafe.setAccessToken(accessTokenInfo.getAccess_token()); - doorLockSafe.setRefreshToken(accessTokenInfo.getRefresh_token()); - doorLockSafe.setDeviceId(deviceId); - doorLockSafe.setOwner(owner); - doorLockSafe.setEmailAddress(emailAddress); - doorLockSafe.setUIDofUser(UIDofRFID); - doorLockSafe.setPolicy(policy); - doorLockSafe.setSerialNumber(deviceId); - try { - DoorManagerDAO.beginTransaction(); - status = DOOR_MANAGER_DAO.getAutomaticDoorLockerDeviceDAO().registerDoorLockSafe(doorLockSafe); - DoorManagerDAO.commitTransaction(); - if (status) { - response.setStatus(Response.Status.OK.getStatusCode()); - } else { - response.setStatus(Response.Status.FORBIDDEN.getStatusCode()); - } - } catch (DoorManagerDeviceMgtPluginException e) { - try { - DoorManagerDAO.rollbackTransaction(); - } catch (DoorManagerDeviceMgtPluginException e1) { - String msg = "Error while updating the enrollment of the Door Manager Locker device : " - + doorLockSafe.getOwner(); - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - log.error(msg, e); - } + if (userName != null && cardNumber != null && deviceId != null) { + try { + UserStoreManager userStoreManager = doorManager.getUserStoreManager(); + DoorLockSafe doorLockSafe = new DoorLockSafe(); + if (userStoreManager.isExistingUser(userName)) { + TokenClient accessTokenClient = new TokenClient(DoorManagerConstants.DEVICE_TYPE); + AccessTokenInfo accessTokenInfo = accessTokenClient.getAccessToken(deviceId, userName); + String accessToken = accessTokenInfo.getAccess_token(); + if (accessToken == null) { + response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } - } else { - response.setStatus(Response.Status.BAD_REQUEST.getStatusCode()); - } - } - } catch (AccessTokenException e) { - response.setStatus(Response.Status.BAD_REQUEST.getStatusCode()); - log.error(e); - } - }*/ - - /*@Path("controller/registerNewUser") - @POST - @Feature(code = "registerNewUser", name = "Assign to new user", type = "operation", - description = "Assign to new user") - public void registerDoorLockSafe(@HeaderParam("owner") String owner, - @HeaderParam("deviceId") String deviceId, - @HeaderParam("protocol") String protocol, - @FormParam("policy") String policy, - @FormParam("cardNumber") String cardNumber, - @FormParam("userName") String userName, - @FormParam("emailAddress") String emailAddress, - @Context HttpServletResponse response) { - try { - TokenClient accessTokenClient = new TokenClient(DoorManagerConstants.DEVICE_TYPE); - AccessTokenInfo accessTokenInfo = accessTokenClient.getAccessToken(deviceId, userName); - DoorLockSafe doorLockSafe = new DoorLockSafe(); - String accessToken = accessTokenInfo.getAccess_token(); - if (accessToken == null) { - response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); - } else { - if (emailAddress != null && cardNumber != null && deviceId != null) { - boolean status; + Map claims = new HashMap<>(); + claims.put(DoorManagerConstants.DEVICE_CLAIMS_ACCESS_TOKEN, accessToken); + claims.put(DoorManagerConstants.DEVICE_CLAIMS_REFRESH_TOKEN, + accessTokenInfo.getRefresh_token()); + claims.put(DoorManagerConstants.DEVICE_CLAIMS_CARD_NUMBER, cardNumber); + userStoreManager.setUserClaimValues(userName, claims, null); doorLockSafe.setAccessToken(accessTokenInfo.getAccess_token()); doorLockSafe.setRefreshToken(accessTokenInfo.getRefresh_token()); doorLockSafe.setDeviceId(deviceId); doorLockSafe.setOwner(owner); doorLockSafe.setEmailAddress(emailAddress); doorLockSafe.setUIDofUser(cardNumber); - doorLockSafe.setPolicy(policy); doorLockSafe.setSerialNumber(deviceId); - try { - UserStoreManager userStoreManager = this.getUserStoreManager(); - if (userStoreManager.isExistingUser(userName)) { - if (accessToken == null) { - response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); - return; - } - Map claims = new HashMap<>(); - claims.put("http://wso2.org/claims/lock/accesstoken", accessToken); - claims.put("http://wso2.org/claims/lock/refreshtoken", accessTokenInfo.getRefresh_token()); - claims.put("http://wso2.org/claims/lock/cardnumber", cardNumber); - userStoreManager.setUserClaimValues(userName, claims, null); - } else { - response.setStatus(Response.Status.NOT_FOUND.getStatusCode()); - } - DoorManagerDAO.beginTransaction(); - status = DOOR_MANAGER_DAO.getAutomaticDoorLockerDeviceDAO().registerDoorLockSafe(doorLockSafe); - DoorManagerDAO.commitTransaction(); - if (status) { - response.setStatus(Response.Status.OK.getStatusCode()); - } else { - response.setStatus(Response.Status.FORBIDDEN.getStatusCode()); - } - } catch (DoorManagerDeviceMgtPluginException e) { - try { - DoorManagerDAO.rollbackTransaction(); - } catch (DoorManagerDeviceMgtPluginException e1) { - String msg = "Error while updating the enrollment of the Door Manager Locker device : " - + doorLockSafe.getOwner(); - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - log.error(msg, e); - } - } catch (UserStoreException e) { - log.error(e); + if (doorManager.assignUserToLock(doorLockSafe)) { + response.setStatus(Response.Status.OK.getStatusCode()); + } else { + response.setStatus(Response.Status.BAD_REQUEST.getStatusCode()); } } else { - response.setStatus(Response.Status.BAD_REQUEST.getStatusCode()); + response.setStatus(Response.Status.NOT_FOUND.getStatusCode()); } + } catch (UserStoreException e) { + response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); + log.error(e); + } catch (DoorManagerDeviceMgtPluginException | AccessTokenException e) { + log.error(e); + response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); } - } catch (AccessTokenException e) { + } else { response.setStatus(Response.Status.BAD_REQUEST.getStatusCode()); - log.error(e); } - }*/ + } - @Path("controller/changeStatusOfDoorLockSafe") + /** + * Change status of door lock safe: LOCK/UNLOCK + * + * @param owner owner of the device + * @param deviceId unique identifier for given device + * @param protocol transport protocol which is being using here MQTT + * @param state status of lock safe: lock/unlock + */ + @Path("controller/change-status") @POST - @Feature(code = "changeStatusOfDoorLockSafe", name = "Change status of door lock safe: LOCK/UNLOCK", type = "operation", + @Feature(code = "change-status", name = "Change status of door lock safe: LOCK/UNLOCK", type = "operation", description = "Change status of door lock safe: LOCK/UNLOCK") public void changeStatusOfDoorLockSafe(@HeaderParam("owner") String owner, @HeaderParam("deviceId") String deviceId, @@ -364,8 +202,8 @@ public class DoorManagerControllerService { } else { lockerCurrentState = 1; } - SensorDataManager.getInstance().setSensorRecord(deviceId, "door_locker_state", - String.valueOf(lockerCurrentState), Calendar.getInstance().getTimeInMillis()); + SensorDataManager.getInstance().setSensorRecord(deviceId, CURRENT_STATUS, + String.valueOf(lockerCurrentState), Calendar.getInstance().getTimeInMillis()); doorManagerMQTTConnector.sendCommandViaMQTT(owner, deviceId, "DoorManager:", state.toUpperCase()); response.setStatus(Response.Status.OK.getStatusCode()); } catch (DeviceManagementException e) { @@ -376,78 +214,20 @@ public class DoorManagerControllerService { } } - /*@Path("controller/shareDoorLockSafe") - @POST - @Feature(code = "shareDoorLockSafe", name = "Share lock safe with new user", type = "operation", - description = "Share lock safe with new user") - public void shareDoorLockSafe(@HeaderParam("owner") String owner, @HeaderParam("deviceId") String deviceId, - @HeaderParam("protocol") String protocol, - @FormParam("UIDofUser") String UIDofUser,@FormParam("policy") String policy, - @Context HttpServletResponse response) { - try { - DoorLockSafe doorLockSafe = new DoorLockSafe(); - if(deviceId != null && UIDofUser != null && policy != null){ - boolean status; - doorLockSafe.setDeviceId(deviceId); - doorLockSafe.setOwner(owner); - doorLockSafe.setPolicy(policy); - doorLockSafe.setSerialNumber(deviceId); - doorLockSafe.setUIDofUser(UIDofUser); - try{ - DoorManagerDAO.beginTransaction(); - status = DOOR_MANAGER_DAO.getAutomaticDoorLockerDeviceDAO().shareDoorLockSafe(doorLockSafe); - DoorManagerDAO.commitTransaction(); - if(status){ - response.setStatus(Response.Status.OK.getStatusCode()); - }else{ - response.setStatus(Response.Status.FORBIDDEN.getStatusCode()); - } - } - catch (DoorManagerDeviceMgtPluginException e) { - try { - DoorManagerDAO.rollbackTransaction(); - } catch (DoorManagerDeviceMgtPluginException e1) { - String msg = "Error while sharing the enrollment of the Door Manager Locker device : " - + doorLockSafe.getOwner(); - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - log.error(msg, e); - } - } - }else{ - response.setStatus(Response.Status.BAD_REQUEST.getStatusCode()); - } - } catch (Exception e) { - response.setStatus(Response.Status.BAD_REQUEST.getStatusCode()); - log.error(e); - } - }*/ - - @Path("controller/addDoorOpenedUser") - @POST - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - public Response addDoorOpenedUser(final DeviceJSON lockSafeInfo) { - try { - if (lockSafeInfo.serialNumber != null && lockSafeInfo.UIDofUser != null) { - log.warn(lockSafeInfo.serialNumber); - log.warn(lockSafeInfo.UIDofUser); - deviceToIpMap.put(lockSafeInfo.serialNumber, lockSafeInfo); - return Response.ok(Response.Status.OK.getStatusCode()).build(); - } else { - return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build(); - } - } catch (Exception e) { - log.error(e); - return Response.status(Response.Status.BAD_REQUEST.getStatusCode()).build(); - } - } - + /** + * Request current status of door lock safe + * + * @param owner owner of the device + * @param deviceId unique identifier for given device + * @param protocol transport protocol which is being using here MQTT + * @param response http servlet response object + */ @GET - @Path("controller/requestStatusOfDoorLockSafe") + @Path("controller/current-status") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - @Feature(code = "requestStatusOfDoorLockSafe", name = "Door Locker Status", type = "monitor", - description = "Request door locker current status") + @Feature(code = "current-status", name = "Door Locker Status", type = "monitor", + description = "Request current status of door safe") public SensorRecord requestStatusOfDoorLockSafe(@HeaderParam("owner") String owner, @HeaderParam("deviceId") String deviceId, @HeaderParam("protocol") String protocol, @@ -456,43 +236,91 @@ public class DoorManagerControllerService { DeviceValidator deviceValidator = new DeviceValidator(); try { if (!deviceValidator.isExist(owner, CarbonContext.getThreadLocalCarbonContext().getTenantDomain(), - new DeviceIdentifier(deviceId, DoorManagerConstants.DEVICE_TYPE))) { + new DeviceIdentifier(deviceId, DoorManagerConstants.DEVICE_TYPE))) { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } - } catch (DeviceManagementException e) { - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - } - try { - sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId, "door_locker_state"); - } catch (DeviceControllerException e) { + sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId, CURRENT_STATUS); + response.setStatus(Response.Status.OK.getStatusCode()); + } catch (DeviceControllerException | DeviceManagementException e) { response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); } - response.setStatus(Response.Status.OK.getStatusCode()); return sensorRecord; } - @GET - @Path("controller/getRegisteredDoorLockSafe") - @Consumes(MediaType.APPLICATION_JSON) + /** + * @param userInfo user information which are required to test given user is authorized to open requested door + * @return if user is authorized open the the door allow to open it + */ + @POST + @Path("controller/get_user_info") @Produces(MediaType.APPLICATION_JSON) - public Response getRegisteredDoorLocks(@HeaderParam("owner") String owner, - @HeaderParam("deviceId") String deviceId, - @Context HttpServletResponse response) { - List doorLockSafes; - try { - DoorManagerDAO.beginTransaction(); - doorLockSafes = DOOR_MANAGER_DAO.getAutomaticDoorLockerDeviceDAO().getRegisteredDoorLocks(deviceId); - DoorManagerDAO.commitTransaction(); - response.setStatus(Response.Status.OK.getStatusCode()); - } catch (DoorManagerDeviceMgtPluginException e) { + @Consumes(MediaType.APPLICATION_JSON) + @SuppressWarnings("unchecked") //This is to avoid unchecked call to put(k, v) into jsonObject. org.json.simple + // library uses raw type collections internally. + public Response get_user_info(final UserInfo userInfo) { + if (userInfo.userName != null && userInfo.cardNumber != null && userInfo.deviceId != null) { try { - DoorManagerDAO.rollbackTransaction(); - } catch (DoorManagerDeviceMgtPluginException e1) { - String msg = "Error while updating the enrollment of the Door Manager Locker device : " + deviceId; - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - log.error(msg, e); + UserStoreManager userStoreManager = doorManager.getUserStoreManager(); + if (userStoreManager.isExistingUser(userInfo.userName)) { + String accessToken = userStoreManager.getUserClaimValue(userInfo.userName, + DoorManagerConstants.DEVICE_CLAIMS_ACCESS_TOKEN, null); + String cardNumber = userStoreManager.getUserClaimValue(userInfo.userName, + DoorManagerConstants.DEVICE_CLAIMS_CARD_NUMBER, null); + if (cardNumber != null) { + if (cardNumber.equals(userInfo.cardNumber)) { + if (accessToken != null) { + JSONObject credentials = new JSONObject(); + credentials.put(DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_ACCESS_TOKEN, accessToken); + //return Response.ok(credentials, MediaType.APPLICATION_JSON_TYPE).build(); + return Response.status(Response.Status.OK).build(); + } + } + return Response.status(Response.Status.UNAUTHORIZED).build(); + } + + } else { + return Response.status(Response.Status.UNAUTHORIZED).build(); + } + } catch (UserStoreException e) { + log.error(e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); + } catch (JSONException e) { + log.error(e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } } - return Response.ok().build(); + return Response.status(Response.Status.BAD_REQUEST).build(); } + + /* + private void sendCEPEvent(String deviceId, String cardId, boolean accessStatus){ + String cepEventReciever = "http://localhost:9768/endpoints/LockEventReciever"; + + HttpClient httpClient = new SystemDefaultHttpClient(); + HttpPost method = new HttpPost(cepEventReciever); + JsonObject event = new JsonObject(); + JsonObject metaData = new JsonObject(); + + metaData.addProperty("deviceID", deviceId); + metaData.addProperty("cardID", cardId); + + event.add("metaData", metaData); + + String eventString = "{\"event\": " + event + "}"; + + try { + StringEntity entity = new StringEntity(eventString); + method.setEntity(entity); + if (cepEventReciever.startsWith("https")) { + method.setHeader("Authorization", "Basic " + Base64.encode(("admin" + ":" + "admin").getBytes())); + } + httpClient.execute(method).getEntity().getContent().close(); + } catch (UnsupportedEncodingException e) { + log.error("Error while constituting CEP event"+ e.getMessage()); + } catch (ClientProtocolException e) { + log.error("Error while sending message to CEP "+ e.getMessage()); + } catch (IOException e) { + log.error("Error while sending message to CEP "+ e.getMessage()); + } + }*/ } diff --git a/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/util/DoorManagerServiceUtils.java b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/util/DoorManagerServiceUtils.java index 7775005a..d71e07f9 100644 --- a/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/util/DoorManagerServiceUtils.java +++ b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/util/DoorManagerServiceUtils.java @@ -27,28 +27,43 @@ import org.wso2.carbon.device.mgt.analytics.service.DeviceAnalyticsService; public class DoorManagerServiceUtils { private static final Log log = LogFactory.getLog(DoorManagerServiceUtils.class); + private static final String STREAM_DEFINITION = "org.wso2.iot.devices.smartLock"; + private static final String STREAM_DEFINITION_VERSION = "1.0.0"; - //TODO; replace this tenant domain - private static final String SUPER_TENANT = "carbon.super"; - private static final String CURRENT_STREAM_DEFINITION = "org.wso2.iot.devices.sensor"; + /** + * Publish door locker current status to DAS + * + * @param owner owner of the device + * @param deviceId unique identifier of device + * @param status current status of lock:- 1: open, 0: close + * @return status + */ + public static boolean publishToDASLockerStatus(String owner, String deviceId, float status) throws + DataPublisherConfigurationException { + Object payloadCurrent[] = {status}; + return publishToDAS(owner, deviceId, payloadCurrent, STREAM_DEFINITION); + } - public static boolean publishToDASCurrent(String owner, String deviceId, float current) { + private static boolean publishToDAS(String owner, String deviceId, Object[] payloadCurrent, + String definition) { PrivilegedCarbonContext.startTenantFlow(); PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - ctx.setTenantDomain(SUPER_TENANT, true); + ctx.setUsername(owner); + if (ctx.getTenantDomain(true) == null) { + ctx.setTenantDomain("carbon.super", true); + } DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService( DeviceAnalyticsService.class, null); - Object metdaData[] = {owner, DoorManagerConstants.DEVICE_TYPE, deviceId, System.currentTimeMillis()}; - Object payloadCurrent[] = {current}; - + Object metaData[] = {owner, DoorManagerConstants.DEVICE_TYPE, deviceId, System.currentTimeMillis()}; try { - deviceAnalyticsService.publishEvent(CURRENT_STREAM_DEFINITION, "1.0.0", metdaData, new Object[0], payloadCurrent); + deviceAnalyticsService.publishEvent(definition, STREAM_DEFINITION_VERSION, metaData, + new Object[0], payloadCurrent); } catch (DataPublisherConfigurationException e) { + log.error(e); return false; } finally { PrivilegedCarbonContext.endTenantFlow(); } return true; } - } diff --git a/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/DoorManagerManagerService.java b/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/DoorManagerManagerService.java index 87eed7b8..62421bda 100644 --- a/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/DoorManagerManagerService.java +++ b/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/DoorManagerManagerService.java @@ -18,447 +18,319 @@ package org.homeautomation.doormanager.manager.api; -import com.google.gson.JsonObject; +import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.geronimo.mail.util.Base64; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.SystemDefaultHttpClient; -import org.homeautomation.doormanager.manager.api.dto.UserInfo; +import org.homeautomation.doormanager.manager.api.util.APIUtil; +import org.homeautomation.doormanager.manager.api.util.ResponsePayload; import org.homeautomation.doormanager.plugin.constants.DoorManagerConstants; -import org.homeautomation.doormanager.plugin.exception.DoorManagerDeviceMgtPluginException; -import org.homeautomation.doormanager.plugin.impl.dao.DoorManagerDAO; - -import org.json.simple.JSONObject; import org.wso2.carbon.apimgt.annotations.api.API; import org.wso2.carbon.apimgt.annotations.device.DeviceType; import org.wso2.carbon.apimgt.webapp.publisher.KeyGenerationUtil; -import org.wso2.carbon.context.CarbonContext; -import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.EnrolmentInfo; -import org.wso2.carbon.device.mgt.iot.DeviceManagement; import org.wso2.carbon.device.mgt.iot.apimgt.AccessTokenInfo; import org.wso2.carbon.device.mgt.iot.apimgt.TokenClient; import org.wso2.carbon.device.mgt.iot.exception.AccessTokenException; import org.wso2.carbon.device.mgt.iot.exception.DeviceControllerException; import org.wso2.carbon.device.mgt.iot.util.ZipArchive; import org.wso2.carbon.device.mgt.iot.util.ZipUtil; -import org.wso2.carbon.user.api.UserStoreException; -import org.wso2.carbon.user.api.UserStoreManager; -import org.wso2.carbon.user.core.service.RealmService; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.*; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.GET; +import javax.ws.rs.DELETE; +import javax.ws.rs.Produces; +import javax.ws.rs.Consumes; +import javax.ws.rs.PathParam; +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.IOException; -import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.UUID; +@SuppressWarnings("NonJaxWsWebServices") @DeviceType(value = "doormanager") -@API( name="doormanager_mgt", version="1.0.0", context="/doormanager_mgt") +@API(name = "doormanager_mgt", version = "1.0.0", context = "/doormanager_mgt") public class DoorManagerManagerService { - private static Log log = LogFactory.getLog(DoorManagerManagerService.class); - //TODO; replace this tenant domain - private static final DoorManagerDAO doorManagerDAO = new DoorManagerDAO(); - private final String SUPER_TENANT = "carbon.super"; - @Context //injected response proxy supporting multiple thread - private HttpServletResponse response; - private PrivilegedCarbonContext ctx; - - private UserStoreManager getUserStoreManager() throws UserStoreException { - String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); - PrivilegedCarbonContext.startTenantFlow(); - ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - ctx.setTenantDomain(tenantDomain, true); - if (log.isDebugEnabled()) { - log.debug("Getting thread local carbon context for tenant domain: " + tenantDomain); - } - RealmService realmService = (RealmService) ctx.getOSGiService(RealmService.class, null); - return realmService.getTenantUserRealm(ctx.getTenantId()).getUserStoreManager(); - } - - @Path("manager/device/register") - @POST - public boolean register(@QueryParam("name") String name, @QueryParam("owner") String owner, - @QueryParam("serialNumber") String serialNumber) { - - log.warn("---------------------------------------"); - log.warn(serialNumber); - DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); - String deviceId = serialNumber; - - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(deviceId); - deviceIdentifier.setType(DoorManagerConstants.DEVICE_TYPE); - - try { - if (deviceManagement.getDeviceManagementService().isEnrolled(deviceIdentifier)) { - response.setStatus(Response.Status.CONFLICT.getStatusCode()); - return false; - } - - Device device = new Device(); - device.setDeviceIdentifier(deviceId); - EnrolmentInfo enrolmentInfo = new EnrolmentInfo(); - enrolmentInfo.setDateOfEnrolment(new Date().getTime()); - enrolmentInfo.setDateOfLastUpdate(new Date().getTime()); - enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE); - device.setName(name); - device.setType(DoorManagerConstants.DEVICE_TYPE); - enrolmentInfo.setOwner(owner); - device.setEnrolmentInfo(enrolmentInfo); - - KeyGenerationUtil.createApplicationKeys(DoorManagerConstants.DEVICE_TYPE); - - TokenClient accessTokenClient = new TokenClient(DoorManagerConstants.DEVICE_TYPE); - AccessTokenInfo accessTokenInfo = accessTokenClient.getAccessToken(owner, deviceId); - - //create token - String accessToken = accessTokenInfo.getAccess_token(); - String refreshToken = accessTokenInfo.getRefresh_token(); - List properties = new ArrayList<>(); - - Device.Property accessTokenProperty = new Device.Property(); - accessTokenProperty.setName(DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_ACCESS_TOKEN); - log.warn("locker access Token :"+ accessToken); - accessTokenProperty.setValue(accessToken); - - Device.Property refreshTokenProperty = new Device.Property(); - refreshTokenProperty.setName(DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_REFRESH_TOKEN); - refreshTokenProperty.setValue(refreshToken); - - properties.add(accessTokenProperty); - properties.add(refreshTokenProperty); - device.setProperties(properties); - - boolean added = deviceManagement.getDeviceManagementService().enrollDevice(device); - if (added) { - response.setStatus(Response.Status.OK.getStatusCode()); - } else { - response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode()); - } - - return added; - } catch (DeviceManagementException e) { - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - return false; - } catch (AccessTokenException e) { - e.printStackTrace(); - } finally { - deviceManagement.endTenantFlow(); - } - return true; - } - - @Path("manager/device/remove/{device_id}") - @DELETE - public void removeDevice(@PathParam("device_id") String deviceId, - @Context HttpServletResponse response) { - DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(deviceId); - deviceIdentifier.setType(DoorManagerConstants.DEVICE_TYPE); - try { - boolean removed = deviceManagement.getDeviceManagementService().disenrollDevice( - deviceIdentifier); - if (removed) { - response.setStatus(Response.Status.OK.getStatusCode()); - } else { - response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode()); - } - } catch (DeviceManagementException e) { - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - } finally { - deviceManagement.endTenantFlow(); - } - } - - @Path("manager/device/update/{device_id}") - @POST - public boolean updateDevice(@PathParam("device_id") String deviceId, - @QueryParam("name") String name, - @Context HttpServletResponse response) { - DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(deviceId); - deviceIdentifier.setType(DoorManagerConstants.DEVICE_TYPE); - try { - Device device = deviceManagement.getDeviceManagementService().getDevice(deviceIdentifier); - device.setDeviceIdentifier(deviceId); - device.getEnrolmentInfo().setDateOfLastUpdate(new Date().getTime()); - device.setName(name); - device.setType(DoorManagerConstants.DEVICE_TYPE); - boolean updated = deviceManagement.getDeviceManagementService().modifyEnrollment(device); - if (updated) { - response.setStatus(Response.Status.OK.getStatusCode()); - } else { - response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode()); - } - return updated; - } catch (DeviceManagementException e) { - log.error(e.getErrorMessage()); - return false; - } finally { - deviceManagement.endTenantFlow(); - } - } - - @POST - @Path("manager/getUserCredentials") - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - public Response getUserCredentials(final UserInfo userInfo, @Context HttpServletRequest request, @Context HttpServletResponse response) { - /*try{ - String accessToken, refreshToken; - DoorManagerDAO.beginTransaction(); - if(doorManagerDAO.getAutomaticDoorLockerDeviceDAO().isDoorLockSafeRegistered(userInfo.serialNumber, - userInfo.deviceId)){ - if(doorManagerDAO.getAutomaticDoorLockerDeviceDAO().isUserAllowed(userInfo.serialNumber, - userInfo.UIDofUser, userInfo.deviceId)){ - List userCredentials = doorManagerDAO.getAutomaticDoorLockerDeviceDAO() - .getUserCredentials(userInfo.deviceId, userInfo.UIDofUser); - DoorManagerDAO.commitTransaction(); - if(!userCredentials.isEmpty()){ - accessToken = userCredentials.get(0); - refreshToken = userCredentials.get(1); - if(accessToken != null && refreshToken != null){ - JSONObject credentials = new JSONObject(); - credentials.put("accessToken", accessToken); - credentials.put("refreshToken", refreshToken); - return Response.ok(credentials, MediaType.APPLICATION_JSON_TYPE).build(); - }else{ - return Response.status(Response.Status.UNAUTHORIZED) - .entity("{You have not been registered yet}").build(); - } - }else{ - return Response.status(Response.Status.UNAUTHORIZED) - .entity("{You have not been registered yet}").build(); - } - }else{ - return Response.status(Response.Status.UNAUTHORIZED) - .entity("{You are not allowed open this door}").build(); - } - }else{ - return Response.status(Response.Status.UNAUTHORIZED) - .entity("{This door hasn't been registered yet}").build(); - } - }catch (DoorManagerDeviceMgtPluginException e) { - try { - DoorManagerDAO.rollbackTransaction(); - } catch (DoorManagerDeviceMgtPluginException e1) { - String msg = "Error while retrieving the user credentials of " + userInfo.deviceId; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR) - .entity("{Internal server error has occurred.}").build(); - } - } - return Response.status(Response.Status.NOT_ACCEPTABLE).build();*/ + private static Log log = LogFactory.getLog(DoorManagerManagerService.class); + @Context //injected response proxy supporting multiple thread + private HttpServletResponse response; + + /** + * Generate UUID + * + * @return generated UUID + */ + private static String shortUUID() { + UUID uuid = UUID.randomUUID(); + long l = ByteBuffer.wrap(uuid.toString().getBytes(StandardCharsets.UTF_8)).getLong(); + return Long.toString(l, Character.MAX_RADIX); + } + + /** + * Register new device into IoT Server + * + * @param name name of new device + * @return registration status + */ + @Path("manager/device/register") + @POST + public boolean register(@QueryParam("deviceId") String deviceId, + @QueryParam("name") String name) { + + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(deviceId); + deviceIdentifier.setType(DoorManagerConstants.DEVICE_TYPE); try { - log.warn("========================================="); - log.warn("get info"); - log.warn(userInfo.userName); - log.warn(userInfo.cardNumber); - log.warn(userInfo.deviceId); - if (userInfo.userName != null && userInfo.cardNumber != null && userInfo.deviceId != null) { - try { - UserStoreManager userStoreManager = this.getUserStoreManager(); - if (userStoreManager.isExistingUser(userInfo.userName)) { - String accessToken = userStoreManager.getUserClaimValue(userInfo.userName, "http://wso2.org/claims/lock/accesstoken", null); - String cardNumber = userStoreManager.getUserClaimValue(userInfo.userName, "http://wso2.org/claims/lock/cardnumber", null); - log.warn(accessToken); - log.warn(cardNumber); - if(cardNumber.equals(userInfo.cardNumber)){ - if(accessToken != null && doorManagerDAO.getAutomaticDoorLockerDeviceDAO(). - checkCardDoorAssociation(cardNumber, userInfo.deviceId)){ - JSONObject credentials = new JSONObject(); - credentials.put(DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_ACCESS_TOKEN, accessToken); - credentials.put(DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_ACCESS_TOKEN, accessToken); - sendCEPEvent(userInfo.deviceId, cardNumber, true); - log.warn(doorManagerDAO.getAutomaticDoorLockerDeviceDAO().getUserEmailAddress(cardNumber)); - return Response.ok(credentials, MediaType.APPLICATION_JSON_TYPE).build(); - } - } - } else { - return Response.status(Response.Status.UNAUTHORIZED).build(); - } - } catch (UserStoreException e) { - log.error(e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); - } + if (APIUtil.getDeviceManagementService().isEnrolled(deviceIdentifier)) { + response.setStatus(Response.Status.CONFLICT.getStatusCode()); + return false; } - else { - return Response.status(Response.Status.BAD_REQUEST).build(); + String owner = APIUtil.getAuthenticatedUser(); + 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(DoorManagerConstants.DEVICE_TYPE); + enrolmentInfo.setOwner(owner); + device.setEnrolmentInfo(enrolmentInfo); + KeyGenerationUtil.createApplicationKeys(DoorManagerConstants.DEVICE_TYPE); + TokenClient accessTokenClient = new TokenClient(DoorManagerConstants.DEVICE_TYPE); + AccessTokenInfo accessTokenInfo = accessTokenClient.getAccessToken(owner, deviceId); + + //create token + String accessToken = accessTokenInfo.getAccess_token(); + String refreshToken = accessTokenInfo.getRefresh_token(); + List properties = new ArrayList<>(); + + Device.Property accessTokenProperty = new Device.Property(); + accessTokenProperty.setName(DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_ACCESS_TOKEN); + log.warn("locker access Token :" + accessToken); + accessTokenProperty.setValue(accessToken); + + Device.Property refreshTokenProperty = new Device.Property(); + refreshTokenProperty.setName(DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_REFRESH_TOKEN); + refreshTokenProperty.setValue(refreshToken); + + properties.add(accessTokenProperty); + properties.add(refreshTokenProperty); + device.setProperties(properties); + + boolean added = APIUtil.getDeviceManagementService().enrollDevice(device); + if (added) { + response.setStatus(Response.Status.OK.getStatusCode()); + } else { + response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode()); } - - } catch (Exception e) { + return added; + } catch (DeviceManagementException e) { log.error(e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); + response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); + return false; + } catch (AccessTokenException e) { + log.error(e); + response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); + return false; } - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); - } - - private void sendCEPEvent(String deviceId, String cardId, boolean accessStatus){ - String cepEventReciever = "http://localhost:9768/endpoints/LockEventReciever"; - - HttpClient httpClient = new SystemDefaultHttpClient(); - HttpPost method = new HttpPost(cepEventReciever); - JsonObject event = new JsonObject(); - JsonObject metaData = new JsonObject(); - - metaData.addProperty("deviceID", deviceId); - metaData.addProperty("cardID", cardId); - - event.add("metaData", metaData); - - String eventString = "{\"event\": " + event + "}"; - - try { - StringEntity entity = new StringEntity(eventString); - method.setEntity(entity); - if (cepEventReciever.startsWith("https")) { - method.setHeader("Authorization", "Basic " + Base64.encode(("admin" + ":" + "admin").getBytes())); - } - httpClient.execute(method).getEntity().getContent().close(); - } catch (UnsupportedEncodingException e) { - log.error("Error while constituting CEP event"+ e.getMessage()); - } catch (ClientProtocolException e) { - log.error("Error while sending message to CEP "+ e.getMessage()); - } catch (IOException e) { - log.error("Error while sending message to CEP "+ e.getMessage()); - } - - - } - - @POST - @Path("manager/get_user_info") - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - public Response get_user_info(final UserInfo userInfo) { + } + + /** + * Remove installed device + * + * @param deviceId unique identifier for device + * @param response to request + */ + @Path("manager/device/remove/{device_id}") + @DELETE + public void removeDevice(@PathParam("device_id") String deviceId, + @Context HttpServletResponse response) { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(deviceId); + deviceIdentifier.setType(DoorManagerConstants.DEVICE_TYPE); try { - if (userInfo.userName != null && userInfo.cardNumber != null && userInfo.deviceId != null) { - try { - UserStoreManager userStoreManager = this.getUserStoreManager(); - if (userStoreManager.isExistingUser(userInfo.userName)) { - String accessToken = userStoreManager.getUserClaimValue(userInfo.userName, "http://wso2.org/claims/lock/accesstoken", null); - String cardNumber = userStoreManager.getUserClaimValue(userInfo.userName, "http://wso2.org/claims/lock/cardnumber", null); - if(cardNumber.equals(userInfo.cardNumber)){ - if(accessToken != null){ - JSONObject credentials = new JSONObject(); - credentials.put(DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_ACCESS_TOKEN, accessToken); - return Response.ok(credentials, MediaType.APPLICATION_JSON_TYPE).build(); - } - } - } else { - return Response.status(Response.Status.UNAUTHORIZED).build(); - } - } catch (UserStoreException e) { - log.error(e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); - } + boolean removed = APIUtil.getDeviceManagementService().disenrollDevice( + deviceIdentifier); + if (removed) { + response.setStatus(Response.Status.OK.getStatusCode()); + } else { + response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode()); } - else { - return Response.status(Response.Status.BAD_REQUEST).build(); + } catch (DeviceManagementException e) { + response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); + } + } + + /** + * Update device name + * + * @param deviceId unique identifier for device + * @param name new name of the device + * @param response to request + * @return update status + */ + @Path("manager/device/update/{device_id}") + @POST + public boolean updateDevice(@PathParam("device_id") String deviceId, + @QueryParam("name") String name, + @Context HttpServletResponse response) { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(deviceId); + deviceIdentifier.setType(DoorManagerConstants.DEVICE_TYPE); + try { + Device device = APIUtil.getDeviceManagementService().getDevice(deviceIdentifier); + device.setDeviceIdentifier(deviceId); + device.getEnrolmentInfo().setDateOfLastUpdate(new Date().getTime()); + device.setName(name); + device.setType(DoorManagerConstants.DEVICE_TYPE); + boolean updated = APIUtil.getDeviceManagementService().modifyEnrollment(device); + if (updated) { + response.setStatus(Response.Status.OK.getStatusCode()); + } else { + response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode()); } - - } catch (Exception e) { - log.error(e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); + return updated; + } catch (DeviceManagementException e) { + log.error(e.getErrorMessage()); + return false; } - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); - - } - - @Path("manager/device/{device_id}") - @GET - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - public Device getDevice(@PathParam("device_id") String deviceId) { - DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(deviceId); - deviceIdentifier.setType(DoorManagerConstants.DEVICE_TYPE); - try { - return deviceManagement.getDeviceManagementService().getDevice(deviceIdentifier); - } catch (DeviceManagementException ex) { - log.error("Error occurred while retrieving device with Id " + deviceId + "\n" + ex); - return null; - } finally { - deviceManagement.endTenantFlow(); - } - } - - @Path("manager/device/{sketch_type}/download") - @GET - @Produces(MediaType.APPLICATION_JSON) - public Response downloadSketch(@QueryParam("owner") String owner, - @QueryParam("deviceName") String deviceName, - @PathParam("sketch_type") String sketchType) { - try { - ZipArchive zipFile = createDownloadFile(owner, deviceName, sketchType); - Response.ResponseBuilder response = Response.ok(FileUtils.readFileToByteArray(zipFile.getZipFile())); - response.type("application/zip"); - response.header("Content-Disposition", "attachment; filename=\"" + zipFile.getFileName() + "\""); - return response.build(); - } catch (IllegalArgumentException ex) { - return Response.status(400).entity(ex.getMessage()).build();//bad request - } catch (DeviceManagementException ex) { - return Response.status(500).entity(ex.getMessage()).build(); - } catch (AccessTokenException ex) { - return Response.status(500).entity(ex.getMessage()).build(); - } catch (DeviceControllerException ex) { - return Response.status(500).entity(ex.getMessage()).build(); - } catch (IOException ex) { - return Response.status(500).entity(ex.getMessage()).build(); - } - } - - private ZipArchive createDownloadFile(String owner, String deviceName, String sketchType) - throws DeviceManagementException, AccessTokenException, DeviceControllerException { - if (owner == null) { - throw new IllegalArgumentException("Error on createDownloadFile() Owner is null!"); - } - //create new device id - String deviceId = shortUUID(); - KeyGenerationUtil.createApplicationKeys(DoorManagerConstants.DEVICE_TYPE); - TokenClient accessTokenClient = new TokenClient(DoorManagerConstants.DEVICE_TYPE); - AccessTokenInfo accessTokenInfo = accessTokenClient.getAccessToken(owner, deviceId); - //create token - String accessToken = accessTokenInfo.getAccess_token(); - String refreshToken = accessTokenInfo.getRefresh_token(); - //adding registering data - boolean status; - //Register the device with CDMF - //status = register(deviceId, deviceName, owner); - status = true; - if (!status) { - String msg = "Error occurred while registering the device with " + "id: " + deviceId + " owner:" + owner; - throw new DeviceManagementException(msg); - } - ZipUtil ziputil = new ZipUtil(); - ZipArchive zipFile = ziputil.createZipFile(owner, SUPER_TENANT, sketchType, deviceId, deviceName, accessToken, - refreshToken); - zipFile.setDeviceId(deviceId); - return zipFile; - } - - private static String shortUUID() { - UUID uuid = UUID.randomUUID(); - long l = ByteBuffer.wrap(uuid.toString().getBytes(StandardCharsets.UTF_8)).getLong(); - return Long.toString(l, Character.MAX_RADIX); - } + } + + /** + * Get device information + * + * @param deviceId unique identifier for device + * @return device + */ + @Path("manager/device/{device_id}") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Device getDevice(@PathParam("device_id") String deviceId) { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(deviceId); + deviceIdentifier.setType(DoorManagerConstants.DEVICE_TYPE); + try { + return APIUtil.getDeviceManagementService().getDevice(deviceIdentifier); + } catch (DeviceManagementException ex) { + log.error("Error occurred while retrieving device with Id " + deviceId + "\n" + ex); + return null; + } + } + + /** + * This will download the agent for given device type + * + * @param deviceName name of the device which is to be created + * @param sketchType name of sketch type + * @return agent archive + */ + @Path("manager/device/{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())); + response.type("application/zip"); + response.header("Content-Disposition", "attachment; filename=\"" + zipFile.getFileName() + "\""); + + return response.build(); + } catch (IllegalArgumentException ex) { + return Response.status(400).entity(ex.getMessage()).build();//bad request + } catch (DeviceManagementException ex) { + return Response.status(500).entity(ex.getMessage()).build(); + } catch (AccessTokenException ex) { + return Response.status(500).entity(ex.getMessage()).build(); + } catch (DeviceControllerException ex) { + return Response.status(500).entity(ex.getMessage()).build(); + } catch (IOException ex) { + return Response.status(500).entity(ex.getMessage()).build(); + } + } + + /** + * This will give link to generated agent + * + * @param deviceName name of the device which is to be created + * @param sketchType name of sketch type + * @return link to generated agent + */ + @Path("manager/device/{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); + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("Sending Requested sketch by type: " + sketchType + + " and id: " + zipFile.getDeviceId() + "."); + responsePayload.setResponseContent(zipFile.getDeviceId()); + return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + } catch (IllegalArgumentException ex) { + return Response.status(HttpStatus.SC_BAD_REQUEST).entity(ex.getMessage()).build(); + } catch (DeviceManagementException ex) { + log.error("Error occurred while creating device with name " + deviceName + "\n", ex); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(ex.getMessage()).build(); + } catch (AccessTokenException ex) { + log.error(ex.getMessage(), ex); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(ex.getMessage()).build(); + } catch (DeviceControllerException ex) { + log.error(ex.getMessage(), ex); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(ex.getMessage()).build(); + } + } + + /** + * This will give link to generated agent + * + * @param deviceName name of the device which is to be created + * @param sketchType name of sketch type + * @return link to generated agent + */ + private ZipArchive createDownloadFile(String owner, String deviceName, String sketchType) + throws DeviceManagementException, AccessTokenException, DeviceControllerException { + if (owner == null) { + throw new IllegalArgumentException("Error on createDownloadFile() Owner is null!"); + } + //create new device id + String deviceId = shortUUID(); + KeyGenerationUtil.createApplicationKeys(DoorManagerConstants.DEVICE_TYPE); + TokenClient accessTokenClient = new TokenClient(DoorManagerConstants.DEVICE_TYPE); + AccessTokenInfo accessTokenInfo = accessTokenClient.getAccessToken(owner, deviceId); + //create token + String accessToken = accessTokenInfo.getAccess_token(); + String refreshToken = accessTokenInfo.getRefresh_token(); + //adding registering data + boolean status; + //Register the device with CDMF + status = register(deviceId, deviceName); + if (!status) { + String msg = "Error occurred while registering the device with " + "id: " + deviceId + " owner:" + owner; + throw new DeviceManagementException(msg); + } + ZipUtil ziputil = new ZipUtil(); + ZipArchive zipFile = ziputil.createZipFile(owner, APIUtil.getTenantDomainOfUser(), sketchType, + deviceId, deviceName, accessToken, refreshToken); + zipFile.setDeviceId(deviceId); + return zipFile; + } } diff --git a/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/util/APIUtil.java b/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/util/APIUtil.java new file mode 100644 index 00000000..f9dcb32d --- /dev/null +++ b/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/util/APIUtil.java @@ -0,0 +1,54 @@ +/* +* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +* +* WSO2 Inc. licenses this file to you under the Apache License, +* Version 2.0 (the "License"); you may not use this file except +* in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +package org.homeautomation.doormanager.manager.api.util; + +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; + +/** + * This class provides utility functions used by REST-API. + */ +public class APIUtil { + + public static String getAuthenticatedUser() { + PrivilegedCarbonContext threadLocalCarbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + String username = threadLocalCarbonContext.getUsername(); + String tenantDomain = threadLocalCarbonContext.getTenantDomain(); + if (username.endsWith(tenantDomain)) { + return username.substring(0, username.lastIndexOf("@")); + } + return username; + } + + public static String getTenantDomainOfUser() { + PrivilegedCarbonContext threadLocalCarbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + return threadLocalCarbonContext.getTenantDomain(); + } + + public static DeviceManagementProviderService getDeviceManagementService() { + PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + DeviceManagementProviderService deviceManagementProviderService = + (DeviceManagementProviderService) ctx.getOSGiService(DeviceManagementProviderService.class, null); + if (deviceManagementProviderService == null) { + String msg = "Device Management service has not initialized."; + throw new IllegalStateException(msg); + } + return deviceManagementProviderService; + } +} diff --git a/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/util/ResponsePayload.java b/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/util/ResponsePayload.java new file mode 100644 index 00000000..bcf798eb --- /dev/null +++ b/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/util/ResponsePayload.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.homeautomation.doormanager.manager.api.util; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class ResponsePayload { + + private int statusCode; + private String messageFromServer; + private Object responseContent; + + public static ResponsePayload.ResponsePayloadBuilder statusCode(int statusCode) { + ResponsePayload message = new ResponsePayload(); + return message.getBuilder().statusCode(statusCode); + } + + public static ResponsePayload.ResponsePayloadBuilder messageFromServer( + String messageFromServer) { + ResponsePayload message = new ResponsePayload(); + return message.getBuilder().messageFromServer(messageFromServer); + } + + public static ResponsePayload.ResponsePayloadBuilder responseContent(String responseContent) { + ResponsePayload message = new ResponsePayload(); + return message.getBuilder().responseContent(responseContent); + } + + @XmlElement + public int getStatusCode() { + return statusCode; + } + + public void setStatusCode(int statusCode) { + this.statusCode = statusCode; + } + + @XmlElement + public String getMessageFromServer() { + return messageFromServer; + } + + public void setMessageFromServer(String messageFromServer) { + this.messageFromServer = messageFromServer; + } + + @XmlElement + public Object getResponseContent() { + return responseContent; + } + + public void setResponseContent(Object responseContent) { + this.responseContent = responseContent; + } + + private ResponsePayload.ResponsePayloadBuilder getBuilder() { + return new ResponsePayload.ResponsePayloadBuilder(); + } + + public class ResponsePayloadBuilder { + + private int statusCode; + private String messageFromServer; + private Object responseContent; + + public ResponsePayloadBuilder statusCode(int statusCode) { + this.statusCode = statusCode; + return this; + } + + public ResponsePayloadBuilder messageFromServer(String messageFromServer) { + this.messageFromServer = messageFromServer; + return this; + } + + public ResponsePayloadBuilder responseContent(String responseContent) { + this.responseContent = responseContent; + return this; + } + + public ResponsePayload build() { + ResponsePayload payload = new ResponsePayload(); + payload.setStatusCode(statusCode); + payload.setMessageFromServer(messageFromServer); + payload.setResponseContent(responseContent); + return payload; + } + } + +} diff --git a/modules/samples/doormanager/component/manager/src/main/webapp/META-INF/permissions.xml b/modules/samples/doormanager/component/manager/src/main/webapp/META-INF/permissions.xml new file mode 100644 index 00000000..53ab317b --- /dev/null +++ b/modules/samples/doormanager/component/manager/src/main/webapp/META-INF/permissions.xml @@ -0,0 +1,73 @@ + + + + + + + + + + Get device + /device-mgt/user/devices/list + /manager/device/* + GET + emm_admin,emm_user + + + Add device + /device-mgt/user/devices/add + /manager/device/register + PUT + emm_admin,emm_user + + + Download device + /device-mgt/user/devices/add + /manager/device/doormanager/download + GET + emm_admin,emm_user + + + Generate link to download + /device-mgt/user/devices/add + /manager/device/doormanager/generate_link + GET + emm_admin,emm_user + + + Update device + /device-mgt/user/devices/update + /manager/device/update/* + POST + emm_admin,emm_user + + + Remove device + /device-mgt/user/devices/remove + /manager/device/remove/* + DELETE + emm_admin,emm_user + + \ No newline at end of file diff --git a/modules/samples/doormanager/component/manager/src/main/webapp/WEB-INF/web.xml b/modules/samples/doormanager/component/manager/src/main/webapp/WEB-INF/web.xml index 8772fc93..bdf6edc9 100644 --- a/modules/samples/doormanager/component/manager/src/main/webapp/WEB-INF/web.xml +++ b/modules/samples/doormanager/component/manager/src/main/webapp/WEB-INF/web.xml @@ -40,7 +40,7 @@ doAuthentication - false + true diff --git a/modules/samples/doormanager/component/plugin/pom.xml b/modules/samples/doormanager/component/plugin/pom.xml index a2cd366e..57d70d57 100644 --- a/modules/samples/doormanager/component/plugin/pom.xml +++ b/modules/samples/doormanager/component/plugin/pom.xml @@ -19,15 +19,15 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> org.homeautomation - component + doormanager-component 1.0.0-SNAPSHOT ../pom.xml 4.0.0 1.0.0-SNAPSHOT - ${groupId}.doormanager.plugin + org.homeautomation.doormanager.plugin bundle - ${groupId}.doormanager.plugin + org.homeautomation.doormanager.plugin http://wso2.org @@ -52,8 +52,8 @@ true - ${groupId}.doormanager.plugin - ${groupId}.doormanager.plugin + org.homeautomation.doormanager.plugin + org.homeautomation.doormanager.plugin 1.0.0-SNAPSHOT IoT Server Impl Bundle org.homeautomation.doormanager.plugin.internal @@ -61,10 +61,8 @@ org.osgi.framework, org.osgi.service.component, org.apache.commons.logging, - javax.xml.bind.*, javax.naming, javax.sql, - javax.xml.bind.annotation.*, javax.xml.parsers, javax.net, javax.net.ssl, @@ -74,6 +72,8 @@ org.wso2.carbon.context.*, org.wso2.carbon.ndatasource.core, org.wso2.carbon.device.mgt.iot.*, + org.wso2.carbon.user.api.*, + org.wso2.carbon.user.core.service.* !org.homeautomation.doormanager.plugin.internal, @@ -117,9 +117,67 @@ org.wso2.carbon org.wso2.carbon.user.api - + + org.wso2.carbon + org.wso2.carbon.utils + + + org.bouncycastle.wso2 + bcprov-jdk15on + + + org.wso2.carbon + org.wso2.carbon.user.api + + + org.wso2.carbon + org.wso2.carbon.queuing + + + org.wso2.carbon + org.wso2.carbon.base + + + org.apache.axis2.wso2 + axis2 + + + org.igniterealtime.smack.wso2 + smack + + + org.igniterealtime.smack.wso2 + smackx + + + jaxen + jaxen + + + commons-fileupload.wso2 + commons-fileupload + + + org.apache.ant.wso2 + ant + + + org.apache.ant.wso2 + ant + + + commons-httpclient.wso2 + commons-httpclient + + + org.eclipse.equinox + javax.servlet + + + org.wso2.carbon + org.wso2.carbon.registry.api + + + \ No newline at end of file diff --git a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/exception/DoorManagerDeviceMgtPluginException.java b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/exception/DoorManagerDeviceMgtPluginException.java index 295bb587..78dd8484 100644 --- a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/exception/DoorManagerDeviceMgtPluginException.java +++ b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/exception/DoorManagerDeviceMgtPluginException.java @@ -18,18 +18,10 @@ package org.homeautomation.doormanager.plugin.exception; -public class DoorManagerDeviceMgtPluginException extends Exception{ +public class DoorManagerDeviceMgtPluginException extends Exception { private String errorMessage; - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - public DoorManagerDeviceMgtPluginException(String msg, Exception nestedEx) { super(msg, nestedEx); setErrorMessage(msg); @@ -53,4 +45,12 @@ public class DoorManagerDeviceMgtPluginException extends Exception{ super(cause); } + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + } diff --git a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManagerManager.java b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManager.java similarity index 75% rename from modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManagerManager.java rename to modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManager.java index 7523c4ed..8c9c46ef 100644 --- a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManagerManager.java +++ b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManager.java @@ -22,19 +22,25 @@ package org.homeautomation.doormanager.plugin.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.homeautomation.doormanager.plugin.exception.DoorManagerDeviceMgtPluginException; +import org.homeautomation.doormanager.plugin.impl.dao.DoorLockSafe; import org.homeautomation.doormanager.plugin.impl.dao.DoorManagerDAO; +import org.wso2.carbon.context.CarbonContext; +import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.common.*; import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration; import org.wso2.carbon.device.mgt.common.license.mgt.License; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException; +import org.wso2.carbon.user.api.UserStoreException; +import org.wso2.carbon.user.api.UserStoreManager; +import org.wso2.carbon.user.core.service.RealmService; import java.util.List; -public class DoorManagerManager implements DeviceManager { - - private static final Log log = LogFactory.getLog(DoorManagerManager.class); +public class DoorManager implements DeviceManager { + private static final Log log = LogFactory.getLog(DoorManager.class); private static final DoorManagerDAO DOOR_MANAGER_DAO = new DoorManagerDAO(); + private PrivilegedCarbonContext ctx; @Override public FeatureManager getFeatureManager() { @@ -44,13 +50,11 @@ public class DoorManagerManager implements DeviceManager { @Override public boolean saveConfiguration(TenantConfiguration tenantConfiguration) throws DeviceManagementException { - //TODO implement this return false; } @Override public TenantConfiguration getConfiguration() throws DeviceManagementException { - //TODO implement this return null; } @@ -94,7 +98,7 @@ public class DoorManagerManager implements DeviceManager { e1.printStackTrace(); } String msg = "Error while updating the enrollment of the Automatic Door Locker device : " + - device.getDeviceIdentifier(); + device.getDeviceIdentifier(); log.error(msg, e); throw new DeviceManagementException(msg, e); } @@ -137,7 +141,7 @@ public class DoorManagerManager implements DeviceManager { } } catch (DoorManagerDeviceMgtPluginException e) { String msg = "Error while checking the enrollment status of Automatic Door Locker device : " + - deviceId.getId(); + deviceId.getId(); log.error(msg, e); throw new DeviceManagementException(msg, e); } @@ -158,7 +162,8 @@ public class DoorManagerManager implements DeviceManager { @Override public Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException { Device device; - try {if (log.isDebugEnabled()) { + try { + if (log.isDebugEnabled()) { log.debug("Getting the details of Automatic Door Locker device : " + deviceId.getId()); } device = DOOR_MANAGER_DAO.getAutomaticDoorLockerDeviceDAO().getDevice(deviceId.getId()); @@ -230,7 +235,7 @@ public class DoorManagerManager implements DeviceManager { @Override public List getAllDevices() throws DeviceManagementException { - List devices = null; + List devices; try { if (log.isDebugEnabled()) { log.debug("Fetching the details of all Automatic Door Locker devices"); @@ -244,4 +249,62 @@ public class DoorManagerManager implements DeviceManager { return devices; } + /** + * Get userStore manager + * + * @return + * @throws UserStoreException + */ + public UserStoreManager getUserStoreManager() throws UserStoreException { + String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + PrivilegedCarbonContext.startTenantFlow(); + ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + ctx.setTenantDomain(tenantDomain, true); + if (log.isDebugEnabled()) { + log.debug("Getting thread local carbon context for tenant domain: " + tenantDomain); + } + RealmService realmService = (RealmService) ctx.getOSGiService(RealmService.class, null); + return realmService.getTenantUserRealm(ctx.getTenantId()).getUserStoreManager(); + } + + /** + * Ends tenant flow. + */ + private void endTenantFlow() { + PrivilegedCarbonContext.endTenantFlow(); + ctx = null; + if (log.isDebugEnabled()) { + log.debug("Tenant flow ended"); + } + } + + public boolean assignUserToLock(DoorLockSafe doorLockSafe) throws DoorManagerDeviceMgtPluginException { + boolean status; + try { + DoorManagerDAO.beginTransaction(); + status = DOOR_MANAGER_DAO.getAutomaticDoorLockerDeviceDAO().registerDoorLockSafe(doorLockSafe); + DoorManagerDAO.commitTransaction(); + return status; + } catch (DoorManagerDeviceMgtPluginException e) { + try { + DoorManagerDAO.rollbackTransaction(); + throw new DoorManagerDeviceMgtPluginException(e); + } catch (DoorManagerDeviceMgtPluginException e1) { + String msg = "Error while adding new access card to user to control the lock " + + doorLockSafe.getOwner(); + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } + } + } + + public boolean checkCardDoorAssociation(String cardNumber, String deviceId) + throws DoorManagerDeviceMgtPluginException { + boolean status; + DoorManagerDAO.beginTransaction(); + status = DOOR_MANAGER_DAO.getAutomaticDoorLockerDeviceDAO().checkCardDoorAssociation(cardNumber, deviceId); + DoorManagerDAO.commitTransaction(); + return status; + } + } \ No newline at end of file diff --git a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManagerManagerService.java b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManagerManagerService.java deleted file mode 100644 index 3a8f0d11..00000000 --- a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManagerManagerService.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.homeautomation.doormanager.plugin.impl; - -import org.homeautomation.doormanager.plugin.constants.DoorManagerConstants; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.common.DeviceManager; -import org.wso2.carbon.device.mgt.common.app.mgt.Application; -import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException; -import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager; -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService; - -import java.util.List; - -public class DoorManagerManagerService implements DeviceManagementService{ - private DeviceManager deviceManager; - - @Override - public String getType() { - return DoorManagerConstants.DEVICE_TYPE; - } - - - @Override - public String getProviderTenantDomain() { - return "carbon.super"; - } - - @Override - public boolean isSharedWithAllTenants() { - return true; - } - - @Override - public String[] getSharedTenantsDomain() { - return new String[0]; - } - - @Override - public void init() throws DeviceManagementException { - this.deviceManager=new DoorManagerManager(); - } - - @Override - public DeviceManager getDeviceManager() { - return deviceManager; - } - - @Override - public ApplicationManager getApplicationManager() { - return null; - } - - @Override - public void notifyOperationToDevices(Operation operation, List deviceIds) - throws DeviceManagementException { - - } - - @Override - public Application[] getApplications(String domain, int pageNumber, int size) - throws ApplicationManagementException { - return new Application[0]; - } - - @Override - public void updateApplicationStatus(DeviceIdentifier deviceId, Application application, - String status) throws ApplicationManagementException { - - } - - @Override - public String getApplicationStatus(DeviceIdentifier deviceId, Application application) - throws ApplicationManagementException { - return null; - } - - @Override - public void installApplicationForDevices(Operation operation, List deviceIdentifiers) - throws ApplicationManagementException { - - } - - @Override - public void installApplicationForUsers(Operation operation, List userNameList) - throws ApplicationManagementException { - - } - - @Override - public void installApplicationForUserRoles(Operation operation, List userRoleList) - throws ApplicationManagementException { - - } -} diff --git a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManagerService.java b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManagerService.java new file mode 100644 index 00000000..7f8aa7f6 --- /dev/null +++ b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/DoorManagerService.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.homeautomation.doormanager.plugin.impl; + +import org.homeautomation.doormanager.plugin.constants.DoorManagerConstants; +import org.wso2.carbon.device.mgt.common.DeviceIdentifier; +import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.common.DeviceManager; +import org.wso2.carbon.device.mgt.common.app.mgt.Application; +import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException; +import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager; +import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; +import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService; + +import java.util.List; + +public class DoorManagerService implements DeviceManagementService { + private DeviceManager deviceManager; + + @Override + public String getType() { + return DoorManagerConstants.DEVICE_TYPE; + } + + + @Override + public String getProviderTenantDomain() { + return "carbon.super"; + } + + @Override + public boolean isSharedWithAllTenants() { + return true; + } + + @Override + public String[] getSharedTenantsDomain() { + return new String[0]; + } + + @Override + public void init() throws DeviceManagementException { + this.deviceManager = new DoorManager(); + } + + @Override + public DeviceManager getDeviceManager() { + return deviceManager; + } + + @Override + public ApplicationManager getApplicationManager() { + return null; + } + + @Override + public void notifyOperationToDevices(Operation operation, List deviceIds) + throws DeviceManagementException { + + } + + @Override + public Application[] getApplications(String domain, int pageNumber, int size) + throws ApplicationManagementException { + return new Application[0]; + } + + @Override + public void updateApplicationStatus(DeviceIdentifier deviceId, Application application, + String status) throws ApplicationManagementException { + + } + + @Override + public String getApplicationStatus(DeviceIdentifier deviceId, Application application) + throws ApplicationManagementException { + return null; + } + + @Override + public void installApplicationForDevices(Operation operation, List deviceIdentifiers) + throws ApplicationManagementException { + + } + + @Override + public void installApplicationForUsers(Operation operation, List userNameList) + throws ApplicationManagementException { + + } + + @Override + public void installApplicationForUserRoles(Operation operation, List userRoleList) + throws ApplicationManagementException { + + } +} diff --git a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/DoorLockSafe.java b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/DoorLockSafe.java index 52d3679f..2e7fa720 100644 --- a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/DoorLockSafe.java +++ b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/DoorLockSafe.java @@ -1,7 +1,4 @@ -package org.homeautomation.doormanager.plugin.impl.dao; -/* - -*/ + ~ under the License.*/ +package org.homeautomation.doormanager.plugin.impl.dao; public class DoorLockSafe { + private String owner; + private String deviceId; + private String UIDofUser; + private String serialNumber; + private String policy; + private String emailAddress; + private String accessToken; + private String refreshToken; + public String getOwner() { return owner; } @@ -84,13 +89,4 @@ public class DoorLockSafe { public void setRefreshToken(String refreshToken) { this.refreshToken = refreshToken; } - - private String owner; - private String deviceId; - private String UIDofUser; - private String serialNumber; - private String policy; - private String emailAddress; - private String accessToken; - private String refreshToken; } diff --git a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/DoorManagerDAO.java b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/DoorManagerDAO.java index 542bf099..a9ee7e66 100644 --- a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/DoorManagerDAO.java +++ b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/DoorManagerDAO.java @@ -24,7 +24,6 @@ import org.homeautomation.doormanager.plugin.constants.DoorManagerConstants; import org.homeautomation.doormanager.plugin.exception.DoorManagerDeviceMgtPluginException; import org.homeautomation.doormanager.plugin.impl.dao.impl.DoorManagerDAOImpl; - import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; @@ -34,101 +33,100 @@ import java.sql.SQLException; public class DoorManagerDAO { - private static final Log log = LogFactory.getLog(DoorManagerDAO.class); - static DataSource dataSource; - private static ThreadLocal currentConnection = new ThreadLocal(); + private static final Log log = LogFactory.getLog(DoorManagerDAO.class); + static DataSource dataSource; + private static ThreadLocal currentConnection = new ThreadLocal(); - public DoorManagerDAO() { + public DoorManagerDAO() { initAutomaticDoorLOckerDAO(); - } - - public static void initAutomaticDoorLOckerDAO() { - try { - Context ctx = new InitialContext(); - dataSource = (DataSource) ctx.lookup(DoorManagerConstants.DATA_SOURCE_NAME); - } catch (NamingException e) { - log.error("Error while looking up the data source: " + - DoorManagerConstants.DATA_SOURCE_NAME); - } - - } - - - public DoorManagerDAOImpl getAutomaticDoorLockerDeviceDAO() { - return new DoorManagerDAOImpl(); - } - - public static void beginTransaction() throws DoorManagerDeviceMgtPluginException { - try { - Connection conn = dataSource.getConnection(); - conn.setAutoCommit(false); - currentConnection.set(conn); - } catch (SQLException e) { - throw new DoorManagerDeviceMgtPluginException( - "Error occurred while retrieving datasource connection", e); - } - } - - public static Connection getConnection() throws DoorManagerDeviceMgtPluginException { - if (currentConnection.get() == null) { - try { - currentConnection.set(dataSource.getConnection()); - } catch (SQLException e) { - throw new DoorManagerDeviceMgtPluginException( - "Error occurred while retrieving data source connection", e); - } - } - return currentConnection.get(); - } - - public static void commitTransaction() throws DoorManagerDeviceMgtPluginException { - try { - Connection conn = currentConnection.get(); - if (conn != null) { - conn.commit(); - } else { - if (log.isDebugEnabled()) { - log.debug("Datasource connection associated with the current thread is null, " + - "hence commit has not been attempted"); - } - } - } catch (SQLException e) { - throw new DoorManagerDeviceMgtPluginException( - "Error occurred while committing the transaction", e); - } finally { - closeConnection(); - } - } - - public static void closeConnection() throws DoorManagerDeviceMgtPluginException { - - Connection con = currentConnection.get(); - if (con != null) { - try { - con.close(); - } catch (SQLException e) { - log.error("Error occurred while close the connection"); - } - } - currentConnection.remove(); - } - - public static void rollbackTransaction() throws DoorManagerDeviceMgtPluginException { - try { - Connection conn = currentConnection.get(); - if (conn != null) { - conn.rollback(); - } else { - if (log.isDebugEnabled()) { - log.debug( - "Datasource connection associated with the current thread is null, " + + } + + public static void initAutomaticDoorLOckerDAO() { + try { + Context ctx = new InitialContext(); + dataSource = (DataSource) ctx.lookup(DoorManagerConstants.DATA_SOURCE_NAME); + } catch (NamingException e) { + log.error("Error while looking up the data source: " + + DoorManagerConstants.DATA_SOURCE_NAME); + } + + } + + public static void beginTransaction() throws DoorManagerDeviceMgtPluginException { + try { + Connection conn = dataSource.getConnection(); + conn.setAutoCommit(false); + currentConnection.set(conn); + } catch (SQLException e) { + throw new DoorManagerDeviceMgtPluginException( + "Error occurred while retrieving datasource connection", e); + } + } + + public static Connection getConnection() throws DoorManagerDeviceMgtPluginException { + if (currentConnection.get() == null) { + try { + currentConnection.set(dataSource.getConnection()); + } catch (SQLException e) { + throw new DoorManagerDeviceMgtPluginException( + "Error occurred while retrieving data source connection", e); + } + } + return currentConnection.get(); + } + + public static void commitTransaction() throws DoorManagerDeviceMgtPluginException { + try { + Connection conn = currentConnection.get(); + if (conn != null) { + conn.commit(); + } else { + if (log.isDebugEnabled()) { + log.debug("Datasource connection associated with the current thread is null, " + + "hence commit has not been attempted"); + } + } + } catch (SQLException e) { + throw new DoorManagerDeviceMgtPluginException( + "Error occurred while committing the transaction", e); + } finally { + closeConnection(); + } + } + + public static void closeConnection() throws DoorManagerDeviceMgtPluginException { + + Connection con = currentConnection.get(); + if (con != null) { + try { + con.close(); + } catch (SQLException e) { + log.error("Error occurred while close the connection"); + } + } + currentConnection.remove(); + } + + public static void rollbackTransaction() throws DoorManagerDeviceMgtPluginException { + try { + Connection conn = currentConnection.get(); + if (conn != null) { + conn.rollback(); + } else { + if (log.isDebugEnabled()) { + log.debug( + "Datasource connection associated with the current thread is null, " + "hence rollback has not been attempted"); - } - } - } catch (SQLException e) { - throw new DoorManagerDeviceMgtPluginException("Error occurred while rollback the transaction", e); - } finally { - closeConnection(); - } - } + } + } + } catch (SQLException e) { + throw new DoorManagerDeviceMgtPluginException("Error occurred while rollback the transaction", e); + } finally { + closeConnection(); + } + } + + public DoorManagerDAOImpl getAutomaticDoorLockerDeviceDAO() { + return new DoorManagerDAOImpl(); + } } \ No newline at end of file diff --git a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/impl/DoorManagerDAOImpl.java b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/impl/DoorManagerDAOImpl.java index 56d5affa..a4512d73 100644 --- a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/impl/DoorManagerDAOImpl.java +++ b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/impl/DoorManagerDAOImpl.java @@ -22,8 +22,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.homeautomation.doormanager.plugin.constants.DoorManagerConstants; import org.homeautomation.doormanager.plugin.exception.DoorManagerDeviceMgtPluginException; -import org.homeautomation.doormanager.plugin.impl.dao.DoorManagerDAO; import org.homeautomation.doormanager.plugin.impl.dao.DoorLockSafe; +import org.homeautomation.doormanager.plugin.impl.dao.DoorManagerDAO; import org.homeautomation.doormanager.plugin.impl.dao.util.DoorManagerUtils; import org.wso2.carbon.device.mgt.common.Device; @@ -32,9 +32,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * Device Dao for automatic door locker Devices. @@ -42,434 +40,435 @@ import java.util.Map; public class DoorManagerDAOImpl { - private static final Log log = LogFactory.getLog(DoorManagerDAOImpl.class); + private static final Log log = LogFactory.getLog(DoorManagerDAOImpl.class); - public Device getDevice(String deviceId) throws DoorManagerDeviceMgtPluginException { - Connection conn = null; - PreparedStatement stmt = null; - Device automaticDoorLockerDevice = null; - ResultSet resultSet = null; - try { - conn = DoorManagerDAO.getConnection(); - String selectDBQuery = - "SELECT doormanager_DEVICE_ID, DEVICE_NAME" + - " FROM doormanager_DEVICE WHERE doormanager_DEVICE_ID = ?"; - stmt = conn.prepareStatement(selectDBQuery); - stmt.setString(1, deviceId); - resultSet = stmt.executeQuery(); - if (resultSet.next()) { - automaticDoorLockerDevice = new Device(); - automaticDoorLockerDevice.setName(resultSet.getString( - DoorManagerConstants.DEVICE_PLUGIN_DEVICE_NAME)); - List properties = new ArrayList<>(); - automaticDoorLockerDevice.setProperties(properties); - if (log.isDebugEnabled()) { - log.debug("Locker Manager service " + deviceId + " data has been fetched from" + - "Locker Manager database."); - } - } - } catch (SQLException e) { - String msg = "Error occurred while fetching Locker Manager device : '" + deviceId + "'"; - log.error(msg, e); - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, resultSet); - DoorManagerDAO.closeConnection(); - } - return automaticDoorLockerDevice; - } + public Device getDevice(String deviceId) throws DoorManagerDeviceMgtPluginException { + Connection conn = null; + PreparedStatement stmt = null; + Device automaticDoorLockerDevice = null; + ResultSet resultSet = null; + try { + conn = DoorManagerDAO.getConnection(); + String selectDBQuery = + "SELECT doormanager_DEVICE_ID, DEVICE_NAME" + + " FROM doormanager_DEVICE WHERE doormanager_DEVICE_ID = ?"; + stmt = conn.prepareStatement(selectDBQuery); + stmt.setString(1, deviceId); + resultSet = stmt.executeQuery(); + if (resultSet.next()) { + automaticDoorLockerDevice = new Device(); + automaticDoorLockerDevice.setName(resultSet.getString( + DoorManagerConstants.DEVICE_PLUGIN_DEVICE_NAME)); + List properties = new ArrayList<>(); + automaticDoorLockerDevice.setProperties(properties); + if (log.isDebugEnabled()) { + log.debug("Locker Manager service " + deviceId + " data has been fetched from" + + "Locker Manager database."); + } + } + } catch (SQLException e) { + String msg = "Error occurred while fetching Locker Manager device : '" + deviceId + "'"; + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, resultSet); + DoorManagerDAO.closeConnection(); + } + return automaticDoorLockerDevice; + } - public boolean addDevice(Device automaticDoorLOcker) throws DoorManagerDeviceMgtPluginException { - boolean status = false; - Connection conn = null; - PreparedStatement stmt = null; - try { - conn = DoorManagerDAO.getConnection(); - String createDBQuery = - "INSERT INTO doormanager_DEVICE(doormanager_DEVICE_ID, DEVICE_NAME, ACCESS_TOKEN, REFRESH_TOKEN) VALUES (?, ?, ?, ?)"; + public boolean addDevice(Device automaticDoorLOcker) throws DoorManagerDeviceMgtPluginException { + boolean status = false; + Connection conn = null; + PreparedStatement stmt = null; + try { + conn = DoorManagerDAO.getConnection(); + String createDBQuery = + "INSERT INTO doormanager_DEVICE(doormanager_DEVICE_ID, DEVICE_NAME, ACCESS_TOKEN, REFRESH_TOKEN) VALUES (?, ?, ?, ?)"; - stmt = conn.prepareStatement(createDBQuery); - stmt.setString(1, automaticDoorLOcker.getDeviceIdentifier()); - stmt.setString(2, automaticDoorLOcker.getName()); - stmt.setString(3, DoorManagerUtils.getDeviceProperty( - automaticDoorLOcker.getProperties(), - DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_ACCESS_TOKEN)); - stmt.setString(4, DoorManagerUtils.getDeviceProperty( - automaticDoorLOcker.getProperties(), - DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_REFRESH_TOKEN)); - int rows = stmt.executeUpdate(); - if (rows > 0) { - status = true; - if (log.isDebugEnabled()) { - log.debug("Locker Manager device " + automaticDoorLOcker.getDeviceIdentifier() + - " data has been added to the Locker Manager database."); - } - } - } catch (SQLException e) { - String msg = "Error occurred while adding the Locker Manager device '" + - automaticDoorLOcker.getDeviceIdentifier() + "' to the Locker Manager db."; - log.error(msg, e); - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, null); - } - return status; - } + stmt = conn.prepareStatement(createDBQuery); + stmt.setString(1, automaticDoorLOcker.getDeviceIdentifier()); + stmt.setString(2, automaticDoorLOcker.getName()); + stmt.setString(3, DoorManagerUtils.getDeviceProperty( + automaticDoorLOcker.getProperties(), + DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_ACCESS_TOKEN)); + stmt.setString(4, DoorManagerUtils.getDeviceProperty( + automaticDoorLOcker.getProperties(), + DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_REFRESH_TOKEN)); + int rows = stmt.executeUpdate(); + if (rows > 0) { + status = true; + if (log.isDebugEnabled()) { + log.debug("Locker Manager device " + automaticDoorLOcker.getDeviceIdentifier() + + " data has been added to the Locker Manager database."); + } + } + } catch (SQLException e) { + String msg = "Error occurred while adding the Locker Manager device '" + + automaticDoorLOcker.getDeviceIdentifier() + "' to the Locker Manager db."; + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, null); + } + return status; + } - public boolean registerDoorLockSafe(DoorLockSafe automaticDoorLOcker) throws DoorManagerDeviceMgtPluginException { - boolean status = false; - Connection conn = null; - PreparedStatement stmt = null; - try { - conn = DoorManagerDAO.getConnection(); - String createDBQuery = - "INSERT INTO REGISTERED_DOORLOCK_SAFE(doormanager_DEVICE_ID, SERIAL_NUMBER, UID_of_USER, POLICY, " + - "EMAIL_ADDRESS, ACCESS_TOKEN, REFRESH_TOKEN) VALUES (?, ?, ?, ?, ?, ?, ?)"; - stmt = conn.prepareStatement(createDBQuery); - stmt.setString(1, automaticDoorLOcker.getDeviceId()); - stmt.setString(2, automaticDoorLOcker.getSerialNumber()); - stmt.setString(3, automaticDoorLOcker.getUIDofUser()); - stmt.setString(4, automaticDoorLOcker.getPolicy()); - stmt.setString(5, automaticDoorLOcker.getEmailAddress()); - stmt.setString(6, automaticDoorLOcker.getAccessToken()); - stmt.setString(7, automaticDoorLOcker.getRefreshToken()); - int rows = stmt.executeUpdate(); - if (rows > 0) { - status = true; - if (log.isDebugEnabled()) { - log.debug("Locker Manager device " + automaticDoorLOcker.getOwner() + - " data has been added to the Locker Manager database."); - } - } - } catch (SQLException e) { - String msg = "Error occurred while adding the Locker Manager device '" + - automaticDoorLOcker.getOwner() + "' to the Locker Manager db."; - log.error(msg, e); - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, null); - } - return status; - } + public boolean registerDoorLockSafe(DoorLockSafe automaticDoorLOcker) throws DoorManagerDeviceMgtPluginException { + boolean status = false; + Connection conn = null; + PreparedStatement stmt = null; + try { + conn = DoorManagerDAO.getConnection(); + String createDBQuery = + "INSERT INTO REGISTERED_DOORLOCK_SAFE(doormanager_DEVICE_ID, SERIAL_NUMBER, UID_of_USER, POLICY, " + + "EMAIL_ADDRESS, ACCESS_TOKEN, REFRESH_TOKEN) VALUES (?, ?, ?, ?, ?, ?, ?)"; + stmt = conn.prepareStatement(createDBQuery); + stmt.setString(1, automaticDoorLOcker.getDeviceId()); + stmt.setString(2, automaticDoorLOcker.getSerialNumber()); + stmt.setString(3, automaticDoorLOcker.getUIDofUser()); + stmt.setString(4, automaticDoorLOcker.getPolicy()); + stmt.setString(5, automaticDoorLOcker.getEmailAddress()); + stmt.setString(6, automaticDoorLOcker.getAccessToken()); + stmt.setString(7, automaticDoorLOcker.getRefreshToken()); + int rows = stmt.executeUpdate(); + if (rows > 0) { + status = true; + if (log.isDebugEnabled()) { + log.debug("Locker Manager device " + automaticDoorLOcker.getOwner() + + " data has been added to the Locker Manager database."); + } + } + } catch (SQLException e) { + String msg = "Error occurred while adding the Locker Manager device '" + + automaticDoorLOcker.getOwner() + "' to the Locker Manager db."; + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, null); + } + return status; + } - public boolean isDoorLockSafeRegistered(String serialNumber, String deviceId) throws DoorManagerDeviceMgtPluginException { + public boolean isDoorLockSafeRegistered(String serialNumber, String deviceId) throws DoorManagerDeviceMgtPluginException { - Connection conn = null; - PreparedStatement stmt = null; - ResultSet resultSet = null; - try { - conn = DoorManagerDAO.getConnection(); - String selectDBQuery = - "SELECT SERIAL_NUMBER FROM REGISTERED_DOORLOCK_SAFE WHERE SERIAL_NUMBER = ? AND doormanager_DEVICE_ID = ?"; - stmt = conn.prepareStatement(selectDBQuery); - stmt.setString(1, serialNumber); - stmt.setString(2, deviceId); - resultSet = stmt.executeQuery(); - if(resultSet.next()){ + Connection conn = null; + PreparedStatement stmt = null; + ResultSet resultSet = null; + try { + conn = DoorManagerDAO.getConnection(); + String selectDBQuery = + "SELECT SERIAL_NUMBER FROM REGISTERED_DOORLOCK_SAFE WHERE SERIAL_NUMBER = ? AND doormanager_DEVICE_ID = ?"; + stmt = conn.prepareStatement(selectDBQuery); + stmt.setString(1, serialNumber); + stmt.setString(2, deviceId); + resultSet = stmt.executeQuery(); + if (resultSet.next()) { String result = resultSet.getString(DoorManagerConstants.DEVICE_PLUGIN_DEVICE_SERIAL_NUMBER); log.warn(result); return true; - }else{ + } else { return false; } - } catch (SQLException e) { - String msg = "Error occurred while fetching all Automatic Door Locker device data'"; - log.error(msg, e); - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, resultSet); - DoorManagerDAO.closeConnection(); - } + } catch (SQLException e) { + String msg = "Error occurred while fetching all Automatic Door Locker device data'"; + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, resultSet); + DoorManagerDAO.closeConnection(); + } - } + } - public boolean isUserAllowed(String serialNumber, String UIDofUser, String deviceId) throws DoorManagerDeviceMgtPluginException { - Connection conn = null; - PreparedStatement stmt = null; - ResultSet resultSet = null; - try { - conn = DoorManagerDAO.getConnection(); - String selectDBQuery = - "SELECT UID_OF_USER FROM REGISTERED_DOORLOCK_SAFE WHERE SERIAL_NUMBER = ? AND DOORMANAGER_DEVICE_ID = ?"; - stmt = conn.prepareStatement(selectDBQuery); - stmt.setString(1, serialNumber); - stmt.setString(2, deviceId); - resultSet = stmt.executeQuery(); + public boolean isUserAllowed(String serialNumber, String UIDofUser, String deviceId) throws DoorManagerDeviceMgtPluginException { + Connection conn = null; + PreparedStatement stmt = null; + ResultSet resultSet = null; + try { + conn = DoorManagerDAO.getConnection(); + String selectDBQuery = + "SELECT UID_OF_USER FROM REGISTERED_DOORLOCK_SAFE WHERE SERIAL_NUMBER = ? AND DOORMANAGER_DEVICE_ID = ?"; + stmt = conn.prepareStatement(selectDBQuery); + stmt.setString(1, serialNumber); + stmt.setString(2, deviceId); + resultSet = stmt.executeQuery(); String result; - if(resultSet.next()){ + if (resultSet.next()) { result = resultSet.getString(DoorManagerConstants.DEVICE_PLUGIN_DEVICE_UID_OF_USER); log.warn(result); return true; - }else { - selectDBQuery = - "SELECT UID_OF_USER FROM SHARED_DOORLOCK_SAFE WHERE SERIAL_NUMBER = ? AND DOORMANAGER_DEVICE_ID = ? AND UID_OF_USER = ?"; - stmt = conn.prepareStatement(selectDBQuery); - stmt.setString(1, serialNumber); - stmt.setString(2, deviceId); - stmt.setString(3, UIDofUser); - resultSet = stmt.executeQuery(); - if(resultSet.next()){ + } else { + selectDBQuery = + "SELECT UID_OF_USER FROM SHARED_DOORLOCK_SAFE WHERE SERIAL_NUMBER = ? AND DOORMANAGER_DEVICE_ID = ? AND UID_OF_USER = ?"; + stmt = conn.prepareStatement(selectDBQuery); + stmt.setString(1, serialNumber); + stmt.setString(2, deviceId); + stmt.setString(3, UIDofUser); + resultSet = stmt.executeQuery(); + if (resultSet.next()) { result = resultSet.getString(DoorManagerConstants.DEVICE_PLUGIN_DEVICE_UID_OF_USER); log.warn(result); return true; } return false; - } - } catch (SQLException e) { - String msg = "Error occurred while validating: whether user is registered or not"; - log.error(msg, e); - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, resultSet); - DoorManagerDAO.closeConnection(); - } + } + } catch (SQLException e) { + String msg = "Error occurred while validating: whether user is registered or not"; + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, resultSet); + DoorManagerDAO.closeConnection(); + } - } + } - public boolean shareDoorLockSafe(DoorLockSafe automaticDoorLOcker) throws DoorManagerDeviceMgtPluginException { - boolean status = false; - Connection conn = null; - PreparedStatement stmt = null; - try { - conn = DoorManagerDAO.getConnection(); - String createDBQuery = - "INSERT INTO SHARED_DOORLOCK_SAFE(doormanager_DEVICE_ID, SERIAL_NUMBER, UID_of_USER, POLICY) VALUES (?, ?, ?, ?)"; - stmt = conn.prepareStatement(createDBQuery); - stmt.setString(1, automaticDoorLOcker.getDeviceId()); - stmt.setString(2, automaticDoorLOcker.getSerialNumber()); - stmt.setString(3, automaticDoorLOcker.getUIDofUser()); - stmt.setString(4, automaticDoorLOcker.getPolicy()); - int rows = stmt.executeUpdate(); - if (rows > 0) { - status = true; - if (log.isDebugEnabled()) { - log.debug("Locker Manager device " + automaticDoorLOcker.getOwner() + - " data has been added to the Locker Manager database."); - } - } - } catch (SQLException e) { - String msg = "Error occurred while adding the Locker Manager device '" + - automaticDoorLOcker.getOwner() + "' to the Locker Manager db."; - log.error(msg, e); - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, null); - } - return status; - } + public boolean shareDoorLockSafe(DoorLockSafe automaticDoorLOcker) throws DoorManagerDeviceMgtPluginException { + boolean status = false; + Connection conn = null; + PreparedStatement stmt = null; + try { + conn = DoorManagerDAO.getConnection(); + String createDBQuery = + "INSERT INTO SHARED_DOORLOCK_SAFE(doormanager_DEVICE_ID, SERIAL_NUMBER, UID_of_USER, POLICY) VALUES (?, ?, ?, ?)"; + stmt = conn.prepareStatement(createDBQuery); + stmt.setString(1, automaticDoorLOcker.getDeviceId()); + stmt.setString(2, automaticDoorLOcker.getSerialNumber()); + stmt.setString(3, automaticDoorLOcker.getUIDofUser()); + stmt.setString(4, automaticDoorLOcker.getPolicy()); + int rows = stmt.executeUpdate(); + if (rows > 0) { + status = true; + if (log.isDebugEnabled()) { + log.debug("Locker Manager device " + automaticDoorLOcker.getOwner() + + " data has been added to the Locker Manager database."); + } + } + } catch (SQLException e) { + String msg = "Error occurred while adding the Locker Manager device '" + + automaticDoorLOcker.getOwner() + "' to the Locker Manager db."; + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, null); + } + return status; + } + + public boolean checkCardDoorAssociation(String cardNum, String deviceID) throws DoorManagerDeviceMgtPluginException { + Connection conn; + PreparedStatement stmt = null; + ResultSet resultSet = null; + try { + conn = DoorManagerDAO.getConnection(); + String selectDBQuery = "SELECT * FROM REGISTERED_DOORLOCK_SAFE WHERE UID_of_USER = ? AND doormanager_DEVICE_ID = ?"; + stmt = conn.prepareStatement(selectDBQuery); + stmt.setString(1, cardNum); + stmt.setString(2, deviceID); + resultSet = stmt.executeQuery(); + String result; + if (resultSet.next()) { + return true; + } else { + return false; + } + } catch (SQLException e) { + String msg = "No associations were found between lock : " + deviceID + " and card : " + cardNum; + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, null); + } + } - public boolean checkCardDoorAssociation(String cardNum, String deviceID) throws DoorManagerDeviceMgtPluginException { - Connection conn; - PreparedStatement stmt = null; - ResultSet resultSet = null; - try { - conn = DoorManagerDAO.getConnection(); - String selectDBQuery = "SELECT * FROM REGISTERED_DOORLOCK_SAFE WHERE UID_of_USER = ? AND doormanager_DEVICE_ID = ?"; - stmt = conn.prepareStatement(selectDBQuery); - stmt.setString(1, cardNum); - stmt.setString(2, deviceID); - resultSet = stmt.executeQuery(); - String result; - if(resultSet.next()){ - return true; - }else{ - return false; - } - } catch (SQLException e) { - String msg = "No associations were found between lock : "+ deviceID +" and card : "+ cardNum; - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, null); - } - } + public String getUserEmailAddress(String cardNum) throws DoorManagerDeviceMgtPluginException { + Connection conn; + PreparedStatement stmt = null; + ResultSet resultSet = null; + String email; + try { + conn = DoorManagerDAO.getConnection(); + String selectDBQuery = "SELECT EMAIL_ADDRESS FROM REGISTERED_DOORLOCK_SAFE WHERE UID_of_USER = ?"; + stmt = conn.prepareStatement(selectDBQuery); + stmt.setString(1, cardNum); + resultSet = stmt.executeQuery(); + if (resultSet.next()) { + email = resultSet.getString("EMAIL_ADDRESS"); + log.warn(email); + return email; + } + return null; + } catch (SQLException e) { + String msg = "No email found for the and card : " + cardNum; + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, null); + } + } - public String getUserEmailAddress(String cardNum) throws DoorManagerDeviceMgtPluginException { - Connection conn; - PreparedStatement stmt = null; - ResultSet resultSet = null; - String email; - try { - conn = DoorManagerDAO.getConnection(); - String selectDBQuery = "SELECT EMAIL_ADDRESS FROM REGISTERED_DOORLOCK_SAFE WHERE UID_of_USER = ?"; - stmt = conn.prepareStatement(selectDBQuery); - stmt.setString(1, cardNum); - resultSet = stmt.executeQuery(); - if(resultSet.next()){ - email = resultSet.getString("EMAIL_ADDRESS"); - log.warn(email); - return email; - } - return null; - } catch (SQLException e) { - String msg = "No email found for the and card : "+ cardNum; - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, null); - } - } - public List getUserCredentials(String deviceId, String UIDofUser) throws DoorManagerDeviceMgtPluginException { + public List getUserCredentials(String deviceId, String UIDofUser) throws DoorManagerDeviceMgtPluginException { - Connection conn = null; - PreparedStatement stmt = null; - ResultSet resultSet = null; - List userCredentials = new ArrayList<>(); - try { - conn = DoorManagerDAO.getConnection(); - String selectDBQuery = - "SELECT ACCESS_TOKEN, REFRESH_TOKEN FROM REGISTERED_DOORLOCK_SAFE WHERE DOORMANAGER_DEVICE_ID = ? AND UID_OF_USER = ?"; - stmt = conn.prepareStatement(selectDBQuery); - stmt.setString(1, deviceId); - stmt.setString(2, UIDofUser); - resultSet = stmt.executeQuery(); - if (log.isDebugEnabled()) { - log.debug("Get user credentials from Automatic Door Locker database."); - } - log.warn("getting user credentials"); - if(resultSet.next()){ + Connection conn = null; + PreparedStatement stmt = null; + ResultSet resultSet = null; + List userCredentials = new ArrayList<>(); + try { + conn = DoorManagerDAO.getConnection(); + String selectDBQuery = + "SELECT ACCESS_TOKEN, REFRESH_TOKEN FROM REGISTERED_DOORLOCK_SAFE WHERE DOORMANAGER_DEVICE_ID = ? AND UID_OF_USER = ?"; + stmt = conn.prepareStatement(selectDBQuery); + stmt.setString(1, deviceId); + stmt.setString(2, UIDofUser); + resultSet = stmt.executeQuery(); + if (log.isDebugEnabled()) { + log.debug("Get user credentials from Automatic Door Locker database."); + } + log.warn("getting user credentials"); + if (resultSet.next()) { String accessToken = resultSet.getString(DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_ACCESS_TOKEN); String refreshToken = resultSet.getString(DoorManagerConstants.DEVICE_PLUGIN_PROPERTY_REFRESH_TOKEN); log.warn(accessToken); userCredentials.add(accessToken); userCredentials.add(refreshToken); } - return userCredentials; - } catch (SQLException e) { - String msg = "Error occurred while getting user credentials"; - log.error(msg, e); - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, resultSet); - DoorManagerDAO.closeConnection(); - } + return userCredentials; + } catch (SQLException e) { + String msg = "Error occurred while getting user credentials"; + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, resultSet); + DoorManagerDAO.closeConnection(); + } - } + } - public List getRegisteredDoorLocks(String deviceId) throws DoorManagerDeviceMgtPluginException { + public List getRegisteredDoorLocks(String deviceId) throws DoorManagerDeviceMgtPluginException { - Connection conn = null; - PreparedStatement stmt = null; - ResultSet resultSet = null; - List doorLockSafes = new ArrayList<>(); - try { - conn = DoorManagerDAO.getConnection(); - String selectDBQuery = - "SELECT SERIAL_NUMBER FROM REGISTERED_DOORLOCK_SAFE WHERE doormanager_DEVICE_ID = ?"; - stmt = conn.prepareStatement(selectDBQuery); - stmt.setString(1, deviceId); - resultSet = stmt.executeQuery(); - while (resultSet.next()) { - doorLockSafes.add(resultSet.getString(DoorManagerConstants.DEVICE_PLUGIN_DEVICE_SERIAL_NUMBER)); - } - if (log.isDebugEnabled()) { - log.debug("All Locker Manager device details have fetched from Automatic Door Locker database."); - } - return doorLockSafes; - } catch (SQLException e) { - String msg = "Error occurred while fetching all Automatic Door Locker device data'"; - log.error(msg, e); - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, resultSet); - DoorManagerDAO.closeConnection(); - } - } + Connection conn = null; + PreparedStatement stmt = null; + ResultSet resultSet = null; + List doorLockSafes = new ArrayList<>(); + try { + conn = DoorManagerDAO.getConnection(); + String selectDBQuery = + "SELECT SERIAL_NUMBER FROM REGISTERED_DOORLOCK_SAFE WHERE doormanager_DEVICE_ID = ?"; + stmt = conn.prepareStatement(selectDBQuery); + stmt.setString(1, deviceId); + resultSet = stmt.executeQuery(); + while (resultSet.next()) { + doorLockSafes.add(resultSet.getString(DoorManagerConstants.DEVICE_PLUGIN_DEVICE_SERIAL_NUMBER)); + } + if (log.isDebugEnabled()) { + log.debug("All Locker Manager device details have fetched from Automatic Door Locker database."); + } + return doorLockSafes; + } catch (SQLException e) { + String msg = "Error occurred while fetching all Automatic Door Locker device data'"; + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, resultSet); + DoorManagerDAO.closeConnection(); + } + } - public boolean updateDevice(Device automaticDoorLocker) throws DoorManagerDeviceMgtPluginException { - boolean status = false; - Connection conn = null; - PreparedStatement stmt = null; - try { - conn = DoorManagerDAO.getConnection(); - String updateDBQuery = - "UPDATE doormanager_DEVICE SET DEVICE_NAME = ? WHERE doormanager_DEVICE_ID = ?"; - stmt = conn.prepareStatement(updateDBQuery); - if (automaticDoorLocker.getProperties() == null) { - automaticDoorLocker.setProperties(new ArrayList()); - } - stmt.setString(1, automaticDoorLocker.getName()); - stmt.setString(2, automaticDoorLocker.getDeviceIdentifier()); - int rows = stmt.executeUpdate(); - if (rows > 0) { - status = true; - if (log.isDebugEnabled()) { - log.debug("Locker Manager device " + automaticDoorLocker.getDeviceIdentifier() + - " data has been modified."); - } - } - } catch (SQLException e) { - String msg = "Error occurred while modifying the Locker Manager device '" + - automaticDoorLocker.getDeviceIdentifier() + "' data."; - log.error(msg, e); - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, null); - } - return status; - } + public boolean updateDevice(Device automaticDoorLocker) throws DoorManagerDeviceMgtPluginException { + boolean status = false; + Connection conn = null; + PreparedStatement stmt = null; + try { + conn = DoorManagerDAO.getConnection(); + String updateDBQuery = + "UPDATE doormanager_DEVICE SET DEVICE_NAME = ? WHERE doormanager_DEVICE_ID = ?"; + stmt = conn.prepareStatement(updateDBQuery); + if (automaticDoorLocker.getProperties() == null) { + automaticDoorLocker.setProperties(new ArrayList()); + } + stmt.setString(1, automaticDoorLocker.getName()); + stmt.setString(2, automaticDoorLocker.getDeviceIdentifier()); + int rows = stmt.executeUpdate(); + if (rows > 0) { + status = true; + if (log.isDebugEnabled()) { + log.debug("Locker Manager device " + automaticDoorLocker.getDeviceIdentifier() + + " data has been modified."); + } + } + } catch (SQLException e) { + String msg = "Error occurred while modifying the Locker Manager device '" + + automaticDoorLocker.getDeviceIdentifier() + "' data."; + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, null); + } + return status; + } - public boolean deleteDevice(String deviceId) throws DoorManagerDeviceMgtPluginException { - boolean status = false; - Connection conn = null; - PreparedStatement stmt = null; - try { - conn = DoorManagerDAO.getConnection(); - String deleteDBQuery = - "DELETE FROM doormanager_DEVICE WHERE doormanager_DEVICE_ID = ?"; - stmt = conn.prepareStatement(deleteDBQuery); - stmt.setString(1, deviceId); - int rows = stmt.executeUpdate(); - if (rows > 0) { - status = true; - if (log.isDebugEnabled()) { - log.debug("Automatic Door Locker device " + deviceId + " data has deleted" + - " from the Automatic Door Locker database."); - } - } - } catch (SQLException e) { - String msg = "Error occurred while deleting Automatic Door Locker device " + deviceId; - log.error(msg, e); - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, null); - } - return status; - } + public boolean deleteDevice(String deviceId) throws DoorManagerDeviceMgtPluginException { + boolean status = false; + Connection conn = null; + PreparedStatement stmt = null; + try { + conn = DoorManagerDAO.getConnection(); + String deleteDBQuery = + "DELETE FROM doormanager_DEVICE WHERE doormanager_DEVICE_ID = ?"; + stmt = conn.prepareStatement(deleteDBQuery); + stmt.setString(1, deviceId); + int rows = stmt.executeUpdate(); + if (rows > 0) { + status = true; + if (log.isDebugEnabled()) { + log.debug("Automatic Door Locker device " + deviceId + " data has deleted" + + " from the Automatic Door Locker database."); + } + } + } catch (SQLException e) { + String msg = "Error occurred while deleting Automatic Door Locker device " + deviceId; + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, null); + } + return status; + } - public List getAllDevices() throws DoorManagerDeviceMgtPluginException { + public List getAllDevices() throws DoorManagerDeviceMgtPluginException { - Connection conn = null; - PreparedStatement stmt = null; - ResultSet resultSet = null; - Device connectedCupDevice; - List iotDevices = new ArrayList<>(); - try { - conn = DoorManagerDAO.getConnection(); - String selectDBQuery = - "SELECT doormanager_DEVICE_ID, DEVICE_NAME FROM doormanager_DEVICE"; - stmt = conn.prepareStatement(selectDBQuery); - resultSet = stmt.executeQuery(); - while (resultSet.next()) { - connectedCupDevice = new Device(); - connectedCupDevice.setDeviceIdentifier(resultSet.getString( - DoorManagerConstants.DEVICE_PLUGIN_DEVICE_ID)); - connectedCupDevice.setName(resultSet.getString( - DoorManagerConstants.DEVICE_PLUGIN_DEVICE_NAME)); - } - if (log.isDebugEnabled()) { - log.debug("All Locker Manager device details have fetched from Automatic Door Locker database."); - } - return iotDevices; - } catch (SQLException e) { - String msg = "Error occurred while fetching all Automatic Door Locker device data'"; - log.error(msg, e); - throw new DoorManagerDeviceMgtPluginException(msg, e); - } finally { - DoorManagerUtils.cleanupResources(stmt, resultSet); - DoorManagerDAO.closeConnection(); - } - } + Connection conn = null; + PreparedStatement stmt = null; + ResultSet resultSet = null; + Device connectedCupDevice; + List iotDevices = new ArrayList<>(); + try { + conn = DoorManagerDAO.getConnection(); + String selectDBQuery = + "SELECT doormanager_DEVICE_ID, DEVICE_NAME FROM doormanager_DEVICE"; + stmt = conn.prepareStatement(selectDBQuery); + resultSet = stmt.executeQuery(); + while (resultSet.next()) { + connectedCupDevice = new Device(); + connectedCupDevice.setDeviceIdentifier(resultSet.getString( + DoorManagerConstants.DEVICE_PLUGIN_DEVICE_ID)); + connectedCupDevice.setName(resultSet.getString( + DoorManagerConstants.DEVICE_PLUGIN_DEVICE_NAME)); + } + if (log.isDebugEnabled()) { + log.debug("All Locker Manager device details have fetched from Automatic Door Locker database."); + } + return iotDevices; + } catch (SQLException e) { + String msg = "Error occurred while fetching all Automatic Door Locker device data'"; + log.error(msg, e); + throw new DoorManagerDeviceMgtPluginException(msg, e); + } finally { + DoorManagerUtils.cleanupResources(stmt, resultSet); + DoorManagerDAO.closeConnection(); + } + } } \ No newline at end of file diff --git a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/util/DoorManagerUtils.java b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/util/DoorManagerUtils.java index 4dedb8c9..c343a1b3 100644 --- a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/util/DoorManagerUtils.java +++ b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/dao/util/DoorManagerUtils.java @@ -37,8 +37,8 @@ public class DoorManagerUtils { public static String getDeviceProperty(List deviceProperties, String propertyKey) { String deviceProperty = ""; - for(Device.Property property :deviceProperties){ - if(propertyKey.equals(property.getName())){ + for (Device.Property property : deviceProperties) { + if (propertyKey.equals(property.getName())) { deviceProperty = property.getValue(); } } diff --git a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/util/DoorManagerUtils.java b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/util/DoorManagerUtils.java deleted file mode 100644 index 060c3e76..00000000 --- a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/impl/util/DoorManagerUtils.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.homeautomation.doormanager.plugin.impl.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.Map; - -/** - * Contains utility methods used by Door Opener plugin. - */ -public class DoorManagerUtils { - - private static Log log = LogFactory.getLog(DoorManagerUtils.class); - public static String getDeviceProperty(Map deviceProperties, String property) { - String deviceProperty = deviceProperties.get(property); - if (deviceProperty == null) { - return ""; - } - return deviceProperty; - } -} diff --git a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/internal/DoorManagerManagementServiceComponent.java b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/internal/DoorManagerManagementServiceComponent.java index 9018344e..3363bf41 100644 --- a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/internal/DoorManagerManagementServiceComponent.java +++ b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/internal/DoorManagerManagementServiceComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except @@ -11,7 +11,7 @@ * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the + * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ @@ -20,23 +20,16 @@ package org.homeautomation.doormanager.plugin.internal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.homeautomation.doormanager.plugin.impl.DoorManagerManagerService; +import org.homeautomation.doormanager.plugin.impl.DoorManagerService; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentContext; import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService; -import org.wso2.carbon.device.mgt.iot.service.DeviceTypeService; /** * @scr.component name="org.homeautomation.doormanager.plugin.internal.DoorManagerManagementServiceComponent" * immediate="true" - * @scr.reference name="org.wso2.carbon.device.mgt.iot.service.DeviceTypeServiceImpl" - * interface="org.wso2.carbon.device.mgt.iot.service.DeviceTypeService" - * cardinality="1..1" - * policy="dynamic" - * bind="setDeviceTypeService" - * unbind="unsetDeviceTypeService" */ public class DoorManagerManagementServiceComponent { @@ -51,7 +44,7 @@ public class DoorManagerManagementServiceComponent { BundleContext bundleContext = ctx.getBundleContext(); automaticDoorLocker = bundleContext.registerService(DeviceManagementService.class.getName(), - new DoorManagerManagerService(), null); + new DoorManagerService(), null); if (log.isDebugEnabled()) { log.debug("DoorOpener Device Management Service Component has been successfully activated"); } @@ -74,20 +67,8 @@ public class DoorManagerManagementServiceComponent { } } catch (Throwable e) { log.error( - "Error occurred while de-activating Door Opener Device Management bundle", e); + "Error occurred while de-activating Door Locker Device Management bundle", e); } } - protected void setDeviceTypeService(DeviceTypeService deviceTypeService) { - /* This is to avoid this component getting initialized before the common registered */ - if (log.isDebugEnabled()) { - log.debug("Data source service set to mobile service component"); - } - } - - protected void unsetDeviceTypeService(DeviceTypeService deviceTypeService) { - //do nothing - } - - } diff --git a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.hbs b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.hbs index 4fc403d6..47a4ca68 100644 --- a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.hbs +++ b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.hbs @@ -44,6 +44,7 @@ {{#zone "device-detail-properties"}}
+
  • Device Statistics diff --git a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.js b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.js index 646a4db0..9e6e6747 100644 --- a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.js +++ b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.js @@ -1,22 +1,3 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - /* * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * @@ -48,10 +29,9 @@ function onRequest(context) { if (deviceType != null && deviceType != undefined && deviceId != null && deviceId != undefined) { var deviceModule = require("/app/modules/device.js").deviceModule; var device = deviceModule.viewDevice(deviceType, deviceId); - if (device && device.status != "error") { log.info(device); - return {"device": device, "port" : port, "host" : host , "sessionId" : sessionId}; + return {"device": device, "port": port, "host": host, "sessionId": sessionId}; } } } \ No newline at end of file diff --git a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/js/device-stats.js b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/js/device-stats.js deleted file mode 100644 index c5719adc..00000000 --- a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/js/device-stats.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -var deviceType = $("#details").data("devicetype"); -var deviceId = $(".device-id").data("deviceid"); -var monitor_operations = $("#details").data("monitor"); -var appContext = $("#details").data("appcontext"); -var publicURL =$("#details").data("unitpublicuri"); - -$(window).on('resize', function () { - location.reload(false); -}); - -$(document).ready(function () { - updateGraphs(); -}); - -function updateGraphs() { - var tv = 2000; - var iv = setInterval(function () { - var getStatsRequest = $.ajax({ - url: appContext + "/api/operations/" + deviceType + "/stats?deviceId=" + deviceId, - method: "get" - }); - getStatsRequest.done(function (data) { - var data = data.data; - if(data[0].door_locker_state){ - var currentStateOfTheLock=data[0].door_locker_state; - console.log(currentStateOfTheLock); - if( currentStateOfTheLock == "UNLOCKED"){ - $("#lockerCurrentState").attr("src", publicURL+"/images/unlock.png"); - }else{ - $("#lockerCurrentState").attr("src", publicURL+"/images/lock.png"); - } - }else{ - console.log("Backend server not available"); - } - }); - }, tv); -} \ No newline at end of file diff --git a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/download.js b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/download.js index 221170b2..faefdefb 100644 --- a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/download.js +++ b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/download.js @@ -86,8 +86,6 @@ function attachEvents() { var deviceType = $(this).data("devicetype"); var downloadDeviceAPI = "/devicemgt/api/devices/sketch/generate_link"; var payload = {"sketchType": sketchType, "deviceType": deviceType}; - - console.log("-------------------------->"+JSON.stringify(payload)); $(modalPopupContent).html($('#download-device-modal-content').html()); showPopup(); var deviceName; @@ -110,55 +108,105 @@ function attachEvents() { doAction(data); } ); - }else if(deviceName){ - $('.controls').append(''); + } else if (deviceName) { + $('.controls').append(''); $('.control-group').removeClass('success').addClass('error'); } else { - $('.controls').append(''); + $('.controls').append(''); $('.control-group').removeClass('success').addClass('error'); } }); + $("a#download-device-cancel-link").click(function () { hidePopup(); }); + }); } function downloadAgent() { - var $inputs = $('#downloadForm :input'); - var values = {}; - $inputs.each(function() { - values[this.name] = $(this).val(); - }); - var payload = {}; - payload.name = $inputs[0].value; - payload.owner = $inputs[3].value; - payload.serialNumber = $inputs[1].value; + /*var $inputs = $('#downloadForm :input'); + var values = {}; + $inputs.each(function() { + values[this.name] = $(this).val(); + }); + var payload = {}; + payload.name = $inputs[0].value; + //payload.owner = $inputs[3].value; + payload.serialNumber = $inputs[1].value; - var doorManagerRegisterURL = "/doormanager_mgt/manager/device/register?" + - "name=" + encodeURI(payload.name) + "&owner=" + payload.owner + "&serialNumber=" + payload.serialNumber; + var doorManagerRegisterURL = "/doormanager_mgt/manager/device/register?" + + "name=" + encodeURI(payload.name) + "&deviceId=" + payload.serialNumber; - invokerUtil.post( - doorManagerRegisterURL, - payload, - function (data, textStatus, jqxhr) { - hidePopup(); - }, - function (data) { - hidePopup(); - } - ); - var deviceName; + invokerUtil.post( + doorManagerRegisterURL, + payload, + function (data, textStatus, jqxhr) { + hidePopup(); + }, + function (data) { + hidePopup(); + } + ); + var deviceName; + $('.new-device-name').each(function () { + if (this.value != "") { + deviceName = this.value; + } + }); + if (deviceName && deviceName.length >= 4) { + setTimeout(function () { + hidePopup(); + }, 1000); + }*/ + var deviceName = ""; $('.new-device-name').each(function () { if (this.value != "") { deviceName = this.value; } }); - if (deviceName && deviceName.length >= 4) { - setTimeout(function () { + var deviceType = ""; + $('.deviceType').each(function () { + if (this.value != "") { + deviceType = this.value; + } + }); + var sketchType = ""; + $('.sketchType').each(function () { + if (this.value != "") { + sketchType = this.value; + } + }); + /*var serialNumber = ""; + $('.device-serial-number').each(function () { + if (this.value != "") { + serialNumber = this.value; + } + });*/ + var deviceNameFormat = /^[^~?!#$:;%^*`+={}\[\]\\()|<>,'"]{1,30}$/; + if (deviceName && deviceNameFormat.test(deviceName)) { + $(modalPopupContent).html($('#device-agent-downloading-content').html()); + var successCallback = function (data) { + data = JSON.parse(data); + hidePopup(); + window.location = "/devicemgt/api/devices/sketch/download/" + data.responseContent; + }; + var generateLink = "/" + deviceType + "_mgt/manager/device/" + sketchType + + "/generate_link?deviceName=" + deviceName; + console.log("generated link"+ generateLink); + invokerUtil.get(generateLink, successCallback, function (message) { + console.log(message.content); hidePopup(); - }, 1000); + doAction(data); + }); + } else { + $("#invalid-username-error-msg span").text("Invalid device name"); + $("#invalid-username-error-msg").removeClass("hidden"); } } diff --git a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.hbs b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.hbs index cab924e0..a52bdebc 100644 --- a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.hbs +++ b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.hbs @@ -49,23 +49,26 @@
  • 04   Copy downloaded Agent into your RaspberryPi.
  • -
  • 05    Run "Agent.sh" script with root privileges. +
  • 05    Run "Agent.sh" script with root + privileges.

  • @@ -237,15 +267,19 @@ width: 50px; color: #fff; } + .padding-top-double { padding-top: 20px; } + .padding-double { padding: 20px; } + .grey { color: #333; } + hr { display: block; height: 1px; @@ -255,21 +289,26 @@ padding: 0; opacity: 0.2; } + .light-grey { color: #7c7c7c; } + .uppercase { text-transform: uppercase; } + .grey-bg { background-color: #f6f4f4; } + .doc-link { background: #11375B; padding: 20px; color: white; margin-top: 0; } + .doc-link a { color: white; } From 3416a191c00a6dc4e02f591a93da48efdea9ebf7 Mon Sep 17 00:00:00 2001 From: GPrathap Date: Sun, 13 Mar 2016 21:54:13 +0530 Subject: [PATCH 08/13] adding agent source code --- .../resources/agent/deviceConfig.properties | 11 +- .../main/resources/agent/sketch.properties | 15 +- .../resources/agent/src/DoorManagerAgent.log | 0 .../resources/agent/src/DoorManagerAgent.py | 194 +++++++++ .../src/main/resources/agent/src/MFRC522.py | 396 ++++++++++++++++++ .../main/resources/agent/src/MQTTHandler.py | 131 ++++++ .../main/resources/agent/src/RFIDReader.py | 170 ++++++++ .../src/main/resources/agent/src/iotUtils.py | 69 +++ .../src/main/resources/agent/startService.sh | 59 +++ modules/samples/doormanager/pom.xml | 24 +- 10 files changed, 1041 insertions(+), 28 deletions(-) create mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/agent/src/DoorManagerAgent.log create mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/agent/src/DoorManagerAgent.py create mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/agent/src/MFRC522.py create mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/agent/src/MQTTHandler.py create mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/agent/src/RFIDReader.py create mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/agent/src/iotUtils.py create mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/agent/startService.sh diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/agent/deviceConfig.properties b/modules/samples/doormanager/feature/feature/src/main/resources/agent/deviceConfig.properties index a9abf738..c0b9ccc7 100644 --- a/modules/samples/doormanager/feature/feature/src/main/resources/agent/deviceConfig.properties +++ b/modules/samples/doormanager/feature/feature/src/main/resources/agent/deviceConfig.properties @@ -1,4 +1,3 @@ -# # Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,18 +11,20 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -# -# [Device-Configurations] +server-name=${SERVER_NAME} owner=${DEVICE_OWNER} +username=${DEVICE_OWNER} deviceId=${DEVICE_ID} device-name=${DEVICE_NAME} +manager-context=/doormanager/controller/get_user_info controller-context=/doormanager/controller +https-ep=${HTTPS_EP} +http-ep=${HTTP_EP} +apim-ep=${APIM_EP} mqtt-ep=${MQTT_EP} auth-method=token auth-token=${DEVICE_TOKEN} refresh-token=${DEVICE_REFRESH_TOKEN} push-interval=15 - - diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/agent/sketch.properties b/modules/samples/doormanager/feature/feature/src/main/resources/agent/sketch.properties index b520c3f9..9d8c6fd2 100644 --- a/modules/samples/doormanager/feature/feature/src/main/resources/agent/sketch.properties +++ b/modules/samples/doormanager/feature/feature/src/main/resources/agent/sketch.properties @@ -1,16 +1,3 @@ -#/* -# * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -# * WSO2 Inc. licenses this file to you under the Apache License, -# * Version 2.0 (the "License"); you may not use this file except -# * in compliance with the License. -# * You may obtain a copy of the License at -# * http://www.apache.org/licenses/LICENSE-2.0 -# * Unless required by applicable law or agreed to in writing, -# * software distributed under the License is distributed on an -# * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# * KIND, either express or implied. See the License for the -# * specific language governing permissions and limitations -# * under the License. -# */ templates=deviceConfig.properties zipfilename=doormanager.zip + diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/DoorManagerAgent.log b/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/DoorManagerAgent.log new file mode 100644 index 00000000..e69de29b diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/DoorManagerAgent.py b/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/DoorManagerAgent.py new file mode 100644 index 00000000..ad24a818 --- /dev/null +++ b/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/DoorManagerAgent.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python +""" +/** +* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +* +* WSO2 Inc. licenses this file to you under the Apache License, +* Version 2.0 (the "License"); you may not use this file except +* in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +**/ +""" + +import argparse +import httplib +import logging +import logging.handlers +import signal +import ssl +import sys +import threading +import time +from functools import wraps + +import RPi.GPIO as GPIO + +import MQTTHandler +import RFIDReader +import iotUtils + + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Overriding the default SSL version used in some of the Python (2.7.x) versions +# This is a known issue in earlier Python releases +# But was fixed in later versions. Ex-2.7.11 +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +def sslwrap(func): + @wraps(func) + def bar(*args, **kw): + kw['ssl_version'] = ssl.PROTOCOL_TLSv1 + return func(*args, **kw) + + return bar +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +PUSH_INTERVAL = 5000 # time interval between successive data pushes in seconds + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Logger defaults +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +LOG_FILENAME = "DoorManagerAgent.log" +logging_enabled = False +LOG_LEVEL = logging.INFO # Could be e.g. "DEBUG" or "WARNING" +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Python version +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +if sys.version_info < (2, 6, 0): + sys.stderr.write("You need python 2.6.0 or later to run this script\n") + exit(1) +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Define and parse command line arguments +# If the log file is specified on the command line then override the default +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +parser = argparse.ArgumentParser(description="Python service to push RPi info to the Device Cloud") +parser.add_argument("-l", "--log", help="file to write log to (default '" + LOG_FILENAME + "')") + +help_string_for_data_push_interval = "time interval between successive locker status push to server(default '" + str( + PUSH_INTERVAL) + "')" +parser.add_argument("-i", "--interval", type=int, help=help_string_for_data_push_interval) + +args = parser.parse_args() +if args.log: + LOG_FILENAME = args.log + +if args.interval: + PUSH_INTERVAL = args.interval +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# A class we can use to capture stdout and sterr in the log +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class IOTLogger(object): + def __init__(self, logger, level): + """Needs a logger and a logger level.""" + self.logger = logger + self.level = level + + def write(self, message): + if message.rstrip() != "": # Only log if there is a message (not just a new line) + self.logger.log(self.level, message.rstrip()) +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Configure logging to log to a file, +# making a new file at midnight and keeping the last 3 day's data +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +def configureLogger(loggerName): + logger = logging.getLogger(loggerName) + logger.setLevel(LOG_LEVEL) # Set the log level to LOG_LEVEL + handler = logging.handlers.TimedRotatingFileHandler(LOG_FILENAME, when="midnight", + backupCount=3) # Handler that writes to a file, + # ~~~make new file at midnight and keep 3 backups + formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s') # Format each log message like this + handler.setFormatter(formatter) # Attach the formatter to the handler + logger.addHandler(handler) # Attach the handler to the logger + + if (logging_enabled): + sys.stdout = IOTLogger(logger, logging.INFO) # Replace stdout with logging to file at INFO level + sys.stderr = IOTLogger(logger, logging.ERROR) # Replace stderr with logging to file at ERROR level +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# This is a Thread object for reading RFID card +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class ListenRFIDhread(object): + def __init__(self): + thread = threading.Thread(target=self.run, args=()) + thread.daemon = True # Daemonize thread + thread.start() # Start the execution + + def run(self): + RFIDReader.main() +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# This is a Thread object for listening for MQTT Messages +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class ListenMQTTThread(object): + def __init__(self): + thread = threading.Thread(target=self.run, args=()) + thread.daemon = True # Daemonize thread + thread.start() # Start the execution + + def run(self): + MQTTHandler.main() +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# When sysvinit sends the TERM signal, cleanup before exiting +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +def sigterm_handler(_signo, _stack_frame): + print("[] received signal {}, exiting...".format(_signo)) + sys.exit(0) +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +signal.signal(signal.SIGTERM, sigterm_handler) + + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# This method used to initialize GPIO ports +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +def initDoorLock(): + # GPIO.setmode(GPIO.BOARD) + GPIO.setup(iotUtils.DOOR_LOCKER_1_PORT, GPIO.OUT, initial=GPIO.HIGH) + GPIO.setup(iotUtils.DOOR_LOCKER_2_PORT, GPIO.OUT, initial=GPIO.HIGH) + GPIO.setup(iotUtils.LOCK_STATE_ON_NOTIFY_PORT, GPIO.OUT, initial=GPIO.LOW) + GPIO.setup(iotUtils.LOCK_STATE_OFF_NOTIFY_PORT, GPIO.OUT, initial=GPIO.LOW) +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# The Main method of the Automatic Door Locker Agent +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +def main(): + configureLogger("AutomaticDoorLocker") + ListenMQTTThread() + ListenRFIDhread() + initDoorLock() + # registerUIDofRFIDCard() # Call the register endpoint and register Device I + # ListenMQTTThread() + while True: + try: + time.sleep(PUSH_INTERVAL) + except (KeyboardInterrupt, Exception) as e: + print "AutomaticDoorLockerStats: Exception in RaspberryAgentThread (either KeyboardInterrupt or Other)" + print ("AutomaticDoorLockerStats: " + str(e)) + print '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' + pass +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +if __name__ == "__main__": + main() diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/MFRC522.py b/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/MFRC522.py new file mode 100644 index 00000000..9e15c843 --- /dev/null +++ b/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/MFRC522.py @@ -0,0 +1,396 @@ +#!/usr/bin/env python +# -*- coding: utf8 -*- + +import RPi.GPIO as GPIO +import spi +import signal +import time + +class MFRC522: + NRSTPD = 22 + + MAX_LEN = 16 + + PCD_IDLE = 0x00 + PCD_AUTHENT = 0x0E + PCD_RECEIVE = 0x08 + PCD_TRANSMIT = 0x04 + PCD_TRANSCEIVE = 0x0C + PCD_RESETPHASE = 0x0F + PCD_CALCCRC = 0x03 + + PICC_REQIDL = 0x26 + PICC_REQALL = 0x52 + PICC_ANTICOLL = 0x93 + PICC_SElECTTAG = 0x93 + PICC_AUTHENT1A = 0x60 + PICC_AUTHENT1B = 0x61 + PICC_READ = 0x30 + PICC_WRITE = 0xA0 + PICC_DECREMENT = 0xC0 + PICC_INCREMENT = 0xC1 + PICC_RESTORE = 0xC2 + PICC_TRANSFER = 0xB0 + PICC_HALT = 0x50 + + MI_OK = 0 + MI_NOTAGERR = 1 + MI_ERR = 2 + + Reserved00 = 0x00 + CommandReg = 0x01 + CommIEnReg = 0x02 + DivlEnReg = 0x03 + CommIrqReg = 0x04 + DivIrqReg = 0x05 + ErrorReg = 0x06 + Status1Reg = 0x07 + Status2Reg = 0x08 + FIFODataReg = 0x09 + FIFOLevelReg = 0x0A + WaterLevelReg = 0x0B + ControlReg = 0x0C + BitFramingReg = 0x0D + CollReg = 0x0E + Reserved01 = 0x0F + + Reserved10 = 0x10 + ModeReg = 0x11 + TxModeReg = 0x12 + RxModeReg = 0x13 + TxControlReg = 0x14 + TxAutoReg = 0x15 + TxSelReg = 0x16 + RxSelReg = 0x17 + RxThresholdReg = 0x18 + DemodReg = 0x19 + Reserved11 = 0x1A + Reserved12 = 0x1B + MifareReg = 0x1C + Reserved13 = 0x1D + Reserved14 = 0x1E + SerialSpeedReg = 0x1F + + Reserved20 = 0x20 + CRCResultRegM = 0x21 + CRCResultRegL = 0x22 + Reserved21 = 0x23 + ModWidthReg = 0x24 + Reserved22 = 0x25 + RFCfgReg = 0x26 + GsNReg = 0x27 + CWGsPReg = 0x28 + ModGsPReg = 0x29 + TModeReg = 0x2A + TPrescalerReg = 0x2B + TReloadRegH = 0x2C + TReloadRegL = 0x2D + TCounterValueRegH = 0x2E + TCounterValueRegL = 0x2F + + Reserved30 = 0x30 + TestSel1Reg = 0x31 + TestSel2Reg = 0x32 + TestPinEnReg = 0x33 + TestPinValueReg = 0x34 + TestBusReg = 0x35 + AutoTestReg = 0x36 + VersionReg = 0x37 + AnalogTestReg = 0x38 + TestDAC1Reg = 0x39 + TestDAC2Reg = 0x3A + TestADCReg = 0x3B + Reserved31 = 0x3C + Reserved32 = 0x3D + Reserved33 = 0x3E + Reserved34 = 0x3F + + serNum = [] + + def __init__(self, dev='/dev/spidev0.0', spd=1000000): + spi.openSPI(device=dev,speed=spd) + GPIO.setmode(GPIO.BOARD) + GPIO.setup(22, GPIO.OUT) + GPIO.output(self.NRSTPD, 1) + self.MFRC522_Init() + + def MFRC522_Reset(self): + self.Write_MFRC522(self.CommandReg, self.PCD_RESETPHASE) + + def Write_MFRC522(self, addr, val): + spi.transfer(((addr<<1)&0x7E,val)) + + def Read_MFRC522(self, addr): + val = spi.transfer((((addr<<1)&0x7E) | 0x80,0)) + return val[1] + + def SetBitMask(self, reg, mask): + tmp = self.Read_MFRC522(reg) + self.Write_MFRC522(reg, tmp | mask) + + def ClearBitMask(self, reg, mask): + tmp = self.Read_MFRC522(reg); + self.Write_MFRC522(reg, tmp & (~mask)) + + def AntennaOn(self): + temp = self.Read_MFRC522(self.TxControlReg) + if(~(temp & 0x03)): + self.SetBitMask(self.TxControlReg, 0x03) + + def AntennaOff(self): + self.ClearBitMask(self.TxControlReg, 0x03) + + def MFRC522_ToCard(self,command,sendData): + backData = [] + backLen = 0 + status = self.MI_ERR + irqEn = 0x00 + waitIRq = 0x00 + lastBits = None + n = 0 + i = 0 + + if command == self.PCD_AUTHENT: + irqEn = 0x12 + waitIRq = 0x10 + if command == self.PCD_TRANSCEIVE: + irqEn = 0x77 + waitIRq = 0x30 + + self.Write_MFRC522(self.CommIEnReg, irqEn|0x80) + self.ClearBitMask(self.CommIrqReg, 0x80) + self.SetBitMask(self.FIFOLevelReg, 0x80) + + self.Write_MFRC522(self.CommandReg, self.PCD_IDLE); + + while(i self.MAX_LEN: + n = self.MAX_LEN + + i = 0 + while i - + + org.wso2 + wso2 + 1 + org.homeautomation doormanager 1.0.0-SNAPSHOT @@ -140,11 +146,11 @@ 4.1 provided - - com.google.code.gson - gson - 2.2.4 - + + com.google.code.gson + gson + 2.2.4 + @@ -234,14 +240,14 @@ 4.4.3 1.1.0-SNAPSHOT 1.1.0.SNAPSHOT + 1.5.3 1.0.2 3.0.0.wso2v1 3.8.1.v20120830-144521 - 1.9.2-SNAPSHOT - 1.9.2.SNAPSHOT + 2.0.4-SNAPSHOT + 2.0.4.SNAPSHOT 1.1.1 2.4 - 3.0.4.wso2v1 3.0.4.wso2v1 2.6.1 From 5deac3cca101ba8f304e80dbd1f55e1d4e673dde Mon Sep 17 00:00:00 2001 From: GPrathap Date: Sun, 13 Mar 2016 21:56:01 +0530 Subject: [PATCH 09/13] adding claims definitions --- .../doormanager/plugin/constants/DoorManagerConstants.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/constants/DoorManagerConstants.java b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/constants/DoorManagerConstants.java index d6f282ca..8f6ec4e0 100644 --- a/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/constants/DoorManagerConstants.java +++ b/modules/samples/doormanager/component/plugin/src/main/java/org.homeautomation/doormanager/plugin/constants/DoorManagerConstants.java @@ -27,4 +27,8 @@ public class DoorManagerConstants { public static final String DATA_SOURCE_NAME = "jdbc/doormanagerDM_DB"; public final static String DEVICE_PLUGIN_PROPERTY_ACCESS_TOKEN = "ACCESS_TOKEN"; public final static String DEVICE_PLUGIN_PROPERTY_REFRESH_TOKEN = "REFRESH_TOKEN"; + public final static String DEVICE_CLAIMS_ACCESS_TOKEN = "http://wso2.org/claims/lock/accesstoken"; + public final static String DEVICE_CLAIMS_REFRESH_TOKEN = "http://wso2.org/claims/lock/refreshtoken"; + public final static String DEVICE_CLAIMS_CARD_NUMBER = "http://wso2.org/claims/lock/cardnumber"; + } From 39af0a9f576e8687e92c4e91bb0c5c889f5b4b3a Mon Sep 17 00:00:00 2001 From: GPrathap Date: Sun, 13 Mar 2016 21:57:37 +0530 Subject: [PATCH 10/13] removing and adding required images --- .../public/images/current-sensor.png | Bin 38879 -> 0 bytes .../public/images/lock.png | Bin 32097 -> 0 bytes .../public/images/unlock.png | Bin 29644 -> 0 bytes .../public/images/current-sensor.png | Bin 38879 -> 0 bytes .../public/images/doormanager-icon.png | Bin 0 -> 6697 bytes .../public/images/drone-icon.png | Bin 46940 -> 0 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/current-sensor.png delete mode 100644 modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/lock.png delete mode 100644 modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/unlock.png delete mode 100644 modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/current-sensor.png create mode 100644 modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/doormanager-icon.png delete mode 100644 modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/drone-icon.png diff --git a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/current-sensor.png b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/current-sensor.png deleted file mode 100644 index b1ce4901bcbd4f7485f759d26d81520cd22623be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38879 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 Jbz07G{{fC<96A61 diff --git a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/lock.png b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/lock.png deleted file mode 100644 index 33cc638d9f1374f57596606576e21a2c16c477fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32097 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 diff --git a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/unlock.png b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/unlock.png deleted file mode 100644 index e3ae59a5c06adb67e5a9e818bb87eedc5bd96258..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29644 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

    j;DyNnjWRqldSRT#PVygf!6iPb&LIH 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 T6acve00000NkvXXu0mjfW6Ol| diff --git a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/current-sensor.png b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/current-sensor.png deleted file mode 100644 index b1ce4901bcbd4f7485f759d26d81520cd22623be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38879 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 Jbz07G{{fC<96A61 diff --git a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/doormanager-icon.png b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/doormanager-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a44f50fc48a55fdae888184ecb9133e7ff3f057f GIT binary patch literal 6697 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 bATa1N>A@I+6Bf1q=Z)TFBkht)_Ba0rw^AMC literal 0 HcmV?d00001 diff --git a/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/drone-icon.png b/modules/samples/doormanager/component/ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/drone-icon.png deleted file mode 100644 index 0c7744ff42d16a9761778c98749aa50ea93e5cb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46940 zcmb??WmKHc(&yj=cb5SI!QEX$aCdiicXubq;4XpS?hXkq!QC~u>(2ka_rALy-m@R} z?3^=ap6=`k2m}ZK003F)o47In0HOcS7akH^BPz8e2mZl#mC$rm zaWHrFFmg5nh?qJUn*pWlj4aHQ&5TUFoPL|}0{~D?R;rq=nsTzdCJuItM*p;7^t5vX z_XYs?g*+XNOl-_tfyQPQR`vqq7acw1Kr2%Lat#hSW;sVOGfS&)-p*z!-twv@-ZmyY zrsP6`Kz>hNFabL=S0kXOovpnKucrX{zv%LUpZ}?5A_xAfiK~qO`F{zeDW?b&b8t2T zaxii*m@u=l0J(S=Svc5vSXk(RtjsKIOf1YytUL@XEWGSoyeyo+e}Blq+?-9#d6mV# z{+k!LBtUNI>gveL#N^@O!RW!p=-_O@#KObF!^F(W#LCJ5Zo%Nj|%xVZ|DgC+g1A=o*}$^AEBdzXJt6nM&*JdGTgSQwd^?Cky- z*S}i3xGJ0dZ!!MI)-I}Ej%G~CW-bnH&L-gZVNUU%&fvNGzcc!$Ay^t-1!pVpOEIz) zcQA3YGqZP<5*Hu`|HEi%Wy;ILYGlT0#=*wGY|3oLV9vqL%)n!8Y|Ox8&cefK#%^rP z!pZ#~I{#CDaTaEAW-ew?5e_c!JCNYu=8+JS5M%x-!o|wPA|@*GpT1J|F0MxQCT9QP zZ3X82@4h1c*S@@B&Splg4$i6$4z~Z%0!2#)R|gkM2S=co7?4`S%HGt$!-eLbH}qcv z7B_RYayK*m>g-?#{MQuoTKx~~&CHDc8J{TwvyqWGgBc6E8G|t!Hz$KRm$@-3m$8W% z3ky5>zx$j1zfK(!SSY4{^yL50oBvdSmGPg)|F!~f;lJ(3%pPn!&R{EvBV`%_02+d% z#6?s+SI+d{0x{JvH`YHd`doB9NO$phs})BD=LbSY=RZOfE(z09&u^d&iDH&ecX`A+ zcRg(Q)ck&T(5Y`5qiU0J{v8&3^=sXJw43W?g6rmBqPLU+SBzjL@+&(zeWW=&dm(z9 zWxfanxCWNs|7YPV`*c2-v^W&1uUTL1e!3~%AvswB-?vo(l*y36v$o^3OOOn zoO@ZDcSTb(gHR^}KjaH%T50==cC)&<;k#X*3$fkva%vOuUt+z#IePPMa(2Wy68jw3 z^LI_i6K3;nVP^9Tb~)_(Gl5~FQ3c)cF*&JSO>JR6l5$FZe9uV@s%|c6tILgV&aG~a z3!{14i=V8H&V&Wv8b;S0HX&1DH*wre%-_XrNjXU%^9)_?2IJOxr^lI*MOLLoHB_mY z=3AKN!}UVSsF<)}ilJmtj;%H~x&h)KJd-l@Qc~1Fpd?h`;_e@*r2+)SioqcK(^XJb z_;WkVQ!BJ5uU1AD0LrkuhHlK~{?_@FFw2G@6GE8(+ix#WvYxKKj*`mMe!+>r;>joE z=k^tfkWORr*N`r~SN47M7fZ!o-r`&Z0yGlqkS`90sOhFX6G z&X8^N2{P(4-bcR=W<*T1cm zb-z6@S?6OpE1=i`O_7%#2Djo!h6s%J>a^EYydCXxH`4FC9;a&)t;x~6$X|cS=$SVga9n+II4L`{4_{Bcxl0wgj#c1vTl*4UU^pWU$KUGg`xfXe&$$--F# z=G`XbI0?#B3A5BKCdz#^dd|wi_U5Xp5K;2MzJ=rgBf^tYu*zp<;(4|6YU_ZsGBddO zR)W8P>9-H3ktSrXdz^`y$c)qi;MF2vnIm1k#I1E&cXxdMyJb;Q@X1olSo^*TF3L;7 zY`*DEt?6!EKz9eql9cjMvpudri|{NWDv2x*iO%Ian$T2Tl8Aq9HK#hxigtFNAD3a< zJGYnHRM2n&QQT80_6^QtEXi%Zi-w1SnVX%rdtZ*ERFoCZyc;t1yj$Ev z)wm0TcY9PDtZM({FeD%}t4QxQaw`$wAj$ktIvmp7yH1Be-_QNNI4Q)3hZ#5BUcfUY#feFfvZpm$+a;W40%#6%Uc|oFwJfPs{y~w!C$iT3#O{;JA(vgsSK2j#|P4?pCcsqfNC)ahHazuSr7g3HYnvXm&>-+kV;zy+6Ce2Jzpajaf zw1R&3!!}n0;#j3x215lSJ3zwgVIL;V9O~=QT7Pm@-KQ^;1`4uccD7bzs-f;Z+d@XZ zqM`PpAZZPB7O8RoBDF+c?lt^s@JDpL7IQ7Nf;IOg;CDxP-S&>V(~zN5 zw}h;KZBv^%w~2n9?~=&<2CX;LPuCMKWlWolHPxs4*OrdLv1FSVKyE?B;lM$d@HQL( zG{*(C;68N}`c_#~l1OdM$l5Ur3x$|~E-VoxLuJL=-b+!$)S9Z6Nq+RSp_zT>{(M+W zZY0TcrS|GdP#O`h)B9IjNW(-(aiA7&?2MZx0M5@rNKja~kUlE0UD)>xtsL<_TT&P?tttp@eo?fiaMj5Iex(EW5J%#V{#$^`Jv<8!z7l=VaFi51sSSjUoer=H1-1L`AL)ljeSmYEo5doBd zJ``+pr~L1-SQsF5WerD5VD724i@8FSKC1(PVh#jyzk=ixMBMSwiPFVUNHvPZX{H1n zt}O9%C4lnv=5bjC*P+S7eLI8#q($^bV|m24_?9ENQjQ?UwUQu~|0lrLa%+3rnna$c zPl4por@RLa5NVN{ZEDRQXz1l`v^+fJ-;JFvuLu8=+@(r;`f~R5H)*xrXFow-JHOo; z$&Z)2nmJ1Bd3Ni-t)f^8$SddrF{lYw_!(%tWUTa)U2S1k+z?ms7g4Ay@t8PS0>W$DS?d#wKgh&uL_hEC_0fsXxdK_*@*eMkiZtv6PR{ockN`Y_ zh4}?ca)AND1*EMwUGRI|E%A}6Fjp{5r!fic zS$a*bDrt-f<}%*xdB3YcT)ddmEHF$9D+mI{s&-}^@crUkOc9DgfB{;@f94rO8--C= z%Q;IE6nHDKu)rtymNoZwDul~*@m^IKA)^}c(aP>ByWNjp!a7zxIvaF*$ejyE6EFZSWOCGDsol-Cd)Nmhy)Ntq!nQnr_ieH zJj}##7PTsX6Z8{SVw5LmuH3rV?mQoYLCnjf-|sN!&Z>1^eNc0gs}RQ4YDW`3~;-#@OdDv`Y{rLYBWHfPf8COqRKTn3KRnN=Wg+eXXU`u z!{CLUQpze}>wZT+;kowfqchy=CThXt6Du~DnTO;TM zuL4ARhBuD!4Q)idNGEEzDkAd z+a+GoI5|3NC&}_WR7!5i`rZ{+GPp`Z#X9{<_+fM%I+8qd0E<}A%jEa7SwjiW&3VyY zYL?*B&12a8q&>pva`18KbdWs&Ix;`BE!^rJyZ{O+@8PC@_}yzWr4yp>4VX(Y!@4gV zs0@d%d#42B3prD&^Bm>NTEgGByxe_X)Fb{$nVXTE(P6whBCN#Q;RCNjR!c&!YlW7r zvm=yRKq>1zXJ7>lF*7^5vWsiqOU+9=ZeV=xZlM2fH7NnLSX5n^5_&4?ilb;kP z!J(JQgG3k|3QRoD-5{)s`i-3x(R1_NARCy)L zAiy6d!u2{evR1Q$V&Fkk53sy+@p!a*A#6^==&WhJk8crrJJ_v3admY=B$C02Fc;IT zKtS+wK=Dr_NwR=IB>(FuZ*=?vk;`u_doBCyb5Th5WNJrLFlFm@AWCn7=M(<#R>!CN z5DA-&7@6PXL|-Gt1DX|qQUC;6!X)fZXr?$g(|b3ICg20T$yex@1a|zRV|hGm*If~5 z1{`%2NM33P0{(0}l=HPM+8@d~PFnM`T+P|7jw;#`N^fBTn$(qffAEODWUlhQcloaV z66WHcmL%srI<S)DNA^##nv<*N zeuh<+fxq@Ek1pdy7xAXw>wXXkBPtctI1zjS9Oz02q11<4u6Y`VshcHmtMIxahKn>F z{=Tk>757jJkMJwBXKuGQX(bm=;}LW5bbeXo-A!|o$$&2<#@M03rna(D2q9W`-tQpI z#{J($Kd8xN5$tN8TH)i> zaM*Z1HL$Q+OB_gG+TsM@S91o=;3c-L-pNf^RIlAUIOAM=gFFM2-rnB5bam-!W8nUj zpAI}G$45=SCs-mmJJ`xgk(?;Bmi0xh#84{+Z)OI|Bk();IaMc zYDo5LkELMo;*0tMCp<>G>L+4RKiz;A+nnm9=qUiMde`0Y)eTqVFY*8{j6z2dL#RJS z)iA?=($bEqhMU*B7ZJhgoteJ%-;@1=munLduhx)afhb~d$YY1{D~-mvk1i;=+#lCE zt2(P4mlAN#yv>fLB7W|e)9_#RV}m#AuVY*gV#*RQBT!bfwJCx-r*z|nw2LndDhMb{ zOpKfzN4&4b6yoFih%fpBA2Q2_Fx2jB>wCK zVI&6s9kamxJA*0GrGbx+SGt1`!p#HP6mcO1)cKdv^pr*6OGVReWEghMO#HXH-GGGy zs-0a#rs|K@s)iU>ZWt>>dUz!h33MxkZ(Y9`sV8Wtb4l1lk$62jc-&pxH)O_vw)8(C zv*`5$-hZo2$)+AjW_LSl;Nfx)N<$AJlesaP3~<3>2|Bj%uQfPghM))|e+_@kZuQJs zimSHFEqAm8Yz9o}Fnx_$_sL33YuamK5cd@cL=2rRFTf=Goh!^7;KxQ+Q(RDI<*drx zuS}=^R!N(qFLsR5t9ODJVJqX=q;!QKLskU5zdlk-G&; zRmam7ff9jI&`=0t*4Yp%js*SlFi0HQi&!Y2p`pV9J~j%Eg=6+(_lC=MC>*ajz-8;y zAR%fPM*MFZ876Py_w|`&w?m`R@87=?p0L^P-#<9hP}3+(FeQY{vx*$wah7-eHK z?jOo_I=fAk%k!1lhIGW{5pBKX#u@t?f}-fBBBT8EywhsN*qM?7s!Kt?eQs@~S~0g= z(Neg_+ruofrnU7{C(qaKdPhzKk_g8`H9)tvg)v6230U{D9fgZ(dK!*+IP~$%(<<0nBRyeKM=rokLRbNCh$*G)MXx@*PoxCk|g%k zcqH~4G1wf1Tzkt8LiS?YREAGju_|D{4sXuw*EB5F4dOZTT}~tCSEC#r+Svqlv*svn zF1@~21-_Bw zW!hPok(`}Q-a?Xkl*M)yj=y4PDvn!&ghL8)Cz| zzKjeJBnHI>Pcq!hKv$7`^5 zsbsFtQY8)-F>0f%qpK|c?F-Q8Xw`XbhzMiIWo5A-+EaYJ~mYa8#{H-zDBXk}P7hvyOZ!Z;C=F+o- z$nRxqY3FBR>`l_PQZ{)cJn8OZq48C|53HQBRt}}Z;eT_8J$7fY_SAvVt>Uv&$g8JQE@_chx@~2Pdc!0 zsRfPkwk*O@MrWibg~(}xDfn!o^JM7h`#ce`C4XH($?ibSM=v!ngg!?Ixz#Yb7TP%i z*7fhsmqyU{?RQ?kr;~MVA}ll!IY}i>al0KvK2AnV1Nz4Fv2~9}tn@MLElAo)&?WHk z`vppqGV<2Tm`lT#2sqFDa#2qzJ#r}iybSaq*T$x*w<0G0g3 zrx9Y18o@~7KmH~|qZ^9f{!rzF%(d1))n3#SH&X4}1${ zVjh~Rv>{ZteJyS(`mR4Aca4A*Jxo>V;pP!XN>gos9$cgKhl`W4_z>j*^3^y5Wv>V9 zxgQSqE)o^r)Y2xBx6oK@0&g@BHc#|wzrJ&5W@OO&l7}B#`kCBxi zD;-dXR4`1Eltw5RWb;k7IHTta@$$>q6@$Sm?fY)u()m)O@Dfk9TVU1;*qk=3ikEOW9zvDy>fgUS5#I!*Y?T)XpN!r{(&WvUMSnVCX9z|67tY*&^n!zVPb8 z(yLw}+>A-*`j%WC#$a8v)SFQpUN6~NP~(w7{Hu<>nxq@{XCP{6@+KvL6zIsPVB5oIDFyZB=V+)FDfv4H1}sFoQ6(!&h4 zn+qkt;L*3pR0wjbKQ|BM`{OU;8BQvhj5Uax7XT@*Usqk58q!p#QKuZ;=c!bN%jK!b zNE{Q`cYc2o@|T5rXo2XG4n`1ZiFw__ySHy8d+v}9-Fyb0Vx*R~TEN+wTxmn_8$UTD zKbeRisG=73w(ZLZ3$e|`(d%xW3;QUrs~U+-cj<1yIm&l?pzGzRRoI>(WEtu-Ozww_ zlGj9l#yLw42PgTjxn&fGHF|{ww5?<6Qu@apTnFRaqI`W!Rsb8|W(Gng5Rw84d+8)=A$DfYT@#qPBXE6g|@ z7>{y=F;{Xv6)?GLl;`}i4P*KnG85{sZlM33x1o3g1iNAvC<6^ z;v#;e^_@uKr%hx~$B_o@GyOuxwLF1D8oWYm$&g1tyu5bvC@wJ^^KN-;<$?BUVf}rJg7EC6q^FYespZDK#V!+ zdb_eNi9At-hVNbcMX&;jvy(mGI-VBqWe?XW4T7hzF zN#i!k@Ql;*FoI6UjB_*__VOs42aP#iAw3G&whWzm#Gv@xHuv-%6ou;HF?(3?f)KEY zR8O3=Oa=dx%L6GXs;Uo(V~j|^iu|D*+fn(2fUHgA4k9%%TB2(ql4ja50M!LkENP^-Y*XPI1-W#sA(=Xf zxp0aF*?wl&iWkn(-?_B~Cyun4GI+$>1>*+Osi+ie0(x0wzjdOF_>CBapr}Z!rcHTd z$V3?n1%Q7j`xT7W2=P!D5rTB3ay_EN6bod;qZdM=#W+ z`bIrSl7&{_zIUkcTV!`9#QFI?W$`|14#vqvP;Ysxmve8#$n{@5=y5j>RE=6C$Z(i2 zMeGn1WpA95RAh;-=_FK#%w~PsAp8!V6@+Tn+RsXyU@M3eMlB5qqr`@x#7^O2;crj1 zvT=$aP>5e%scy> z#IWlTYsyLS$x3|Q1rH9GDsOT5;24W=gM9Dg=2F|t%yF=d-mw$CG8o%gJl+ou&w?Z4 zOyjxK-7tuxxZ$G-M=>ab75v`poMGIT43;vX)XIryz^09O!YUJlwmxqQ`dM{I4^ss~3uA3Jj~o{MNyG z=rjhi$jN?~u1;l+wH7t@ZH%teJyNW~a@>(Myx&pOTfa8ph?#VuH#nB=w=jm;Q}Pz4 zQ)81MulJ!5YZ9tLT6*AM3YlW2EFOL>I7$i*VZWWOfhCk92%B&FO-n5|{wt5o>lXMR zNlkNEOre~t=F9i%SdT{c9ToTd7zpUcB$r2EgDRYc z5J^PUH=xbsJ6mdWb}cuEtcgg_*^G?JDw>D{)`YQ{Wa_M5P@2BqE0i!efdUVwLo5b%voG9@>s`dHUt)#Ufu*}al zWMdW9`bry0#OmB_o?Yhnd9|(8#!85;LIiE*WNlWB*|p=yNmu$y?^!XI`zG2W=6CmJYmxc z_pio{%+ryfk@4ePgw5H{@x5QT;qC&W+5IURT&}EVhb_!(EG(SGqAE~&bE0xccNy6u zV30?Bg?2YG-t676$lr!U{j;AF4}RB~ZFPdFG8N=UfyfRDOfA&~8BZJRUwW!oahQf! z#*?G1D`LqY#VQ({qwKXhrZ)$q^c`Bv9u#PMaUY8zs;eEWjg~CT%xx{p%Vd6x1xisl z_Ge&dW@>BG0odUS6RsyM@whz_TMKEr9(~$TOPiVE;n&Be;nX~}jepl~N+(wEUeWTf;Fsh$u6ujGGn})BR z)0i19Bq*r|=n%`KbOX=Mk0G*&QpqjO?*~5D6VMjA>H+vOSMS6oF|G@`G!C@hbcr$b9f^tzri9R3{5L)KG%Hidauz2Ws|W@dlKvSsVH z)QyEa8m54s)%F>jRK~0IRc*d7R}XC zfU49I3SpjuRWzikcbU{Qd3EcCK#_kw<(T^5YPK+ec1ty1X}eptD>pE^$KB(v4_~D< zVH6>sK+WUX-BQEix!=R@EZ!AuasyV{@y)eA#RVlfwq!xIss%qBC>uVa4B*XfVN2<# z!P`3+P5>ERzDF4T=s7ss&&@iWbxhxjrSEsxU{Y3d9YW#sV>v=z@A-Z=?)&i9NZ+WS zZhKi%MRgH;1bPUB7&{7fSNHtxA8JVVGr^@xOqYrW981i#u$N8V-rlLlzR{wrEckqZ zOr6i?lNIe>v*XEC6)f&I5AE&E+_iH4+O6vm0l(G4;j8;MI5_zoNf8^_xAAdDK%Uyc z&6VM)Gx7qQnp@lrC+F7NU&_D&DRpT`Db#kh8%@0UT*u&JijfC*{)+pHV9!b~AciGo zRW&YGAo3i~Dhl;(w4z-&Us9H?qpnqiAP>E6=-s}=Lj1P-xSaX?wVxvp4P_xe37JHD z>$k%Q(*aIew7ZB_WJ6cnmb+qHXj}8We5u$yXIh9l4jkbyU)7J2)NuF;=6wLcPf)P5 zmqba=yIZDpsMy^uw9CYS>L1RxD9YGq91S=^Vq4ra1WN7{wfP_)xjiz>p9$HQx0B_;e7K`2Y1*C4pMqDsOCn9Hxq@I3`=DE|Dd z@oianqf@j>_<>tjp30$7drwjDMtM&HooYsCio+t7_EsaiBI0`>xyHTE-2w_>w4)ksybel)U;Fc9}|qBZQ3IA=w`uh5q>-gdv%)!NT z(R7e)MR=_)@!!TKZX|nWCTT`}(L@Aj!d`(P%$`BU;smj*>%n47;W(tbyB9RQeMm72 z4G$KvV?@JS96^qZSP=PZwe{Y>=Gbxqk57GmBc!NWBxj(Fqv5%-jV$t!Kq{e!U@9Nmg*jvp1W#(gnK7(P&3{W7V zKiT8oE-%Y8_4Aedr(#7kcG)&Flm6@<%dId0(5ju|61`eTc>nC^&tT=!A~2lAfAdB@ zKLPO=sjwXEs6CNj>-M@ZW9i~2rL?$@YpwuDnezTw*dW`@8p8+=<>STAx(BZ>2wZYX z*1fO_#2xQI%ChpwizL3`xg=$pLo8&b!HKSn?&Q0c#*c4D}9}O`+QUuuk*gW(^aBSCDa6 zSO-l>DD7tf+Bv|HWo$(a7BXchzx5d-|1C1?ec1_XyVG7Az8`#Y*rK%IOWAz zKxYJBdGe!ZuRk6s(p}LZ03azObSLYLSXisLPlewJdLl$}Yj*@ETL^je?sbUbQ9PE)% zP$pKvXcfHZ?YM_>8&3-{va8W>P#nzstbaagE}EBrDEDI9AoQcL|NVPB^xX^g$Bdqy zfUFNMGV*Oz9TtUJhP{r=+<*^f9Q<{fi4ltc@!$1}p6;FHFEG6k6_D)Aya}F%d>Ivt zC^!U{Q*@Q4y3>#cSb2D=X{l;nzh{>*g#uhM2D_U=5^Dh$6b1o?7G_^pCkka#>sYxU z`L*^6W=Bs5wgCOFdWujg8STUBo#u_-ET;NiO$LjTvh}uS4%V7-(%>9*zY+_w5GmV8H69*Z^$fu zuBKSb%|07?$owkrf^?Mk{j9T#O-7S&HRPg`DHm+;*T6Ys6{R?gnJM?NMT@$Z2g(u9{XwIHR@-I}r}n@y|6&pemellkIVO zaZxT-&<-xDrxp6Vjk<2Gqsz(=tbfyfA_kZ_nmSU~#%7&pbgR^~TWq!moY zcIPq7=aGCC2UezJmhebuyX3|E*f$Sp);){jqK0f(q6c{)BvdoVu>TM(|DUQ707EzW43#QF6s7MKNx0DCZR9@c_Ii#B_K3GfmgQnys7>Onn)$Ck7do_A;&=SYV)=FVtBmbV}rI${<;R=yLXn;YB z>wlJ}M+S!ahG!Q>A;UbY?1&{wQupUMGXBJ$Ss3_z9C?sNz&%BJ4KN2xQ5e|j*E?Bw z$w4918Crge;r8rU(E$;}@c&t!Cnn63=E;MaTIz!uO;C0LZPpqjK@P#yaNc8^0@6)2K_|__F6eZgCvaIA(g~~$|k&XGFy0-3yfx*G-F0E=%}6AkE10@!izynq=Z9qd znn8S~YvqZ1XXK+uNJ{5mtod;t@hRnXSn+N4P>r9k`c?l6n+0}C5FA$4Ap5$(t20ve z)Alnq27inkU7PMk5T-^r9hSRWiQ*!u`C_6ECs*$B{c8#6BSH&`* zV+R84Ppy_4qudG3-^5Znm234ygeHN9JKc(WOF~we7aX-A#I0V>1PtpHf)#h7;DNsX z4WEUMgN}4FNv`ruh`G04ABI}YS{{84A3ab(Nscl6z&q*=KB^ThFB9fbR7;ImsVJy? zOLT%me*$JZ5fvvwe_=ny;NwYASqL#-q=T!6e=iq?;AD5S(fQLiwCcis0m=w0f=leA z=*(wb+n6MHh!i7PP>-Sl77Xf2%ng+krUBXsR~QXKHKuLFIiU=qkyR4R)}=v|v?CTT zyFkOiz@zG?BQ%mgFB~!a)JAp=q&t((^Qf3}zbm5f2E<{9m{|mTK;xdBWOMDmCk@+qp_>njG2zg17)_E`Dria{xx991{ycxmP!*$lyxd@B-0S z*gPeU5Y#f*qpE;Te2-3#Cy9ilXST!lUA{<%AO

    J&TxbYUA`g6Fvzap%(O*Fj*K~ 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 Date: Sun, 13 Mar 2016 21:59:15 +0530 Subject: [PATCH 11/13] removing and adding relevant images --- .../public/images/current-sensor.png | Bin 38879 -> 0 bytes .../public/images/lock.png | Bin 32097 -> 0 bytes .../public/images/thumb.png | Bin 44816 -> 0 bytes .../public/images/unlock.png | Bin 29644 -> 0 bytes .../public/js/device-stats.js | 56 - .../public/images/current-sensor.png | Bin 38879 -> 0 bytes .../public/images/drone-icon.png | Bin 46940 -> 0 bytes .../public/images/myDevices_analytics.png | Bin 45802 -> 0 bytes .../public/images/schematicsGuide.png | Bin 178935 -> 0 bytes .../public/images/thumb.png | Bin 48636 -> 0 bytes .../public/js/download.js | 194 --- .../public/js/jquery.validate.js | 1220 ----------------- 12 files changed, 1470 deletions(-) delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/current-sensor.png delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/lock.png delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/thumb.png delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/unlock.png delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/js/device-stats.js delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/current-sensor.png delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/drone-icon.png delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/myDevices_analytics.png delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/schematicsGuide.png delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/thumb.png delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/download.js delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/jquery.validate.js diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/current-sensor.png b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/current-sensor.png deleted file mode 100644 index b1ce4901bcbd4f7485f759d26d81520cd22623be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38879 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 Jbz07G{{fC<96A61 diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/lock.png b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/lock.png deleted file mode 100644 index 33cc638d9f1374f57596606576e21a2c16c477fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32097 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 diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/thumb.png b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/thumb.png deleted file mode 100644 index 510859d86cab2dbac49a30b96f213183593d0ea4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44816 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

    R~8;NHV0F- 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 II*xb#4;5{2p#T5? diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/unlock.png b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/images/unlock.png deleted file mode 100644 index e3ae59a5c06adb67e5a9e818bb87eedc5bd96258..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29644 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

    j;DyNnjWRqldSRT#PVygf!6iPb&LIH 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 T6acve00000NkvXXu0mjfW6Ol| diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/js/device-stats.js b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/js/device-stats.js deleted file mode 100644 index c5719adc..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/public/js/device-stats.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -var deviceType = $("#details").data("devicetype"); -var deviceId = $(".device-id").data("deviceid"); -var monitor_operations = $("#details").data("monitor"); -var appContext = $("#details").data("appcontext"); -var publicURL =$("#details").data("unitpublicuri"); - -$(window).on('resize', function () { - location.reload(false); -}); - -$(document).ready(function () { - updateGraphs(); -}); - -function updateGraphs() { - var tv = 2000; - var iv = setInterval(function () { - var getStatsRequest = $.ajax({ - url: appContext + "/api/operations/" + deviceType + "/stats?deviceId=" + deviceId, - method: "get" - }); - getStatsRequest.done(function (data) { - var data = data.data; - if(data[0].door_locker_state){ - var currentStateOfTheLock=data[0].door_locker_state; - console.log(currentStateOfTheLock); - if( currentStateOfTheLock == "UNLOCKED"){ - $("#lockerCurrentState").attr("src", publicURL+"/images/unlock.png"); - }else{ - $("#lockerCurrentState").attr("src", publicURL+"/images/lock.png"); - } - }else{ - console.log("Backend server not available"); - } - }); - }, tv); -} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/current-sensor.png b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/current-sensor.png deleted file mode 100644 index b1ce4901bcbd4f7485f759d26d81520cd22623be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38879 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 Jbz07G{{fC<96A61 diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/drone-icon.png b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/drone-icon.png deleted file mode 100644 index 0c7744ff42d16a9761778c98749aa50ea93e5cb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46940 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

    J&TxbYUA`g6Fvzap%(O*Fj*K~ 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

    ABby(s=LJO21V_>RLT6jLL^ z=4SUR0FdeO+Wy_(Y5B{Kv|3EnSaqzql4X&@7TM?A4eoMs7t_~mrbitCRt(p^{VBswjBJHoh27agFV*uvFv_Yx@3n#LYjBK~|Qi#RGHHfFD z@)|RoHt8x9w-P@R>%Lx=c0OoYIQk_Pa;}z9OzLt3y>bbsW4ftJ(prMDrMIq=QKgMdU^bfjGFEvi*NbJn@P!$MKxUFwR>lX%bI8n##=+PO+|Ujr%&!0R>FDfi6m;Q^FDTrn9Y@jAsefHY z1M-3K9bK6(a-r6b(iJo*NQ9^Fl3VulWfj-me#y{O^Hi+$Fm#@8wsf#5X!?o>6 z!1_@;8BfQgcmFY^6qjcBrSWg(J~stx(^l1kh7Z z6h>@y08FFS?1AZ(-Y*RX-0j_IO8Eq|W-;9|C#JQEdXl53z$*hiKa`jW8|{bZdO3C@ z4-jOK(Iep7|e3uEW2! zPwARrCLZSB*JQ3*6v6(J=mQ&dIdhvK-!kN&;Gw`ib9iunUWL#i1w)uVRZIq5MY$wbGOi(XvIQLkQX@ZH$5fGpP2BH(;sTYF03Po} ze2~Qe>45?8%lP`4O~hiz-LOms8Z}@SqV1kNKMTgE{t1T~YVZb^glebkkos3>RtC>6 z1$;t*m+4j#s344ZV)#1rW%qe~PI&z~vskoE$n$}A~v*n_4(-MO8x^eB= zxb9TpJ>3aDnLȯ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 G{(k^OIp?eZ diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/thumb.png b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/images/thumb.png deleted file mode 100644 index b74b20f9f86cb04e5658db1d3d2d06a30a77e388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48636 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 diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/download.js b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/download.js deleted file mode 100644 index 221170b2..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/download.js +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ - -var modalPopup = ".wr-modalpopup"; -var modalPopupContainer = modalPopup + " .modalpopup-container"; -var modalPopupContent = modalPopup + " .modalpopup-content"; -var body = "body"; - -/* - * set popup maximum height function. - */ -function setPopupMaxHeight() { - $(modalPopupContent).css('max-height', ($(body).height() - ($(body).height() / 100 * 30))); - $(modalPopupContainer).css('margin-top', (-($(modalPopupContainer).height() / 2))); -} - -/* - * show popup function. - */ -function showPopup() { - $(modalPopup).show(); - setPopupMaxHeight(); - $('#downloadForm').validate({ - rules: { - deviceName: { - minlength: 4, - required: true - } - }, - highlight: function (element) { - $(element).closest('.control-group').removeClass('success').addClass('error'); - }, - success: function (element) { - $(element).closest('.control-group').removeClass('error').addClass('success'); - $('label[for=deviceName]').remove(); - } - }); - var deviceType = ""; - $('.deviceType').each(function () { - if (this.value != "") { - deviceType = this.value; - } - }); -} - -/* - * hide popup function. - */ -function hidePopup() { - $('label[for=deviceName]').remove(); - $('.control-group').removeClass('success').removeClass('error'); - $(modalPopupContent).html(''); - $(modalPopup).hide(); -} - -/* - * DOM ready functions. - */ -$(document).ready(function () { - attachEvents(); -}); - -function attachEvents() { - /** - * Following click function would execute - * when a user clicks on "Download" link - * on Device Management page in WSO2 DC Console. - */ - $("a.download-link").click(function () { - var sketchType = $(this).data("sketchtype"); - var deviceType = $(this).data("devicetype"); - var downloadDeviceAPI = "/devicemgt/api/devices/sketch/generate_link"; - var payload = {"sketchType": sketchType, "deviceType": deviceType}; - - console.log("-------------------------->"+JSON.stringify(payload)); - $(modalPopupContent).html($('#download-device-modal-content').html()); - showPopup(); - var deviceName; - $("a#download-device-download-link").click(function () { - $('.new-device-name').each(function () { - if (this.value != "") { - deviceName = this.value; - } - }); - $('label[for=deviceName]').remove(); - if (deviceName && deviceName.length >= 4) { - payload.deviceName = deviceName; - invokerUtil.post( - downloadDeviceAPI, - payload, - function (data, textStatus, jqxhr) { - doAction(data); - }, - function (data) { - doAction(data); - } - ); - }else if(deviceName){ - $('.controls').append(''); - $('.control-group').removeClass('success').addClass('error'); - } else { - $('.controls').append(''); - $('.control-group').removeClass('success').addClass('error'); - } - }); - $("a#download-device-cancel-link").click(function () { - hidePopup(); - }); - }); -} - -function downloadAgent() { - - var $inputs = $('#downloadForm :input'); - var values = {}; - $inputs.each(function() { - values[this.name] = $(this).val(); - }); - var payload = {}; - payload.name = $inputs[0].value; - payload.owner = $inputs[3].value; - payload.serialNumber = $inputs[1].value; - - var doorManagerRegisterURL = "/doormanager_mgt/manager/device/register?" + - "name=" + encodeURI(payload.name) + "&owner=" + payload.owner + "&serialNumber=" + payload.serialNumber; - - invokerUtil.post( - doorManagerRegisterURL, - payload, - function (data, textStatus, jqxhr) { - hidePopup(); - }, - function (data) { - hidePopup(); - } - ); - var deviceName; - $('.new-device-name').each(function () { - if (this.value != "") { - deviceName = this.value; - } - }); - if (deviceName && deviceName.length >= 4) { - setTimeout(function () { - hidePopup(); - }, 1000); - } -} - -function doAction(data) { - if (data.status == null) { - document.write(data); - } - if (data.status == "200") { - $(modalPopupContent).html($('#download-device-modal-content-links').html()); - $("input#download-device-url").val(data.responseText); - $("input#download-device-url").focus(function () { - $(this).select(); - }); - showPopup(); - } else if (data.status == "401") { - $(modalPopupContent).html($('#device-401-content').html()); - $("#device-401-link").click(function () { - window.location = "/devicemgt/login"; - }); - showPopup(); - } else if (data == "403") { - $(modalPopupContent).html($('#device-403-content').html()); - $("#device-403-link").click(function () { - window.location = "/devicemgt/login"; - }); - showPopup(); - } else { - $(modalPopupContent).html($('#device-unexpected-error-content').html()); - $("a#device-unexpected-error-link").click(function () { - hidePopup(); - }); - } -} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/jquery.validate.js b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/jquery.validate.js deleted file mode 100644 index 3c1ebb04..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/public/js/jquery.validate.js +++ /dev/null @@ -1,1220 +0,0 @@ -/** - * jQuery Validation Plugin 1.11.0pre - * - * http://bassistance.de/jquery-plugins/jquery-plugin-validation/ - * http://docs.jquery.com/Plugins/Validation - * - * Copyright 2013 Jörn Zaefferer - * Released under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ - -(function($) { - -$.extend($.fn, { - // http://docs.jquery.com/Plugins/Validation/validate - validate: function( options ) { - - // if nothing is selected, return nothing; can't chain anyway - if ( !this.length ) { - if ( options && options.debug && window.console ) { - console.warn( "Nothing selected, can't validate, returning nothing." ); - } - return; - } - - // check if a validator for this form was already created - var validator = $.data( this[0], "validator" ); - if ( validator ) { - return validator; - } - - // Add novalidate tag if HTML5. - this.attr( "novalidate", "novalidate" ); - - validator = new $.validator( options, this[0] ); - $.data( this[0], "validator", validator ); - - if ( validator.settings.onsubmit ) { - - this.validateDelegate( ":submit", "click", function( event ) { - if ( validator.settings.submitHandler ) { - validator.submitButton = event.target; - } - // allow suppressing validation by adding a cancel class to the submit button - if ( $(event.target).hasClass("cancel") ) { - validator.cancelSubmit = true; - } - }); - - // validate the form on submit - this.submit( function( event ) { - if ( validator.settings.debug ) { - // prevent form submit to be able to see console output - event.preventDefault(); - } - function handle() { - var hidden; - if ( validator.settings.submitHandler ) { - if ( validator.submitButton ) { - // insert a hidden input as a replacement for the missing submit button - hidden = $("").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm); - } - validator.settings.submitHandler.call( validator, validator.currentForm, event ); - if ( validator.submitButton ) { - // and clean up afterwards; thanks to no-block-scope, hidden can be referenced - hidden.remove(); - } - return false; - } - return true; - } - - // prevent submit for invalid forms or custom submit handlers - if ( validator.cancelSubmit ) { - validator.cancelSubmit = false; - return handle(); - } - if ( validator.form() ) { - if ( validator.pendingRequest ) { - validator.formSubmitted = true; - return false; - } - return handle(); - } else { - validator.focusInvalid(); - return false; - } - }); - } - - return validator; - }, - // http://docs.jquery.com/Plugins/Validation/valid - valid: function() { - if ( $(this[0]).is("form")) { - return this.validate().form(); - } else { - var valid = true; - var validator = $(this[0].form).validate(); - this.each(function() { - valid &= validator.element(this); - }); - return valid; - } - }, - // attributes: space seperated list of attributes to retrieve and remove - removeAttrs: function( attributes ) { - var result = {}, - $element = this; - $.each(attributes.split(/\s/), function( index, value ) { - result[value] = $element.attr(value); - $element.removeAttr(value); - }); - return result; - }, - // http://docs.jquery.com/Plugins/Validation/rules - rules: function( command, argument ) { - var element = this[0]; - - if ( command ) { - var settings = $.data(element.form, "validator").settings; - var staticRules = settings.rules; - var existingRules = $.validator.staticRules(element); - switch(command) { - case "add": - $.extend(existingRules, $.validator.normalizeRule(argument)); - staticRules[element.name] = existingRules; - if ( argument.messages ) { - settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages ); - } - break; - case "remove": - if ( !argument ) { - delete staticRules[element.name]; - return existingRules; - } - var filtered = {}; - $.each(argument.split(/\s/), function( index, method ) { - filtered[method] = existingRules[method]; - delete existingRules[method]; - }); - return filtered; - } - } - - var data = $.validator.normalizeRules( - $.extend( - {}, - $.validator.classRules(element), - $.validator.attributeRules(element), - $.validator.dataRules(element), - $.validator.staticRules(element) - ), element); - - // make sure required is at front - if ( data.required ) { - var param = data.required; - delete data.required; - data = $.extend({required: param}, data); - } - - return data; - } -}); - -// Custom selectors -$.extend($.expr[":"], { - // http://docs.jquery.com/Plugins/Validation/blank - blank: function( a ) { return !$.trim("" + a.value); }, - // http://docs.jquery.com/Plugins/Validation/filled - filled: function( a ) { return !!$.trim("" + a.value); }, - // http://docs.jquery.com/Plugins/Validation/unchecked - unchecked: function( a ) { return !a.checked; } -}); - -// constructor for validator -$.validator = function( options, form ) { - this.settings = $.extend( true, {}, $.validator.defaults, options ); - this.currentForm = form; - this.init(); -}; - -$.validator.format = function( source, params ) { - if ( arguments.length === 1 ) { - return function() { - var args = $.makeArray(arguments); - args.unshift(source); - return $.validator.format.apply( this, args ); - }; - } - if ( arguments.length > 2 && params.constructor !== Array ) { - params = $.makeArray(arguments).slice(1); - } - if ( params.constructor !== Array ) { - params = [ params ]; - } - $.each(params, function( i, n ) { - source = source.replace( new RegExp("\\{" + i + "\\}", "g"), function() { - return n; - }); - }); - return source; -}; - -$.extend($.validator, { - - defaults: { - messages: {}, - groups: {}, - rules: {}, - errorClass: "error", - validClass: "valid", - errorElement: "label", - focusInvalid: true, - errorContainer: $([]), - errorLabelContainer: $([]), - onsubmit: true, - ignore: ":hidden", - ignoreTitle: false, - onfocusin: function( element, event ) { - this.lastActive = element; - - // hide error label and remove error class on focus if enabled - if ( this.settings.focusCleanup && !this.blockFocusCleanup ) { - if ( this.settings.unhighlight ) { - this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass ); - } - this.addWrapper(this.errorsFor(element)).hide(); - } - }, - onfocusout: function( element, event ) { - if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) { - this.element(element); - } - }, - onkeyup: function( element, event ) { - if ( event.which === 9 && this.elementValue(element) === "" ) { - return; - } else if ( element.name in this.submitted || element === this.lastElement ) { - this.element(element); - } - }, - onclick: function( element, event ) { - // click on selects, radiobuttons and checkboxes - if ( element.name in this.submitted ) { - this.element(element); - } - // or option elements, check parent select in that case - else if ( element.parentNode.name in this.submitted ) { - this.element(element.parentNode); - } - }, - highlight: function( element, errorClass, validClass ) { - if ( element.type === "radio" ) { - this.findByName(element.name).addClass(errorClass).removeClass(validClass); - } else { - $(element).addClass(errorClass).removeClass(validClass); - } - }, - unhighlight: function( element, errorClass, validClass ) { - if ( element.type === "radio" ) { - this.findByName(element.name).removeClass(errorClass).addClass(validClass); - } else { - $(element).removeClass(errorClass).addClass(validClass); - } - } - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults - setDefaults: function( settings ) { - $.extend( $.validator.defaults, settings ); - }, - - messages: { - required: "This field is required.", - remote: "Please fix this field.", - email: "Please enter a valid email address.", - url: "Please enter a valid URL.", - date: "Please enter a valid date.", - dateISO: "Please enter a valid date (ISO).", - number: "Please enter a valid number.", - digits: "Please enter only digits.", - creditcard: "Please enter a valid credit card number.", - equalTo: "Please enter the same value again.", - maxlength: $.validator.format("Please enter no more than {0} characters."), - minlength: $.validator.format("Please enter at least {0} characters."), - rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."), - range: $.validator.format("Please enter a value between {0} and {1}."), - max: $.validator.format("Please enter a value less than or equal to {0}."), - min: $.validator.format("Please enter a value greater than or equal to {0}.") - }, - - autoCreateRanges: false, - - prototype: { - - init: function() { - this.labelContainer = $(this.settings.errorLabelContainer); - this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm); - this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer ); - this.submitted = {}; - this.valueCache = {}; - this.pendingRequest = 0; - this.pending = {}; - this.invalid = {}; - this.reset(); - - var groups = (this.groups = {}); - $.each(this.settings.groups, function( key, value ) { - if ( typeof value === "string" ) { - value = value.split(/\s/); - } - $.each(value, function( index, name ) { - groups[name] = key; - }); - }); - var rules = this.settings.rules; - $.each(rules, function( key, value ) { - rules[key] = $.validator.normalizeRule(value); - }); - - function delegate(event) { - var validator = $.data(this[0].form, "validator"), - eventType = "on" + event.type.replace(/^validate/, ""); - if ( validator.settings[eventType] ) { - validator.settings[eventType].call(validator, this[0], event); - } - } - $(this.currentForm) - .validateDelegate(":text, [type='password'], [type='file'], select, textarea, " + - "[type='number'], [type='search'] ,[type='tel'], [type='url'], " + - "[type='email'], [type='datetime'], [type='date'], [type='month'], " + - "[type='week'], [type='time'], [type='datetime-local'], " + - "[type='range'], [type='color'] ", - "focusin focusout keyup", delegate) - .validateDelegate("[type='radio'], [type='checkbox'], select, option", "click", delegate); - - if ( this.settings.invalidHandler ) { - $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler); - } - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/form - form: function() { - this.checkForm(); - $.extend(this.submitted, this.errorMap); - this.invalid = $.extend({}, this.errorMap); - if ( !this.valid() ) { - $(this.currentForm).triggerHandler("invalid-form", [this]); - } - this.showErrors(); - return this.valid(); - }, - - checkForm: function() { - this.prepareForm(); - for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) { - this.check( elements[i] ); - } - return this.valid(); - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/element - element: function( element ) { - element = this.validationTargetFor( this.clean( element ) ); - this.lastElement = element; - this.prepareElement( element ); - this.currentElements = $(element); - var result = this.check( element ) !== false; - if ( result ) { - delete this.invalid[element.name]; - } else { - this.invalid[element.name] = true; - } - if ( !this.numberOfInvalids() ) { - // Hide error containers on last error - this.toHide = this.toHide.add( this.containers ); - } - this.showErrors(); - return result; - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/showErrors - showErrors: function( errors ) { - if ( errors ) { - // add items to error list and map - $.extend( this.errorMap, errors ); - this.errorList = []; - for ( var name in errors ) { - this.errorList.push({ - message: errors[name], - element: this.findByName(name)[0] - }); - } - // remove items from success list - this.successList = $.grep( this.successList, function( element ) { - return !(element.name in errors); - }); - } - if ( this.settings.showErrors ) { - this.settings.showErrors.call( this, this.errorMap, this.errorList ); - } else { - this.defaultShowErrors(); - } - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/resetForm - resetForm: function() { - if ( $.fn.resetForm ) { - $(this.currentForm).resetForm(); - } - this.submitted = {}; - this.lastElement = null; - this.prepareForm(); - this.hideErrors(); - this.elements().removeClass( this.settings.errorClass ).removeData( "previousValue" ); - }, - - numberOfInvalids: function() { - return this.objectLength(this.invalid); - }, - - objectLength: function( obj ) { - var count = 0; - for ( var i in obj ) { - count++; - } - return count; - }, - - hideErrors: function() { - this.addWrapper( this.toHide ).hide(); - }, - - valid: function() { - return this.size() === 0; - }, - - size: function() { - return this.errorList.length; - }, - - focusInvalid: function() { - if ( this.settings.focusInvalid ) { - try { - $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []) - .filter(":visible") - .focus() - // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find - .trigger("focusin"); - } catch(e) { - // ignore IE throwing errors when focusing hidden elements - } - } - }, - - findLastActive: function() { - var lastActive = this.lastActive; - return lastActive && $.grep(this.errorList, function( n ) { - return n.element.name === lastActive.name; - }).length === 1 && lastActive; - }, - - elements: function() { - var validator = this, - rulesCache = {}; - - // select all valid inputs inside the form (no submit or reset buttons) - return $(this.currentForm) - .find("input, select, textarea") - .not(":submit, :reset, :image, [disabled]") - .not( this.settings.ignore ) - .filter(function() { - if ( !this.name ) { - if ( window.console ) { - console.error( "%o has no name assigned", this ); - } - throw new Error( "Failed to validate, found an element with no name assigned. See console for element reference." ); - } - - // select only the first element for each name, and only those with rules specified - if ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) { - return false; - } - - rulesCache[this.name] = true; - return true; - }); - }, - - clean: function( selector ) { - return $(selector)[0]; - }, - - errors: function() { - var errorClass = this.settings.errorClass.replace(" ", "."); - return $(this.settings.errorElement + "." + errorClass, this.errorContext); - }, - - reset: function() { - this.successList = []; - this.errorList = []; - this.errorMap = {}; - this.toShow = $([]); - this.toHide = $([]); - this.currentElements = $([]); - }, - - prepareForm: function() { - this.reset(); - this.toHide = this.errors().add( this.containers ); - }, - - prepareElement: function( element ) { - this.reset(); - this.toHide = this.errorsFor(element); - }, - - elementValue: function( element ) { - var type = $(element).attr("type"), - val = $(element).val(); - - if ( type === "radio" || type === "checkbox" ) { - return $("input[name='" + $(element).attr("name") + "']:checked").val(); - } - - if ( typeof val === "string" ) { - return val.replace(/\r/g, ""); - } - return val; - }, - - check: function( element ) { - element = this.validationTargetFor( this.clean( element ) ); - - var rules = $(element).rules(); - var dependencyMismatch = false; - var val = this.elementValue(element); - var result; - - for (var method in rules ) { - var rule = { method: method, parameters: rules[method] }; - try { - - result = $.validator.methods[method].call( this, val, element, rule.parameters ); - - // if a method indicates that the field is optional and therefore valid, - // don't mark it as valid when there are no other rules - if ( result === "dependency-mismatch" ) { - dependencyMismatch = true; - continue; - } - dependencyMismatch = false; - - if ( result === "pending" ) { - this.toHide = this.toHide.not( this.errorsFor(element) ); - return; - } - - if ( !result ) { - this.formatAndAdd( element, rule ); - return false; - } - } catch(e) { - if ( this.settings.debug && window.console ) { - console.log( "Exception occured when checking element " + element.id + ", check the '" + rule.method + "' method.", e ); - } - throw e; - } - } - if ( dependencyMismatch ) { - return; - } - if ( this.objectLength(rules) ) { - this.successList.push(element); - } - return true; - }, - - // return the custom message for the given element and validation method - // specified in the element's HTML5 data attribute - customDataMessage: function( element, method ) { - return $(element).data("msg-" + method.toLowerCase()) || (element.attributes && $(element).attr("data-msg-" + method.toLowerCase())); - }, - - // return the custom message for the given element name and validation method - customMessage: function( name, method ) { - var m = this.settings.messages[name]; - return m && (m.constructor === String ? m : m[method]); - }, - - // return the first defined argument, allowing empty strings - findDefined: function() { - for(var i = 0; i < arguments.length; i++) { - if ( arguments[i] !== undefined ) { - return arguments[i]; - } - } - return undefined; - }, - - defaultMessage: function( element, method ) { - return this.findDefined( - this.customMessage( element.name, method ), - this.customDataMessage( element, method ), - // title is never undefined, so handle empty string as undefined - !this.settings.ignoreTitle && element.title || undefined, - $.validator.messages[method], - "Warning: No message defined for " + element.name + "" - ); - }, - - formatAndAdd: function( element, rule ) { - var message = this.defaultMessage( element, rule.method ), - theregex = /\$?\{(\d+)\}/g; - if ( typeof message === "function" ) { - message = message.call(this, rule.parameters, element); - } else if (theregex.test(message)) { - message = $.validator.format(message.replace(theregex, "{$1}"), rule.parameters); - } - this.errorList.push({ - message: message, - element: element - }); - - this.errorMap[element.name] = message; - this.submitted[element.name] = message; - }, - - addWrapper: function( toToggle ) { - if ( this.settings.wrapper ) { - toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) ); - } - return toToggle; - }, - - defaultShowErrors: function() { - var i, elements; - for ( i = 0; this.errorList[i]; i++ ) { - var error = this.errorList[i]; - if ( this.settings.highlight ) { - this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass ); - } - this.showLabel( error.element, error.message ); - } - if ( this.errorList.length ) { - this.toShow = this.toShow.add( this.containers ); - } - if ( this.settings.success ) { - for ( i = 0; this.successList[i]; i++ ) { - this.showLabel( this.successList[i] ); - } - } - if ( this.settings.unhighlight ) { - for ( i = 0, elements = this.validElements(); elements[i]; i++ ) { - this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass ); - } - } - this.toHide = this.toHide.not( this.toShow ); - this.hideErrors(); - this.addWrapper( this.toShow ).show(); - }, - - validElements: function() { - return this.currentElements.not(this.invalidElements()); - }, - - invalidElements: function() { - return $(this.errorList).map(function() { - return this.element; - }); - }, - - showLabel: function( element, message ) { - var label = this.errorsFor( element ); - if ( label.length ) { - // refresh error/success class - label.removeClass( this.settings.validClass ).addClass( this.settings.errorClass ); - - // check if we have a generated label, replace the message then - if ( label.attr("generated") ) { - label.html(message); - } - } else { - // create label - label = $("<" + this.settings.errorElement + "/>") - .attr({"for": this.idOrName(element), generated: true}) - .addClass(this.settings.errorClass) - .html(message || ""); - if ( this.settings.wrapper ) { - // make sure the element is visible, even in IE - // actually showing the wrapped element is handled elsewhere - label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent(); - } - if ( !this.labelContainer.append(label).length ) { - if ( this.settings.errorPlacement ) { - this.settings.errorPlacement(label, $(element) ); - } else { - label.insertAfter(element); - } - } - } - if ( !message && this.settings.success ) { - label.text(""); - if ( typeof this.settings.success === "string" ) { - label.addClass( this.settings.success ); - } else { - this.settings.success( label, element ); - } - } - this.toShow = this.toShow.add(label); - }, - - errorsFor: function( element ) { - var name = this.idOrName(element); - return this.errors().filter(function() { - return $(this).attr("for") === name; - }); - }, - - idOrName: function( element ) { - return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name); - }, - - validationTargetFor: function( element ) { - // if radio/checkbox, validate first element in group instead - if ( this.checkable(element) ) { - element = this.findByName( element.name ).not(this.settings.ignore)[0]; - } - return element; - }, - - checkable: function( element ) { - return (/radio|checkbox/i).test(element.type); - }, - - findByName: function( name ) { - return $(this.currentForm).find("[name='" + name + "']"); - }, - - getLength: function( value, element ) { - switch( element.nodeName.toLowerCase() ) { - case "select": - return $("option:selected", element).length; - case "input": - if ( this.checkable( element) ) { - return this.findByName(element.name).filter(":checked").length; - } - } - return value.length; - }, - - depend: function( param, element ) { - return this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true; - }, - - dependTypes: { - "boolean": function( param, element ) { - return param; - }, - "string": function( param, element ) { - return !!$(param, element.form).length; - }, - "function": function( param, element ) { - return param(element); - } - }, - - optional: function( element ) { - var val = this.elementValue(element); - return !$.validator.methods.required.call(this, val, element) && "dependency-mismatch"; - }, - - startRequest: function( element ) { - if ( !this.pending[element.name] ) { - this.pendingRequest++; - this.pending[element.name] = true; - } - }, - - stopRequest: function( element, valid ) { - this.pendingRequest--; - // sometimes synchronization fails, make sure pendingRequest is never < 0 - if ( this.pendingRequest < 0 ) { - this.pendingRequest = 0; - } - delete this.pending[element.name]; - if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) { - $(this.currentForm).submit(); - this.formSubmitted = false; - } else if (!valid && this.pendingRequest === 0 && this.formSubmitted) { - $(this.currentForm).triggerHandler("invalid-form", [this]); - this.formSubmitted = false; - } - }, - - previousValue: function( element ) { - return $.data(element, "previousValue") || $.data(element, "previousValue", { - old: null, - valid: true, - message: this.defaultMessage( element, "remote" ) - }); - } - - }, - - classRuleSettings: { - required: {required: true}, - email: {email: true}, - url: {url: true}, - date: {date: true}, - dateISO: {dateISO: true}, - number: {number: true}, - digits: {digits: true}, - creditcard: {creditcard: true} - }, - - addClassRules: function( className, rules ) { - if ( className.constructor === String ) { - this.classRuleSettings[className] = rules; - } else { - $.extend(this.classRuleSettings, className); - } - }, - - classRules: function( element ) { - var rules = {}; - var classes = $(element).attr("class"); - if ( classes ) { - $.each(classes.split(" "), function() { - if ( this in $.validator.classRuleSettings ) { - $.extend(rules, $.validator.classRuleSettings[this]); - } - }); - } - return rules; - }, - - attributeRules: function( element ) { - var rules = {}; - var $element = $(element); - - for (var method in $.validator.methods) { - var value; - - // support for in both html5 and older browsers - if ( method === "required" ) { - value = $element.get(0).getAttribute(method); - // Some browsers return an empty string for the required attribute - // and non-HTML5 browsers might have required="" markup - if ( value === "" ) { - value = true; - } - // force non-HTML5 browsers to return bool - value = !!value; - } else { - value = $element.attr(method); - } - - if ( value ) { - rules[method] = value; - } else if ( $element[0].getAttribute("type") === method ) { - rules[method] = true; - } - } - - // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs - if ( rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength) ) { - delete rules.maxlength; - } - - return rules; - }, - - dataRules: function( element ) { - var method, value, - rules = {}, $element = $(element); - for (method in $.validator.methods) { - value = $element.data("rule-" + method.toLowerCase()); - if ( value !== undefined ) { - rules[method] = value; - } - } - return rules; - }, - - staticRules: function( element ) { - var rules = {}; - var validator = $.data(element.form, "validator"); - if ( validator.settings.rules ) { - rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {}; - } - return rules; - }, - - normalizeRules: function( rules, element ) { - // handle dependency check - $.each(rules, function( prop, val ) { - // ignore rule when param is explicitly false, eg. required:false - if ( val === false ) { - delete rules[prop]; - return; - } - if ( val.param || val.depends ) { - var keepRule = true; - switch (typeof val.depends) { - case "string": - keepRule = !!$(val.depends, element.form).length; - break; - case "function": - keepRule = val.depends.call(element, element); - break; - } - if ( keepRule ) { - rules[prop] = val.param !== undefined ? val.param : true; - } else { - delete rules[prop]; - } - } - }); - - // evaluate parameters - $.each(rules, function( rule, parameter ) { - rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter; - }); - - // clean number parameters - $.each(["minlength", "maxlength", "min", "max"], function() { - if ( rules[this] ) { - rules[this] = Number(rules[this]); - } - }); - $.each(["rangelength", "range"], function() { - var parts; - if ( rules[this] ) { - if ( $.isArray(rules[this]) ) { - rules[this] = [Number(rules[this][0]), Number(rules[this][1])]; - } else if ( typeof rules[this] === "string" ) { - parts = rules[this].split(/[\s,]+/); - rules[this] = [Number(parts[0]), Number(parts[1])]; - } - } - }); - - if ( $.validator.autoCreateRanges ) { - // auto-create ranges - if ( rules.min && rules.max ) { - rules.range = [rules.min, rules.max]; - delete rules.min; - delete rules.max; - } - if ( rules.minlength && rules.maxlength ) { - rules.rangelength = [rules.minlength, rules.maxlength]; - delete rules.minlength; - delete rules.maxlength; - } - } - - return rules; - }, - - // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true} - normalizeRule: function( data ) { - if ( typeof data === "string" ) { - var transformed = {}; - $.each(data.split(/\s/), function() { - transformed[this] = true; - }); - data = transformed; - } - return data; - }, - - // http://docs.jquery.com/Plugins/Validation/Validator/addMethod - addMethod: function( name, method, message ) { - $.validator.methods[name] = method; - $.validator.messages[name] = message !== undefined ? message : $.validator.messages[name]; - if ( method.length < 3 ) { - $.validator.addClassRules(name, $.validator.normalizeRule(name)); - } - }, - - methods: { - - // http://docs.jquery.com/Plugins/Validation/Methods/required - required: function( value, element, param ) { - // check if dependency is met - if ( !this.depend(param, element) ) { - return "dependency-mismatch"; - } - if ( element.nodeName.toLowerCase() === "select" ) { - // could be an array for select-multiple or a string, both are fine this way - var val = $(element).val(); - return val && val.length > 0; - } - if ( this.checkable(element) ) { - return this.getLength(value, element) > 0; - } - return $.trim(value).length > 0; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/remote - remote: function( value, element, param ) { - if ( this.optional(element) ) { - return "dependency-mismatch"; - } - - var previous = this.previousValue(element); - if (!this.settings.messages[element.name] ) { - this.settings.messages[element.name] = {}; - } - previous.originalMessage = this.settings.messages[element.name].remote; - this.settings.messages[element.name].remote = previous.message; - - param = typeof param === "string" && {url:param} || param; - - if ( previous.old === value ) { - return previous.valid; - } - - previous.old = value; - var validator = this; - this.startRequest(element); - var data = {}; - data[element.name] = value; - $.ajax($.extend(true, { - url: param, - mode: "abort", - port: "validate" + element.name, - dataType: "json", - data: data, - success: function( response ) { - validator.settings.messages[element.name].remote = previous.originalMessage; - var valid = response === true || response === "true"; - if ( valid ) { - var submitted = validator.formSubmitted; - validator.prepareElement(element); - validator.formSubmitted = submitted; - validator.successList.push(element); - delete validator.invalid[element.name]; - validator.showErrors(); - } else { - var errors = {}; - var message = response || validator.defaultMessage( element, "remote" ); - errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message; - validator.invalid[element.name] = true; - validator.showErrors(errors); - } - previous.valid = valid; - validator.stopRequest(element, valid); - } - }, param)); - return "pending"; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/minlength - minlength: function( value, element, param ) { - var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); - return this.optional(element) || length >= param; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/maxlength - maxlength: function( value, element, param ) { - var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); - return this.optional(element) || length <= param; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/rangelength - rangelength: function( value, element, param ) { - var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); - return this.optional(element) || ( length >= param[0] && length <= param[1] ); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/min - min: function( value, element, param ) { - return this.optional(element) || value >= param; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/max - max: function( value, element, param ) { - return this.optional(element) || value <= param; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/range - range: function( value, element, param ) { - return this.optional(element) || ( value >= param[0] && value <= param[1] ); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/email - email: function( value, element ) { - // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ - return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/url - url: function( value, element ) { - // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/ - return this.optional(element) || /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/date - date: function( value, element ) { - return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString()); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/dateISO - dateISO: function( value, element ) { - return this.optional(element) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(value); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/number - number: function( value, element ) { - return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/digits - digits: function( value, element ) { - return this.optional(element) || /^\d+$/.test(value); - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/creditcard - // based on http://en.wikipedia.org/wiki/Luhn - creditcard: function( value, element ) { - if ( this.optional(element) ) { - return "dependency-mismatch"; - } - // accept only spaces, digits and dashes - if ( /[^0-9 \-]+/.test(value) ) { - return false; - } - var nCheck = 0, - nDigit = 0, - bEven = false; - - value = value.replace(/\D/g, ""); - - for (var n = value.length - 1; n >= 0; n--) { - var cDigit = value.charAt(n); - nDigit = parseInt(cDigit, 10); - if ( bEven ) { - if ( (nDigit *= 2) > 9 ) { - nDigit -= 9; - } - } - nCheck += nDigit; - bEven = !bEven; - } - - return (nCheck % 10) === 0; - }, - - // http://docs.jquery.com/Plugins/Validation/Methods/equalTo - equalTo: function( value, element, param ) { - // bind to the blur event of the target in order to revalidate whenever the target field is updated - // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead - var target = $(param); - if ( this.settings.onfocusout ) { - target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() { - $(element).valid(); - }); - } - return value === target.val(); - } - - } - -}); - -// deprecated, use $.validator.format instead -$.format = $.validator.format; - -}(jQuery)); - -// ajax mode: abort -// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); -// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() -(function($) { - var pendingRequests = {}; - // Use a prefilter if available (1.5+) - if ( $.ajaxPrefilter ) { - $.ajaxPrefilter(function( settings, _, xhr ) { - var port = settings.port; - if ( settings.mode === "abort" ) { - if ( pendingRequests[port] ) { - pendingRequests[port].abort(); - } - pendingRequests[port] = xhr; - } - }); - } else { - // Proxy ajax - var ajax = $.ajax; - $.ajax = function( settings ) { - var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode, - port = ( "port" in settings ? settings : $.ajaxSettings ).port; - if ( mode === "abort" ) { - if ( pendingRequests[port] ) { - pendingRequests[port].abort(); - } - return (pendingRequests[port] = ajax.apply(this, arguments)); - } - return ajax.apply(this, arguments); - }; - } -}(jQuery)); - -// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation -// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target -(function($) { - $.extend($.fn, { - validateDelegate: function( delegate, type, handler ) { - return this.bind(type, function( event ) { - var target = $(event.target); - if ( target.is(delegate) ) { - return handler.apply(target, arguments); - } - }); - } - }); -}(jQuery)); From 9b38eddd092c7c5a1d2ac23f7fb3d325b813f22d Mon Sep 17 00:00:00 2001 From: GPrathap Date: Sun, 13 Mar 2016 22:01:28 +0530 Subject: [PATCH 12/13] relocated ui component --- .../device-view.hbs | 127 -------- .../device-view.js | 57 ---- .../device-view.json | 4 - .../policy-edit.hbs | 18 -- .../policy-edit.json | 3 - .../policy-view.hbs | 18 -- .../policy-view.json | 3 - .../policy-wizard.hbs | 18 -- .../policy-wizard.json | 3 - .../type-view.hbs | 282 ------------------ .../type-view.json | 20 -- modules/samples/doormanager/feature/pom.xml | 13 +- 12 files changed, 8 insertions(+), 558 deletions(-) delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.hbs delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.js delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.json delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-edit/policy-edit.hbs delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-edit/policy-edit.json delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-view/policy-view.hbs delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-view/policy-view.json delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-wizard/policy-wizard.hbs delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-wizard/policy-wizard.json delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.hbs delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.json diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.hbs b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.hbs deleted file mode 100644 index 7506942d..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.hbs +++ /dev/null @@ -1,127 +0,0 @@ - -{{#zone "topCss"}} - -{{/zone}} - -{{#zone "device-thumbnail"}} - -{{/zone}} - -{{#zone "operation-status"}} - -{{/zone}} - -{{#zone "device-opetations"}} -
    - Operations -
    -
    - {{unit "iot.unit.device.operation-bar" device=device}} -
    -{{/zone}} - -{{#zone "device-detail-properties"}} -
    -{{/zone}} - - - diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.js b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.js deleted file mode 100644 index 646a4db0..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.js +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -function onRequest(context) { - - var log = new Log("device-view.js"); - var deviceType = context.uriParams.deviceType; - var deviceId = request.getParameter("id"); - - var getProperty = require("process").getProperty; - var port = getProperty("carbon.https.port"); - var host = getProperty("carbon.local.ip"); - var sessionId = session.getId(); - if (deviceType != null && deviceType != undefined && deviceId != null && deviceId != undefined) { - var deviceModule = require("/app/modules/device.js").deviceModule; - var device = deviceModule.viewDevice(deviceType, deviceId); - - if (device && device.status != "error") { - log.info(device); - return {"device": device, "port" : port, "host" : host , "sessionId" : sessionId}; - } - } -} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.json b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.json deleted file mode 100644 index 3c9e4e4c..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.device-view/device-view.json +++ /dev/null @@ -1,4 +0,0 @@ - -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-edit/policy-edit.hbs b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-edit/policy-edit.hbs deleted file mode 100644 index cf80b006..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-edit/policy-edit.hbs +++ /dev/null @@ -1,18 +0,0 @@ - -{{unit "iot.unit.policy.edit"}} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-edit/policy-edit.json b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-edit/policy-edit.json deleted file mode 100644 index 9eecd8f5..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-edit/policy-edit.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-view/policy-view.hbs b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-view/policy-view.hbs deleted file mode 100644 index c2a4706b..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-view/policy-view.hbs +++ /dev/null @@ -1,18 +0,0 @@ - -{{unit "iot.unit.policy.view"}} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-view/policy-view.json b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-view/policy-view.json deleted file mode 100644 index 9eecd8f5..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-view/policy-view.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-wizard/policy-wizard.hbs b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-wizard/policy-wizard.hbs deleted file mode 100644 index 7b94f953..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-wizard/policy-wizard.hbs +++ /dev/null @@ -1,18 +0,0 @@ - -{{unit "iot.unit.policy.wizard"}} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-wizard/policy-wizard.json b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-wizard/policy-wizard.json deleted file mode 100644 index 9eecd8f5..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.policy-wizard/policy-wizard.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.hbs b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.hbs deleted file mode 100644 index 16c36759..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.hbs +++ /dev/null @@ -1,282 +0,0 @@ -
    -

    Door Manager

    -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    -
    -
    -
    Device Statistics
    - {{unit "iot.unit.device.stats" device=device}} -
    -
    -
    Policy Compliance -
    -
    -
    Policies
    -
    - -
    -
    - No policies found -
    -
    -
    -
    -
    - - - - - Add device specific policy -
    -
    -
    Operations Log
    -
    - -
    -
    - Not available yet -
    -
    -
    -
    -
    -
    -
    -
    - - -
    -

    Prepare

    -
    -
      -
    • 01   Get the basic setup done - according to schematic below -
    • -
    • 02   Ensure your RaspberryPi Board - can connect to Internet. -
    • -
    • 03   Click on - [Download Agent] button above to get Automatic Door Locker agent. -
    • -
    • 04   Copy downloaded Agent into your - RaspberryPi. -
    • -
    • 05    Run "Agent.sh" script with root privileges. -
    • -
    -
    -
    - -
    -

    SCHEMATIC DIAGRAM

    -
    -

    Click on the image to zoom

    -
    - - - -
    -
    -
    - - -
    -

    Try Out

    -
    -
      -
    • 01   You can view - all your connected - devices at [Device - Management] - page. -
    • -
    • 02   Select one of - connected devices and check for available control operations as well as current state of door locker -
    • -
    -
    - -

    Click on the image to zoom

    -
    - - - -
    - -
    - -{{#zone "topCss"}} - -{{/zone}} - -{{#zone "bottomJs"}} - {{js "/js/download.js"}} - {{js "/js/jquery.validate.js"}} -{{/zone}} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.json b/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.json deleted file mode 100644 index 2def3808..00000000 --- a/modules/samples/doormanager/feature/feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.doormanager.type-view/type-view.json +++ /dev/null @@ -1,20 +0,0 @@ -/**/ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/modules/samples/doormanager/feature/pom.xml b/modules/samples/doormanager/feature/pom.xml index 66655a65..28e141e1 100644 --- a/modules/samples/doormanager/feature/pom.xml +++ b/modules/samples/doormanager/feature/pom.xml @@ -15,18 +15,21 @@ ~ KIND, either express or implied. See the License for the ~ specific language governing permissions and limitations ~ under the License. - --> + --> + + org.homeautomation doormanager 1.0.0-SNAPSHOT ../pom.xml - feature + doormanager-feature 4.0.0 pom 1.0.0-SNAPSHOT - - feature - + + feature + \ No newline at end of file From 24fe9307270ec93e76b94090535223337faba0c5 Mon Sep 17 00:00:00 2001 From: GPrathap Date: Sun, 13 Mar 2016 22:02:09 +0530 Subject: [PATCH 13/13] refactoring code --- .../doormanager/component/analytics/build.xml | 4 +- .../doormanager/component/analytics/pom.xml | 11 +- .../component/analytics/src/assembly/src.xml | 3 +- .../controller/api/dto/DeviceJSON.java | 12 +- .../controller}/api/dto/UserInfo.java | 12 +- .../api/exception/DoorManagerException.java | 25 ++-- .../DoorManagerMQTTConnector.java | 137 ++++++++++++------ .../src/main/webapp/WEB-INF/cxf-servlet.xml | 8 +- .../doormanager/component/manager/pom.xml | 10 +- modules/samples/doormanager/component/pom.xml | 21 +-- .../samples/doormanager/component/ui/pom.xml | 12 +- .../component/ui/src/assembly/src.xml | 2 +- .../doormanager/feature/feature/pom.xml | 54 +++---- .../src/main/resources/carbonapps/Sensor.car | Bin 6981 -> 0 bytes .../main/resources/configs/doormanager.json | 22 ++- .../main/resources/configs/doormanager.xml | 6 +- .../resources/database/doormanagerDM_DB.h2.db | Bin 18432 -> 18432 bytes .../datasources/doormanager-datasources.xml | 5 +- 18 files changed, 204 insertions(+), 140 deletions(-) rename modules/samples/doormanager/component/{manager/src/main/java/org.homeautomation/doormanager/manager => controller/src/main/java/org.homeautomation/doormanager/controller}/api/dto/UserInfo.java (75%) rename modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/{util => transport}/DoorManagerMQTTConnector.java (54%) delete mode 100644 modules/samples/doormanager/feature/feature/src/main/resources/carbonapps/Sensor.car diff --git a/modules/samples/doormanager/component/analytics/build.xml b/modules/samples/doormanager/component/analytics/build.xml index 8ae090c7..6a72f27e 100644 --- a/modules/samples/doormanager/component/analytics/build.xml +++ b/modules/samples/doormanager/component/analytics/build.xml @@ -20,9 +20,9 @@ - + - + diff --git a/modules/samples/doormanager/component/analytics/pom.xml b/modules/samples/doormanager/component/analytics/pom.xml index efa32fef..f2935ab4 100644 --- a/modules/samples/doormanager/component/analytics/pom.xml +++ b/modules/samples/doormanager/component/analytics/pom.xml @@ -1,3 +1,4 @@ + - org.homeautomation - component + doormanager-component 1.0.0-SNAPSHOT ../pom.xml 4.0.0 - ${groupId}.doormanager.analytics + org.homeautomation.doormanager.analytics 1.0.0-SNAPSHOT pom - ${groupId}.doormanager.analytics + org.homeautomation.doormanager.analytics http://wso2.org @@ -65,7 +66,7 @@ maven-assembly-plugin 2.5.5 - ${project.artifactId}-1.0.0-SNAPSHOT + org.homeautomation.doormanager.analytics-1.0.0-SNAPSHOT false src/assembly/src.xml diff --git a/modules/samples/doormanager/component/analytics/src/assembly/src.xml b/modules/samples/doormanager/component/analytics/src/assembly/src.xml index a5a37501..5469255f 100644 --- a/modules/samples/doormanager/component/analytics/src/assembly/src.xml +++ b/modules/samples/doormanager/component/analytics/src/assembly/src.xml @@ -1,3 +1,4 @@ + src diff --git a/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/dto/DeviceJSON.java b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/dto/DeviceJSON.java index f812dade..4496b0b8 100644 --- a/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/dto/DeviceJSON.java +++ b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/dto/DeviceJSON.java @@ -27,8 +27,12 @@ import javax.xml.bind.annotation.XmlRootElement; @JsonIgnoreProperties(ignoreUnknown = true) public class DeviceJSON { - @XmlElement(required = true) public String owner; - @XmlElement(required = true) public String deviceId; - @XmlElement(required = true) public String UIDofUser; - @XmlElement(required = true) public String serialNumber; + @XmlElement(required = true) + public String owner; + @XmlElement(required = true) + public String deviceId; + @XmlElement(required = true) + public String UIDofUser; + @XmlElement(required = true) + public String serialNumber; } diff --git a/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/dto/UserInfo.java b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/dto/UserInfo.java similarity index 75% rename from modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/dto/UserInfo.java rename to modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/dto/UserInfo.java index b7ef2c10..5d89ea2f 100644 --- a/modules/samples/doormanager/component/manager/src/main/java/org.homeautomation/doormanager/manager/api/dto/UserInfo.java +++ b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/dto/UserInfo.java @@ -16,7 +16,7 @@ * under the License. */ -package org.homeautomation.doormanager.manager.api.dto; +package org.homeautomation.doormanager.controller.api.dto; import org.codehaus.jackson.annotate.JsonIgnoreProperties; @@ -27,8 +27,10 @@ import javax.xml.bind.annotation.XmlRootElement; @JsonIgnoreProperties(ignoreUnknown = true) public class UserInfo { - @XmlElement(required = true) public String serialNumber; - @XmlElement(required = true) public String deviceId; - @XmlElement(required = true) public String cardNumber; - @XmlElement(required = true) public String userName; + @XmlElement(required = true) + public String deviceId; + @XmlElement(required = true) + public String cardNumber; + @XmlElement(required = true) + public String userName; } diff --git a/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/exception/DoorManagerException.java b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/exception/DoorManagerException.java index 63673efc..554967bc 100644 --- a/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/exception/DoorManagerException.java +++ b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/exception/DoorManagerException.java @@ -1,4 +1,3 @@ -package org.homeautomation.doormanager.controller.api.exception; /* * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * @@ -16,20 +15,16 @@ package org.homeautomation.doormanager.controller.api.exception; * specific language governing permissions and limitations * under the License. */ + +package org.homeautomation.doormanager.controller.api.exception; + public class DoorManagerException extends Exception { private static final long serialVersionUID = 2736466230451105441L; private String errorMessage; - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - + @SuppressWarnings("unused") public DoorManagerException(String msg, DoorManagerException nestedEx) { super(msg, nestedEx); setErrorMessage(msg); @@ -40,18 +35,30 @@ public class DoorManagerException extends Exception { setErrorMessage(message); } + @SuppressWarnings("unused") public DoorManagerException(String msg) { super(msg); setErrorMessage(msg); } + @SuppressWarnings("unused") public DoorManagerException() { super(); } + @SuppressWarnings("unused") public DoorManagerException(Throwable cause) { super(cause); } + @SuppressWarnings("unused") + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + } diff --git a/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/util/DoorManagerMQTTConnector.java b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/transport/DoorManagerMQTTConnector.java similarity index 54% rename from modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/util/DoorManagerMQTTConnector.java rename to modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/transport/DoorManagerMQTTConnector.java index bf61fdb8..6dc076ab 100644 --- a/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/util/DoorManagerMQTTConnector.java +++ b/modules/samples/doormanager/component/controller/src/main/java/org.homeautomation/doormanager/controller/api/transport/DoorManagerMQTTConnector.java @@ -1,37 +1,65 @@ -package org.homeautomation.doormanager.controller.api.util; +/* + * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.homeautomation.doormanager.controller.api.transport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.homeautomation.doormanager.controller.api.exception.DoorManagerException; +import org.homeautomation.doormanager.controller.api.util.DoorManagerServiceUtils; import org.homeautomation.doormanager.plugin.constants.DoorManagerConstants; +import org.wso2.carbon.device.mgt.analytics.exception.DataPublisherConfigurationException; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.iot.controlqueue.mqtt.MqttConfig; import org.wso2.carbon.device.mgt.iot.sensormgt.SensorDataManager; import org.wso2.carbon.device.mgt.iot.transport.TransportHandlerException; import org.wso2.carbon.device.mgt.iot.transport.mqtt.MQTTTransportHandler; -import javax.ws.rs.core.Response; import java.io.File; import java.util.Calendar; import java.util.UUID; +/** + * MQTT is used as transport protocol. So this will provide basic functional requirement in order to communicate over + * MQTT + */ @SuppressWarnings("no JAX-WS annotation") public class DoorManagerMQTTConnector extends MQTTTransportHandler { private static Log log = LogFactory.getLog(DoorManagerMQTTConnector.class); - private static final String subscribeTopic = - "wso2" + File.separator + "iot" + File.separator + "+" + File.separator + - DoorManagerConstants.DEVICE_TYPE + File.separator + "+" + File.separator + - "lockStatusPublisher"+ File.separator; - private static String iotServerSubscriber = UUID.randomUUID().toString().substring(0, 5); + private static String PUBLISHER_CONTEXT = "publisher"; + private static String SUBSCRIBER_CONTEXT = "subscriber"; + private static String SUBCRIBER_TOPIC = "wso2" + File.separator + "iot" + File.separator + "+" + File.separator + + DoorManagerConstants.DEVICE_TYPE + File.separator + "+" + File.separator + PUBLISHER_CONTEXT; + private static String PUBLISHER_TOPIC = "wso2/iot/%s/" + DoorManagerConstants.DEVICE_TYPE + "/%s/" + + SUBSCRIBER_CONTEXT; + private static String SUBSCRIBER = UUID.randomUUID().toString().substring(0, 5); private DoorManagerMQTTConnector() { - super(iotServerSubscriber, DoorManagerConstants.DEVICE_TYPE, - MqttConfig.getInstance().getMqttQueueEndpoint(), subscribeTopic); + super(SUBSCRIBER, DoorManagerConstants.DEVICE_TYPE, + MqttConfig.getInstance().getMqttQueueEndpoint(), SUBCRIBER_TOPIC); } + /** + * This method will initialize connection with message broker + */ @Override public void connect() { Runnable connector = new Runnable() { @@ -63,79 +91,103 @@ public class DoorManagerMQTTConnector extends MQTTTransportHandler { connectorThread.start(); } + /** + * This callback function will be called by message broker when some messages available to subscribed topic + * + * @param message mqtt message which is coming form agent side + * @param messageParams metadata of mqtt message + */ @Override public void processIncomingMessage(MqttMessage message, String... messageParams) { String topic = messageParams[0]; String ownerAndId = topic.replace("wso2" + File.separator + "iot" + File.separator, ""); ownerAndId = ownerAndId.replace(File.separator + DoorManagerConstants.DEVICE_TYPE + File.separator, ":"); - ownerAndId = ownerAndId.replace(File.separator + "lockStatusPublisher", ""); + ownerAndId = ownerAndId.replace(File.separator + PUBLISHER_CONTEXT, ""); String owner = ownerAndId.split(":")[0]; String deviceId = ownerAndId.split(":")[1]; log.warn(deviceId); - String[] messageData = message.toString().split(":"); - - if (log.isDebugEnabled()){ + if (log.isDebugEnabled()) { log.debug("Received MQTT message for: [OWNER-" + owner + "] & [DEVICE.ID-" + deviceId + "]"); } if (messageData.length == 2) { - log.warn("-------------------------------------------"); - log.warn(messageData[0]); - log.warn(messageData[1]); String lockerCurrentState = messageData[1]; + float lockerStatus; + if (lockerCurrentState.equals("LOCKED")) { + lockerStatus = 0; + } else { + lockerStatus = 1; + } try { - SensorDataManager.getInstance().setSensorRecord(deviceId, "door_locker_state", - String.valueOf(1), Calendar.getInstance().getTimeInMillis()); - if (!DoorManagerServiceUtils.publishToDASCurrent(owner, deviceId, 1)) { - log.warn("An error occured whilst trying to publish with ID [" + deviceId + - "] of owner [" + owner + "]"); + SensorDataManager.getInstance().setSensorRecord(deviceId, "doorLockerCurrentStatus", + String.valueOf(lockerStatus), Calendar.getInstance().getTimeInMillis()); + if (!DoorManagerServiceUtils.publishToDASLockerStatus(owner, deviceId, lockerStatus)) { + log.warn("An error occurred while trying to publish with ID [" + deviceId + "] of owner [" + + owner + "]"); } - } catch(Exception e){ - log.error(e); - } - if(log.isDebugEnabled()){ - //log.debug("Return result " + result + " for Request " + requestMessage); + } catch (Exception e) { + log.error(e); } } } + /** + * Publish a MQTT message to device through message broker + * + * @param topic mqtt topic which will be used to uniquely identify who are the subscribers to this topic + * @param payLoad message is to be published + * @param qos level of qos(quality of service):1,2,3 + * @param retained klkkl + * @throws TransportHandlerException + */ private void publishToAutomaticDoorLocker(String topic, String payLoad, int qos, boolean retained) throws TransportHandlerException { - if(log.isDebugEnabled()){ + if (log.isDebugEnabled()) { log.debug("Publishing message [" + payLoad + "to topic [" + topic + "]."); } publishToQueue(topic, payLoad, qos, retained); } + /** + * Publish a MQTT message to device through message broker + * + * @param deviceOwner person who own the device + * @param deviceId unique identifier for each device + * @param operation command is to executed at agent side e.g: off, on + * @param param additional payload + * @throws DeviceManagementException + * @throws DoorManagerException + */ public void sendCommandViaMQTT(String deviceOwner, String deviceId, String operation, String param) throws DeviceManagementException, DoorManagerException { - String PUBLISH_TOPIC = "wso2/iot/%s/doormanager/%s/lockController"; - String topic = String.format(PUBLISH_TOPIC, deviceOwner, deviceId); + String topic = String.format(PUBLISHER_TOPIC, deviceOwner, deviceId); String payload = operation + param; try { publishToAutomaticDoorLocker(topic, payload, 2, false); - if(param.equals("LOCK")){ - if (!DoorManagerServiceUtils.publishToDASCurrent(deviceOwner, deviceId, 0)) { - log.warn("An error occured whilst trying to publish with ID [" + deviceId + - "] of owner [" + deviceOwner + "]"); + if (param.equals("LOCK")) { + if (!DoorManagerServiceUtils.publishToDASLockerStatus(deviceOwner, deviceId, 0)) { + log.warn("An error occurred whilst trying to publish with ID [" + deviceId + "] of owner [" + + deviceOwner + "]"); } - }else{ - if (!DoorManagerServiceUtils.publishToDASCurrent(deviceOwner, deviceId, 1)) { - log.warn("An error occured whilst trying to publish with ID [" + deviceId + - "] of owner [" + deviceOwner + "]"); + } else { + if (!DoorManagerServiceUtils.publishToDASLockerStatus(deviceOwner, deviceId, 1)) { + log.warn("An error occurred whilst trying to publish with ID [" + deviceId + "] of owner [" + + deviceOwner + "]"); } } - if (!DoorManagerServiceUtils.publishToDASCurrent(deviceOwner, deviceId, 1)) { - log.warn("An error occured whilst trying to publish with ID [" + deviceId + - "] of owner [" + deviceOwner + "]"); - } } catch (TransportHandlerException e) { String errorMessage = "Error publishing data to device with ID " + deviceId; throw new DoorManagerException(errorMessage, e); + } catch (DataPublisherConfigurationException e) { + String errorMessage = "Error publishing data to DAS with ID " + deviceId; + throw new DoorManagerException(errorMessage, e); } } + /** + * Connection with message broker can be terminated + */ @Override public void disconnect() { Runnable stopConnection = new Runnable() { @@ -143,8 +195,7 @@ public class DoorManagerMQTTConnector extends MQTTTransportHandler { while (isConnected()) { try { closeConnection(); - } - catch (MqttException e) { + } catch (MqttException e) { if (log.isDebugEnabled()) { log.warn("Unable to 'STOP' MQTT connection at broker at: " + mqttBrokerEndPoint); } diff --git a/modules/samples/doormanager/component/controller/src/main/webapp/WEB-INF/cxf-servlet.xml b/modules/samples/doormanager/component/controller/src/main/webapp/WEB-INF/cxf-servlet.xml index 1d024638..1a62e429 100644 --- a/modules/samples/doormanager/component/controller/src/main/webapp/WEB-INF/cxf-servlet.xml +++ b/modules/samples/doormanager/component/controller/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -16,9 +16,9 @@ ~ limitations under the License. --> - @@ -30,12 +30,12 @@ - + + class="org.homeautomation.doormanager.controller.api.transport.DoorManagerMQTTConnector"> diff --git a/modules/samples/doormanager/component/manager/pom.xml b/modules/samples/doormanager/component/manager/pom.xml index 130acacd..469db75c 100644 --- a/modules/samples/doormanager/component/manager/pom.xml +++ b/modules/samples/doormanager/component/manager/pom.xml @@ -19,15 +19,15 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> org.homeautomation - component + doormanager-component 1.0.0-SNAPSHOT ../pom.xml 4.0.0 - ${groupId}.doormanager.manager + org.homeautomation.doormanager.manager war 1.0.0-SNAPSHOT - ${groupId}.doormanager.manager + org.homeautomation.doormanager.manager http://wso2.org ${basedir}/src/main/java @@ -46,7 +46,7 @@ maven-war-plugin ${maven-war-plugin.version} - ${groupId}.doormanager.manager_mgt + org.homeautomation.doormanager.manager_mgt @@ -54,7 +54,7 @@ org.homeautomation - ${project-base-package}.plugin + org.homeautomation.doormanager.plugin org.wso2.carbon.devicemgt diff --git a/modules/samples/doormanager/component/pom.xml b/modules/samples/doormanager/component/pom.xml index dd9ea9aa..5be5a50d 100644 --- a/modules/samples/doormanager/component/pom.xml +++ b/modules/samples/doormanager/component/pom.xml @@ -15,7 +15,9 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. -*/--> +*/--> + org.homeautomation doormanager @@ -24,7 +26,7 @@ 4.0.0 1.0.0-SNAPSHOT - component + doormanager-component pom @@ -271,12 +273,11 @@ - - plugin - controller - manager - agent - analytics - ui - + + plugin + controller + manager + analytics + ui + \ No newline at end of file diff --git a/modules/samples/doormanager/component/ui/pom.xml b/modules/samples/doormanager/component/ui/pom.xml index bbfca272..d618b978 100644 --- a/modules/samples/doormanager/component/ui/pom.xml +++ b/modules/samples/doormanager/component/ui/pom.xml @@ -16,18 +16,18 @@ ~ specific language governing permissions and limitations ~ under the License. --> - org.homeautomation - component + doormanager-component 1.0.0-SNAPSHOT ../pom.xml 4.0.0 - ${groupId}.doormanager.ui - ${groupId}.doormanager.ui + org.homeautomation.doormanager.ui + org.homeautomation.doormanager.ui pom @@ -35,7 +35,7 @@ maven-assembly-plugin 2.5.5 - ${project.artifactId}-1.0.0-SNAPSHOT + org.homeautomation.doormanager.ui-1.0.0-SNAPSHOT false src/assembly/src.xml diff --git a/modules/samples/doormanager/component/ui/src/assembly/src.xml b/modules/samples/doormanager/component/ui/src/assembly/src.xml index 8e784014..5e2e656a 100644 --- a/modules/samples/doormanager/component/ui/src/assembly/src.xml +++ b/modules/samples/doormanager/component/ui/src/assembly/src.xml @@ -17,8 +17,8 @@ --> src diff --git a/modules/samples/doormanager/feature/feature/pom.xml b/modules/samples/doormanager/feature/feature/pom.xml index 1a76d94c..4e499c6d 100644 --- a/modules/samples/doormanager/feature/feature/pom.xml +++ b/modules/samples/doormanager/feature/feature/pom.xml @@ -1,3 +1,4 @@ + - org.homeautomation - feature + doormanager-feature 1.0.0-SNAPSHOT ../pom.xml 4.0.0 1.0.0-SNAPSHOT - ${groupId}.doormanager.feature + org.homeautomation.doormanager.feature pom - ${project.artifactId} - http://wso2.org + ${project.artifactId} + http://wso2.org org.homeautomation @@ -47,12 +48,6 @@ 1.0.0-SNAPSHOT war - - org.homeautomation - ${project-base-package}.agent - 1.0.0-SNAPSHOT - war - com.h2database.wso2 h2-database-engine @@ -63,6 +58,7 @@ maven-resources-plugin + 2.7 copy-resources @@ -104,7 +100,7 @@ zip true - ${basedir}/src/main/resources/carbonapps + ${project.build.directory}/maven-shared-archive-resources/carbonapps **/* @@ -115,7 +111,9 @@ ${project.version} zip true - ${basedir}/src/main/resources/jaggeryapps/ + + ${project.build.directory}/maven-shared-archive-resources/jaggeryapps + **/* @@ -134,7 +132,9 @@ ${project-base-package}.manager war true - ${basedir}/src/main/resources/webapps/ + + ${project.build.directory}/maven-shared-archive-resources/webapps/ + doormanager_mgt.war @@ -153,31 +153,14 @@ ${project-base-package}.controller war true - ${basedir}/src/main/resources/webapps/ + + ${project.build.directory}/maven-shared-archive-resources/webapps/ + doormanager.war - - copy-jaxrs-agent-war - package - - copy - - - - - org.homeautomation - ${project-base-package}.agent - war - true - ${basedir}/src/main/resources/webapps/ - doormanager_agent.war - - - - @@ -198,7 +181,7 @@ + value="jdbc:h2:file:${basedir}/${db.dir}/doormanagerDM_DB;DB_CLOSE_ON_EXIT=FALSE"/> org.wso2.maven carbon-p2-plugin + ${carbon-p2-plugin.version} p2-feature-generation diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/carbonapps/Sensor.car b/modules/samples/doormanager/feature/feature/src/main/resources/carbonapps/Sensor.car deleted file mode 100644 index af22e266b8cbf26096ce4b9e96c63d1e6a597ded..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6981 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 - - jdbc/doormanagerDM_DB - + + jdbc/doormanagerDM_DB + diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/database/doormanagerDM_DB.h2.db b/modules/samples/doormanager/feature/feature/src/main/resources/database/doormanagerDM_DB.h2.db index 6be5a907534d078f7586a0462b3b9c44c108f12c..e3cd583dfe592cd1d9cecb569b791ea8d3586e9d 100644 GIT binary patch delta 53 ocmZpez}PT>aRCR<&*=|-GJpVMb>L<}j`!>n16Z*NE|M?+0P?pHi2wiq delta 53 mcmZpez}PT>aRCQUq - + org.wso2.carbon.ndatasource.rdbms.RDBMSDataSourceReader doormanagerDM_DB - The datasource used for the this device type + The datasource used for the this device type jdbc/doormanagerDM_DB
    - -

    What it Does

    -
    -

    Connect an Automatic Door Locker to WSO2 IoT Server and control and view current state - of door locker.

    -
    -

    What You Need

    -
    -
      -
    • ITEM 01   Electronic solenoid door - lock - 2 -
    • -
    • ITEM 02   MFRC522 RFID Reader/Writer -
    • -
    • ITEM 03   2 Channel 5V Relay Module -
    • -
    • ITEM 04   12 Volt DC - 1 Amp (12V, 1A) - Power Supply -
    • -
    • ITEM 05   LED Bulbs (Red and Green) -
    • -
    • ITEM 06   Resistors (333ohms) -2 -
    • -
    •    Proceed to [Prepare] section. -
    -
    - - View API
      - Register New Lock Safe - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -

    -