From f9bb3f6e8903d948e853ea2d11d2b88e9055ddad Mon Sep 17 00:00:00 2001 From: Hasunie Date: Tue, 31 Jan 2017 10:16:56 +0530 Subject: [PATCH 01/11] removing swagger annotation from enrollment (cherry picked from commit 3dc1418) --- .../api/services/DeviceManagementService.java | 52 --------------- .../services/discovery/DiscoveryService.java | 65 +------------------ .../enrollment/EnrollmentService.java | 54 --------------- .../api/services/syncml/SyncmlService.java | 55 ---------------- .../wstep/CertificateEnrollmentService.java | 53 --------------- .../CertificateEnrollmentPolicyService.java | 55 ---------------- 6 files changed, 1 insertion(+), 333 deletions(-) diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementService.java index bbfda4355..73cc46b88 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementService.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementService.java @@ -18,8 +18,6 @@ package org.wso2.carbon.device.mgt.mobile.windows.api.services; - -import io.swagger.annotations.*; import org.w3c.dom.Document; import org.wso2.carbon.apimgt.annotations.api.Scope; import org.wso2.carbon.apimgt.annotations.api.Scopes; @@ -28,7 +26,6 @@ import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsConfigurationException; import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; import org.wso2.carbon.device.mgt.mobile.windows.api.operations.WindowsOperationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; import javax.ws.rs.Consumes; import javax.ws.rs.POST; @@ -57,55 +54,6 @@ public interface DeviceManagementService { @POST @Consumes({PluginConstants.SYNCML_MEDIA_TYPE, MediaType.APPLICATION_XML}) @Produces(PluginConstants.SYNCML_MEDIA_TYPE) - @ApiOperation( - httpMethod = "POST", - value = "Getting pending operations for Windows device.", - notes = "Using this API to fetching more information to enroll the Device and " + - "getting pending operations.", - tags = "Windows Device Management Administrative Service", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:android:enroll") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 201, - message = "Ok. \n Successfully getting pending operations.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified. \n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported.\n"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while getting pending operations.") - }) Response getResponse(Document request) throws WindowsDeviceEnrolmentException, WindowsOperationException, NotificationManagementException, WindowsConfigurationException; diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/DiscoveryService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/DiscoveryService.java index 2b856cb85..d271d9892 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/DiscoveryService.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/DiscoveryService.java @@ -18,8 +18,6 @@ package org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery; -import io.swagger.annotations.*; -import org.wso2.carbon.device.mgt.common.operation.mgt.Activity; import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; import org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.beans.DiscoveryRequest; @@ -27,13 +25,8 @@ import org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.beans.Di import javax.jws.WebMethod; import javax.jws.WebParam; -import javax.jws.WebResult; import javax.jws.WebService; -import javax.ws.rs.GET; import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import javax.xml.ws.BindingType; import javax.xml.ws.RequestWrapper; import javax.xml.ws.ResponseWrapper; @@ -48,68 +41,12 @@ import javax.xml.ws.soap.SOAPBinding; @BindingType(value = SOAPBinding.SOAP12HTTP_BINDING) public interface DiscoveryService { @POST - @ApiOperation( - httpMethod = "POST", - value = "Discovering the server Enrollment policy and Enrollment service Endpoints.", - notes = "Using this API to discover the Enrollment policy,Enrollment service and " + - "federated login page server endpoints in the server. ", - response = DiscoveryResponse.class, - tags = "Windows Device Enrollment.", - authorizations = { - @Authorization( - value = "permission", - scopes = {@AuthorizationScope( - scope = "/device-mgt/devices/enroll/windows", - description = "Discover the service endpoints.")} - ) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "Ok. \n Accepted and getting server endpoints.", - response = DiscoveryResponse.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified. \n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URLr.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported.\n"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while fetching the server endpoints.") - }) + @RequestWrapper(localName = "Discover", targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE) @WebMethod(operationName = "Discover") @ResponseWrapper(localName = "DiscoverResponse", targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE) void discover( @WebParam(name = "request", targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE) - @ApiParam( - name = "DiscoveryRequest", - value = "Discovery service SOAP request.") DiscoveryRequest request, @WebParam(mode = WebParam.Mode.OUT, name = "DiscoverResult", targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE) diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/EnrollmentService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/EnrollmentService.java index cb3e38091..5f4f14573 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/EnrollmentService.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/EnrollmentService.java @@ -18,7 +18,6 @@ package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment; -import io.swagger.annotations.*; import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException; import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; @@ -45,59 +44,6 @@ public interface EnrollmentService { @ResponseWrapper(localName = "RequestSecurityTokenResponseCollection", targetNamespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) @POST - @ApiOperation( - httpMethod = "POST", - value = "Signing the certificate signing request(CSR) and provide request security token response.", - notes = "Using this API to fetching more information to enroll the Device and " + - "getting pending operations.", - tags = "Windows 10 Device Enrollment Service.", - authorizations = { - @Authorization( - value = "permission", - scopes = {@AuthorizationScope( - scope = "/device-mgt/devices/enroll/windows", - description = "Signing the certificate signing request(CSR) " + - "and provide request security token response")} - ) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "Ok.Successfully signed the CSR.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified. \n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported.\n"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while Signing the CSR.") - }) void requestSecurityToken( @WebParam(name = "TokenType", targetNamespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) String tokenType, diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/SyncmlService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/SyncmlService.java index d92b52e65..b666e3f22 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/SyncmlService.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/SyncmlService.java @@ -18,12 +18,10 @@ package org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml; -import io.swagger.annotations.*; import org.w3c.dom.Document; import org.wso2.carbon.apimgt.annotations.api.Scope; import org.wso2.carbon.apimgt.annotations.api.Scopes; import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException; -import org.wso2.carbon.device.mgt.common.operation.mgt.Activity; import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsConfigurationException; import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; @@ -57,59 +55,6 @@ public interface SyncmlService { @POST @Consumes({PluginConstants.SYNCML_MEDIA_TYPE, MediaType.APPLICATION_XML}) @Produces(PluginConstants.SYNCML_MEDIA_TYPE) - @ApiOperation( - httpMethod = "POST", - value = "Getting pending operations for Windows device.", - notes = "Using this API to fetching more information to enroll the Device and " + - "getting pending operations.", - tags = "Windows Device Management Administrative Service", - authorizations = { - @Authorization( - value = "permission", - scopes = {@AuthorizationScope( - scope = "/device-mgt/devices/enroll/windows", - description = "Getting pending operations and " + - "device information to enroll the device")} - ) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 201, - message = "Ok. \n Successfully getting pending operations.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified. \n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported.\n"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while getting pending operations.") - }) Response getResponse(Document request) throws WindowsDeviceEnrolmentException, WindowsOperationException, NotificationManagementException, WindowsConfigurationException; diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/CertificateEnrollmentService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/CertificateEnrollmentService.java index 1b29298b3..8c6569861 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/CertificateEnrollmentService.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/CertificateEnrollmentService.java @@ -52,59 +52,6 @@ public interface CertificateEnrollmentService { @ResponseWrapper(localName = "RequestSecurityTokenResponseCollection", targetNamespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) @POST - @ApiOperation( - httpMethod = "POST", - value = "Signing the certificate signing request(CSR) and provide request security token response.", - notes = "Using this API to fetching more information to enroll the Device and " + - "getting pending operations.", - tags = "Windows Device Enrollment Service.", - authorizations = { - @Authorization( - value = "permission", - scopes = {@AuthorizationScope( - scope = "/device-mgt/devices/enroll/windows", - description = "GSigning the certificate signing request(CSR) " + - "and provide request security token response")} - ) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "Ok.Successfully signed the CSR.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified. \n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported.\n"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while Signing the CSR.") - }) void requestSecurityToken( @WebParam(name = "TokenType", targetNamespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) String tokenType, diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/CertificateEnrollmentPolicyService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/CertificateEnrollmentPolicyService.java index 91cb4de1c..9b91ef75d 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/CertificateEnrollmentPolicyService.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/CertificateEnrollmentPolicyService.java @@ -18,7 +18,6 @@ package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep; -import io.swagger.annotations.*; import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; import org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans.*; @@ -27,7 +26,6 @@ import javax.jws.WebParam; import javax.jws.WebService; import javax.ws.rs.Consumes; import javax.ws.rs.POST; -import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.xml.bind.annotation.XmlSeeAlso; @@ -56,59 +54,6 @@ public interface CertificateEnrollmentPolicyService { @POST @Consumes({PluginConstants.SYNCML_MEDIA_TYPE, MediaType.APPLICATION_XML}) @Produces(PluginConstants.SYNCML_MEDIA_TYPE) - @ApiOperation( - httpMethod = "POST", - value = "Getting pending operations for Windows device.", - notes = "Using this API to fetching more information to enroll the Device and " + - "getting pending operations.", - tags = "Windows Device Management Administrative Service", - authorizations = { - @Authorization( - value = "permission", - scopes = {@AuthorizationScope( - scope = "/device-mgt/devices/enroll/windows", - description = "Getting pending operations and " + - "device information to enroll the device")} - ) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 201, - message = "Ok. \n Successfully getting pending operations.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified. \n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported.\n"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while getting pending operations.") - }) void getPolicies( @WebParam(name = "client", targetNamespace = PluginConstants. ENROLLMENT_POLICY_TARGET_NAMESPACE) From 192e1c3edceba75a15ae6653d47712ea14f7bc2a Mon Sep 17 00:00:00 2001 From: kamidu Date: Tue, 31 Jan 2017 13:41:01 +0530 Subject: [PATCH 02/11] adding missing classes in hbs --- .../public/js/load-map.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js index 4a7361e27..24f1dcec8 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js @@ -19,8 +19,11 @@ var map; function loadLeafletMap() { + console.log("hachind"); var deviceLocationID = "#device-location", locations = $(deviceLocationID).data("locations"), + location_lat = $(deviceLocationID).data("lat"), + location_long = $(deviceLocationID).data("long"), container = "device-location", zoomLevel = 13, tileSet = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", @@ -46,6 +49,19 @@ function loadLeafletMap() { $("#map-error").hide(); $("#device-location").show(); + } else if (location_long && location_lat) { + + map = L.map(container).setView([location_lat, location_long], zoomLevel); + L.tileLayer(tileSet, {attribution: attribution}).addTo(map); + + var m = L.marker([location_lat, location_long], {"opacity": opacVal}).addTo(map).bindPopup("Your device is here"); + m.on('mouseover', function (e) { + this.openPopup(); + }); + m.on('mouseout', function (e) { + this.closePopup(); + }); + } else { $("#device-location").hide(); $("#map-error").show(); From 64cb8b522327e17d1f19eea21177fbf42bf6287e Mon Sep 17 00:00:00 2001 From: Kamidu Sachith Punchihewa Date: Tue, 31 Jan 2017 14:10:29 +0530 Subject: [PATCH 03/11] Update load-map.js --- .../public/js/load-map.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js index 24f1dcec8..10c4ec453 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js @@ -19,7 +19,7 @@ var map; function loadLeafletMap() { - console.log("hachind"); + var deviceLocationID = "#device-location", locations = $(deviceLocationID).data("locations"), location_lat = $(deviceLocationID).data("lat"), @@ -72,4 +72,4 @@ $(document).ready(function () { $(".location_tab").on("click", function () { loadLeafletMap(); }); -}); \ No newline at end of file +}); From 9bf38af4f7040d5b8176a38ddcc80eb6e22cc42c Mon Sep 17 00:00:00 2001 From: charitha Date: Wed, 1 Feb 2017 15:03:10 +0530 Subject: [PATCH 04/11] Fix issues in swagger docs --- .../services/android/services/DeviceManagementAdminService.java | 2 +- .../windows/api/services/DeviceManagementAdminService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementAdminService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementAdminService.java index db795dcd8..78bb83361 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementAdminService.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementAdminService.java @@ -415,7 +415,7 @@ public interface DeviceManagementAdminService { value = "Clearing the Password on Android Devices", notes = "Clear the password on Android devices", response = Activity.class, - tags = "Android Device Management Administrative Service.", + tags = "Android Device Management Administrative Service", extensions = { @Extension(properties = { @ExtensionProperty(name = AndroidConstants.SCOPE, value = "perm:android:clear-password") diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementAdminService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementAdminService.java index 936b353ac..b97f0e6dc 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementAdminService.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementAdminService.java @@ -179,7 +179,7 @@ public interface DeviceManagementAdminService { value = "Dis-enrol the windows Devices", notes = "Dis-enroll on Android devices", response = Activity.class, - tags = "Windows Device Management Administrative Service.", + tags = "Windows Device Management Administrative Service", extensions = { @Extension(properties = { @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:disenroll") From 1737eaaa79ead38212cedb8d0d948d3f94e94a44 Mon Sep 17 00:00:00 2001 From: WSO2 Builder Date: Thu, 2 Feb 2017 16:05:58 +0530 Subject: [PATCH 05/11] [WSO2 Release] [Jenkins #2510] [Release 3.0.11] prepare release v3.0.11 --- .../org.wso2.carbon.device.mgt.iot.analytics/pom.xml | 2 +- .../org.wso2.carbon.iot.device.statistics.dashboard/pom.xml | 2 +- .../iot-analytics/org.wso2.carbon.iot.geo.dashboard/pom.xml | 2 +- components/analytics/iot-analytics/pom.xml | 2 +- components/analytics/pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml | 2 +- components/device-types/androidsense-plugin/pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml | 2 +- components/device-types/arduino-plugin/pom.xml | 2 +- components/device-types/pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml | 2 +- components/device-types/raspberrypi-plugin/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- components/device-types/virtual-fire-alarm-plugin/pom.xml | 2 +- .../org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml | 2 +- .../org.wso2.carbon.appmgt.mdm.restconnector/pom.xml | 2 +- components/extensions/appm-connector/pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.input.adapter.http/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml | 2 +- components/extensions/cdmf-transport-adapters/pom.xml | 2 +- .../pom.xml | 2 +- components/extensions/mb-extensions/pom.xml | 2 +- components/extensions/pom.xml | 2 +- .../org.wso2.extension.siddhi.execution.json/pom.xml | 2 +- components/extensions/siddhi-extensions/pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.mobile.android.api/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml | 4 ++-- .../org.wso2.carbon.device.mgt.mobile.android/pom.xml | 2 +- components/mobile-plugins/android-plugin/pom.xml | 2 +- components/mobile-plugins/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml | 4 ++-- .../org.wso2.carbon.device.mgt.mobile.windows/pom.xml | 2 +- components/mobile-plugins/windows-plugin/pom.xml | 2 +- .../pom.xml | 4 ++-- .../pom.xml | 4 ++-- .../org.wso2.carbon.iot.geo.dashboard.feature/pom.xml | 2 +- features/analytics-feature/pom.xml | 2 +- .../pom.xml | 4 ++-- .../androidsense-plugin-feature/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml | 2 +- .../device-types-feature/arduino-plugin-feature/pom.xml | 2 +- features/device-types-feature/pom.xml | 4 ++-- .../pom.xml | 2 +- .../device-types-feature/raspberrypi-plugin-feature/pom.xml | 2 +- .../pom.xml | 2 +- .../virtual-fire-alarm-plugin-feature/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 6 +++--- .../pom.xml | 6 +++--- .../org.wso2.carbon.device.mgt.adapter.feature/pom.xml | 4 ++-- .../pom.xml | 4 ++-- features/extensions-feature/pom.xml | 4 ++-- .../pom.xml | 4 ++-- .../mobile-plugins-feature/android-plugin-feature/pom.xml | 4 ++-- features/mobile-plugins-feature/pom.xml | 4 ++-- .../pom.xml | 4 ++-- .../mobile-plugins-feature/windows-plugin-feature/pom.xml | 4 ++-- pom.xml | 6 +++--- 77 files changed, 97 insertions(+), 97 deletions(-) diff --git a/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml index 795d9d086..bdd8c02bb 100644 --- a/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml +++ b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml @@ -21,7 +21,7 @@ org.wso2.carbon.devicemgt-plugins iot-analytics - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/analytics/iot-analytics/org.wso2.carbon.iot.device.statistics.dashboard/pom.xml b/components/analytics/iot-analytics/org.wso2.carbon.iot.device.statistics.dashboard/pom.xml index 4c897aa83..f20368594 100644 --- a/components/analytics/iot-analytics/org.wso2.carbon.iot.device.statistics.dashboard/pom.xml +++ b/components/analytics/iot-analytics/org.wso2.carbon.iot.device.statistics.dashboard/pom.xml @@ -21,7 +21,7 @@ org.wso2.carbon.devicemgt-plugins iot-analytics - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/analytics/iot-analytics/org.wso2.carbon.iot.geo.dashboard/pom.xml b/components/analytics/iot-analytics/org.wso2.carbon.iot.geo.dashboard/pom.xml index b540ebf2a..97220e876 100644 --- a/components/analytics/iot-analytics/org.wso2.carbon.iot.geo.dashboard/pom.xml +++ b/components/analytics/iot-analytics/org.wso2.carbon.iot.geo.dashboard/pom.xml @@ -21,7 +21,7 @@ org.wso2.carbon.devicemgt-plugins iot-analytics - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/analytics/iot-analytics/pom.xml b/components/analytics/iot-analytics/pom.xml index 9eb28c648..8033407ec 100644 --- a/components/analytics/iot-analytics/pom.xml +++ b/components/analytics/iot-analytics/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins analytics - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/analytics/pom.xml b/components/analytics/pom.xml index 848023896..93c95c733 100644 --- a/components/analytics/pom.xml +++ b/components/analytics/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml index 0f9fcdad0..f01b5f246 100644 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml +++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml @@ -21,7 +21,7 @@ androidsense-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml index f85135ebb..8d23fa9c8 100644 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml +++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml @@ -3,7 +3,7 @@ androidsense-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml index 79d8f8c63..32ab2c324 100644 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml +++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml @@ -22,7 +22,7 @@ androidsense-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/androidsense-plugin/pom.xml b/components/device-types/androidsense-plugin/pom.xml index 6a310ca39..d5e94c5ae 100644 --- a/components/device-types/androidsense-plugin/pom.xml +++ b/components/device-types/androidsense-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml index 90d7804f1..4e09c1f59 100644 --- a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml +++ b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml @@ -21,7 +21,7 @@ arduino-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml index e7e48b452..80b9bb38a 100644 --- a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml +++ b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml @@ -21,7 +21,7 @@ arduino-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml index f6981badf..8b492bb4c 100644 --- a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml +++ b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml @@ -23,7 +23,7 @@ arduino-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/arduino-plugin/pom.xml b/components/device-types/arduino-plugin/pom.xml index d6fc20c3f..9f5604b6e 100644 --- a/components/device-types/arduino-plugin/pom.xml +++ b/components/device-types/arduino-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/pom.xml b/components/device-types/pom.xml index 933f1dc92..0a89a8d16 100644 --- a/components/device-types/pom.xml +++ b/components/device-types/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml diff --git a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml index 3b8e5bb5a..19bf53557 100644 --- a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml +++ b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml @@ -21,7 +21,7 @@ raspberrypi-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml index c2399a9d2..0c2ce7752 100644 --- a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml +++ b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml @@ -21,7 +21,7 @@ raspberrypi-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml index aba60ddd8..9bc2e117a 100644 --- a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml +++ b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml @@ -23,7 +23,7 @@ raspberrypi-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/raspberrypi-plugin/pom.xml b/components/device-types/raspberrypi-plugin/pom.xml index 08a175acd..c91883019 100644 --- a/components/device-types/raspberrypi-plugin/pom.xml +++ b/components/device-types/raspberrypi-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml index 3014a6841..abe06914c 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml @@ -23,7 +23,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml index 3e7328988..719a4e89e 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml @@ -23,7 +23,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/pom.xml index ce6469656..6ebe64cfb 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/pom.xml @@ -21,7 +21,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml index 57abd74f8..c6aca5bf7 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml @@ -21,7 +21,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml index 7c29380db..003f947dc 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml @@ -23,7 +23,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml index ee380a899..6ac096e73 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml @@ -23,7 +23,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/pom.xml b/components/device-types/virtual-fire-alarm-plugin/pom.xml index ad4c98766..b0900885a 100644 --- a/components/device-types/virtual-fire-alarm-plugin/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml index c27686237..03c3ac4ec 100644 --- a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml +++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml @@ -18,7 +18,7 @@ org.wso2.carbon.devicemgt-plugins appm-connector - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml index 36bd4b271..c088d0822 100644 --- a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml +++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml @@ -18,7 +18,7 @@ org.wso2.carbon.devicemgt-plugins appm-connector - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/extensions/appm-connector/pom.xml b/components/extensions/appm-connector/pom.xml index 883ae7ec4..fa70f8634 100644 --- a/components/extensions/appm-connector/pom.xml +++ b/components/extensions/appm-connector/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins extensions - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/pom.xml index 2f20bfa37..bbd817e44 100644 --- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml 4.0.0 diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/pom.xml index 30d5334f3..f1b06484d 100644 --- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml index e0f2affd4..2e853e453 100644 --- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml 4.0.0 diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml index 5302ba3e5..ad13f1cff 100644 --- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml 4.0.0 diff --git a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml index 29aac549c..0469cb431 100644 --- a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml 4.0.0 diff --git a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/pom.xml index 9d0a3b3c0..e98f3d989 100644 --- a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml diff --git a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/pom.xml index 866d56d62..e7af01a63 100644 --- a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/pom.xml @@ -21,7 +21,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml diff --git a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml index 201e1ff7c..bbf5c348b 100644 --- a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml diff --git a/components/extensions/cdmf-transport-adapters/pom.xml b/components/extensions/cdmf-transport-adapters/pom.xml index 7225b86e2..19a0fa1eb 100644 --- a/components/extensions/cdmf-transport-adapters/pom.xml +++ b/components/extensions/cdmf-transport-adapters/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins extensions - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/pom.xml b/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/pom.xml index 1731ee8e2..741a61ccd 100644 --- a/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/pom.xml +++ b/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins mb-extensions - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/extensions/mb-extensions/pom.xml b/components/extensions/mb-extensions/pom.xml index 8d3c530bc..6ffde2a6b 100644 --- a/components/extensions/mb-extensions/pom.xml +++ b/components/extensions/mb-extensions/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins extensions - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/extensions/pom.xml b/components/extensions/pom.xml index 8f2ebd214..4cd1aa907 100644 --- a/components/extensions/pom.xml +++ b/components/extensions/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml diff --git a/components/extensions/siddhi-extensions/org.wso2.extension.siddhi.execution.json/pom.xml b/components/extensions/siddhi-extensions/org.wso2.extension.siddhi.execution.json/pom.xml index 9122e5db2..027827397 100644 --- a/components/extensions/siddhi-extensions/org.wso2.extension.siddhi.execution.json/pom.xml +++ b/components/extensions/siddhi-extensions/org.wso2.extension.siddhi.execution.json/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins siddhi-extensions - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/extensions/siddhi-extensions/pom.xml b/components/extensions/siddhi-extensions/pom.xml index 5f2f79262..10260e454 100644 --- a/components/extensions/siddhi-extensions/pom.xml +++ b/components/extensions/siddhi-extensions/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins extensions - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.analytics/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.analytics/pom.xml index 88e3bb181..dad895b27 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.analytics/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.analytics/pom.xml @@ -21,7 +21,7 @@ org.wso2.carbon.devicemgt-plugins android-plugin - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml index cebd48d8e..c53440269 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml @@ -21,7 +21,7 @@ android-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml index 29a189a4d..40db19fca 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml @@ -23,13 +23,13 @@ android-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.mobile.android.ui - 3.0.11-SNAPSHOT + 3.0.11 WSO2 Carbon - Mobile Android UI pom diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml index 6b3f575ef..a69be7b39 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml @@ -22,7 +22,7 @@ android-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/mobile-plugins/android-plugin/pom.xml b/components/mobile-plugins/android-plugin/pom.xml index b9c893a85..67de60126 100644 --- a/components/mobile-plugins/android-plugin/pom.xml +++ b/components/mobile-plugins/android-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins mobile-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/mobile-plugins/pom.xml b/components/mobile-plugins/pom.xml index 1698be573..f271ff119 100644 --- a/components/mobile-plugins/pom.xml +++ b/components/mobile-plugins/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml index 5dd290ccf..c82411469 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml @@ -21,7 +21,7 @@ windows-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml index 60c7f1574..82d7b9597 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml @@ -23,13 +23,13 @@ windows-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.mobile.windows.ui - 3.0.11-SNAPSHOT + 3.0.11 WSO2 Carbon - Mobile Windows UI pom diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml index f60702205..723e891eb 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml @@ -22,7 +22,7 @@ windows-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/components/mobile-plugins/windows-plugin/pom.xml b/components/mobile-plugins/windows-plugin/pom.xml index 0cf274e26..a349f2406 100644 --- a/components/mobile-plugins/windows-plugin/pom.xml +++ b/components/mobile-plugins/windows-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins mobile-plugins - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml b/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml index 6cefa2886..7d997d10b 100644 --- a/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml +++ b/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml @@ -23,13 +23,13 @@ org.wso2.carbon.devicemgt-plugins analytics-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.iot.analytics.feature - 3.0.11-SNAPSHOT + 3.0.11 pom WSO2 Carbon - IoT Server Analytics Feature http://wso2.org diff --git a/features/analytics-feature/org.wso2.carbon.iot.device.statistics.dashboard.feature/pom.xml b/features/analytics-feature/org.wso2.carbon.iot.device.statistics.dashboard.feature/pom.xml index 541759d68..a5201b73e 100644 --- a/features/analytics-feature/org.wso2.carbon.iot.device.statistics.dashboard.feature/pom.xml +++ b/features/analytics-feature/org.wso2.carbon.iot.device.statistics.dashboard.feature/pom.xml @@ -23,13 +23,13 @@ org.wso2.carbon.devicemgt-plugins analytics-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml 4.0.0 org.wso2.carbon.iot.device.statistics.dashboard.feature - 3.0.11-SNAPSHOT + 3.0.11 pom WSO2 Carbon - IoT Server Analytics Feature http://wso2.org diff --git a/features/analytics-feature/org.wso2.carbon.iot.geo.dashboard.feature/pom.xml b/features/analytics-feature/org.wso2.carbon.iot.geo.dashboard.feature/pom.xml index 2d611715f..bdcd5bf49 100644 --- a/features/analytics-feature/org.wso2.carbon.iot.geo.dashboard.feature/pom.xml +++ b/features/analytics-feature/org.wso2.carbon.iot.geo.dashboard.feature/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins analytics-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/features/analytics-feature/pom.xml b/features/analytics-feature/pom.xml index 3faea5eff..e2a584917 100644 --- a/features/analytics-feature/pom.xml +++ b/features/analytics-feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml diff --git a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml index d1a1c60a3..8980b479a 100644 --- a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml +++ b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml @@ -23,13 +23,13 @@ org.wso2.carbon.devicemgt-plugins androidsense-plugin-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.iot.androidsense.feature - 3.0.11-SNAPSHOT + 3.0.11 pom WSO2 Carbon - IoT Server Android Sense Feature http://wso2.org diff --git a/features/device-types-feature/androidsense-plugin-feature/pom.xml b/features/device-types-feature/androidsense-plugin-feature/pom.xml index 4c98941be..4a232823f 100644 --- a/features/device-types-feature/androidsense-plugin-feature/pom.xml +++ b/features/device-types-feature/androidsense-plugin-feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml index 0a868935d..3ae7b9a07 100644 --- a/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml +++ b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins arduino-plugin-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/features/device-types-feature/arduino-plugin-feature/pom.xml b/features/device-types-feature/arduino-plugin-feature/pom.xml index 449624a27..d8655580a 100644 --- a/features/device-types-feature/arduino-plugin-feature/pom.xml +++ b/features/device-types-feature/arduino-plugin-feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/features/device-types-feature/pom.xml b/features/device-types-feature/pom.xml index 2c3921ff3..5bbd864b2 100644 --- a/features/device-types-feature/pom.xml +++ b/features/device-types-feature/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml 4.0.0 device-types-feature - 3.0.11-SNAPSHOT + 3.0.11 pom WSO2 Carbon - Device Management IoT Plugins Feature http://wso2.org diff --git a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml index 7eb8cc10d..95a211938 100644 --- a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml +++ b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins raspberrypi-plugin-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/features/device-types-feature/raspberrypi-plugin-feature/pom.xml b/features/device-types-feature/raspberrypi-plugin-feature/pom.xml index 42e6b5087..0305bdb0f 100644 --- a/features/device-types-feature/raspberrypi-plugin-feature/pom.xml +++ b/features/device-types-feature/raspberrypi-plugin-feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml index bde337686..372e806da 100644 --- a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml +++ b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins virtual-fire-alarm-plugin-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/features/device-types-feature/virtual-fire-alarm-plugin-feature/pom.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/pom.xml index 101b76d6c..868e5cc12 100644 --- a/features/device-types-feature/virtual-fire-alarm-plugin-feature/pom.xml +++ b/features/device-types-feature/virtual-fire-alarm-plugin-feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/features/extensions-feature/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization.feature/pom.xml b/features/extensions-feature/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization.feature/pom.xml index 9fa70d98d..6aad83ff7 100644 --- a/features/extensions-feature/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization.feature/pom.xml +++ b/features/extensions-feature/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization.feature/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins extensions-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml diff --git a/features/extensions-feature/org.wso2.carbon.appmgt.mdm.osgiconnector.feature/pom.xml b/features/extensions-feature/org.wso2.carbon.appmgt.mdm.osgiconnector.feature/pom.xml index c73fef8d2..63ff24c3e 100644 --- a/features/extensions-feature/org.wso2.carbon.appmgt.mdm.osgiconnector.feature/pom.xml +++ b/features/extensions-feature/org.wso2.carbon.appmgt.mdm.osgiconnector.feature/pom.xml @@ -20,13 +20,13 @@ org.wso2.carbon.devicemgt-plugins extensions-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml org.wso2.carbon.appmgt.mdm.osgiconnector.feature pom - 3.0.11-SNAPSHOT + 3.0.11 WSO2 Carbon - App management MDM OSGI Connector http://wso2.org This feature contains the core bundles required for APP management OSGI MDM connection @@ -36,7 +36,7 @@ org.wso2.carbon.devicemgt-plugins org.wso2.carbon.appmgt.mdm.osgiconnector - 3.0.11-SNAPSHOT + 3.0.11 org.apache.ws.commons.axiom diff --git a/features/extensions-feature/org.wso2.carbon.appmgt.mdm.restconnector.feature/pom.xml b/features/extensions-feature/org.wso2.carbon.appmgt.mdm.restconnector.feature/pom.xml index 9c39ddcb5..5c6e21843 100644 --- a/features/extensions-feature/org.wso2.carbon.appmgt.mdm.restconnector.feature/pom.xml +++ b/features/extensions-feature/org.wso2.carbon.appmgt.mdm.restconnector.feature/pom.xml @@ -20,13 +20,13 @@ org.wso2.carbon.devicemgt-plugins extensions-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml org.wso2.carbon.appmgt.mdm.restconnector.feature pom - 3.0.11-SNAPSHOT + 3.0.11 WSO2 Carbon - App management MDM REST Connector http://wso2.org This feature contains the core bundles required for APP management MDM REST connection @@ -36,7 +36,7 @@ org.wso2.carbon.devicemgt-plugins org.wso2.carbon.appmgt.mdm.restconnector - 3.0.11-SNAPSHOT + 3.0.11 org.apache.ws.commons.axiom diff --git a/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/pom.xml b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/pom.xml index b275137a9..308aa8dfe 100644 --- a/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/pom.xml +++ b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/pom.xml @@ -23,14 +23,14 @@ org.wso2.carbon.devicemgt-plugins extensions-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.adapter.feature pom - 3.0.11-SNAPSHOT + 3.0.11 WSO2 Carbon - Device Management Adapters Feature http://wso2.org This feature contains the adapter bundles required for IoT Server diff --git a/features/extensions-feature/org.wso2.extension.siddhi.execution.json.feature/pom.xml b/features/extensions-feature/org.wso2.extension.siddhi.execution.json.feature/pom.xml index 1eec6b355..21c92b2aa 100644 --- a/features/extensions-feature/org.wso2.extension.siddhi.execution.json.feature/pom.xml +++ b/features/extensions-feature/org.wso2.extension.siddhi.execution.json.feature/pom.xml @@ -20,13 +20,13 @@ org.wso2.carbon.devicemgt-plugins extensions-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml org.wso2.extension.siddhi.execution.json.feature pom - 3.0.11-SNAPSHOT + 3.0.11 WSO2 Siddhi Execution Extension - Json Feature http://wso2.org This feature contains Siddhi extension feature for changing a json string to individual properties. diff --git a/features/extensions-feature/pom.xml b/features/extensions-feature/pom.xml index 60f1cdc46..124025b6c 100644 --- a/features/extensions-feature/pom.xml +++ b/features/extensions-feature/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml 4.0.0 extensions-feature - 3.0.11-SNAPSHOT + 3.0.11 pom WSO2 Carbon - Device Management Extensions http://wso2.org diff --git a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml index ecd88e58c..763b81984 100644 --- a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml +++ b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt-plugins android-plugin-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.mobile.android.feature pom - 3.0.11-SNAPSHOT + 3.0.11 WSO2 Carbon - Android Device Management Feature http://wso2.org This feature contains the core bundles required for Android Device Management diff --git a/features/mobile-plugins-feature/android-plugin-feature/pom.xml b/features/mobile-plugins-feature/android-plugin-feature/pom.xml index 0e3ab629d..4ee9876af 100644 --- a/features/mobile-plugins-feature/android-plugin-feature/pom.xml +++ b/features/mobile-plugins-feature/android-plugin-feature/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt-plugins mobile-plugins-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml 4.0.0 android-plugin-feature - 3.0.11-SNAPSHOT + 3.0.11 pom WSO2 Carbon - Device Management Android Plugin Feature http://wso2.org diff --git a/features/mobile-plugins-feature/pom.xml b/features/mobile-plugins-feature/pom.xml index 7360be3c0..a17bb7b84 100644 --- a/features/mobile-plugins-feature/pom.xml +++ b/features/mobile-plugins-feature/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11-SNAPSHOT + 3.0.11 ../../pom.xml 4.0.0 mobile-plugins-feature - 3.0.11-SNAPSHOT + 3.0.11 pom WSO2 Carbon - Device Management EMM Plugins Feature http://wso2.org diff --git a/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml b/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml index f1682835f..d1ebb3356 100644 --- a/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml +++ b/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt-plugins windows-plugin-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.mobile.windows.feature pom - 3.0.11-SNAPSHOT + 3.0.11 WSO2 Carbon - Windows Device Management Feature http://wso2.org This feature contains the core bundles required for Windows Device Management diff --git a/features/mobile-plugins-feature/windows-plugin-feature/pom.xml b/features/mobile-plugins-feature/windows-plugin-feature/pom.xml index 64f71fe2f..5bb8935b9 100644 --- a/features/mobile-plugins-feature/windows-plugin-feature/pom.xml +++ b/features/mobile-plugins-feature/windows-plugin-feature/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt-plugins mobile-plugins-feature - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml 4.0.0 windows-plugin-feature - 3.0.11-SNAPSHOT + 3.0.11 pom WSO2 Carbon - Device Management Windows Plugin Feature http://wso2.org diff --git a/pom.xml b/pom.xml index 56e1dd346..fc42523ee 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent pom - 3.0.11-SNAPSHOT + 3.0.11 WSO2 Carbon - Device Management Plugins Parent http://wso2.org WSO2 Carbon - Device Management Plugins Parent @@ -1251,7 +1251,7 @@ 1.2.15 - 3.0.11-SNAPSHOT + 3.0.11 4.4.8 @@ -1377,7 +1377,7 @@ scm:git:https://github.com/wso2/carbon-device-mgt-plugins.git scm:git:https://github.com/wso2/carbon-device-mgt-plugins.git - HEAD + v3.0.11 From d7e4580e77d9bd657c3d1128c0b6f5f6b31fdea8 Mon Sep 17 00:00:00 2001 From: WSO2 Builder Date: Thu, 2 Feb 2017 16:06:06 +0530 Subject: [PATCH 06/11] [WSO2 Release] [Jenkins #2510] [Release 3.0.11] prepare for next development iteration --- .../org.wso2.carbon.device.mgt.iot.analytics/pom.xml | 2 +- .../org.wso2.carbon.iot.device.statistics.dashboard/pom.xml | 2 +- .../iot-analytics/org.wso2.carbon.iot.geo.dashboard/pom.xml | 2 +- components/analytics/iot-analytics/pom.xml | 2 +- components/analytics/pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml | 2 +- components/device-types/androidsense-plugin/pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml | 2 +- components/device-types/arduino-plugin/pom.xml | 2 +- components/device-types/pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml | 2 +- components/device-types/raspberrypi-plugin/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- components/device-types/virtual-fire-alarm-plugin/pom.xml | 2 +- .../org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml | 2 +- .../org.wso2.carbon.appmgt.mdm.restconnector/pom.xml | 2 +- components/extensions/appm-connector/pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.input.adapter.http/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml | 2 +- components/extensions/cdmf-transport-adapters/pom.xml | 2 +- .../pom.xml | 2 +- components/extensions/mb-extensions/pom.xml | 2 +- components/extensions/pom.xml | 2 +- .../org.wso2.extension.siddhi.execution.json/pom.xml | 2 +- components/extensions/siddhi-extensions/pom.xml | 2 +- .../pom.xml | 2 +- .../org.wso2.carbon.device.mgt.mobile.android.api/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml | 4 ++-- .../org.wso2.carbon.device.mgt.mobile.android/pom.xml | 2 +- components/mobile-plugins/android-plugin/pom.xml | 2 +- components/mobile-plugins/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml | 4 ++-- .../org.wso2.carbon.device.mgt.mobile.windows/pom.xml | 2 +- components/mobile-plugins/windows-plugin/pom.xml | 2 +- .../pom.xml | 4 ++-- .../pom.xml | 4 ++-- .../org.wso2.carbon.iot.geo.dashboard.feature/pom.xml | 2 +- features/analytics-feature/pom.xml | 2 +- .../pom.xml | 4 ++-- .../androidsense-plugin-feature/pom.xml | 2 +- .../org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml | 2 +- .../device-types-feature/arduino-plugin-feature/pom.xml | 2 +- features/device-types-feature/pom.xml | 4 ++-- .../pom.xml | 2 +- .../device-types-feature/raspberrypi-plugin-feature/pom.xml | 2 +- .../pom.xml | 2 +- .../virtual-fire-alarm-plugin-feature/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 6 +++--- .../pom.xml | 6 +++--- .../org.wso2.carbon.device.mgt.adapter.feature/pom.xml | 4 ++-- .../pom.xml | 4 ++-- features/extensions-feature/pom.xml | 4 ++-- .../pom.xml | 4 ++-- .../mobile-plugins-feature/android-plugin-feature/pom.xml | 4 ++-- features/mobile-plugins-feature/pom.xml | 4 ++-- .../pom.xml | 4 ++-- .../mobile-plugins-feature/windows-plugin-feature/pom.xml | 4 ++-- pom.xml | 6 +++--- 77 files changed, 97 insertions(+), 97 deletions(-) diff --git a/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml index bdd8c02bb..925456dbc 100644 --- a/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml +++ b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml @@ -21,7 +21,7 @@ org.wso2.carbon.devicemgt-plugins iot-analytics - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/analytics/iot-analytics/org.wso2.carbon.iot.device.statistics.dashboard/pom.xml b/components/analytics/iot-analytics/org.wso2.carbon.iot.device.statistics.dashboard/pom.xml index f20368594..a2d9c0f6b 100644 --- a/components/analytics/iot-analytics/org.wso2.carbon.iot.device.statistics.dashboard/pom.xml +++ b/components/analytics/iot-analytics/org.wso2.carbon.iot.device.statistics.dashboard/pom.xml @@ -21,7 +21,7 @@ org.wso2.carbon.devicemgt-plugins iot-analytics - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/analytics/iot-analytics/org.wso2.carbon.iot.geo.dashboard/pom.xml b/components/analytics/iot-analytics/org.wso2.carbon.iot.geo.dashboard/pom.xml index 97220e876..581c07c33 100644 --- a/components/analytics/iot-analytics/org.wso2.carbon.iot.geo.dashboard/pom.xml +++ b/components/analytics/iot-analytics/org.wso2.carbon.iot.geo.dashboard/pom.xml @@ -21,7 +21,7 @@ org.wso2.carbon.devicemgt-plugins iot-analytics - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/analytics/iot-analytics/pom.xml b/components/analytics/iot-analytics/pom.xml index 8033407ec..92ad61b0b 100644 --- a/components/analytics/iot-analytics/pom.xml +++ b/components/analytics/iot-analytics/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins analytics - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/analytics/pom.xml b/components/analytics/pom.xml index 93c95c733..60cd864f2 100644 --- a/components/analytics/pom.xml +++ b/components/analytics/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml index f01b5f246..951be22be 100644 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml +++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml @@ -21,7 +21,7 @@ androidsense-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml index 8d23fa9c8..fc1a18732 100644 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml +++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml @@ -3,7 +3,7 @@ androidsense-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml index 32ab2c324..03816ecd9 100644 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml +++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml @@ -22,7 +22,7 @@ androidsense-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/androidsense-plugin/pom.xml b/components/device-types/androidsense-plugin/pom.xml index d5e94c5ae..f25886b19 100644 --- a/components/device-types/androidsense-plugin/pom.xml +++ b/components/device-types/androidsense-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml index 4e09c1f59..6b9ca04e0 100644 --- a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml +++ b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml @@ -21,7 +21,7 @@ arduino-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml index 80b9bb38a..532f22f17 100644 --- a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml +++ b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml @@ -21,7 +21,7 @@ arduino-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml index 8b492bb4c..385570c29 100644 --- a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml +++ b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml @@ -23,7 +23,7 @@ arduino-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/arduino-plugin/pom.xml b/components/device-types/arduino-plugin/pom.xml index 9f5604b6e..f37fdec2a 100644 --- a/components/device-types/arduino-plugin/pom.xml +++ b/components/device-types/arduino-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/pom.xml b/components/device-types/pom.xml index 0a89a8d16..f64171e44 100644 --- a/components/device-types/pom.xml +++ b/components/device-types/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml diff --git a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml index 19bf53557..ec0649181 100644 --- a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml +++ b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml @@ -21,7 +21,7 @@ raspberrypi-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml index 0c2ce7752..a80de0fad 100644 --- a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml +++ b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml @@ -21,7 +21,7 @@ raspberrypi-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml index 9bc2e117a..8c832bbf3 100644 --- a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml +++ b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml @@ -23,7 +23,7 @@ raspberrypi-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/raspberrypi-plugin/pom.xml b/components/device-types/raspberrypi-plugin/pom.xml index c91883019..15fec876b 100644 --- a/components/device-types/raspberrypi-plugin/pom.xml +++ b/components/device-types/raspberrypi-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml index abe06914c..d739f8d11 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml @@ -23,7 +23,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml index 719a4e89e..ec91a2e5d 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml @@ -23,7 +23,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/pom.xml index 6ebe64cfb..436d77892 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/pom.xml @@ -21,7 +21,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml index c6aca5bf7..024ef6b57 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml @@ -21,7 +21,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml index 003f947dc..02be6a41d 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml @@ -23,7 +23,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml index 6ac096e73..7fbe10a02 100644 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml @@ -23,7 +23,7 @@ virtual-fire-alarm-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/device-types/virtual-fire-alarm-plugin/pom.xml b/components/device-types/virtual-fire-alarm-plugin/pom.xml index b0900885a..fb2d41e22 100644 --- a/components/device-types/virtual-fire-alarm-plugin/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml index 03c3ac4ec..f81aedf64 100644 --- a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml +++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml @@ -18,7 +18,7 @@ org.wso2.carbon.devicemgt-plugins appm-connector - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml index c088d0822..a9b34ac34 100644 --- a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml +++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml @@ -18,7 +18,7 @@ org.wso2.carbon.devicemgt-plugins appm-connector - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/extensions/appm-connector/pom.xml b/components/extensions/appm-connector/pom.xml index fa70f8634..2cba956a1 100644 --- a/components/extensions/appm-connector/pom.xml +++ b/components/extensions/appm-connector/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins extensions - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/pom.xml index bbd817e44..a86b13a8d 100644 --- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/pom.xml index f1b06484d..282f33f64 100644 --- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml index 2e853e453..2ca1248e4 100644 --- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml index ad13f1cff..b125b2459 100644 --- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml index 0469cb431..8c29a6cae 100644 --- a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/pom.xml index e98f3d989..a4246e7d4 100644 --- a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml diff --git a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/pom.xml index e7af01a63..b86ab8f08 100644 --- a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/pom.xml @@ -21,7 +21,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml diff --git a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml index bbf5c348b..3029e8abd 100644 --- a/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins cdmf-transport-adapters - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml diff --git a/components/extensions/cdmf-transport-adapters/pom.xml b/components/extensions/cdmf-transport-adapters/pom.xml index 19a0fa1eb..bf715c897 100644 --- a/components/extensions/cdmf-transport-adapters/pom.xml +++ b/components/extensions/cdmf-transport-adapters/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins extensions - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/pom.xml b/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/pom.xml index 741a61ccd..7885a389a 100644 --- a/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/pom.xml +++ b/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins mb-extensions - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/extensions/mb-extensions/pom.xml b/components/extensions/mb-extensions/pom.xml index 6ffde2a6b..e920fde00 100644 --- a/components/extensions/mb-extensions/pom.xml +++ b/components/extensions/mb-extensions/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins extensions - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/extensions/pom.xml b/components/extensions/pom.xml index 4cd1aa907..7c1457b78 100644 --- a/components/extensions/pom.xml +++ b/components/extensions/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml diff --git a/components/extensions/siddhi-extensions/org.wso2.extension.siddhi.execution.json/pom.xml b/components/extensions/siddhi-extensions/org.wso2.extension.siddhi.execution.json/pom.xml index 027827397..c90a2dabb 100644 --- a/components/extensions/siddhi-extensions/org.wso2.extension.siddhi.execution.json/pom.xml +++ b/components/extensions/siddhi-extensions/org.wso2.extension.siddhi.execution.json/pom.xml @@ -20,7 +20,7 @@ org.wso2.carbon.devicemgt-plugins siddhi-extensions - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/extensions/siddhi-extensions/pom.xml b/components/extensions/siddhi-extensions/pom.xml index 10260e454..25332b34f 100644 --- a/components/extensions/siddhi-extensions/pom.xml +++ b/components/extensions/siddhi-extensions/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins extensions - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.analytics/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.analytics/pom.xml index dad895b27..99cb9be3b 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.analytics/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.analytics/pom.xml @@ -21,7 +21,7 @@ org.wso2.carbon.devicemgt-plugins android-plugin - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml index c53440269..b21b40149 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml @@ -21,7 +21,7 @@ android-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml index 40db19fca..027b1a800 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml @@ -23,13 +23,13 @@ android-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.mobile.android.ui - 3.0.11 + 3.0.12-SNAPSHOT WSO2 Carbon - Mobile Android UI pom diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml index a69be7b39..bd97bd6eb 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml @@ -22,7 +22,7 @@ android-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/mobile-plugins/android-plugin/pom.xml b/components/mobile-plugins/android-plugin/pom.xml index 67de60126..2493fdc14 100644 --- a/components/mobile-plugins/android-plugin/pom.xml +++ b/components/mobile-plugins/android-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins mobile-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/mobile-plugins/pom.xml b/components/mobile-plugins/pom.xml index f271ff119..4ce34b0f5 100644 --- a/components/mobile-plugins/pom.xml +++ b/components/mobile-plugins/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml index c82411469..f8537e1f9 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml @@ -21,7 +21,7 @@ windows-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml index 82d7b9597..e979e3af3 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml @@ -23,13 +23,13 @@ windows-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.mobile.windows.ui - 3.0.11 + 3.0.12-SNAPSHOT WSO2 Carbon - Mobile Windows UI pom diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml index 723e891eb..e33b5b18d 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml @@ -22,7 +22,7 @@ windows-plugin org.wso2.carbon.devicemgt-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/components/mobile-plugins/windows-plugin/pom.xml b/components/mobile-plugins/windows-plugin/pom.xml index a349f2406..aaecc79ad 100644 --- a/components/mobile-plugins/windows-plugin/pom.xml +++ b/components/mobile-plugins/windows-plugin/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins mobile-plugins - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml b/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml index 7d997d10b..8f74c380d 100644 --- a/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml +++ b/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml @@ -23,13 +23,13 @@ org.wso2.carbon.devicemgt-plugins analytics-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.iot.analytics.feature - 3.0.11 + 3.0.12-SNAPSHOT pom WSO2 Carbon - IoT Server Analytics Feature http://wso2.org diff --git a/features/analytics-feature/org.wso2.carbon.iot.device.statistics.dashboard.feature/pom.xml b/features/analytics-feature/org.wso2.carbon.iot.device.statistics.dashboard.feature/pom.xml index a5201b73e..8a3c12b30 100644 --- a/features/analytics-feature/org.wso2.carbon.iot.device.statistics.dashboard.feature/pom.xml +++ b/features/analytics-feature/org.wso2.carbon.iot.device.statistics.dashboard.feature/pom.xml @@ -23,13 +23,13 @@ org.wso2.carbon.devicemgt-plugins analytics-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.iot.device.statistics.dashboard.feature - 3.0.11 + 3.0.12-SNAPSHOT pom WSO2 Carbon - IoT Server Analytics Feature http://wso2.org diff --git a/features/analytics-feature/org.wso2.carbon.iot.geo.dashboard.feature/pom.xml b/features/analytics-feature/org.wso2.carbon.iot.geo.dashboard.feature/pom.xml index bdcd5bf49..fc3aa7b15 100644 --- a/features/analytics-feature/org.wso2.carbon.iot.geo.dashboard.feature/pom.xml +++ b/features/analytics-feature/org.wso2.carbon.iot.geo.dashboard.feature/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins analytics-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/features/analytics-feature/pom.xml b/features/analytics-feature/pom.xml index e2a584917..9836a4b77 100644 --- a/features/analytics-feature/pom.xml +++ b/features/analytics-feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml diff --git a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml index 8980b479a..64acf8258 100644 --- a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml +++ b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml @@ -23,13 +23,13 @@ org.wso2.carbon.devicemgt-plugins androidsense-plugin-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.iot.androidsense.feature - 3.0.11 + 3.0.12-SNAPSHOT pom WSO2 Carbon - IoT Server Android Sense Feature http://wso2.org diff --git a/features/device-types-feature/androidsense-plugin-feature/pom.xml b/features/device-types-feature/androidsense-plugin-feature/pom.xml index 4a232823f..f539e272b 100644 --- a/features/device-types-feature/androidsense-plugin-feature/pom.xml +++ b/features/device-types-feature/androidsense-plugin-feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml index 3ae7b9a07..f18237123 100644 --- a/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml +++ b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins arduino-plugin-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/features/device-types-feature/arduino-plugin-feature/pom.xml b/features/device-types-feature/arduino-plugin-feature/pom.xml index d8655580a..d491fc821 100644 --- a/features/device-types-feature/arduino-plugin-feature/pom.xml +++ b/features/device-types-feature/arduino-plugin-feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/features/device-types-feature/pom.xml b/features/device-types-feature/pom.xml index 5bbd864b2..17c67605f 100644 --- a/features/device-types-feature/pom.xml +++ b/features/device-types-feature/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml 4.0.0 device-types-feature - 3.0.11 + 3.0.12-SNAPSHOT pom WSO2 Carbon - Device Management IoT Plugins Feature http://wso2.org diff --git a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml index 95a211938..aab3de96e 100644 --- a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml +++ b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins raspberrypi-plugin-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/features/device-types-feature/raspberrypi-plugin-feature/pom.xml b/features/device-types-feature/raspberrypi-plugin-feature/pom.xml index 0305bdb0f..92626ddee 100644 --- a/features/device-types-feature/raspberrypi-plugin-feature/pom.xml +++ b/features/device-types-feature/raspberrypi-plugin-feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml index 372e806da..d4ce75d37 100644 --- a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml +++ b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins virtual-fire-alarm-plugin-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/features/device-types-feature/virtual-fire-alarm-plugin-feature/pom.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/pom.xml index 868e5cc12..e11e61d2f 100644 --- a/features/device-types-feature/virtual-fire-alarm-plugin-feature/pom.xml +++ b/features/device-types-feature/virtual-fire-alarm-plugin-feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins device-types-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/features/extensions-feature/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization.feature/pom.xml b/features/extensions-feature/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization.feature/pom.xml index 6aad83ff7..a8be9fc35 100644 --- a/features/extensions-feature/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization.feature/pom.xml +++ b/features/extensions-feature/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization.feature/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins extensions-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml diff --git a/features/extensions-feature/org.wso2.carbon.appmgt.mdm.osgiconnector.feature/pom.xml b/features/extensions-feature/org.wso2.carbon.appmgt.mdm.osgiconnector.feature/pom.xml index 63ff24c3e..b9c0d4c09 100644 --- a/features/extensions-feature/org.wso2.carbon.appmgt.mdm.osgiconnector.feature/pom.xml +++ b/features/extensions-feature/org.wso2.carbon.appmgt.mdm.osgiconnector.feature/pom.xml @@ -20,13 +20,13 @@ org.wso2.carbon.devicemgt-plugins extensions-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml org.wso2.carbon.appmgt.mdm.osgiconnector.feature pom - 3.0.11 + 3.0.12-SNAPSHOT WSO2 Carbon - App management MDM OSGI Connector http://wso2.org This feature contains the core bundles required for APP management OSGI MDM connection @@ -36,7 +36,7 @@ org.wso2.carbon.devicemgt-plugins org.wso2.carbon.appmgt.mdm.osgiconnector - 3.0.11 + 3.0.12-SNAPSHOT org.apache.ws.commons.axiom diff --git a/features/extensions-feature/org.wso2.carbon.appmgt.mdm.restconnector.feature/pom.xml b/features/extensions-feature/org.wso2.carbon.appmgt.mdm.restconnector.feature/pom.xml index 5c6e21843..83728f311 100644 --- a/features/extensions-feature/org.wso2.carbon.appmgt.mdm.restconnector.feature/pom.xml +++ b/features/extensions-feature/org.wso2.carbon.appmgt.mdm.restconnector.feature/pom.xml @@ -20,13 +20,13 @@ org.wso2.carbon.devicemgt-plugins extensions-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml org.wso2.carbon.appmgt.mdm.restconnector.feature pom - 3.0.11 + 3.0.12-SNAPSHOT WSO2 Carbon - App management MDM REST Connector http://wso2.org This feature contains the core bundles required for APP management MDM REST connection @@ -36,7 +36,7 @@ org.wso2.carbon.devicemgt-plugins org.wso2.carbon.appmgt.mdm.restconnector - 3.0.11 + 3.0.12-SNAPSHOT org.apache.ws.commons.axiom diff --git a/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/pom.xml b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/pom.xml index 308aa8dfe..e24f48384 100644 --- a/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/pom.xml +++ b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/pom.xml @@ -23,14 +23,14 @@ org.wso2.carbon.devicemgt-plugins extensions-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.adapter.feature pom - 3.0.11 + 3.0.12-SNAPSHOT WSO2 Carbon - Device Management Adapters Feature http://wso2.org This feature contains the adapter bundles required for IoT Server diff --git a/features/extensions-feature/org.wso2.extension.siddhi.execution.json.feature/pom.xml b/features/extensions-feature/org.wso2.extension.siddhi.execution.json.feature/pom.xml index 21c92b2aa..b1623498e 100644 --- a/features/extensions-feature/org.wso2.extension.siddhi.execution.json.feature/pom.xml +++ b/features/extensions-feature/org.wso2.extension.siddhi.execution.json.feature/pom.xml @@ -20,13 +20,13 @@ org.wso2.carbon.devicemgt-plugins extensions-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml org.wso2.extension.siddhi.execution.json.feature pom - 3.0.11 + 3.0.12-SNAPSHOT WSO2 Siddhi Execution Extension - Json Feature http://wso2.org This feature contains Siddhi extension feature for changing a json string to individual properties. diff --git a/features/extensions-feature/pom.xml b/features/extensions-feature/pom.xml index 124025b6c..20b5b1da2 100644 --- a/features/extensions-feature/pom.xml +++ b/features/extensions-feature/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml 4.0.0 extensions-feature - 3.0.11 + 3.0.12-SNAPSHOT pom WSO2 Carbon - Device Management Extensions http://wso2.org diff --git a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml index 763b81984..2e113fc04 100644 --- a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml +++ b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt-plugins android-plugin-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.mobile.android.feature pom - 3.0.11 + 3.0.12-SNAPSHOT WSO2 Carbon - Android Device Management Feature http://wso2.org This feature contains the core bundles required for Android Device Management diff --git a/features/mobile-plugins-feature/android-plugin-feature/pom.xml b/features/mobile-plugins-feature/android-plugin-feature/pom.xml index 4ee9876af..b8c5c34a3 100644 --- a/features/mobile-plugins-feature/android-plugin-feature/pom.xml +++ b/features/mobile-plugins-feature/android-plugin-feature/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt-plugins mobile-plugins-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml 4.0.0 android-plugin-feature - 3.0.11 + 3.0.12-SNAPSHOT pom WSO2 Carbon - Device Management Android Plugin Feature http://wso2.org diff --git a/features/mobile-plugins-feature/pom.xml b/features/mobile-plugins-feature/pom.xml index a17bb7b84..0a16bf3fb 100644 --- a/features/mobile-plugins-feature/pom.xml +++ b/features/mobile-plugins-feature/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent - 3.0.11 + 3.0.12-SNAPSHOT ../../pom.xml 4.0.0 mobile-plugins-feature - 3.0.11 + 3.0.12-SNAPSHOT pom WSO2 Carbon - Device Management EMM Plugins Feature http://wso2.org diff --git a/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml b/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml index d1ebb3356..ef7f85eb1 100644 --- a/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml +++ b/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt-plugins windows-plugin-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.mobile.windows.feature pom - 3.0.11 + 3.0.12-SNAPSHOT WSO2 Carbon - Windows Device Management Feature http://wso2.org This feature contains the core bundles required for Windows Device Management diff --git a/features/mobile-plugins-feature/windows-plugin-feature/pom.xml b/features/mobile-plugins-feature/windows-plugin-feature/pom.xml index 5bb8935b9..9c001ac8f 100644 --- a/features/mobile-plugins-feature/windows-plugin-feature/pom.xml +++ b/features/mobile-plugins-feature/windows-plugin-feature/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt-plugins mobile-plugins-feature - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml 4.0.0 windows-plugin-feature - 3.0.11 + 3.0.12-SNAPSHOT pom WSO2 Carbon - Device Management Windows Plugin Feature http://wso2.org diff --git a/pom.xml b/pom.xml index fc42523ee..e46da6005 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt-plugins carbon-device-mgt-plugins-parent pom - 3.0.11 + 3.0.12-SNAPSHOT WSO2 Carbon - Device Management Plugins Parent http://wso2.org WSO2 Carbon - Device Management Plugins Parent @@ -1251,7 +1251,7 @@ 1.2.15 - 3.0.11 + 3.0.12-SNAPSHOT 4.4.8 @@ -1377,7 +1377,7 @@ scm:git:https://github.com/wso2/carbon-device-mgt-plugins.git scm:git:https://github.com/wso2/carbon-device-mgt-plugins.git - v3.0.11 + HEAD From bd715b7aac5192354e6c911029fc06ea0e6f1d95 Mon Sep 17 00:00:00 2001 From: kamidu Date: Fri, 3 Feb 2017 16:51:25 +0530 Subject: [PATCH 07/11] resolving branch conflicts --- .../pom.xml | 167 ------------ .../config/DeviceManagementConfiguration.java | 45 --- .../config/EventListenerConfiguration.java | 79 ------ .../plugin/config/VirtualFirealarmConfig.java | 62 ----- ...irtualFirealarmConfigurationException.java | 53 ---- .../constants/VirtualFireAlarmConstants.java | 88 ------ ...tualFirealarmDeviceMgtPluginException.java | 56 ---- .../plugin/impl/VirtualFireAlarmUtils.java | 223 --------------- ...tualFirealarmEventAdapterSubscription.java | 23 -- ...irtualFirealarmMqttContentTransformer.java | 39 --- .../impl/VirtualFirealarmSecurityManager.java | 256 ------------------ .../impl/VirtualFirealarmStartupListener.java | 46 ---- ...irtualFirealarmXmppContentTransformer.java | 46 ---- .../VirtualFirealarmManagementDataHolder.java | 67 ----- ...alFirealarmManagementServiceComponent.java | 117 -------- .../plugin/mqtt/MqttConfig.java | 108 -------- .../plugin/xmpp/XmppAccount.java | 63 ----- .../plugin/xmpp/XmppConfig.java | 136 ---------- .../plugin/xmpp/XmppServerClient.java | 67 ----- 19 files changed, 1741 deletions(-) delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/DeviceManagementConfiguration.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/EventListenerConfiguration.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/VirtualFirealarmConfig.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/exception/VirtualFirealarmConfigurationException.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/constants/VirtualFireAlarmConstants.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/exception/VirtualFirealarmDeviceMgtPluginException.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFireAlarmUtils.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmEventAdapterSubscription.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmMqttContentTransformer.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmSecurityManager.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmStartupListener.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmXmppContentTransformer.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementDataHolder.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementServiceComponent.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/mqtt/MqttConfig.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppAccount.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppConfig.java delete mode 100644 components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppServerClient.java diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml deleted file mode 100644 index 02be6a41d..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - virtual-fire-alarm-plugin - org.wso2.carbon.devicemgt-plugins - 3.0.12-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin - bundle - WSO2 Carbon - IoT Server VirtualFireAlarm Management Plugin - WSO2 Carbon - Virtual FireAlarm Management/Control Plugin Implementation - http://wso2.org - - - - - org.apache.felix - maven-scr-plugin - - - maven-compiler-plugin - - 1.7 - 1.7 - - 2.3.2 - - - org.apache.felix - maven-bundle-plugin - 1.4.0 - true - - - ${project.artifactId} - ${project.artifactId} - ${carbon.devicemgt.plugins.version} - IoT Server Virtual Firealarm Impl Bundle - org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.internal - - org.osgi.framework, - org.osgi.service.component, - org.apache.commons.logging, - javax.naming;resolution:=optional, - javax.sql;resolution:=optional, - org.wso2.carbon.device.mgt.common.*, - org.wso2.carbon.device.mgt.common, - org.wso2.carbon.device.mgt.input.adapter.extension.*, - org.wso2.carbon.device.mgt.extensions.feature.mgt.*, - org.wso2.carbon.utils.*, - org.wso2.carbon.context, - org.wso2.carbon.core, - javax.crypto, - org.apache.commons.codec.binary, - org.json.*;version="${commons-json.version.range}", - org.wso2.carbon.certificate.mgt.core.*, - org.wso2.carbon.device.mgt.analytics.data.publisher.exception, - org.wso2.carbon.device.mgt.analytics.data.publisher.service, - org.wso2.carbon.event.input.adapter.core, - org.wso2.carbon.event.input.adapter.core.exception, - org.jivesoftware.smack.*, - javax.xml, - javax.xml.bind, - javax.xml.bind.annotation, - javax.xml.parsers; version="${javax.xml.parsers.import.pkg.version}", - org.w3c.dom - - - !org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.internal, - org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.*, - - - - - - - - - - commons-codec - commons-codec - - - org.eclipse.osgi - org.eclipse.osgi - - - org.eclipse.osgi - org.eclipse.osgi.services - - - org.wso2.carbon - org.wso2.carbon.logging - - - org.wso2.carbon.devicemgt - org.wso2.carbon.device.mgt.common - - - org.wso2.carbon.devicemgt - org.wso2.carbon.device.mgt.core - - - org.wso2.carbon - org.wso2.carbon.ndatasource.core - - - org.wso2.carbon.devicemgt - org.wso2.carbon.device.mgt.extensions - - - org.wso2.carbon - org.wso2.carbon.utils - - - org.wso2.carbon.analytics-common - org.wso2.carbon.event.input.adapter.core - - - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.input.adapter.extension - - - org.json.wso2 - json - - - org.wso2.carbon.devicemgt - org.wso2.carbon.certificate.mgt.core - - - org.wso2.carbon.devicemgt - org.wso2.carbon.device.mgt.analytics.data.publisher - - - org.igniterealtime.smack.wso2 - smack - - - org.igniterealtime.smack.wso2 - smackx - - - \ No newline at end of file diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/DeviceManagementConfiguration.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/DeviceManagementConfiguration.java deleted file mode 100644 index f7721fdd2..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/DeviceManagementConfiguration.java +++ /dev/null @@ -1,45 +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. - * - */ -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -@XmlRootElement(name = "DeviceManagementConfiguration") -public class DeviceManagementConfiguration { - - private EventListenerConfiguration eventListenerConfiguration; - - private static final Log log = LogFactory.getLog(DeviceManagementConfiguration.class); - - private DeviceManagementConfiguration() { - } - - @XmlElement(name = "EventListenerConfiguration", required = false) - public EventListenerConfiguration getEventListenerConfiguration() { - return eventListenerConfiguration; - } - - public void setEventListenerConfiguration(EventListenerConfiguration eventListenerConfiguration) { - this.eventListenerConfiguration = eventListenerConfiguration; - } -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/EventListenerConfiguration.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/EventListenerConfiguration.java deleted file mode 100644 index c182b9218..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/EventListenerConfiguration.java +++ /dev/null @@ -1,79 +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. - * - */ -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config; - -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlValue; -import java.util.List; - -@XmlRootElement(name = "EventListenerConfiguration") -public class EventListenerConfiguration { - - private String eventListenerProvider; - private List properties; - - @XmlElementWrapper(name = "Properties", required = true) - @XmlElement(name = "Property", required = true) - public List getProperties() { - return properties; - } - - public void setProperties(List properties) { - this.properties = properties; - } - - @XmlElement(name = "EventListenerProvider", required = true) - public String getEventListenerProvider() { - return eventListenerProvider; - } - - public void setEventListenerProvider(String eventListenerProvider) { - this.eventListenerProvider = eventListenerProvider; - } - - @XmlRootElement(name = "Property") - public static class Property { - - private String name; - private String value; - - @XmlAttribute(name = "Name", required = true) - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @XmlValue - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - } - -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/VirtualFirealarmConfig.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/VirtualFirealarmConfig.java deleted file mode 100644 index 9bb1380e5..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/VirtualFirealarmConfig.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.w3c.dom.Document; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config.exception.VirtualFirealarmConfigurationException; -import org.wso2.carbon.utils.CarbonUtils; - -import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import java.io.File; -public class VirtualFirealarmConfig { - - private static final Log log = LogFactory.getLog(VirtualFirealarmConfig.class); - private static final String DEVICE_TYPE_CONFIG_PATH = - CarbonUtils.getEtcCarbonConfigDirPath() + File.separator + "device-mgt-plugins" + File.separator - + "virtual_firealarm.xml"; - private static VirtualFirealarmConfig virtualFirealarmConfig = new VirtualFirealarmConfig(); - private static DeviceManagementConfiguration deviceManagementConfiguration; - - public static VirtualFirealarmConfig getInstance() { - return virtualFirealarmConfig; - } - - public static void initialize() throws VirtualFirealarmConfigurationException { - File configFile = new File(DEVICE_TYPE_CONFIG_PATH); - try { - Document doc = convertToDocument(configFile); - - /* Un-marshaling Webapp Authenticator configuration */ - JAXBContext ctx = JAXBContext.newInstance(DeviceManagementConfiguration.class); - Unmarshaller unmarshaller = ctx.createUnmarshaller(); - //unmarshaller.setSchema(getSchema()); - deviceManagementConfiguration = (DeviceManagementConfiguration) unmarshaller.unmarshal(doc); - } catch (JAXBException e) { - throw new VirtualFirealarmConfigurationException("Error occurred while un-marshalling the file " + - DEVICE_TYPE_CONFIG_PATH, e); - } - - } - - public DeviceManagementConfiguration getDeviceTypeConfiguration() { - return deviceManagementConfiguration; - } - - public static Document convertToDocument(File file) throws VirtualFirealarmConfigurationException { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - try { - factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); - DocumentBuilder docBuilder = factory.newDocumentBuilder(); - return docBuilder.parse(file); - } catch (Exception e) { - throw new VirtualFirealarmConfigurationException("Error occurred while parsing file, while converting " + - "to a org.w3c.dom.Document", e); - } - } -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/exception/VirtualFirealarmConfigurationException.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/exception/VirtualFirealarmConfigurationException.java deleted file mode 100644 index 0cba81bcc..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/exception/VirtualFirealarmConfigurationException.java +++ /dev/null @@ -1,53 +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. - * - */ -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config.exception; - -public class VirtualFirealarmConfigurationException extends Exception { - - private static final long serialVersionUID = -3151279431229070297L; - - public VirtualFirealarmConfigurationException(int errorCode, String message) { - super(message); - } - - public VirtualFirealarmConfigurationException(int errorCode, String message, Throwable cause) { - super(message, cause); - } - - public VirtualFirealarmConfigurationException(String msg, Exception nestedEx) { - super(msg, nestedEx); - } - - public VirtualFirealarmConfigurationException(String message, Throwable cause) { - super(message, cause); - } - - public VirtualFirealarmConfigurationException(String msg) { - super(msg); - } - - public VirtualFirealarmConfigurationException() { - super(); - } - - public VirtualFirealarmConfigurationException(Throwable cause) { - super(cause); - } - -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/constants/VirtualFireAlarmConstants.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/constants/VirtualFireAlarmConstants.java deleted file mode 100644 index 5815fa1c7..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/constants/VirtualFireAlarmConstants.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.constants; - -import org.wso2.carbon.utils.CarbonUtils; - -import java.io.File; - -public class VirtualFireAlarmConstants { - public final static String DEVICE_TYPE = "virtual_firealarm"; - public final static String DEVICE_PLUGIN_DEVICE_NAME = "DEVICE_NAME"; - public final static String DEVICE_PLUGIN_DEVICE_ID = "VIRTUAL_FIREALARM_DEVICE_ID"; - public final static String STATE_ON = "ON"; - public final static String STATE_OFF = "OFF"; - - public static final String URL_PREFIX = "http://"; - public static final String BULB_CONTEXT = "BULB"; - public static final String POLICY_CONTEXT = "POLICY"; - - //sensor events sumerized table name for temperature - public static final String TEMPERATURE_EVENT_TABLE = "DEVICE_TEMPERATURE_SUMMARY"; - public final static String DEVICE_TYPE_PROVIDER_DOMAIN = "carbon.super"; - - //mqtt tranport related constants - public static final String MQTT_ADAPTER_NAME = "virtual_firealarm_mqtt"; - public static final String MQTT_ADAPTER_TYPE = "oauth-mqtt"; - public static final String ADAPTER_TOPIC_PROPERTY = "topic"; - public static final String MQTT_PORT = "\\$\\{mqtt.broker.port\\}"; - public static final String MQTT_BROKER_HOST = "\\$\\{mqtt.broker.host\\}"; - public static final String CARBON_CONFIG_PORT_OFFSET = "Ports.Offset"; - public static final String DEFAULT_CARBON_LOCAL_IP_PROPERTY = "carbon.local.ip"; - public static final int CARBON_DEFAULT_PORT_OFFSET = 0; - public static final int DEFAULT_MQTT_PORT = 1886; - - //xmpp transport related constants - public static final String XMPP_ADAPTER_NAME = "virtual_firealarm_xmpp"; - public static final String XMPP_ADAPTER_TYPE = "xmpp"; - public static final String PASSWORD_PROPERTY_KEY = "password"; - public static final String JID_PROPERTY_KEY = "jid"; - public static final String CLIENT_JID_PROPERTY_KEY = "xmpp.client.jid"; - public static final String SUBJECT_PROPERTY_KEY = "xmpp.client.subject"; - public static final String MESSAGE_TYPE_PROPERTY_KEY = "xmpp.client.messageType"; - public static final String CHAT_PROPERTY_KEY = "chat"; - - public static final String USERNAME_PROPERTY_KEY = "username"; - public static final String DCR_PROPERTY_KEY = "dcrUrl"; - public static final String BROKER_URL_PROPERTY_KEY = "url"; - public static final String SCOPES_PROPERTY_KEY = "scopes"; - public static final String QOS_PROPERTY_KEY = "qos"; - public static final String CLIENT_ID_PROPERTY_KEY = "qos"; - public static final String CLEAR_SESSION_PROPERTY_KEY = "clearSession"; - public static final String TOPIC = "topic"; - public static final String SUBSCRIBED_TOPIC = "carbon.super/virtual_firealarm/+/publisher"; - - public static final String CONTENT_VALIDATION = "contentValidator"; - public static final String CONTENT_TRANSFORMATION = "contentTransformer"; - public static final String RESOURCE = "resource"; - - public static final String JSON_SERIAL_KEY = "SerialNumber"; - public static final String TEMPERATURE_STREAM_DEFINITION = "org.wso2.iot.devices.temperature"; - public static final String JSON_MESSAGE_KEY = "Msg"; - public static final String JSON_SIGNATURE_KEY = "Sig"; - - public static final String HOST_KEY = "host"; - public static final String PORT_KEY = "port"; - - public static final String SERVER_NAME = "serverName"; - - public static final String MQTT_ADAPTER_TOPIC_PROPERTY_NAME = "mqtt.adapter.topic"; - - public static final String APIM_APPLICATION_TOKEN_VALIDITY_PERIOD = "3600"; -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/exception/VirtualFirealarmDeviceMgtPluginException.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/exception/VirtualFirealarmDeviceMgtPluginException.java deleted file mode 100644 index 150745ac8..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/exception/VirtualFirealarmDeviceMgtPluginException.java +++ /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. - */ -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.exception; - - -public class VirtualFirealarmDeviceMgtPluginException extends Exception{ - - private String errorMessage; - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public VirtualFirealarmDeviceMgtPluginException(String msg, Exception nestedEx) { - super(msg, nestedEx); - setErrorMessage(msg); - } - - public VirtualFirealarmDeviceMgtPluginException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public VirtualFirealarmDeviceMgtPluginException(String msg) { - super(msg); - setErrorMessage(msg); - } - - public VirtualFirealarmDeviceMgtPluginException() { - super(); - } - - public VirtualFirealarmDeviceMgtPluginException(Throwable cause) { - super(cause); - } - -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFireAlarmUtils.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFireAlarmUtils.java deleted file mode 100644 index d9dbf9936..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFireAlarmUtils.java +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.impl; - -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.certificate.mgt.core.exception.KeystoreException; -import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementService; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException; -import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.constants.VirtualFireAlarmConstants; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.exception.VirtualFirealarmDeviceMgtPluginException; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.internal.VirtualFirealarmManagementDataHolder; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.mqtt.MqttConfig; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.xmpp.XmppConfig; -import org.wso2.carbon.event.input.adapter.core.InputEventAdapterConfiguration; -import org.wso2.carbon.event.input.adapter.core.MessageType; -import org.wso2.carbon.event.input.adapter.core.exception.InputEventAdapterException; -import org.json.JSONObject; - -import java.io.IOException; -import java.security.PublicKey; -import java.security.cert.X509Certificate; -import java.util.HashMap; -import java.util.Map; - -/** - * Contains utility methods used by FireAlarm plugin. - */ -public class VirtualFireAlarmUtils { - - private static Log log = LogFactory.getLog(VirtualFireAlarmUtils.class); - - public static void setupMqttInputAdapter() throws IOException { - if (!MqttConfig.getInstance().isEnabled()) { - return; - } - InputEventAdapterConfiguration inputEventAdapterConfiguration = - createMqttInputEventAdapterConfiguration(VirtualFireAlarmConstants.MQTT_ADAPTER_NAME, - VirtualFireAlarmConstants.MQTT_ADAPTER_TYPE, MessageType.TEXT); - try { - PrivilegedCarbonContext.startTenantFlow(); - PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain( - VirtualFireAlarmConstants.DEVICE_TYPE_PROVIDER_DOMAIN, true); - VirtualFirealarmManagementDataHolder.getInstance().getInputEventAdapterService() - .create(inputEventAdapterConfiguration, new VirtualFirealarmEventAdapterSubscription()); - } catch (InputEventAdapterException e) { - log.error("Unable to create Input Event Adapter : " + VirtualFireAlarmConstants.MQTT_ADAPTER_NAME, e); - } finally { - PrivilegedCarbonContext.endTenantFlow(); - } - } - - /** - * Create Output Event Adapter Configuration for given configuration. - * - * @param name Input Event Adapter name - * @param type Input Event Adapter type - * @param msgFormat Input Event Adapter message format - * @return InputEventAdapterConfiguration instance for given configuration - */ - private static InputEventAdapterConfiguration createMqttInputEventAdapterConfiguration(String name, String type, - String msgFormat) throws IOException { - InputEventAdapterConfiguration inputEventAdapterConfiguration = new InputEventAdapterConfiguration(); - inputEventAdapterConfiguration.setName(name); - inputEventAdapterConfiguration.setType(type); - inputEventAdapterConfiguration.setMessageFormat(msgFormat); - Map mqttAdapterProperties = new HashMap<>(); - mqttAdapterProperties.put(VirtualFireAlarmConstants.USERNAME_PROPERTY_KEY, MqttConfig.getInstance().getUsername()); - mqttAdapterProperties.put(VirtualFireAlarmConstants.DCR_PROPERTY_KEY, MqttConfig.getInstance().getDcrUrl()); - mqttAdapterProperties.put(VirtualFireAlarmConstants.BROKER_URL_PROPERTY_KEY, MqttConfig.getInstance().getUrl()); - mqttAdapterProperties.put(VirtualFireAlarmConstants.SCOPES_PROPERTY_KEY, MqttConfig.getInstance().getScopes()); - mqttAdapterProperties.put(VirtualFireAlarmConstants.CLEAR_SESSION_PROPERTY_KEY, MqttConfig.getInstance() - .getClearSession()); - mqttAdapterProperties.put(VirtualFireAlarmConstants.QOS_PROPERTY_KEY, MqttConfig.getInstance().getQos()); - mqttAdapterProperties.put(VirtualFireAlarmConstants.CLIENT_ID_PROPERTY_KEY, ""); - mqttAdapterProperties.put(VirtualFireAlarmConstants.TOPIC, VirtualFireAlarmConstants.SUBSCRIBED_TOPIC); - mqttAdapterProperties.put(VirtualFireAlarmConstants.CONTENT_TRANSFORMATION, - VirtualFirealarmMqttContentTransformer.class.getName()); - mqttAdapterProperties.put(VirtualFireAlarmConstants.CONTENT_VALIDATION, "default"); - mqttAdapterProperties.put(VirtualFireAlarmConstants.RESOURCE, "input-event"); - inputEventAdapterConfiguration.setProperties(mqttAdapterProperties); - - return inputEventAdapterConfiguration; - } - - public static String extractMessageFromPayload(String message, PublicKey verifySignatureKey) - throws VirtualFirealarmDeviceMgtPluginException { - String actualMessage; - - JSONObject jsonPayload = new JSONObject(message); - Object encodedMessage = jsonPayload.get(VirtualFireAlarmConstants.JSON_MESSAGE_KEY); - Object signedPayload = jsonPayload.get(VirtualFireAlarmConstants.JSON_SIGNATURE_KEY); - - if (encodedMessage != null && signedPayload != null) { - if (VirtualFirealarmSecurityManager.verifySignature( - encodedMessage.toString(), signedPayload.toString(), verifySignatureKey)) { - actualMessage = new String(Base64.decodeBase64(encodedMessage.toString())); - //VirtualFirealarmSecurityManager.decryptMessage(encryptedMessage.toString(), decryptionKey); - } else { - String errorMsg = "The message was not signed by a valid client. Could not verify signature on payload"; - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg); - } - } else { - String errorMsg = "The received message is in an INVALID format. " + - "Need to be JSON - {\"Msg\":\"\", \"Sig\":\"\"}."; - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg); - } - - return actualMessage; - } - - public static PublicKey getDevicePublicKey(String alias) throws VirtualFirealarmDeviceMgtPluginException { - PublicKey clientPublicKey; - try { - CertificateManagementService certificateManagementService = - VirtualFirealarmManagementDataHolder.getInstance().getCertificateManagementService(); - X509Certificate clientCertificate = (X509Certificate) certificateManagementService.getCertificateByAlias( - alias); - clientPublicKey = clientCertificate.getPublicKey(); - } catch (KeystoreException e) { - String errorMsg; - if (e.getMessage().contains("NULL_CERT")) { - errorMsg = "The Device-View page might have been accessed prior to the device being started."; - if(log.isDebugEnabled()){ - log.debug(errorMsg); - } - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } else { - errorMsg = "An error occurred whilst trying to retrieve certificate for alias [" + alias + - "] with alias: [" + alias + "]"; - if(log.isDebugEnabled()){ - log.debug(errorMsg); - } - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } - } - return clientPublicKey; - } - - public static boolean publishToDAS(String deviceId, float temperature) { - EventsPublisherService deviceAnalyticsService = - VirtualFirealarmManagementDataHolder.getInstance().getEventsPublisherService(); - if (deviceAnalyticsService != null) { - String owner = ""; - Object metdaData[] = {owner, VirtualFireAlarmConstants.DEVICE_TYPE, deviceId, System.currentTimeMillis()}; - Object payloadData[] = {temperature}; - try { - deviceAnalyticsService.publishEvent(VirtualFireAlarmConstants.TEMPERATURE_STREAM_DEFINITION, - "1.0.0", metdaData, new Object[0], payloadData); - } catch (DataPublisherConfigurationException e) { - return false; - } - return true; - } - return false; - } - - public static void setupXmppInputAdapter() throws IOException { - if (!XmppConfig.getInstance().isEnabled()) return; - InputEventAdapterConfiguration inputEventAdapterConfiguration = - createXmppInputEventAdapterConfiguration(VirtualFireAlarmConstants.XMPP_ADAPTER_NAME, - VirtualFireAlarmConstants.XMPP_ADAPTER_TYPE, MessageType.TEXT); - try { - PrivilegedCarbonContext.startTenantFlow(); - PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain( - VirtualFireAlarmConstants.DEVICE_TYPE_PROVIDER_DOMAIN, true); - VirtualFirealarmManagementDataHolder.getInstance().getInputEventAdapterService() - .create(inputEventAdapterConfiguration, new VirtualFirealarmEventAdapterSubscription()); - } catch (InputEventAdapterException e) { - log.error("Unable to create Input Event Adapter : " + VirtualFireAlarmConstants.MQTT_ADAPTER_NAME, e); - } finally { - PrivilegedCarbonContext.endTenantFlow(); - } - } - - /** - * Create Input Event Adapter Configuration for given configuration. - * - * @param name Input Event Adapter name - * @param type Input Event Adapter type - * @param msgFormat Input Event Adapter message format - * @return InputEventAdapterConfiguration instance for given configuration - */ - private static InputEventAdapterConfiguration createXmppInputEventAdapterConfiguration(String name, String type, - String msgFormat) throws IOException { - InputEventAdapterConfiguration inputEventAdapterConfiguration = new InputEventAdapterConfiguration(); - inputEventAdapterConfiguration.setName(name); - inputEventAdapterConfiguration.setType(type); - inputEventAdapterConfiguration.setMessageFormat(msgFormat); - Map xmppAdapterProperties = new HashMap<>(); - XmppConfig xmppConfig = XmppConfig.getInstance(); - xmppAdapterProperties.put(VirtualFireAlarmConstants.HOST_KEY, xmppConfig.getHost()); - xmppAdapterProperties.put(VirtualFireAlarmConstants.PORT_KEY, String.valueOf(xmppConfig.getPort())); - xmppAdapterProperties.put(VirtualFireAlarmConstants.USERNAME_PROPERTY_KEY, xmppConfig.getUsername()); - xmppAdapterProperties.put(VirtualFireAlarmConstants.PASSWORD_PROPERTY_KEY, xmppConfig.getPassword()); - xmppAdapterProperties.put(VirtualFireAlarmConstants.JID_PROPERTY_KEY, xmppConfig.getJid()); - xmppAdapterProperties.put(VirtualFireAlarmConstants.CONTENT_TRANSFORMATION, - VirtualFirealarmXmppContentTransformer.class.getName()); - xmppAdapterProperties.put(VirtualFireAlarmConstants.CONTENT_VALIDATION, "default"); - inputEventAdapterConfiguration.setProperties(xmppAdapterProperties); - return inputEventAdapterConfiguration; - } - -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmEventAdapterSubscription.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmEventAdapterSubscription.java deleted file mode 100644 index 89c977260..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmEventAdapterSubscription.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.impl; - -import org.wso2.carbon.event.input.adapter.core.InputEventAdapterSubscription; - -public class VirtualFirealarmEventAdapterSubscription implements InputEventAdapterSubscription { - - @Override - public void onEvent(Object o) { - String msg = (String) o; - if (msg != null && !msg.isEmpty()) { - String[] messages = (msg).split(","); - String deviceId = messages[0]; - String actualMessage = messages[1]; - if (actualMessage.contains("PUBLISHER")) { - float temperature = Float.parseFloat(actualMessage.split(":")[2]); - VirtualFireAlarmUtils.publishToDAS(deviceId, temperature); - } else { - float temperature = Float.parseFloat(actualMessage.split(":")[1]); - VirtualFireAlarmUtils.publishToDAS(deviceId, temperature); - } - } - } -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmMqttContentTransformer.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmMqttContentTransformer.java deleted file mode 100644 index bf42dd578..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmMqttContentTransformer.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.impl; - -import org.json.JSONObject; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.constants.VirtualFireAlarmConstants; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.exception.VirtualFirealarmDeviceMgtPluginException; - -import java.security.PublicKey; -import java.util.Map; - -public class VirtualFirealarmMqttContentTransformer implements ContentTransformer { - - @Override - public Object transform(Object message, Map dynamicProperties) { - String topic = (String) dynamicProperties.get("topic"); - String[] topicParams = topic.split("/"); - String tenantDomain = topicParams[0]; - String deviceId = topicParams[2]; - JSONObject jsonPayload = new JSONObject((String) message); - try { - PrivilegedCarbonContext.startTenantFlow(); - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - ctx.setTenantDomain(tenantDomain, true); - Integer serialNo = (Integer) jsonPayload.get(VirtualFireAlarmConstants.JSON_SERIAL_KEY); - // the hash-code of the deviceId is used as the alias for device certificates during SCEP enrollment. - // hence, the same is used here to fetch the device-specific-certificate from the key store. - PublicKey clientPublicKey = VirtualFireAlarmUtils.getDevicePublicKey("" + serialNo); - - // the MQTT-messages from VirtualFireAlarm devices are in the form {"Msg":, "Sig":} - String actualMessage = VirtualFireAlarmUtils.extractMessageFromPayload((String) message, clientPublicKey); - return deviceId + "," + actualMessage; - } catch (VirtualFirealarmDeviceMgtPluginException e) { - return ""; - } finally { - PrivilegedCarbonContext.endTenantFlow(); - } - } -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmSecurityManager.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmSecurityManager.java deleted file mode 100644 index f7b19fdce..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmSecurityManager.java +++ /dev/null @@ -1,256 +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. - */ - -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.impl; - -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.certificate.mgt.core.config.CertificateConfigurationManager; -import org.wso2.carbon.certificate.mgt.core.config.CertificateKeystoreConfig; -import org.wso2.carbon.certificate.mgt.core.exception.CertificateManagementException; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.exception.VirtualFirealarmDeviceMgtPluginException; - -import javax.crypto.BadPaddingException; -import javax.crypto.Cipher; -import javax.crypto.IllegalBlockSizeException; -import javax.crypto.NoSuchPaddingException; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.security.InvalidKeyException; -import java.security.Key; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.Signature; -import java.security.SignatureException; -import java.security.UnrecoverableKeyException; -import java.security.cert.CertificateException; - -public class VirtualFirealarmSecurityManager { - private static final Log log = LogFactory.getLog(VirtualFirealarmSecurityManager.class); - - private static PrivateKey serverPrivateKey; - private static final String SHA_512 = "SHA-512"; - private static final String CIPHER_PADDING = "RSA/ECB/PKCS1Padding"; - private static CertificateKeystoreConfig certificateKeystoreConfig; - private VirtualFirealarmSecurityManager() { - - } - - private static CertificateKeystoreConfig getCertKeyStoreConfig() throws CertificateManagementException { - if (certificateKeystoreConfig == null) { - certificateKeystoreConfig = CertificateConfigurationManager.getInstance().getCertificateKeyStoreConfig(); - } - return certificateKeystoreConfig; - } - - public static void initVerificationManager() { - serverPrivateKey = retrievePrivateKey(); - } - - public static PrivateKey retrievePrivateKey() { - PrivateKey privateKey = null; - InputStream inputStream = null; - KeyStore keyStore; - try { - CertificateKeystoreConfig certificateKeystoreConfig = getCertKeyStoreConfig(); - keyStore = KeyStore.getInstance(certificateKeystoreConfig.getCertificateKeystoreType()); - inputStream = new FileInputStream(certificateKeystoreConfig.getCertificateKeystoreLocation()); - - keyStore.load(inputStream, certificateKeystoreConfig.getCertificateKeystorePassword().toCharArray()); - - privateKey = (PrivateKey) (keyStore.getKey(certificateKeystoreConfig.getCACertAlias(), - certificateKeystoreConfig.getCAPrivateKeyPassword().toCharArray())); - - } catch (KeyStoreException e) { - String errorMsg = "Could not load KeyStore of given type in [certificate-config.xml] file." ; - log.error(errorMsg, e); - } catch (FileNotFoundException e) { - String errorMsg = "KeyStore file could not be loaded from path given in [certificate-config.xml] file."; - log.error(errorMsg, e); - } catch (NoSuchAlgorithmException e) { - String errorMsg = "Algorithm not found when loading KeyStore"; - log.error(errorMsg, e); - } catch (CertificateException e) { - String errorMsg = "CertificateException when loading KeyStore"; - log.error(errorMsg, e); - } catch (IOException e) { - String errorMsg = "Input output issue occurred when loading KeyStore"; - log.error(errorMsg, e); - } catch (UnrecoverableKeyException e) { - String errorMsg = "Key is unrecoverable when retrieving CA private key"; - log.error(errorMsg, e); - } catch (CertificateManagementException e) { - String errorMsg = "Failed to load the certificate"; - log.error(errorMsg, e); - } finally { - try { - if (inputStream != null) { - inputStream.close(); - } - } catch (IOException e) { - log.error("Error closing KeyStore input stream", e); - } - } - - return privateKey; - } - - public static PrivateKey getServerPrivateKey() { - return serverPrivateKey; - } - - public static String encryptMessage(String message, Key encryptionKey) throws - VirtualFirealarmDeviceMgtPluginException { - Cipher encrypter; - byte[] cipherData; - - try { - encrypter = Cipher.getInstance(CIPHER_PADDING); - encrypter.init(Cipher.ENCRYPT_MODE, encryptionKey); - cipherData = encrypter.doFinal(message.getBytes(StandardCharsets.UTF_8)); - - } catch (NoSuchAlgorithmException e) { - String errorMsg = "Algorithm not found exception occurred for Cipher instance of [" + CIPHER_PADDING + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (NoSuchPaddingException e) { - String errorMsg = "No Padding error occurred for Cipher instance of [" + CIPHER_PADDING + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (InvalidKeyException e) { - String errorMsg = "InvalidKey exception occurred for encryptionKey \n[\n" + encryptionKey + "\n]\n"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (BadPaddingException e) { - String errorMsg = "Bad Padding error occurred for Cipher instance of [" + CIPHER_PADDING + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (IllegalBlockSizeException e) { - String errorMsg = "Illegal blockSize error occurred for Cipher instance of [" + CIPHER_PADDING + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } - - return Base64.encodeBase64String(cipherData); - } - - public static String signMessage(String encryptedData, PrivateKey signatureKey) throws VirtualFirealarmDeviceMgtPluginException { - - Signature signature; - String signedEncodedString; - - try { - signature = Signature.getInstance(SHA_512); - signature.initSign(signatureKey); - signature.update(Base64.decodeBase64(encryptedData)); - - byte[] signatureBytes = signature.sign(); - signedEncodedString = Base64.encodeBase64String(signatureBytes); - - } catch (NoSuchAlgorithmException e) { - String errorMsg = "Algorithm not found exception occurred for Signature instance of [" + SHA_512 + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (SignatureException e) { - String errorMsg = "Signature exception occurred for Signature instance of [" + SHA_512 + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (InvalidKeyException e) { - String errorMsg = "InvalidKey exception occurred for signatureKey \n[\n" + signatureKey + "\n]\n"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } - - return signedEncodedString; - } - - public static boolean verifySignature(String data, String signedData, PublicKey verificationKey) - throws VirtualFirealarmDeviceMgtPluginException { - - Signature signature; - boolean verified; - - try { - signature = Signature.getInstance(SHA_512); - signature.initVerify(verificationKey); - signature.update(Base64.decodeBase64(data)); - - verified = signature.verify(Base64.decodeBase64(signedData)); - - } catch (NoSuchAlgorithmException e) { - String errorMsg = "Algorithm not found exception occurred for Signature instance of [" + SHA_512 + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (SignatureException e) { - String errorMsg = "Signature exception occurred for Signature instance of [" + SHA_512 + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (InvalidKeyException e) { - String errorMsg = "InvalidKey exception occurred for signatureKey \n[\n" + verificationKey + "\n]\n"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } - - return verified; - } - - public static String decryptMessage(String encryptedMessage, Key decryptKey) throws VirtualFirealarmDeviceMgtPluginException { - - Cipher decrypter; - String decryptedMessage; - - try { - - decrypter = Cipher.getInstance(CIPHER_PADDING); - decrypter.init(Cipher.DECRYPT_MODE, decryptKey); - decryptedMessage = new String(decrypter.doFinal(Base64.decodeBase64(encryptedMessage)), StandardCharsets.UTF_8); - - } catch (NoSuchAlgorithmException e) { - String errorMsg = "Algorithm not found exception occurred for Cipher instance of [" + CIPHER_PADDING + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (NoSuchPaddingException e) { - String errorMsg = "No Padding error occurred for Cipher instance of [" + CIPHER_PADDING + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (InvalidKeyException e) { - String errorMsg = "InvalidKey exception occurred for encryptionKey \n[\n" + decryptKey + "\n]\n"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (BadPaddingException e) { - String errorMsg = "Bad Padding error occurred for Cipher instance of [" + CIPHER_PADDING + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } catch (IllegalBlockSizeException e) { - String errorMsg = "Illegal blockSize error occurred for Cipher instance of [" + CIPHER_PADDING + "]"; - log.error(errorMsg); - throw new VirtualFirealarmDeviceMgtPluginException(errorMsg, e); - } - - return decryptedMessage; - } - - -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmStartupListener.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmStartupListener.java deleted file mode 100644 index 70dbcc7d9..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmStartupListener.java +++ /dev/null @@ -1,46 +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. - */ - -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.impl; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.core.ServerStartupObserver; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.internal.VirtualFirealarmManagementDataHolder; - -import java.io.IOException; - -public class VirtualFirealarmStartupListener implements ServerStartupObserver { - private static final Log log = LogFactory.getLog(VirtualFirealarmStartupListener.class); - - @Override - public void completingServerStartup() { - } - - @Override - public void completedServerStartup() { - try { - VirtualFireAlarmUtils.setupMqttInputAdapter(); - VirtualFireAlarmUtils.setupXmppInputAdapter(); - VirtualFirealarmManagementDataHolder.getInstance().getInputEventAdapterService().start(); - } catch (IOException e) { - log.error("Failed to intilaize the virtual firealarm input adapter", e); - } - } - -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmXmppContentTransformer.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmXmppContentTransformer.java deleted file mode 100644 index 20ae77f46..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmXmppContentTransformer.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.impl; - -import org.json.JSONObject; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.constants.VirtualFireAlarmConstants; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.exception.VirtualFirealarmDeviceMgtPluginException; - -import java.security.PublicKey; -import java.util.Map; - -public class VirtualFirealarmXmppContentTransformer implements ContentTransformer { - - @Override - public Object transform(Object message, Map dynamicProperties) { - String from = (String) dynamicProperties.get("from"); - String subject = (String) dynamicProperties.get("subject"); - - int indexOfAt = from.indexOf("@"); - int indexOfSlash = from.indexOf("/"); - - if (indexOfAt != -1 && indexOfSlash != -1) { - String deviceId = from.substring(0, indexOfAt); - JSONObject jsonPayload = new JSONObject((String) message); - try { - PrivilegedCarbonContext.startTenantFlow(); - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - ctx.setTenantDomain(subject, true); - Integer serialNo = (Integer) jsonPayload.get(VirtualFireAlarmConstants.JSON_SERIAL_KEY); - // the hash-code of the deviceId is used as the alias for device certificates during SCEP enrollment. - // hence, the same is used here to fetch the device-specific-certificate from the key store. - PublicKey clientPublicKey = VirtualFireAlarmUtils.getDevicePublicKey("" + serialNo); - - // the MQTT-messages from VirtualFireAlarm devices are in the form {"Msg":, "Sig":} - String actualMessage = VirtualFireAlarmUtils.extractMessageFromPayload((String) message, - clientPublicKey); - return deviceId + "," + actualMessage; - } catch (VirtualFirealarmDeviceMgtPluginException e) { - return ""; - } finally { - PrivilegedCarbonContext.endTenantFlow(); - } - } - return ""; - } -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementDataHolder.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementDataHolder.java deleted file mode 100644 index 9fc9111fb..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementDataHolder.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * you may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.internal; - -import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementService; -import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService; -import org.wso2.carbon.event.input.adapter.core.InputEventAdapterService; - -/** - * DataHolder class of virtual firealarm plugins component. - */ -public class VirtualFirealarmManagementDataHolder { - - private InputEventAdapterService inputEventAdapterService; - private EventsPublisherService eventsPublisherService; - private CertificateManagementService certificateManagementService; - - private static VirtualFirealarmManagementDataHolder thisInstance = new VirtualFirealarmManagementDataHolder(); - - private VirtualFirealarmManagementDataHolder() { - } - - public static VirtualFirealarmManagementDataHolder getInstance() { - return thisInstance; - } - - public InputEventAdapterService getInputEventAdapterService() { - return inputEventAdapterService; - } - - public void setInputEventAdapterService(InputEventAdapterService inputEventAdapterService) { - this.inputEventAdapterService = inputEventAdapterService; - } - - public EventsPublisherService getEventsPublisherService() { - return eventsPublisherService; - } - - public void setEventsPublisherService( - EventsPublisherService eventsPublisherService) { - this.eventsPublisherService = eventsPublisherService; - } - - public CertificateManagementService getCertificateManagementService() { - return certificateManagementService; - } - - public void setCertificateManagementService(CertificateManagementService certificateManagementService) { - this.certificateManagementService = certificateManagementService; - } -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementServiceComponent.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementServiceComponent.java deleted file mode 100644 index 6a1e8c4bf..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementServiceComponent.java +++ /dev/null @@ -1,117 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you under the Apache License, -* Version 2.0 (the "License"); you may not use this file except -* in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, -* software distributed under the License is distributed on an -* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -* KIND, either express or implied. See the License for the -* specific language governing permissions and limitations -* under the License. -*/ - -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.internal; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.osgi.service.component.ComponentContext; -import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementService; -import org.wso2.carbon.core.ServerStartupObserver; -import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config.VirtualFirealarmConfig; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.impl.VirtualFirealarmSecurityManager; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.impl.VirtualFirealarmStartupListener; -import org.wso2.carbon.event.input.adapter.core.InputEventAdapterService; - -/** - * @scr.component name="org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.internal - * .VirtualFirealarmManagementServiceComponent" - * immediate="true" - * @scr.reference name="event.input.adapter.service" - * interface="org.wso2.carbon.event.input.adapter.core.InputEventAdapterService" - * cardinality="1..1" - * policy="dynamic" - * bind="setInputEventAdapterService" - * unbind="unsetInputEventAdapterService" - * @scr.reference name="certificate.management.service" - * interface="org.wso2.carbon.certificate.mgt.core.service.CertificateManagementService" - * cardinality="1..1" - * policy="dynamic" - * bind="setCertificateManagementService" - * unbind="unsetCertificateManagementService" - * @scr.reference name="event.publisher.service" - * interface="org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService" - * cardinality="1..1" - * policy="dynamic" - * bind="setEventsPublisherService" - * unbind="unsetEventsPublisherService" - */ -public class VirtualFirealarmManagementServiceComponent { - - private static final Log log = LogFactory.getLog(VirtualFirealarmManagementServiceComponent.class); - private ServiceRegistration firealarmServiceRegRef; - - protected void activate(ComponentContext ctx) { - if (log.isDebugEnabled()) { - log.debug("Activating Virtual Firealarm Device Management Service Component"); - } - try { - VirtualFirealarmConfig.initialize(); - BundleContext bundleContext = ctx.getBundleContext(); - bundleContext.registerService(ServerStartupObserver.class.getName(), new VirtualFirealarmStartupListener(), - null); - if (log.isDebugEnabled()) { - log.debug("Virtual Firealarm Device Management Service Component has been successfully activated"); - } - VirtualFirealarmSecurityManager.initVerificationManager(); - } catch (Throwable e) { - log.error("Error occurred while activating Virtual Firealarm Device Management Service Component", e); - } - } - - protected void deactivate(ComponentContext ctx) { - if (log.isDebugEnabled()) { - log.debug("De-activating Virtual Firealarm Device Management Service Component"); - } - } - - /** - * Initialize the Input EventAdapter Service dependency - * - * @param inputEventAdapterService Input EventAdapter Service reference - */ - protected void setInputEventAdapterService(InputEventAdapterService inputEventAdapterService) { - VirtualFirealarmManagementDataHolder.getInstance().setInputEventAdapterService(inputEventAdapterService); - } - - /** - * De-reference the Input EventAdapter Service dependency. - */ - protected void unsetInputEventAdapterService(InputEventAdapterService inputEventAdapterService) { - VirtualFirealarmManagementDataHolder.getInstance().setInputEventAdapterService(null); - } - - protected void setCertificateManagementService(CertificateManagementService certificateManagementService) { - VirtualFirealarmManagementDataHolder.getInstance().setCertificateManagementService(certificateManagementService); - } - - protected void unsetCertificateManagementService(CertificateManagementService certificateManagementService) { - VirtualFirealarmManagementDataHolder.getInstance().setCertificateManagementService(null); - } - - protected void setEventsPublisherService(EventsPublisherService eventsPublisherService) { - VirtualFirealarmManagementDataHolder.getInstance().setEventsPublisherService(eventsPublisherService); - } - - protected void unsetEventsPublisherService(EventsPublisherService eventsPublisherService) { - VirtualFirealarmManagementDataHolder.getInstance().setEventsPublisherService(null); - } -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/mqtt/MqttConfig.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/mqtt/MqttConfig.java deleted file mode 100644 index e47ac11ea..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/mqtt/MqttConfig.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.mqtt; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config.DeviceManagementConfiguration; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config.EventListenerConfiguration; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config.VirtualFirealarmConfig; - -import java.util.List; - -public class MqttConfig { - - private static MqttConfig mqttConfig = new MqttConfig(); - private static final Log log = LogFactory.getLog(MqttConfig.class); - - private boolean enabled; - private String url; - private String username; - private String dcrUrl; - private String qos; - private String scopes; - private String clearSession; - - private MqttConfig() { - DeviceManagementConfiguration deviceManagementConfiguration = VirtualFirealarmConfig.getInstance() - .getDeviceTypeConfiguration(); - List properties = deviceManagementConfiguration - .getEventListenerConfiguration().getProperties(); - String provider = deviceManagementConfiguration.getEventListenerConfiguration().getEventListenerProvider(); - if (provider.equals("MQTT")) { - enabled = true; - } - if (enabled) { - for (EventListenerConfiguration.Property property : properties) { - switch (property.getName()) { - case "url": - url = property.getValue(); - break; - case "username": - username = property.getValue(); - break; - case "dcrUrl": - dcrUrl = property.getValue(); - break; - case "qos": - qos = property.getValue(); - break; - case "scopes": - scopes = property.getValue(); - break; - case "clearSession": - clearSession = property.getValue(); - break; - } - } - } - } - - public static MqttConfig getInstance() { - return mqttConfig; - } - - public boolean isEnabled() { - return enabled; - } - - public String getUrl() { - return url; - } - - public String getUsername() { - return username; - } - - public String getDcrUrl() { - return dcrUrl; - } - - public String getQos() { - return qos; - } - - public String getScopes() { - return scopes; - } - - public String getClearSession() { - return clearSession; - } -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppAccount.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppAccount.java deleted file mode 100644 index f8239a8d9..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppAccount.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.xmpp; - -/** - * holds the information related to account that needs to be created on xmpp server. - */ -public class XmppAccount { - - private String username; - private String password; - private String accountName; - private String email; - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getAccountName() { - return accountName; - } - - public void setAccountName(String accountName) { - this.accountName = accountName; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppConfig.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppConfig.java deleted file mode 100644 index d600b3a82..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppConfig.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.xmpp; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config.DeviceManagementConfiguration; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config.EventListenerConfiguration; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.config.VirtualFirealarmConfig; - -import java.util.List; - -public class XmppConfig { - - private String host; - private int port; - private String username; - private String password; - private String serverName; - private boolean enabled; - private String jid; - private static XmppConfig xmppConfig = new XmppConfig(); - private static final Log log = LogFactory.getLog(XmppConfig.class); - - private XmppConfig() { - DeviceManagementConfiguration deviceManagementConfiguration = VirtualFirealarmConfig.getInstance() - .getDeviceTypeConfiguration(); - List properties = deviceManagementConfiguration.getEventListenerConfiguration() - .getProperties(); - String provider = deviceManagementConfiguration.getEventListenerConfiguration().getEventListenerProvider(); - if ("XMPP".equals(provider)) { - enabled = true; - } - if (enabled) { - for (EventListenerConfiguration.Property property : properties) { - switch (property.getName()) { - case "host": - host = property.getValue(); - break; - case "port": - port = Integer.parseInt(property.getValue()); - break; - case "username": - username = property.getValue(); - break; - case "password": - password = property.getValue(); - break; - case "server.name": - serverName = property.getValue(); - break; - case "jid": - jid = property.getValue(); - break; - - } - } - } - } - - public static XmppConfig getInstance() { - return xmppConfig; - } - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getServerName() { - return serverName; - } - - public void setServerName(String serverName) { - this.serverName = serverName; - } - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - public String getJid() { - return jid; - } - - public void setJid(String jid) { - this.jid = jid; - } -} diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppServerClient.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppServerClient.java deleted file mode 100644 index cdbcb87dd..000000000 --- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppServerClient.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.xmpp; - -import org.jivesoftware.smack.AccountManager; -import org.jivesoftware.smack.ConnectionConfiguration; -import org.jivesoftware.smack.XMPPConnection; -import org.jivesoftware.smack.XMPPException; -import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.exception.VirtualFirealarmDeviceMgtPluginException; - -import java.util.HashMap; -import java.util.Map; - -public class XmppServerClient { - - public static boolean createAccount(XmppAccount xmppAccount) throws VirtualFirealarmDeviceMgtPluginException { - if (XmppConfig.getInstance().isEnabled()) { - if (xmppAccount != null) { - try { - ConnectionConfiguration config = new ConnectionConfiguration(XmppConfig.getInstance().getHost(), - XmppConfig.getInstance().getPort(), - "Accounts"); - XMPPConnection xmppConnection = new XMPPConnection(config); - xmppConnection.connect(); - xmppConnection.login(XmppConfig.getInstance().getUsername(), XmppConfig.getInstance().getPassword()); - AccountManager accountManager = xmppConnection.getAccountManager(); - Map attributes = new HashMap<>(); - attributes.put("username", xmppAccount.getUsername()); - attributes.put("password", xmppAccount.getPassword()); - attributes.put("email", xmppAccount.getEmail()); - attributes.put("name", xmppAccount.getAccountName()); - accountManager.createAccount(xmppAccount.getUsername(), xmppAccount.getPassword(), attributes); - xmppConnection.disconnect(); - return true; - } catch (XMPPException e) { - if (e.getXMPPError().getCode() == 409) { - //AccountAlreadyExist - return true; - } else { - throw new VirtualFirealarmDeviceMgtPluginException( - "XMPP account creation failed. Error: " + e.getLocalizedMessage(), e); - } - } - } else { - throw new VirtualFirealarmDeviceMgtPluginException("Invalid XMPP attributes"); - } - } else { - return true; - } - } -} From fe338aa412d4543b81c25b1a44f5d63701537387 Mon Sep 17 00:00:00 2001 From: kamidu Date: Fri, 3 Feb 2017 17:20:25 +0530 Subject: [PATCH 08/11] removing the module vfa plugin --- components/device-types/virtual-fire-alarm-plugin/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/components/device-types/virtual-fire-alarm-plugin/pom.xml b/components/device-types/virtual-fire-alarm-plugin/pom.xml index fb2d41e22..935d73e49 100644 --- a/components/device-types/virtual-fire-alarm-plugin/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/pom.xml @@ -33,7 +33,6 @@ http://wso2.org - org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl From edb8e71ac2917dd49ae2d38b512f680f9634e0ca Mon Sep 17 00:00:00 2001 From: lakshani Date: Tue, 7 Feb 2017 10:38:12 +0530 Subject: [PATCH 09/11] Added change device status feature to mobile plugings --- .../device-view.hbs | 44 +++++++++++--- .../device-view.js | 3 + .../public/js/device-detail.js | 56 ++++++++++++++++++ .../device-view.hbs | 44 +++++++++++--- .../device-view.js | 3 + .../public/js/device-detail.js | 59 ++++++++++++++++++- 6 files changed, 191 insertions(+), 18 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.hbs b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.hbs index ca9efda9d..4b2dfe84a 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.hbs +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.hbs @@ -1,4 +1,5 @@ {{unit "cdmf.unit.device.type.android.leaflet"}} +{{unit "cdmf.unit.lib.editable"}} {{unit "cdmf.unit.lib.qrcode"}} {{unit "cdmf.unit.device.type.qr-modal"}} @@ -51,14 +52,41 @@ Status - {{#equal device.status "ACTIVE"}}Active{{/equal}} - {{#equal device.status "INACTIVE"}}Inactive{{/equal}} - {{#equal device.status "BLOCKED"}}Blocked{{/equal}} - {{#equal device.status "REMOVED"}}Removed{{/equal}} + {{#if permissions.CHANGE_DEVICE_STATUS}} + {{#equal device.status "ACTIVE"}} + + {{/equal}} + {{#equal device.status "INACTIVE"}} + + {{/equal}} + {{#equal device.status "BLOCKED"}} + + {{/equal}} + {{#equal device.status "REMOVED"}} + + {{/equal}} + {{else}} + {{#equal device.status "ACTIVE"}} Active{{/equal}} + {{#equal device.status "INACTIVE"}} Inactive{{/equal}} + {{#equal device.status "BLOCKED"}} Blocked{{/equal}} + {{#equal device.status "REMOVED"}} Removed{{/equal}} + {{/if}} {{/if}} diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.js b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.js index a5816da5b..0a0bba6ba 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.js +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.js @@ -210,7 +210,10 @@ function onRequest(context) { {"name" : "deviceId", "value" : deviceId} ]; + var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; + var permissions = userModule.getUIPermissions(); deviceViewData["autoCompleteParams"] = autoCompleteParams; + deviceViewData["permissions"] = permissions; deviceViewData["portalUrl"] = devicemgtProps['portalURL']; deviceViewData["anchor"] = encodeURI(JSON.stringify({ "device" : { "id" : deviceId, "type" : deviceType}})); diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/device-detail.js b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/device-detail.js index 449dec84c..c628f1260 100755 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/device-detail.js +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/device-detail.js @@ -81,6 +81,62 @@ var InitiateViewOption = null; } }); + $('#status').on('save', function (e, params) { + var deviceStatus = params.submitValue.toUpperCase(); + var serviceUrl = "/api/device-mgt/v1.0/devices/" + deviceType + "/" + deviceIdentifier + + "/changestatus?newStatus=" + deviceStatus; + var payload = null; + + if (serviceUrl) { + var successCallback = function (jqXHR, status, resp) { + if (resp.status == 200) { + setTimeout(function () { + if (deviceStatus == "REMOVED") { + $('#statusIcon').removeClass().addClass('fw fw-delete icon-danger'); + } else if (deviceStatus == "INACTIVE") { + $('#statusIcon').removeClass().addClass('fw fw-warning icon-warning'); + } else if (deviceStatus == "ACTIVE") { + $('#statusIcon').removeClass().addClass('fw fw-success icon-success'); + } + $("#statusIcon").show(); + + }, 1500); + } else { + console.log(resp.status); + } + }; + + invokerUtil.put(serviceUrl, payload, + successCallback, function (message) { + console.log(message); + }); + } + + }); + + $("#status").click(function () { + $("#statusIcon").hide(); + }); + + $.fn.editable.defaults.mode = 'inline'; + + $('#status').editable({ + value: $('#status').attr("selectedValue"), + source: [ + {value: 'Active', text: 'Active'}, + {value: "Inactive", text: 'Inactive'}, + {value: "Removed", text: 'Removed'} + ], + success: this.update_elements + }); + + $.fn.editableform.buttons = + '' + + ''; function positionArrow(selectedTab) { var selectedTabHeight = $(selectedTab).innerHeight(); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs index 3e999e40d..046a5ae15 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs @@ -1,4 +1,5 @@ {{unit "cdmf.unit.device.type.windows.leaflet"}} +{{unit "cdmf.unit.lib.editable"}} {{unit "cdmf.unit.lib.qrcode"}} {{unit "cdmf.unit.device.type.qr-modal"}} @@ -51,14 +52,41 @@ Status - {{#equal device.status "ACTIVE"}}Active{{/equal}} - {{#equal device.status "INACTIVE"}}Inactive{{/equal}} - {{#equal device.status "BLOCKED"}}Blocked{{/equal}} - {{#equal device.status "REMOVED"}}Removed{{/equal}} + {{#if permissions.CHANGE_DEVICE_STATUS}} + {{#equal device.status "ACTIVE"}} + + {{/equal}} + {{#equal device.status "INACTIVE"}} + + {{/equal}} + {{#equal device.status "BLOCKED"}} + + {{/equal}} + {{#equal device.status "REMOVED"}} + + {{/equal}} + {{else}} + {{#equal device.status "ACTIVE"}} Active{{/equal}} + {{#equal device.status "INACTIVE"}} Inactive{{/equal}} + {{#equal device.status "BLOCKED"}} Blocked{{/equal}} + {{#equal device.status "REMOVED"}} Removed{{/equal}} + {{/if}} {{/if}} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js index c5e0619f7..b363aa2ec 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js @@ -112,6 +112,9 @@ function onRequest(context) { {"name" : "deviceId", "value" : deviceId} ]; + var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; + var permissions = userModule.getUIPermissions(); deviceViewData["autoCompleteParams"] = autoCompleteParams; + deviceViewData["permissions"] = permissions; return deviceViewData; } \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js index 0e2375033..ac2a06be8 100755 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js @@ -69,8 +69,7 @@ var InitiateViewOption = null; activeTabPaneCaret.removeClass("fw-up").addClass("fw-down"); activeTabPaneCaretSiblings.removeClass("fw-down").addClass("fw-up"); }); - - + $('.media.tab-responsive a[data-toggle="collapse"]').on('click',function(){ var clickedPanel = $(this).attr('href'); @@ -81,6 +80,62 @@ var InitiateViewOption = null; } }); + $('#status').on('save', function (e, params) { + var deviceStatus = params.submitValue.toUpperCase(); + var serviceUrl = "/api/device-mgt/v1.0/devices/" + deviceType + "/" + deviceIdentifier + + "/changestatus?newStatus=" + deviceStatus; + var payload = null; + + if (serviceUrl) { + var successCallback = function (jqXHR, status, resp) { + if (resp.status == 200) { + setTimeout(function () { + if (deviceStatus == "REMOVED") { + $('#statusIcon').removeClass().addClass('fw fw-delete icon-danger'); + } else if (deviceStatus == "INACTIVE") { + $('#statusIcon').removeClass().addClass('fw fw-warning icon-warning'); + } else if (deviceStatus == "ACTIVE") { + $('#statusIcon').removeClass().addClass('fw fw-success icon-success'); + } + $("#statusIcon").show(); + + }, 1500); + } else { + console.log(resp.status); + } + }; + + invokerUtil.put(serviceUrl, payload, + successCallback, function (message) { + console.log(message); + }); + } + + }); + + $("#status").click(function () { + $("#statusIcon").hide(); + }); + + $.fn.editable.defaults.mode = 'inline'; + + $('#status').editable({ + value: $('#status').attr("selectedValue"), + source: [ + {value: 'Active', text: 'Active'}, + {value: "Inactive", text: 'Inactive'}, + {value: "Removed", text: 'Removed'} + ], + success: this.update_elements + }); + + $.fn.editableform.buttons = + '' + + ''; function positionArrow(selectedTab) { var selectedTabHeight = $(selectedTab).innerHeight(); From 3c349a71e67a8ac682114ddf2484731aae474d3c Mon Sep 17 00:00:00 2001 From: lakshani Date: Tue, 7 Feb 2017 10:42:28 +0530 Subject: [PATCH 10/11] removed unwanted repositories from restconnector --- .../pom.xml | 23 ------------------- pom.xml | 2 +- 2 files changed, 1 insertion(+), 24 deletions(-) diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml index a9b34ac34..95489a87c 100644 --- a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml +++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml @@ -27,29 +27,6 @@ bundle WSO2 Carbon - App Manager WSO2 MDM REST Connector Component http://maven.apache.org - - - wso2-maven2-repository - WSO2 Maven2 Repository - http://dist.wso2.org/maven2/ - - - wso2-maven2-snapshot-repository - WSO2 Maven2 Snapshot Repository - http://dist.wso2.org/snapshots/maven2/ - - - wso2-nexus - WSO2 internal Repository - http://maven.wso2.org/nexus/content/groups/wso2-public/ - - true - daily - ignore - - - - diff --git a/pom.xml b/pom.xml index e46da6005..183f2b19f 100644 --- a/pom.xml +++ b/pom.xml @@ -1244,7 +1244,7 @@ 1.1.1 - 2.0.13 + 2.0.17 [2.0.0, 3.0.0) From 16f6bda20a875f00e6e37c7ae37d07b4678d3d5f Mon Sep 17 00:00:00 2001 From: savi_wso2 Date: Thu, 9 Feb 2017 15:59:47 +0530 Subject: [PATCH 11/11] Bug fixes on Raspberry Pi agent --- .../resources/agent/Adafruit_Python_DHT.zip | Bin 0 -> 127572 bytes .../main/resources/agent/RaspberryService.sh | 22 +----------------- .../resources/agent/src/RaspberryAgent.py | 6 +++-- .../main/resources/agent/src/mqttConnector.py | 5 +++- .../src/main/resources/agent/startService.sh | 11 +++++++++ 5 files changed, 20 insertions(+), 24 deletions(-) create mode 100644 features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/Adafruit_Python_DHT.zip diff --git a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/Adafruit_Python_DHT.zip b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/Adafruit_Python_DHT.zip new file mode 100644 index 0000000000000000000000000000000000000000..bff9920cf1cca051628f9f2e3743052aa828a9db GIT binary patch literal 127572 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 literal 0 HcmV?d00001 diff --git a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/RaspberryService.sh b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/RaspberryService.sh index e32907e54..114226790 100644 --- a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/RaspberryService.sh +++ b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/RaspberryService.sh @@ -1,23 +1,3 @@ -#""" -#/** -#* 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. -#**/ -#""" - #!/bin/sh ### BEGIN INIT INFO @@ -35,7 +15,7 @@ DESC="This service is used to publish events from the Raspberry Pi to the WSO2 D NAME=RaspberryStats DIR=/usr/local/src/RaspberryAgent/src/ -DAEMON=$DIR/RaspberryAgent.py +DAEMON=python $DIR/RaspberryAgent.py DAEMON_NAME=$NAME SCRIPTNAME=RaspberryService.sh diff --git a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryAgent.py b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryAgent.py index 7b4afed5b..759a0b6c9 100644 --- a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryAgent.py +++ b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryAgent.py @@ -23,6 +23,7 @@ import logging, logging.handlers import sys, os, signal, argparse import running_mode import time, threading, datetime, calendar +import iotUtils, mqttConnector, Adafruit_DHT, httpServer # import httplib, ssl # from functools import wraps @@ -40,7 +41,7 @@ import time, threading, datetime, calendar # return bar # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -PUSH_INTERVAL = 5000 # time interval between successive data pushes in seconds +PUSH_INTERVAL = 2 # time interval between successive data pushes in seconds # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -82,7 +83,7 @@ if args.mode: running_mode.RUNNING_MODE = args.mode iotUtils = __import__('iotUtils') mqttConnector = __import__('mqttConnector') - # httpServer = __import__('httpServer') # python script used to start a http-server to listen for operations + httpServer = __import__('httpServer') # python script used to start a http-server to listen for operations # (includes the TEMPERATURE global variable) if running_mode.RUNNING_MODE == 'N': @@ -329,6 +330,7 @@ def main(): # ListenHTTPServerThread() # starts an HTTP Server that listens for operational commands to switch ON/OFF Led SubscribeToMQTTQueue() # connects and subscribes to an MQTT Queue that receives MQTT commands from the server TemperatureReaderThread() # initiates and runs the thread to continuously read temperature from DHT Sensor + # time.sleep(2) #wait for agent to connect to broker before publishing data while True: try: if iotUtils.LAST_TEMP > 0: # Push data only if there had been a successful temperature read diff --git a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/mqttConnector.py b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/mqttConnector.py index f0da9154c..ccfa6b067 100644 --- a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/mqttConnector.py +++ b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/mqttConnector.py @@ -72,9 +72,11 @@ def on_publish(client, userdata, mid): # The callback for when a PUBLISH message to the server when door is open or close # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def publish(msg): -# global mqttClient + global mqttClient mqttClient.publish(TOPIC_TO_PUBLISH, msg) +def on_subscribe(client, userdata, mid, granted_qos): + print "Successfully subscribed to " + TOPIC_TO_SUBSCRIBE # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # The Main method of the server script @@ -103,6 +105,7 @@ def main(): mqttClient.on_connect = on_connect mqttClient.on_message = on_message mqttClient.on_publish = on_publish + mqttClient.on_subscribe = on_subscribe mqttClient.username_pw_set(iotUtils.AUTH_TOKEN, password = "") while True: diff --git a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/startService.sh b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/startService.sh index e073b1092..4ccf64e01 100644 --- a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/startService.sh +++ b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/startService.sh @@ -33,6 +33,17 @@ if [ ! -d "$destination" ] then mkdir $destination fi +# installing dependencies +echo ===Installing Dependencies +sudo apt-get update +sudo apt-get install python-pip +sudo pip install paho-mqtt + +#installing ada +sudo apt-get install build-essential python-dev +unzip Adafruit_Python_DHT +sudo python Adafruit_Python_DHT/setup.py install + sudo cp $currentDir/deviceConfig.properties $currentDir/src sudo cp -r $currentDir/src $destination sudo chmod +x $destination/src/RaspberryAgent.py