diff --git a/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.cdmf.analytics/pom.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.cdmf.analytics/pom.xml
index b182b174d..739caed69 100644
--- a/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.cdmf.analytics/pom.xml
+++ b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.cdmf.analytics/pom.xml
@@ -21,7 +21,7 @@
org.wso2.carbon.devicemgt-plugins
iot-analytics
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
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 1f00c0db2..150019817 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 03f6142d6..1524e0fdb 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 03aab39d0..4765fa17f 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/analytics/iot-analytics/pom.xml b/components/analytics/iot-analytics/pom.xml
index 28cd2f8f2..eb034227b 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/analytics/pom.xml b/components/analytics/pom.xml
index 990f9dee8..08358a7e1 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 91dd779e2..5595a191a 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 328d2777f..debfec519 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 500f2a0ed..f6980098f 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js
index 9a1ed8202..7c522fe6f 100644
--- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js
@@ -99,7 +99,7 @@ var addConfiguration = function () {
var artifactUpload = function () {
var contentType = "application/json";
var backendEndBasePath = "/api/device-mgt/v1.0";
- var urix = backendEndBasePath + "/admin/devicetype/deploy/android_sense";
+ var urix = backendEndBasePath + "/admin/publish-artifact/deploy/android_sense";
var defaultStatusClasses = "fw fw-stack-1x";
var content = $("#androidsense-statistic-response-template").find(".content");
var title = content.find("#title");
diff --git a/components/device-types/androidsense-plugin/pom.xml b/components/device-types/androidsense-plugin/pom.xml
index ef15cfc30..bbc552191 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 fcf4426ad..ed84a0bd5 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 cdb54644e..c9ca95135 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 33c3c19a8..b8955d8cf 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/public/js/platform-configuration.js b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/public/js/platform-configuration.js
index 5a32d8733..72424628b 100644
--- a/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/public/js/platform-configuration.js
+++ b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/public/js/platform-configuration.js
@@ -107,7 +107,7 @@ var addConfiguration = function () {
var artifactUpload = function () {
var contentType = "application/json";
var backendEndBasePath = "/api/device-mgt/v1.0";
- var urix = backendEndBasePath + "/admin/devicetype/deploy/arduino";
+ var urix = backendEndBasePath + "/admin/publish-artifact/deploy/arduino";
var defaultStatusClasses = "fw fw-stack-1x";
var content = $("#arduino-statistic-response-template").find(".content");
var title = content.find("#title");
diff --git a/components/device-types/arduino-plugin/pom.xml b/components/device-types/arduino-plugin/pom.xml
index 41d0e17a4..30fa5b237 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/device-types/pom.xml b/components/device-types/pom.xml
index 73cb801c2..8568c665f 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 811b4bebd..3d79860bc 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 5d00e95c0..0799086cf 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 6b370f3f4..dbfa138db 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.hbs b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.hbs
index 8f77b561b..86e345235 100644
--- a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.hbs
+++ b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.hbs
@@ -24,15 +24,38 @@
{{/zone}}
{{#zone "device-thumbnail"}}
-
+
+{{/zone}}
+
+{{#zone "device-details-header"}}
+
+ {{device.enrolmentInfo.owner}}'s {{device.name}}
+
+
+
+
+ Ownership - {{device.enrolmentInfo.ownership}}
+ Device is
+
+ {{#equal device.enrolmentInfo.status "ACTIVE"}}Active{{/equal}}
+ {{#equal device.enrolmentInfo.status "INACTIVE"}}Inactive{{/equal}}
+ {{#equal device.enrolmentInfo.status "BLOCKED"}}Blocked{{/equal}}
+ {{#equal device.enrolmentInfo.status "REMOVED"}}Removed{{/equal}}
+ {{#equal device.enrolmentInfo.status "UNREACHABLE"}}Unreachable{{/equal}}
+
+
{{/zone}}
{{#zone "device-opetations"}}
-
- Operations
-
-
- {{unit "cdmf.unit.device.operation-bar" device=device autoCompleteParams=autoCompleteParams
+
+
+
Device Operations
+
+ {{unit "cdmf.unit.device.operation-bar" device=device autoCompleteParams=autoCompleteParams
encodedFeaturePayloads=encodedFeaturePayloads}}
{{/zone}}
@@ -42,10 +65,6 @@
data-toggle="tab" aria-controls="device_statistics">Device
Statistics
-
Operations Log
-
Map
{{/zone}}
{{#zone "device-view-tab-contents"}}
@@ -54,43 +73,4 @@
Device Statistics
{{unit "cdmf.unit.device.type.raspberrypi.realtime.analytics-view" device=device}}
-
-
-
-
-
-
-
-
- Loading Operations Log . . .
-
-
-
-
-
- Not available yet
-
-
-
-
-
-
-{{/zone}}
\ No newline at end of file
+{{/zone}}
diff --git a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/public/js/platform-configuration.js b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/public/js/platform-configuration.js
index 88ab1888a..e15c8148e 100644
--- a/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/public/js/platform-configuration.js
+++ b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/public/js/platform-configuration.js
@@ -117,7 +117,7 @@ var addConfiguration = function () {
var artifactUpload = function () {
var contentType = "application/json";
var backendEndBasePath = "/api/device-mgt/v1.0";
- var urix = backendEndBasePath + "/admin/devicetype/deploy/raspberrypi";
+ var urix = backendEndBasePath + "/admin/publish-artifact/deploy/raspberrypi";
var defaultStatusClasses = "fw fw-stack-1x";
var content = $("#raspberrypi-statistic-response-template").find(".content");
var title = content.find("#title");
diff --git a/components/device-types/raspberrypi-plugin/pom.xml b/components/device-types/raspberrypi-plugin/pom.xml
index 6e527c692..c93f727e0 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 998cc9638..941bbb01e 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 0ac8859bb..ebf41cf45 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 74dc70f71..072e42604 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/artifacts.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/artifacts.xml
index 97f0428d9..5406c20d5 100644
--- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/artifacts.xml
+++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/artifacts.xml
@@ -20,7 +20,7 @@
-
+
diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/temperature_publisher/artifact.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/virtual_firealarm_publisher/artifact.xml
similarity index 81%
rename from components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/temperature_publisher/artifact.xml
rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/virtual_firealarm_publisher/artifact.xml
index 752cb8c41..096e48152 100644
--- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/temperature_publisher/artifact.xml
+++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/virtual_firealarm_publisher/artifact.xml
@@ -17,6 +17,6 @@
~ under the License.
-->
-
- temperature_publisher.xml
+
+ virtual_firealarm_publisher.xml
diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/temperature_publisher/temperature_publisher.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/virtual_firealarm_publisher/virtual_firealarm_publisher.xml
similarity index 87%
rename from components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/temperature_publisher/temperature_publisher.xml
rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/virtual_firealarm_publisher/virtual_firealarm_publisher.xml
index d78d38407..5ecab1fd9 100644
--- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/temperature_publisher/temperature_publisher.xml
+++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics/src/main/resources/carbonapps/virtualfirealarm/virtual_firealarm_publisher/virtual_firealarm_publisher.xml
@@ -17,7 +17,7 @@
~ under the License.
-->
-
+
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 ff8f2492c..3d676f0ff 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 b56d3e95f..caacce023 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/public/js/platform-configuration.js b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/public/js/platform-configuration.js
index 9c69e7899..82bccf344 100644
--- a/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/public/js/platform-configuration.js
+++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/public/js/platform-configuration.js
@@ -107,7 +107,7 @@ var addConfiguration = function () {
var artifactUpload = function () {
var contentType = "application/json";
var backendEndBasePath = "/api/device-mgt/v1.0";
- var urix = backendEndBasePath + "/admin/devicetype/deploy/virtual_firealarm";
+ var urix = backendEndBasePath + "/admin/publish-artifact/deploy/virtual_firealarm";
var defaultStatusClasses = "fw fw-stack-1x";
var content = $("#virtual-firealarm-statistic-response-template").find(".content");
var title = content.find("#title");
diff --git a/components/device-types/virtual-fire-alarm-plugin/pom.xml b/components/device-types/virtual-fire-alarm-plugin/pom.xml
index 7a9c7b632..411342bde 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 4a37dea9b..9edf2a65e 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 5fd529a94..329c17516 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/extensions/appm-connector/pom.xml b/components/extensions/appm-connector/pom.xml
index 3accbfaaf..b4fc7c965 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 be6295fb5..2def4286b 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/internal/InputAdapterServiceComponent.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/internal/InputAdapterServiceComponent.java
index b7370fa3a..ee41c354d 100644
--- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/internal/InputAdapterServiceComponent.java
+++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/internal/InputAdapterServiceComponent.java
@@ -25,19 +25,20 @@ import org.wso2.carbon.device.mgt.input.adapter.extension.ContentValidator;
import org.wso2.carbon.device.mgt.input.adapter.extension.InputAdapterExtensionService;
import org.wso2.carbon.device.mgt.input.adapter.extension.InputAdapterExtensionServiceImpl;
import org.wso2.carbon.device.mgt.input.adapter.extension.transformer.DefaultContentTransformer;
+import org.wso2.carbon.device.mgt.input.adapter.extension.transformer.MQTTContentTransformer;
import org.wso2.carbon.device.mgt.input.adapter.extension.validator.DefaultContentValidator;
import org.wso2.carbon.device.mgt.input.adapter.extension.validator.HTTPContentValidator;
import org.wso2.carbon.device.mgt.input.adapter.extension.validator.MQTTContentValidator;
/**
* @scr.component name="input.adapter.extension.adapterService.component" immediate="true"
- * @scr.reference name="InputAdapterServiceComponent.service"
+ * @scr.reference name="InputAdapterServiceComponent.content.validator.service"
* interface="org.wso2.carbon.device.mgt.input.adapter.extension.ContentValidator"
* cardinality="0..n"
* policy="dynamic"
* bind="setContentValidator"
* unbind="unsetContentValidator"
- * * @scr.reference name="InputAdapterServiceComponent.service"
+ * @scr.reference name="InputAdapterServiceComponent.transformer.service"
* interface="org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer"
* cardinality="0..n"
* policy="dynamic"
@@ -56,6 +57,7 @@ public class InputAdapterServiceComponent {
}
InputAdapterServiceDataHolder.getInstance().addContentTransformer(new DefaultContentTransformer());
+ InputAdapterServiceDataHolder.getInstance().addContentTransformer(new MQTTContentTransformer());
InputAdapterServiceDataHolder.getInstance().addContentValidator(new DefaultContentValidator());
InputAdapterServiceDataHolder.getInstance().addContentValidator(new HTTPContentValidator());
InputAdapterServiceDataHolder.getInstance().addContentValidator(new MQTTContentValidator());
@@ -87,7 +89,7 @@ public class InputAdapterServiceComponent {
InputAdapterServiceDataHolder.getInstance().addContentTransformer(contentTransformer);
}
- protected void unsetContentValidator(ContentTransformer contentTransformer) {
+ protected void unsetContentTransformer(ContentTransformer contentTransformer) {
if (log.isDebugEnabled()) {
log.debug("Un-setting ContentTransformer Service");
}
diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/transformer/MQTTContentTransformer.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/transformer/MQTTContentTransformer.java
new file mode 100644
index 000000000..fba934009
--- /dev/null
+++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/transformer/MQTTContentTransformer.java
@@ -0,0 +1,89 @@
+/*
+* 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.input.adapter.extension.transformer;
+
+import com.jayway.jsonpath.JsonPath;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
+import org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer;
+
+import java.util.Map;
+
+/**
+ * This holds the default implementation of ContentTransformer
+ */
+public class MQTTContentTransformer implements ContentTransformer {
+ private static final String MQTT_CONTENT_TRANSFORMER = "device-meta-transformer";
+ private static final String TOPIC = "topic";
+ private static String JSON_ARRAY_START_CHAR = "[";
+
+ private static final Log log = LogFactory.getLog(MQTTContentTransformer.class);
+
+ @Override
+ public String getType() {
+ return MQTT_CONTENT_TRANSFORMER;
+ }
+
+ @Override
+ public Object transform(Object messagePayload, Map dynamicProperties) {
+ String topic = (String) dynamicProperties.get(TOPIC);
+ String topics[] = topic.split("/");
+ String deviceId = topics[2];
+ String deviceType = topics[1];
+ String message = (String) messagePayload;
+ try {
+ if (message.startsWith(JSON_ARRAY_START_CHAR)) {
+ return processMultipleEvents(message, deviceId, deviceType);
+ } else {
+ return processSingleEvent(message, deviceId, deviceType);
+ }
+ } catch (ParseException e) {
+ log.error("Invalid input " + message, e);
+ return false;
+ }
+ }
+
+ private String processSingleEvent(String msg, String deviceIdFromTopic, String deviceIdJsonPath)
+ throws ParseException {
+ JSONParser parser = new JSONParser();
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("deviceId", deviceIdFromTopic);
+ JSONObject eventObject = new JSONObject();
+ eventObject.put("payloadData", parser.parse(msg));
+ eventObject.put("metaData", jsonObject);
+ JSONObject event = new JSONObject();
+ event.put("event", eventObject);
+ return event.toJSONString();
+ }
+
+ private String processMultipleEvents(String msg, String deviceIdFromTopic, String deviceIdJsonPath)
+ throws ParseException {
+ JSONParser jsonParser = new JSONParser();
+ JSONArray jsonArray = (JSONArray) jsonParser.parse(msg);
+ JSONArray eventsArray = new JSONArray();
+ for (int i = 0; i < jsonArray.size(); i++) {
+ eventsArray.add(i, processSingleEvent(jsonArray.get(i).toString(), deviceIdFromTopic, deviceIdJsonPath));
+ }
+ return eventsArray.toJSONString();
+ }
+}
diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/validator/MQTTContentValidator.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/validator/MQTTContentValidator.java
index 3322acb9d..20261ab6d 100644
--- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/validator/MQTTContentValidator.java
+++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/validator/MQTTContentValidator.java
@@ -32,11 +32,11 @@ import java.util.Map;
public class MQTTContentValidator implements ContentValidator {
private static final String JSON_ARRAY_START_CHAR = "[";
private static final Log log = LogFactory.getLog(MQTTContentValidator.class);
- private static final String CDMF_MQTT_CONTENT_VALIDATOR = "iot-mqtt";
- public static final String DEVICE_ID_JSON_PATH = "event.metaData.deviceId";
- public static final String DEVICE_TYPE_JSON_PATH = "event.metaData.deviceId";
- public static final String TOPIC = "topic";
- public static final int DEVICE_ID_TOPIC_HIERARCHY_INDEX = 2;
+ private static final String CDMF_MQTT_CONTENT_VALIDATOR = "deviceid-topic-content-validator";
+ private static final String DEVICE_ID_JSON_PATH = "event.metaData.deviceId";
+ private static final String DEVICE_TYPE_JSON_PATH = "event.metaData.deviceId";
+ private static final String TOPIC = "topic";
+ private static final int DEVICE_ID_TOPIC_HIERARCHY_INDEX = 2;
@Override
public String getType() {
@@ -47,15 +47,14 @@ public class MQTTContentValidator implements ContentValidator {
public ContentInfo validate(Object msgPayload, Map dynamicParams) {
String topic = (String) dynamicParams.get(TOPIC);
String topics[] = topic.split("/");
- String deviceIdJsonPath = DEVICE_ID_JSON_PATH;
int deviceIdInTopicHierarchyLevelIndex = DEVICE_ID_TOPIC_HIERARCHY_INDEX;
String deviceIdFromTopic = topics[deviceIdInTopicHierarchyLevelIndex];
boolean status;
String message = (String) msgPayload;
if (message.startsWith(JSON_ARRAY_START_CHAR)) {
- status = processMultipleEvents(message, deviceIdFromTopic, deviceIdJsonPath);
+ status = processMultipleEvents(message, deviceIdFromTopic, DEVICE_ID_JSON_PATH);
} else {
- status = processSingleEvent(message, deviceIdFromTopic, deviceIdJsonPath);
+ status = processSingleEvent(message, deviceIdFromTopic, DEVICE_ID_JSON_PATH);
}
return new ContentInfo(status, msgPayload);
}
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 ebc40e752..e79987c35 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 589c8c703..40e940d98 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapter.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapter.java
index 8f5c996d0..21381e722 100644
--- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapter.java
+++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapter.java
@@ -18,6 +18,7 @@
package org.wso2.carbon.device.mgt.input.adapter.mqtt;
import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.core.ServerStatus;
import org.wso2.carbon.device.mgt.input.adapter.mqtt.util.MQTTAdapterListener;
import org.wso2.carbon.device.mgt.input.adapter.mqtt.util.MQTTBrokerConnectionConfiguration;
import org.wso2.carbon.device.mgt.input.adapter.mqtt.util.MQTTEventAdapterConstants;
@@ -83,8 +84,10 @@ public class MQTTEventAdapter implements InputEventAdapter {
.equals(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME)) {
return;
}
- if (!mqttAdapterListener.isConnectionInitialized()) {
- mqttAdapterListener.createConnection();
+ synchronized (this.mqttAdapterListener) {
+ if (!mqttAdapterListener.isConnectionInitialized()) {
+ mqttAdapterListener.createConnection();
+ }
}
}
@@ -98,15 +101,24 @@ public class MQTTEventAdapter implements InputEventAdapter {
return;
}
try {
- Thread thread = new Thread(new Runnable() {
- public void run() {
- if (mqttAdapterListener != null) {
- mqttAdapterListener.stopListener(eventAdapterConfiguration.getName());
+ if (ServerStatus.getCurrentStatus().equals(ServerStatus.STATUS_SHUTTING_DOWN)) {
+ Thread thread = new Thread(new Runnable() {
+ public void run() {
+ synchronized (mqttAdapterListener) {
+ if (mqttAdapterListener != null) {
+ mqttAdapterListener.stopListener(eventAdapterConfiguration.getName());
+ }
+ }
}
+ });
+ thread.start();
+ thread.join(2000);
+ } else {
+ if (mqttAdapterListener != null) {
+ mqttAdapterListener.stopListener(eventAdapterConfiguration.getName());
}
- });
- thread.start();
- thread.join(2000);
+ }
+
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapterFactory.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapterFactory.java
index f5f93b17a..54f0ec364 100644
--- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapterFactory.java
+++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapterFactory.java
@@ -114,7 +114,7 @@ public class MQTTEventAdapterFactory extends InputEventAdapterFactory {
contentTransformer.setRequired(false);
contentTransformer.setHint(
resourceBundle.getString(MQTTEventAdapterConstants.ADAPTER_CONF_CONTENT_TRANSFORMER_TYPE_HINT));
- contentTransformer.setDefaultValue(MQTTEventAdapterConstants.DEFAULT);
+ contentTransformer.setDefaultValue(MQTTEventAdapterConstants.EMPTY);
propertyList.add(contentTransformer);
// set clientId
diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTAdapterListener.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTAdapterListener.java
index e6e9fe700..e41cfea50 100644
--- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTAdapterListener.java
+++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTAdapterListener.java
@@ -69,7 +69,7 @@ public class MQTTAdapterListener implements MqttCallback, Runnable {
private MQTTBrokerConnectionConfiguration mqttBrokerConnectionConfiguration;
private String topic;
private String tenantDomain;
- private boolean connectionSucceeded = false;
+ private volatile boolean connectionSucceeded = false;
private ContentValidator contentValidator;
private ContentTransformer contentTransformer;
private InputEventAdapterConfiguration inputEventAdapterConfiguration;
@@ -91,6 +91,10 @@ public class MQTTAdapterListener implements MqttCallback, Runnable {
this.topic = PropertyUtils.replaceTenantDomainProperty(topic);
this.eventAdapterListener = inputEventAdapterListener;
this.tenantDomain = this.topic.split("/")[0];
+ //this is to allow server listener from IoT Core to connect.
+ if (this.tenantDomain.equals("+")) {
+ this.tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain();
+ }
//SORTING messages until the server fetches them
String temp_directory = System.getProperty("java.io.tmpdir");
@@ -126,8 +130,8 @@ public class MQTTAdapterListener implements MqttCallback, Runnable {
.getContentTransformer(contentTransformerType);
}
} catch (MqttException e) {
- log.error("Exception occurred while subscribing to MQTT broker at "
- + mqttBrokerConnectionConfiguration.getBrokerUrl());
+ log.error("Exception occurred while creating an mqtt client to "
+ + mqttBrokerConnectionConfiguration.getBrokerUrl() + " reason code:" + e.getReasonCode());
throw new InputEventAdapterRuntimeException(e);
}
}
@@ -267,8 +271,8 @@ public class MQTTAdapterListener implements MqttCallback, Runnable {
ContentInfo contentInfo;
Map dynamicProperties = new HashMap<>();
dynamicProperties.put(MQTTEventAdapterConstants.TOPIC, topic);
- msgText = (String) contentTransformer.transform(msgText, dynamicProperties);
- contentInfo = contentValidator.validate(msgText, dynamicProperties);
+ Object transformedMessage = contentTransformer.transform(msgText, dynamicProperties);
+ contentInfo = contentValidator.validate(transformedMessage, dynamicProperties);
if (contentInfo != null && contentInfo.isValidContent()) {
inputEventAdapterListener.onEvent(contentInfo.getMessage());
}
diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java
index 32669bd96..b32e7d6d9 100644
--- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java
+++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java
@@ -106,9 +106,17 @@ public class MQTTBrokerConnectionConfiguration {
this.dcrUrl = PropertyUtils
.replaceMqttProperty(globalProperties.get(MQTTEventAdapterConstants.ADAPTER_CONF_DCR_URL));
this.contentValidatorType = globalProperties.get(MQTTEventAdapterConstants.ADAPTER_CONF_CONTENT_VALIDATOR_TYPE);
+ String contentValidatorTypeLocal = eventAdapterConfiguration.getProperties()
+ .get(MQTTEventAdapterConstants.ADAPTER_CONF_CONTENT_VALIDATOR_TYPE);
if (contentValidatorType == null || contentValidatorType.isEmpty()) {
this.contentValidatorType = eventAdapterConfiguration.getProperties()
.get(MQTTEventAdapterConstants.ADAPTER_CONF_CONTENT_VALIDATOR_TYPE);
+ } else if (contentValidatorTypeLocal != null && !contentValidatorTypeLocal.equals(MQTTEventAdapterConstants.EMPTY)) {
+ this.contentValidatorType = eventAdapterConfiguration.getProperties()
+ .get(MQTTEventAdapterConstants.ADAPTER_CONF_CONTENT_VALIDATOR_TYPE);
+ }
+ if (this.contentValidatorType.equals(MQTTEventAdapterConstants.EMPTY)) {
+ this.contentValidatorType = MQTTEventAdapterConstants.DEFAULT;
}
String cleanSession = globalProperties.get(MQTTEventAdapterConstants.ADAPTER_CONF_CLEAN_SESSION);
if (cleanSession == null || cleanSession.isEmpty()) {
diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTEventAdapterConstants.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTEventAdapterConstants.java
index 0a0b09e2a..7c80d8a1d 100644
--- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTEventAdapterConstants.java
+++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTEventAdapterConstants.java
@@ -61,6 +61,7 @@ public class MQTTEventAdapterConstants {
public static final String CLIENT_SECRET = "clientSecret";
public static final String CLIENT_NAME = "client_name";
public static final String DEFAULT = "default";
+ public static final String EMPTY = "";
public static final String MQTT_CONTENT_VALIDATION_DEFAULT_PARAMETERS = "";
public static final String TOPIC = "topic";
public static final String PAYLOAD = "payload";
diff --git a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.thrift/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.thrift/pom.xml
index 5de0150af..f6fe3921c 100644
--- a/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.thrift/pom.xml
+++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.thrift/pom.xml
@@ -21,7 +21,7 @@
org.wso2.carbon.devicemgt-plugins
cdmf-transport-adapters
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../../pom.xml
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 d70eefa03..62d7c4e9b 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 7d6701812..34c42719f 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 4c08c7c1f..596e56272 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 ee36826b2..97900d695 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 5a5003ba2..0105f6af0 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../../pom.xml
diff --git a/components/extensions/cdmf-transport-adapters/pom.xml b/components/extensions/cdmf-transport-adapters/pom.xml
index fcac8fa28..6912d8996 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 e44c5e337..b1002faf8 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/src/main/java/org/wso2/carbon/andes/extensions/device/mgt/mqtt/authorization/DeviceAccessBasedMQTTAuthorizer.java b/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/src/main/java/org/wso2/carbon/andes/extensions/device/mgt/mqtt/authorization/DeviceAccessBasedMQTTAuthorizer.java
index 568c567ec..7859a673f 100644
--- a/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/src/main/java/org/wso2/carbon/andes/extensions/device/mgt/mqtt/authorization/DeviceAccessBasedMQTTAuthorizer.java
+++ b/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/src/main/java/org/wso2/carbon/andes/extensions/device/mgt/mqtt/authorization/DeviceAccessBasedMQTTAuthorizer.java
@@ -74,11 +74,13 @@ public class DeviceAccessBasedMQTTAuthorizer implements IAuthorizer {
private static Log log = LogFactory.getLog(DeviceAccessBasedMQTTAuthorizer.class);
private AuthorizationConfigurationManager MQTTAuthorizationConfiguration;
private static final String CDMF_SERVER_BASE_CONTEXT = "/api/device-mgt/v1.0";
+ private static final String DEFAULT_ADMIN_PERMISSION = "permission/admin/device-mgt";
private static final String CACHE_MANAGER_NAME = "mqttAuthorizationCacheManager";
private static final String CACHE_NAME = "mqttAuthorizationCache";
private static DeviceAccessAuthorizationAdminService deviceAccessAuthorizationAdminService;
private static OAuthRequestInterceptor oAuthRequestInterceptor;
private static final String GATEWAY_ERROR_CODE = "404";
+ private static final String ALL_TENANT_DOMAIN = "+";
public DeviceAccessBasedMQTTAuthorizer() {
oAuthRequestInterceptor = new OAuthRequestInterceptor();
@@ -102,6 +104,13 @@ public class DeviceAccessBasedMQTTAuthorizer implements IAuthorizer {
try {
String topics[] = topic.split("/");
String tenantDomainFromTopic = topics[0];
+ if ("+".equals(tenantDomainFromTopic)) {
+ if (MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equals(authorizationSubject.getTenantDomain())
+ && isUserAuthorized(authorizationSubject, DEFAULT_ADMIN_PERMISSION, UI_EXECUTE)) {
+ return true;
+ }
+ return false;
+ }
if (!tenantDomainFromTopic.equals(authorizationSubject.getTenantDomain())) {
return false;
}
@@ -124,7 +133,7 @@ public class DeviceAccessBasedMQTTAuthorizer implements IAuthorizer {
return false;
} catch (FeignException e) {
oAuthRequestInterceptor.resetApiApplicationKey();
- if (e.getMessage().contains(GATEWAY_ERROR_CODE)) {
+ if (e.getMessage().contains(GATEWAY_ERROR_CODE) || e.status() == 404) {
log.error("Failed to connect to the device authorization service.");
} else {
log.error(e.getMessage(), e);
diff --git a/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/src/main/java/org/wso2/carbon/andes/extensions/device/mgt/mqtt/authorization/client/OAuthRequestInterceptor.java b/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/src/main/java/org/wso2/carbon/andes/extensions/device/mgt/mqtt/authorization/client/OAuthRequestInterceptor.java
index d2917f59e..4c098deb0 100755
--- a/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/src/main/java/org/wso2/carbon/andes/extensions/device/mgt/mqtt/authorization/client/OAuthRequestInterceptor.java
+++ b/components/extensions/mb-extensions/org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization/src/main/java/org/wso2/carbon/andes/extensions/device/mgt/mqtt/authorization/client/OAuthRequestInterceptor.java
@@ -125,6 +125,7 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
public void resetApiApplicationKey() {
apiApplicationKey = null;
+ tokenIssuerService = null;
}
private static Client getSSLClient() {
diff --git a/components/extensions/mb-extensions/pom.xml b/components/extensions/mb-extensions/pom.xml
index df960d797..a4b168f26 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/extensions/pom.xml b/components/extensions/pom.xml
index 6f7338715..9c01c4afd 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../../pom.xml
@@ -37,6 +37,7 @@
cdmf-transport-adapters
mb-extensions
siddhi-extensions
+ pull-notification-listeners
diff --git a/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/pom.xml b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/pom.xml
new file mode 100644
index 000000000..3da4559f7
--- /dev/null
+++ b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/pom.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+ org.wso2.carbon.devicemgt-plugins
+ pull-notification-listeners
+ 4.0.6-SNAPSHOT
+ ../pom.xml
+
+
+
+ 4.0.0
+ org.wso2.carbon.device.mgt.mqtt.notification.listener
+ bundle
+ WSO2 Carbon - MQTT Pull Notification Listener Implementation
+ WSO2 Carbon - MQTT Pull Notification Lister Implementation
+ http://wso2.org
+
+
+
+ org.wso2.carbon.devicemgt
+ org.wso2.carbon.device.mgt.common
+
+
+ org.wso2.carbon.devicemgt
+ org.wso2.carbon.device.mgt.core
+
+
+ org.wso2.carbon.analytics-common
+ org.wso2.carbon.event.input.adapter.core
+
+
+ org.eclipse.osgi
+ org.eclipse.osgi
+
+
+ org.eclipse.osgi
+ org.eclipse.osgi.services
+
+
+ org.eclipse.osgi
+ org.eclipse.osgi.services
+
+
+ org.wso2.carbon.devicemgt-plugins
+ org.wso2.carbon.device.mgt.input.adapter.extension
+
+
+
+
+
+
+ org.apache.felix
+ maven-scr-plugin
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ ${project.artifactId}
+ ${project.artifactId}
+ ${carbon.devicemgt.plugins.version}
+ MQTT Pull Notification Provider Bundle
+
+ !org.wso2.carbon.device.mgt.mqtt.notification.listener.internal,
+ org.wso2.carbon.device.mgt.mqtt.notification.listener.*
+
+
+ org.osgi.framework,
+ org.osgi.service.component,
+ org.apache.commons.logging,
+ org.wso2.carbon.device.mgt.common.*,
+ org.wso2.carbon.device.mgt.core.service,
+ com.google.gson,
+ org.wso2.carbon.context,
+ org.wso2.carbon.device.mgt.input.adapter.extension,
+ org.wso2.carbon.event.input.adapter.core,
+ org.wso2.carbon.event.input.adapter.core.exception,
+ org.wso2.carbon.user.api,
+ org.wso2.carbon.core,
+ org.wso2.carbon.device.mgt.core.config,
+ org.wso2.carbon.device.mgt.core.config.pull.notification,
+ org.wso2.carbon.utils.multitenancy
+
+
+
+
+
+
+
+
diff --git a/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/DeviceTypeOperationAdapterSubscription.java b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/DeviceTypeOperationAdapterSubscription.java
new file mode 100644
index 000000000..f59d96415
--- /dev/null
+++ b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/DeviceTypeOperationAdapterSubscription.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2017, 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.mqtt.notification.listener;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.device.mgt.common.pull.notification.PullNotificationExecutionFailedException;
+import org.wso2.carbon.device.mgt.mqtt.notification.listener.internal.MqttNotificationDataHolder;
+import org.wso2.carbon.event.input.adapter.core.InputEventAdapterSubscription;
+import org.wso2.carbon.user.api.UserStoreException;
+
+/**
+ * Creates a event subscription for the input adapter.
+ */
+public class DeviceTypeOperationAdapterSubscription implements InputEventAdapterSubscription {
+ private static final Log log = LogFactory.getLog(DeviceTypeOperationAdapterSubscription.class);
+
+ @Override
+ public void onEvent(Object o) {
+
+ if (o == null || !(o instanceof NotificationMessage)) {
+ return;
+ }
+
+ NotificationMessage notificationMessage = (NotificationMessage) o;
+ PrivilegedCarbonContext.startTenantFlow();
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(notificationMessage.getTenantDomain(),
+ true);
+ String deviceType = "";
+ try {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(PrivilegedCarbonContext.
+ getThreadLocalCarbonContext().getUserRealm().getRealmConfiguration().getAdminUserName());
+ deviceType = notificationMessage.getDeviceIdentifier().getType();
+ MqttNotificationDataHolder.getInstance().getDeviceManagementProviderService().
+ notifyPullNotificationSubscriber(notificationMessage.getDeviceIdentifier(),
+ notificationMessage.getOperation());
+ } catch (UserStoreException e) {
+ log.error("Failed to retrieve tenant username", e);
+ } catch (PullNotificationExecutionFailedException e) {
+ log.error("Failed to execute device type pull notification subscriber execution for device type" + deviceType,
+ e);
+ } finally {
+ PrivilegedCarbonContext.endTenantFlow();
+ }
+
+ }
+}
diff --git a/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/NotificationMessage.java b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/NotificationMessage.java
new file mode 100644
index 000000000..dfd17e29d
--- /dev/null
+++ b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/NotificationMessage.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2017, 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.mqtt.notification.listener;
+
+import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
+
+public class NotificationMessage {
+
+ private String tenantDomain;
+ private DeviceIdentifier deviceIdentifier;
+ private Operation operation;
+
+ public NotificationMessage(String tenantDomain, DeviceIdentifier deviceIdentifier,Operation operation) {
+ this.tenantDomain = tenantDomain;
+ this.operation = operation;
+ this.deviceIdentifier = deviceIdentifier;
+ }
+
+ public String getTenantDomain() {
+ return tenantDomain;
+ }
+
+ public void setTenantDomain(String tenantDomain) {
+ this.tenantDomain = tenantDomain;
+ }
+
+ public Operation getOperation() {
+ return operation;
+ }
+
+ public void setNotificationContext(
+ Operation operation) {
+ this.operation = operation;
+ }
+
+ public DeviceIdentifier getDeviceIdentifier() {
+ return deviceIdentifier;
+ }
+
+ public void setDeviceIdentifier(DeviceIdentifier deviceIdentifier) {
+ this.deviceIdentifier = deviceIdentifier;
+ }
+}
diff --git a/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/PullNotificationMqttContentTransformer.java b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/PullNotificationMqttContentTransformer.java
new file mode 100644
index 000000000..476b4eba0
--- /dev/null
+++ b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/PullNotificationMqttContentTransformer.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2017, 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.mqtt.notification.listener;
+
+import com.google.gson.Gson;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
+import org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer;
+
+import java.util.Map;
+
+/**
+ * This transforms the incomming message payload to notification message, inorder to pass this
+ * information before its passed to the input adapter subscriber.
+ */
+public class PullNotificationMqttContentTransformer implements ContentTransformer {
+
+ public static final String MQTT_NOTIFICATION_MESSAGE_TRANSFORMER = "mqtt-operation-transformer";
+
+ @Override
+ public String getType() {
+ return MQTT_NOTIFICATION_MESSAGE_TRANSFORMER;
+ }
+
+ @Override
+ public Object transform(Object message, Map dynamicProperties) {
+ String topic = (String) dynamicProperties.get("topic");
+ String[] topicParams = topic.split("/");
+ String tenantDomain = topicParams[0];
+ String deviceType = topicParams[1];
+ String deviceId = topicParams[2];
+ Gson gson = new Gson();
+ try {
+ Operation operation = gson.fromJson((String) message, Operation.class);
+ return new NotificationMessage(tenantDomain, new DeviceIdentifier(deviceId, deviceType),operation);
+ } catch (Exception e) {
+ //Avoid notification listener to fail.
+ return new Object();
+ }
+ }
+
+}
diff --git a/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/PullNotificationStartupListener.java b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/PullNotificationStartupListener.java
new file mode 100644
index 000000000..5db5acadf
--- /dev/null
+++ b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/PullNotificationStartupListener.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2017, 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.mqtt.notification.listener;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.core.ServerStartupObserver;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import org.wso2.carbon.device.mgt.mqtt.notification.listener.internal.MqttNotificationDataHolder;
+import org.wso2.carbon.device.mgt.mqtt.notification.listener.util.MqttNotificationListener;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
+
+/**
+ * Startup listener is been used to make sure the reciever gets activated after the server start up to avoid
+ * Bundle not loading issues.
+ */
+public class PullNotificationStartupListener implements ServerStartupObserver {
+
+ private static final Log log = LogFactory.getLog(PullNotificationStartupListener.class);
+
+ @Override
+ public void completingServerStartup() {
+ }
+
+ @Override
+ public void completedServerStartup() {
+ PrivilegedCarbonContext.startTenantFlow();
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME, true);
+ try {
+ //TODO DeviceConfiguration Either need to be a osgi service or need to add those variable to system variables.
+ boolean isEnabled = DeviceConfigurationManager.getInstance().getDeviceManagementConfig()
+ .getPullNotificationConfiguration().isEnabled();
+ if (isEnabled) {
+ MqttNotificationListener.setupMqttInputAdapter();
+ MqttNotificationDataHolder.getInstance().getInputEventAdapterService().start();
+ log.info("Mqtt operation listener activated");
+ }
+ } finally {
+ PrivilegedCarbonContext.endTenantFlow();
+ }
+ }
+
+}
diff --git a/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/internal/MqttNotificationDataHolder.java b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/internal/MqttNotificationDataHolder.java
new file mode 100644
index 000000000..4a95c543f
--- /dev/null
+++ b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/internal/MqttNotificationDataHolder.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2017, 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.mqtt.notification.listener.internal;
+
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.event.input.adapter.core.InputEventAdapterService;
+
+public class MqttNotificationDataHolder {
+
+ private DeviceManagementProviderService deviceManagementProviderService;
+ private InputEventAdapterService inputEventAdapterService;
+
+ private static MqttNotificationDataHolder thisInstance = new MqttNotificationDataHolder();
+
+ public static MqttNotificationDataHolder getInstance() {
+ return thisInstance;
+ }
+
+ public DeviceManagementProviderService getDeviceManagementProviderService() {
+ return deviceManagementProviderService;
+ }
+
+ public void setDeviceManagementProviderService(DeviceManagementProviderService deviceManagementProviderService) {
+ this.deviceManagementProviderService = deviceManagementProviderService;
+ }
+
+ public InputEventAdapterService getInputEventAdapterService() {
+ return inputEventAdapterService;
+ }
+
+ public void setInputEventAdapterService(
+ InputEventAdapterService inputEventAdapterService) {
+ this.inputEventAdapterService = inputEventAdapterService;
+ }
+}
diff --git a/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/internal/PullNotificationListenerServiceComponent.java b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/internal/PullNotificationListenerServiceComponent.java
new file mode 100644
index 000000000..78e918ec7
--- /dev/null
+++ b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/internal/PullNotificationListenerServiceComponent.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2017, 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.mqtt.notification.listener.internal;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.ComponentContext;
+import org.wso2.carbon.core.ServerStartupObserver;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer;
+import org.wso2.carbon.device.mgt.mqtt.notification.listener.PullNotificationMqttContentTransformer;
+import org.wso2.carbon.device.mgt.mqtt.notification.listener.PullNotificationStartupListener;
+import org.wso2.carbon.device.mgt.mqtt.notification.listener.util.MqttNotificationListener;
+import org.wso2.carbon.event.input.adapter.core.InputEventAdapterService;
+
+/**
+ * @scr.component name="org.wso2.carbon.device.mgt.mqtt.notification.listener.internal.PullNotificationListenerServiceComponent" immediate="true"
+ * @scr.reference name="carbon.device.mgt.provider"
+ * interface="org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService"
+ * cardinality="1..1"
+ * policy="dynamic"
+ * bind="setDeviceManagementProviderService"
+ * unbind="unsetDeviceManagementProviderService"
+ * @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"
+ */
+public class PullNotificationListenerServiceComponent {
+
+ private static final Log log = LogFactory.getLog(PullNotificationListenerServiceComponent.class);
+
+ @SuppressWarnings("unused")
+ protected void activate(ComponentContext componentContext) {
+ try {
+ //Do nothing
+ if (log.isDebugEnabled()) {
+ log.debug("Pull notification provider implementation bundle has been successfully " +
+ "initialized");
+ }
+ BundleContext bundleContext = componentContext.getBundleContext();
+ bundleContext.registerService(ServerStartupObserver.class.getName(), new PullNotificationStartupListener(),
+ null);
+ bundleContext.registerService(ContentTransformer.class, new PullNotificationMqttContentTransformer(), null);
+ } catch (Throwable e) {
+ log.error("Error occurred while initializing pull notification provider implementation bundle", e);
+ }
+ }
+
+ protected void deactivate(ComponentContext componentContext) {
+ //Do nothing
+ }
+
+ protected void setDeviceManagementProviderService(DeviceManagementProviderService deviceManagementProviderService) {
+ MqttNotificationDataHolder.getInstance().setDeviceManagementProviderService(deviceManagementProviderService);
+ }
+
+ protected void unsetDeviceManagementProviderService(DeviceManagementProviderService deviceManagementProviderService) {
+ MqttNotificationDataHolder.getInstance().setDeviceManagementProviderService(deviceManagementProviderService);
+ }
+
+ protected void setInputEventAdapterService(InputEventAdapterService inputEventAdapterService) {
+ MqttNotificationDataHolder.getInstance().setInputEventAdapterService(inputEventAdapterService);
+ }
+
+ protected void unsetInputEventAdapterService(InputEventAdapterService inputEventAdapterService) {
+ MqttNotificationDataHolder.getInstance().setInputEventAdapterService(null);
+ }
+
+}
diff --git a/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/util/MqttNotificationListener.java b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/util/MqttNotificationListener.java
new file mode 100644
index 000000000..08800272d
--- /dev/null
+++ b/components/extensions/pull-notification-listeners/org.wso2.carbon.device.mgt.mqtt.notification.listener/src/main/java/org/wso2/carbon/device/mgt/mqtt/notification/listener/util/MqttNotificationListener.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2017, 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.mqtt.notification.listener.util;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.device.mgt.mqtt.notification.listener.DeviceTypeOperationAdapterSubscription;
+import org.wso2.carbon.device.mgt.mqtt.notification.listener.PullNotificationMqttContentTransformer;
+import org.wso2.carbon.device.mgt.mqtt.notification.listener.internal.MqttNotificationDataHolder;
+import org.wso2.carbon.event.input.adapter.core.InputEventAdapterConfiguration;
+import org.wso2.carbon.event.input.adapter.core.exception.InputEventAdapterException;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This creates a link between input adapter and the subscription of the input adpater.
+ */
+public class MqttNotificationListener {
+ private static final Log log = LogFactory.getLog(MqttNotificationListener.class);
+
+ private static final String TOPIC = "topic";
+ private static final String SUBSCRIBED_TOPIC = "+/+/+/update/operation";
+ private static final String TYPE = "oauth-mqtt";
+ private static final String JSON = "json";
+ private static final String NAME = "iot_core_server_adapter";
+ private static final String CONTENT_TRANSFORMER_TYPE = "contentTransformer";
+ private static final String MQTT_CONTENT_VALIDATOR_TYPE = "contentValidator";
+ private static final String MQTT_CONTENT_VALIDATOR = "default";
+
+
+ public static void setupMqttInputAdapter() {
+ InputEventAdapterConfiguration inputEventAdapterConfiguration = new InputEventAdapterConfiguration();
+ inputEventAdapterConfiguration.setName(NAME);
+ inputEventAdapterConfiguration.setType(TYPE);
+ inputEventAdapterConfiguration.setMessageFormat(JSON);
+ Map mqttAdapterProperties = new HashMap<>();
+ mqttAdapterProperties.put(TOPIC, SUBSCRIBED_TOPIC);
+ mqttAdapterProperties.put(CONTENT_TRANSFORMER_TYPE,
+ PullNotificationMqttContentTransformer.MQTT_NOTIFICATION_MESSAGE_TRANSFORMER);
+ mqttAdapterProperties.put(MQTT_CONTENT_VALIDATOR_TYPE, MQTT_CONTENT_VALIDATOR);
+ inputEventAdapterConfiguration.setProperties(mqttAdapterProperties);
+ try {
+ PrivilegedCarbonContext.startTenantFlow();
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(MultitenantConstants
+ .SUPER_TENANT_DOMAIN_NAME, true);
+ MqttNotificationDataHolder.getInstance().getInputEventAdapterService()
+ .create(inputEventAdapterConfiguration, new DeviceTypeOperationAdapterSubscription());
+ } catch (InputEventAdapterException e) {
+ log.error("Unable to create Input Event Adapter for pull notification.", e);
+ } finally {
+ PrivilegedCarbonContext.endTenantFlow();
+ }
+ }
+
+}
diff --git a/components/extensions/pull-notification-listeners/pom.xml b/components/extensions/pull-notification-listeners/pom.xml
new file mode 100644
index 000000000..e42998457
--- /dev/null
+++ b/components/extensions/pull-notification-listeners/pom.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+ org.wso2.carbon.devicemgt-plugins
+ extensions
+ 4.0.6-SNAPSHOT
+ ../pom.xml
+
+
+ 4.0.0
+ pull-notification-listeners
+ pom
+ WSO2 Carbon - Pull Notification Extension
+ http://wso2.org
+
+
+ org.wso2.carbon.device.mgt.mqtt.notification.listener
+
+
+
+
+
+
+ org.apache.felix
+ maven-scr-plugin
+ 1.7.2
+
+
+ generate-scr-scrdescriptor
+
+ scr
+
+
+
+
+
+
+
+
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 6429bada7..0d8d747cd 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/extensions/siddhi-extensions/org.wso2.gpl.siddhi.extension.geo.script/pom.xml b/components/extensions/siddhi-extensions/org.wso2.gpl.siddhi.extension.geo.script/pom.xml
index 276fb5aa0..122cb6caa 100644
--- a/components/extensions/siddhi-extensions/org.wso2.gpl.siddhi.extension.geo.script/pom.xml
+++ b/components/extensions/siddhi-extensions/org.wso2.gpl.siddhi.extension.geo.script/pom.xml
@@ -20,7 +20,7 @@
org.wso2.carbon.devicemgt-plugins
siddhi-extensions
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/extensions/siddhi-extensions/pom.xml b/components/extensions/siddhi-extensions/pom.xml
index 1d9f4df8c..bab9054a4 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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
deleted file mode 100644
index e69de29bb..000000000
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 7e37488fa..ad1b58783 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
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/impl/EventReceiverServiceImpl.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/impl/EventReceiverServiceImpl.java
index 5f01bb319..bfee9eeb6 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/impl/EventReceiverServiceImpl.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/impl/EventReceiverServiceImpl.java
@@ -79,7 +79,7 @@ public class EventReceiverServiceImpl implements EventReceiverService {
};
try {
if (AndroidAPIUtils.getEventPublisherService().publishEvent(
- EVENT_STREAM_DEFINITION, "1.0.0", metaData, new Object[0], payload)) {
+ EVENT_STREAM_DEFINITION, "1.0.0", new Object[0], new Object[0], payload)) {
message.setResponseCode("Event is published successfully.");
return Response.status(Response.Status.CREATED).entity(message).build();
} else {
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml
new file mode 100644
index 000000000..36155b385
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+ android-plugin
+ org.wso2.carbon.devicemgt-plugins
+ 4.0.6-SNAPSHOT
+ ../pom.xml
+
+
+ 4.0.0
+ org.wso2.carbon.device.mgt.mobile.android.emulator
+ AndroidTryIt Emulator
+ Android Virtual Device
+
+
+ EmulatorJava
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ true
+ lib/
+ org.carbon.android.emulator.TryIt
+
+
+
+
+
+
+
+
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java
new file mode 100644
index 000000000..e1ad6c630
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2017, 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.carbon.android.emulator;
+
+import java.io.File;
+
+/**
+ * This class has the constant strings used and the system properties.
+ */
+class Constants {
+ static final String OS_NAME_PROPERTY = "os.name";
+ static final String USER_HOME_PROPERTY = "user.home";
+ static final String USER_DIRECTORY_PROPERTY = "user.dir";
+ static final String MAC_OS = "macosx";
+ static final String MAC = "mac";
+ static final String WINDOWS_OS = "windows";
+ static final String WINDOWS_EXTENSION_EXE = ".exe";
+ static final String WINDOWS_EXTENSION_BAT = ".bat";
+ static final String MAC_HAXM_EXTENSION = ".sh";
+ static final String MAC_DARWIN = "darwin";
+ // System properties
+ static final String SDK_TOOLS_URL = "sdk.tools.url";
+ static final String PLATFORM_TOOLS_URL = "platform.tools.url";
+ static final String BUILD_TOOL_URL = "build.tools.url";
+ static final String PLATFORM_URL = "platform.url";
+ static final String SYSTEM_IMAGE_URL = "sys.img.url";
+ static final String HAXM_URL = "haxm.url";
+ static final String DOWNLOADED_BUILD_TOOL_NAME = "downloaded.build.tool.name";
+ static final String BUILD_TOOLS_VERSION = "build.tool.version";
+ static final String DOWNLOADED_PLATFORM_NAME = "downloaded.platform.name";
+ static final String TARGET_VERSION = "target.version";
+ static final String OS_TARGET = "os.target";
+ // WSO2 AVD specific variables
+ static final String WSO2_AVD_NAME = "WSO2_AVD";
+ static final String APK_LOCATION = File.separator + "resources" + File.separator + "android-agent.apk";
+ static final String WSO2_CONFIG_LOCATION = File.separator + "resources" + File.separator + "config.ini";
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java
new file mode 100644
index 000000000..51ee83acf
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java
@@ -0,0 +1,886 @@
+/*
+* Copyright (c) 2017, 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.carbon.android.emulator;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Scanner;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+/**
+ * This class creates an Android TryIt Emulator to be used as virtual device to connect to WSO2 IOT Cloud
+ * or Product-iot.
+ */
+public class TryIt {
+ private String osSuffix;
+ private String androidSdkHome;
+ private String userHome;
+ private String workingDirectory;
+ private String adbLocation; // location of executable file abd
+ private String emulatorLocation; // location of executable file emulator
+ private File sdkConfigFile; // file in which SDK location is written
+
+ /**
+ * This method gets the system specific variables.
+ */
+ private TryIt() {
+ osSuffix = System.getProperty(Constants.OS_NAME_PROPERTY);
+ if (osSuffix == null) {
+ sysPropertyError(Constants.OS_NAME_PROPERTY, "OS Name");
+ } else {
+ osSuffix = osSuffix.toLowerCase();
+ }
+ userHome = System.getProperty(Constants.USER_HOME_PROPERTY);
+ if (userHome == null) {
+ sysPropertyError(Constants.USER_HOME_PROPERTY, "Home Directory");
+ }
+ workingDirectory = System.getProperty(Constants.USER_DIRECTORY_PROPERTY);
+ if (workingDirectory == null) {
+ sysPropertyError(Constants.USER_DIRECTORY_PROPERTY, "Current Working Directory");
+ }
+ if (osSuffix.contains(Constants.WINDOWS_OS)) {
+ osSuffix = Constants.WINDOWS_OS;
+ }
+ if (osSuffix.contains(Constants.MAC)) {
+ osSuffix = Constants.MAC_OS;
+ }
+ System.out.println("Detected OS " + osSuffix);
+ }
+
+ /**
+ * This method creates an android virtual device.
+ *
+ * @param args commandline arguments.
+ */
+ public static void main(String[] args) {
+ TryIt tryIt = new TryIt();
+ tryIt.setAndroidSDK();
+ tryIt.checkBuildTools();
+ tryIt.startAVD();
+ tryIt.checkEmulatorBoot();
+ String[] agents = tryIt.checkForAgent();
+ System.out.println("Starting Agent ...");
+ tryIt.startPackage(agents);
+ ProcessBuilder startShellProcessBuilder = new ProcessBuilder(tryIt.adbLocation, "shell");
+ try {
+ startShellProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT);
+ startShellProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
+ Process startShell = startShellProcessBuilder.start();
+ System.out.println("Connected to device shell");
+ startShell.waitFor();
+ } catch (IOException e) {
+ tryIt.handleException("Unable to start the shell", e);
+ } catch (InterruptedException ignored) {
+ //
+ }
+ System.out.println("\nGood Bye!");
+ }
+
+
+ /**
+ * This method downloads the artifacts from remote url.
+ *
+ * @param remotePath - remote url
+ * @param localPath - local path to download
+ */
+ private void downloadArtifacts(String remotePath, String localPath) {
+ BufferedInputStream in = null;
+ FileOutputStream out = null;
+ long startingTime = System.currentTimeMillis();
+
+ try {
+ URL url = new URL(remotePath);
+ URLConnection conn = url.openConnection();
+ int size = conn.getContentLength();
+ in = new BufferedInputStream(url.openStream());
+ out = new FileOutputStream(localPath);
+ byte data[] = new byte[1024];
+ int count;
+ double sumCount = 0.0;
+
+ while ((count = in.read(data, 0, 1024)) != -1) {
+ out.write(data, 0, count);
+ sumCount += count;
+ if ((size > 0 && (System.currentTimeMillis() - startingTime > 5000))
+ || (sumCount / size * 100.0) == 100) {
+ System.out.println("Downloading: "
+ + new DecimalFormat("#.##").format((sumCount / size * 100.0)) + " %");
+ startingTime = System.currentTimeMillis();
+ }
+ }
+ } catch (MalformedURLException e) {
+ System.out.println("Error in download URL of " + localPath);
+ System.out.println("URL provided " + remotePath);
+ } catch (IOException e) {
+ if (!new File(localPath).delete()) {
+ System.out.println("Delete " + localPath + " and try again");
+ }
+ handleException("Downloading " + localPath + " failed.", e);
+ } finally {
+ if (in != null)
+ try {
+ in.close();
+ } catch (IOException ignored) {
+ //
+ }
+ if (out != null)
+ try {
+ out.close();
+ } catch (IOException ignored) {
+ //
+ }
+ }
+ }
+
+ /**
+ * This method is called when then is an error in getting system properties
+ *
+ * @param property -property type
+ * @param hint - property name
+ */
+ private void sysPropertyError(String property, String hint) {
+ System.out.println("Unable to get the " + property + " property of your system (" + hint + ")");
+ System.exit(1);
+ }
+
+ /**
+ * This method validates the Android SDK location provided by the user and write it to the file
+ * sdkConfigFile.
+ */
+ private void setSDKPath() {
+ System.out.println("Please provide android SDK location : ");
+ String response = new Scanner(System.in, StandardCharsets.UTF_8.toString()).next();
+ String emulatorLocationPath = response + File.separator + "tools" + File.separator + "emulator";
+ if (osSuffix.equals(Constants.WINDOWS_OS)) {
+ emulatorLocationPath += Constants.WINDOWS_EXTENSION_BAT;
+ }
+ if (new File(emulatorLocationPath).exists()) {
+ androidSdkHome = response;
+ writeToSdkConfigFile(response);
+ } else {
+ System.out.println("Invalid SDK location");
+ setSDKPath();
+ }
+ }
+
+ /**
+ * This method writes the SDK location to a file sdkConfigFile for future use.
+ *
+ * @param string - SDK location.
+ */
+ private void writeToSdkConfigFile(String string) {
+ Writer writer = null;
+ try {
+ writer = new OutputStreamWriter(new FileOutputStream(sdkConfigFile), StandardCharsets.UTF_8);
+ writer.write(string);
+ } catch (IOException e) {
+ System.out.println("Writing to " + sdkConfigFile.toString() + " failed.");
+ } finally {
+ try {
+ if (writer != null) {
+ writer.close();
+ }
+ } catch (IOException ignored) {
+ //
+ }
+ }
+ }
+
+
+ /**
+ * This method creates a folder named android-sdk and downloads the minimum tools for SDK
+ * and write the sdk-location to the file sdkConfigFile.
+ */
+ private void getAndroidSDK() {
+ String androidSdkFolderName = "android-sdk";
+ if (!new File(workingDirectory + File.separator + androidSdkFolderName).exists()) {
+ if (!new File(workingDirectory + File.separator + androidSdkFolderName).mkdir()) {
+ System.out.println("Unable to make folder named " + androidSdkFolderName + " in " + workingDirectory);
+ System.exit(1);
+ }
+ }
+ androidSdkHome = workingDirectory + File.separator + androidSdkFolderName;
+ getTools(System.getProperty(Constants.SDK_TOOLS_URL), "_Android-sdk-tools.zip");
+ getTools(System.getProperty(Constants.PLATFORM_TOOLS_URL), "_Android-platform-tools.zip");
+ writeToSdkConfigFile(androidSdkHome);
+ }
+
+ /**
+ * This method downloads and extracts the tools.
+ *
+ * @param url - the URL to download from.
+ * @param folderName - the folder name where to download.
+ */
+ private void getTools(String url, String folderName) {
+ System.out.println("Downloading " + folderName);
+ downloadArtifacts(url, androidSdkHome + File.separator + folderName);
+ System.out.println("Configuring " + folderName);
+ extractFolder(androidSdkHome + File.separator + folderName);
+ }
+
+ /**
+ * This method starts the AVD specified by the user.
+ */
+ private void startAVD() {
+ String wso2AvdLocation = userHome + File.separator + ".android" + File.separator + "avd" + File.separator
+ + Constants.WSO2_AVD_NAME + ".avd";
+ checkForPlatform();
+ checkForSystemImages();
+ if (!new File(wso2AvdLocation).isDirectory()) {
+ Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString());
+ System.out.print("Do you want to create WSO2_AVD with default configs (Y/n)?: ");
+ if (read.next().toLowerCase().matches("y")) {
+ createAVD();
+ return;
+ }
+ }
+ System.out.println("+----------------------------------------------------------------+");
+ System.out.println("| WSO2 Android TryIt |");
+ System.out.println("+----------------------------------------------------------------+");
+
+ emulatorLocation = androidSdkHome + File.separator + "tools" + File.separator + "emulator";
+ if (osSuffix.equals(Constants.WINDOWS_OS)) {
+ emulatorLocation += Constants.WINDOWS_EXTENSION_EXE;
+ }
+ setExecutePermission(emulatorLocation);
+ listAVDs();
+ }
+
+ /**
+ * This method gets the available AVDs' name from the system.
+ */
+ private void listAVDs() {
+ ArrayList devices = new ArrayList<>();
+ BufferedReader reader = null;
+ try {
+ ProcessBuilder listAVDsProcessBuilder = new ProcessBuilder(emulatorLocation, "-list-avds");
+ Process listAVDsProcess = listAVDsProcessBuilder.start();
+ reader = new BufferedReader(new InputStreamReader(listAVDsProcess.getInputStream(),
+ StandardCharsets.UTF_8.toString()));
+ String readLine;
+ while ((readLine = reader.readLine()) != null) {
+ devices.add(readLine);
+ }
+ selectAVD(devices);
+ } catch (IOException e) {
+ handleException("Unable to list the available AVDs", e);
+ } finally {
+ try {
+ if (reader != null) {
+ reader.close();
+ }
+ } catch (IOException ignored) {
+ // exception in finally block
+ }
+ }
+ }
+
+ /**
+ * This method makes the thread wait.
+ *
+ * @param milliSec -time to wait for
+ */
+ private void delay(long milliSec) {
+ try {
+ Thread.sleep(milliSec);
+ } catch (InterruptedException ignored) {
+ // interruption in main thread
+ }
+ }
+
+ /**
+ * This method enables the user to select an AVD form available AVDs.
+ *
+ * @param devices - list of available AVDs.
+ */
+ private void selectAVD(ArrayList devices) {
+ if (devices.size() == 0) {
+ System.out.println("No AVDs available in the system ");
+ startAVD();
+ } else if (devices.size() == 1) {
+ runEmulator(devices.get(0));
+ } else {
+ System.out.println("\nAvailable AVDs in the system\n");
+ int count = 1;
+ for (String device : devices) {
+ System.out.println(count + ") " + device);
+ count++;
+ }
+ System.out.print("\nEnter AVD number to start (eg: 1) :");
+ Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString());
+ int avdNo = read.nextInt();
+ runEmulator(devices.get(--avdNo));
+ }
+ }
+
+ /**
+ * This method creates WSO2_AVD with the specific configurations.
+ */
+ private void createAVD() {
+ String avdManagerPath = androidSdkHome + File.separator + "tools" + File.separator + "bin"
+ + File.separator + "avdmanager";
+ String androidPath = androidSdkHome + File.separator + "tools" + File.separator + "android";
+ if (osSuffix.equals(Constants.WINDOWS_OS)) {
+ avdManagerPath += Constants.WINDOWS_EXTENSION_BAT;
+ androidPath += Constants.WINDOWS_EXTENSION_BAT;
+ }
+ setExecutePermission(androidPath);
+ System.out.println("Creating a new AVD device");
+ try {
+ if (new File(avdManagerPath).exists()) {
+ setExecutePermission(avdManagerPath);
+ ProcessBuilder createAvdProcessBuilder = new ProcessBuilder(avdManagerPath, "create", "avd", "-k",
+ "system-images;android-23;default;x86", "-n", Constants.WSO2_AVD_NAME);
+ createAvdProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT);
+ createAvdProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
+ Process createAvdProcess = createAvdProcessBuilder.start();
+ createAvdProcess.waitFor();
+ } else {
+ ProcessBuilder createAvd = new ProcessBuilder(androidPath, "create", "avd", "-n",
+ Constants.WSO2_AVD_NAME, "-t", "android-23");
+ createAvd.redirectInput(ProcessBuilder.Redirect.INHERIT);
+ createAvd.redirectOutput(ProcessBuilder.Redirect.INHERIT);
+ Process createAvdProcess = createAvd.start();
+ createAvdProcess.waitFor();
+ }
+ } catch (IOException e) {
+ handleException("Unable to create " + Constants.WSO2_AVD_NAME, e);
+ } catch (InterruptedException ignored) {
+ // interruption in main thread
+ }
+ copyDefaultWSO2Configs();
+ startAVD();
+ }
+
+ /**
+ * This method replaces the default configurations provided in the resources to the WSoO2 AVD created
+ */
+ private void copyDefaultWSO2Configs() {
+ String configFileLocation = workingDirectory + Constants.WSO2_CONFIG_LOCATION;
+ String wso2ConfigFile = userHome + File.separator + ".android" + File.separator + "avd" + File.separator
+ + Constants.WSO2_AVD_NAME + ".avd" + File.separator + "config.ini";
+ try {
+ Files.copy(Paths.get(configFileLocation), Paths.get(wso2ConfigFile), StandardCopyOption.REPLACE_EXISTING);
+ } catch (IOException ignored) {
+ System.out.println("WARN : Failed to have WSO2 default AVD configurations");
+ }
+ }
+
+ /**
+ * This method runs the Android Emulator for the name specified by deviceId.
+ *
+ * @param deviceId String name of the device.
+ */
+ private void runEmulator(String deviceId) {
+ if (osSuffix.equals(Constants.MAC_OS) || osSuffix.equals(Constants.WINDOWS_OS)) {
+ installHAXM();
+ }
+ System.out.println("Starting : " + deviceId);
+ startEmulator(deviceId);
+ checkCacheImg(deviceId);
+ }
+
+ /**
+ * This method checks for the availability of android build tools in SDK location to run the AVD.
+ */
+ private void checkBuildTools() {
+ File buildTools = new File(androidSdkHome + File.separator + "build-tools"
+ + File.separator + System.getProperty(Constants.BUILD_TOOLS_VERSION));
+ if (!buildTools.exists()) {
+ getTools(System.getProperty(Constants.BUILD_TOOL_URL), "_Android-build-tool.zip");
+ File buildTool = new File(androidSdkHome + File.separator
+ + System.getProperty(Constants.DOWNLOADED_BUILD_TOOL_NAME));
+ if (!new File(androidSdkHome + File.separator + "build-tools").exists()
+ && !new File(androidSdkHome + File.separator + "build-tools").mkdir()) {
+ makeDirectoryError("build-tools", androidSdkHome);
+ }
+ buildTool.renameTo(new File(androidSdkHome + File.separator + "build-tools"
+ + File.separator + System.getProperty(Constants.BUILD_TOOLS_VERSION)));
+ }
+ }
+
+ /**
+ * This method make sure whether the directory can be created.
+ *
+ * @param name - name of the folder to be made
+ * @param location - location to make folder
+ */
+ private void makeDirectoryError(String name, String location) {
+ System.out.println("Unable to make folder named " + name + " in " + location);
+ System.exit(1);
+ }
+
+ /**
+ * This method halts the system until the emulator is fully booted
+ * if boot process is not completed successfully, rest of the tasks won't be continued.
+ */
+ private void checkEmulatorBoot() {
+ BufferedReader reader = null;
+ String readLine;
+ Boolean sysBootComplete = false;
+ do {
+ ProcessBuilder systemBoot = new ProcessBuilder(adbLocation, "shell", "getprop",
+ "sys.boot_completed");
+ try {
+ Process systemBootProcess = systemBoot.start();
+ systemBootProcess.waitFor();
+ reader = new BufferedReader(new InputStreamReader(systemBootProcess.getInputStream(),
+ StandardCharsets.UTF_8));
+ while ((readLine = reader.readLine()) != null) {
+ // if boot process is success the process gives 1 as output
+ if (readLine.contains("1")) {
+ sysBootComplete = true;
+ }
+ }
+ System.out.print(".");
+ delay(1000);
+ } catch (IOException e) {
+ System.out.println("WARN : Unable to check boot process");
+ } catch (InterruptedException ignored) {
+ //interruption in main thread
+ } finally {
+ try {
+ if (reader != null) {
+ reader.close();
+ }
+ } catch (IOException ignored) {
+ }
+ }
+ } while (!sysBootComplete);
+ System.out.println();
+ }
+
+ /**
+ * This method gets the Android SDK location if available and sets the SDK path else downloads the SDK.
+ */
+ private void setAndroidSDK() {
+ sdkConfigFile = new File("sdkConfigLocation");
+ if (!(sdkConfigFile.exists() && !sdkConfigFile.isDirectory())) {
+ //TODO
+ Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString());
+ System.out.print("Do you have an Android SDK installed on your computer (y/N) ? : ");
+ String response = read.next().toLowerCase();
+ if (response.matches("y")) {
+ setSDKPath();
+ } else {
+ getAndroidSDK();
+ }
+ } else {
+ Scanner scanner = null;
+ try {
+ scanner = new Scanner(sdkConfigFile, StandardCharsets.UTF_8.toString());
+ androidSdkHome = scanner.useDelimiter("\\Z").next();
+ } catch (FileNotFoundException ignored) {
+ //
+ } finally {
+ if (scanner != null) {
+ scanner.close();
+ }
+ }
+ }
+ adbLocation = androidSdkHome + File.separator + "platform-tools" + File.separator + "adb";
+ if (osSuffix.equals(Constants.WINDOWS_OS)) {
+ adbLocation += Constants.WINDOWS_EXTENSION_EXE;
+ }
+ setExecutePermission(adbLocation);
+ }
+
+ /**
+ * this method prints the exception and terminate the program.
+ *
+ * @param message -exception method to be printed
+ * @param ex - exception caught
+ */
+ private void handleException(String message, Exception ex) {
+ System.out.println(message);
+ ex.printStackTrace();
+ System.exit(1);
+ }
+
+ /**
+ * This method check for the android agent in the specified AVD and installs it if not available.
+ *
+ * @return package name and act name.
+ */
+ private String[] checkForAgent() {
+ String pkg = null;
+ String activity = null;
+ String readLine;
+ BufferedReader reader = null;
+ String apkFileLocation = workingDirectory + Constants.APK_LOCATION;
+ String aaptLocation = androidSdkHome + File.separator + "build-tools" + File.separator
+ + System.getProperty(Constants.BUILD_TOOLS_VERSION) + File.separator + "aapt";
+ if (osSuffix.equals(Constants.WINDOWS_OS)) {
+ aaptLocation += Constants.WINDOWS_EXTENSION_EXE;
+ }
+ setExecutePermission(aaptLocation);
+ ProcessBuilder badgingApkFileProcessBuilder = new ProcessBuilder(aaptLocation, "d", "badging",
+ apkFileLocation);
+ try {
+ Process badgingApkFileProcess = badgingApkFileProcessBuilder.start();
+ reader = new BufferedReader(new InputStreamReader(badgingApkFileProcess.getInputStream(),
+ StandardCharsets.UTF_8));
+ while ((readLine = reader.readLine()) != null) {
+ if (readLine.contains("package")) {
+ Pattern pattern = Pattern.compile("'(.*?)'");
+ Matcher matcher = pattern.matcher(readLine);
+ if (matcher.find()) {
+ pkg = matcher.group(1);
+ }
+ }
+ if (readLine.contains("launchable-activity")) {
+ Pattern pattern = Pattern.compile("'(.*?)'");
+ Matcher matcher = pattern.matcher(readLine);
+ if (matcher.find()) {
+ activity = matcher.group(1);
+ }
+ }
+ }
+ } catch (IOException ignored) {
+ System.out.println("WARN : Failed to get the available packages");
+ } finally {
+ if (reader != null) {
+ try {
+ reader.close();
+ } catch (IOException ignored) {
+ //
+ }
+ }
+ }
+ if (!checkForPackage(pkg)) {
+ installAgent();
+ }
+ return new String[]{pkg, activity};
+ }
+
+ /**
+ * This method check whether the package is available in the AVD.
+ *
+ * @param pkg - name og package to check for.
+ * @return - available or not.
+ */
+ private boolean checkForPackage(String pkg) {
+ String readLine;
+ BufferedReader reader = null;
+ Boolean hasAgent = false;
+ ProcessBuilder listPackages = new ProcessBuilder(adbLocation, "shell", "pm", "list", "packages");
+ try {
+ Process listPackagesProcess = listPackages.start();
+ listPackagesProcess.waitFor();
+ reader = new BufferedReader(new InputStreamReader(listPackagesProcess.getInputStream(),
+ StandardCharsets.UTF_8));
+ while ((readLine = reader.readLine()) != null) {
+ if (readLine.contains("package:" + pkg)) {
+ hasAgent = true;
+ }
+ }
+ } catch (IOException | InterruptedException ignored) {
+ System.out.println("WARN : Failed to check the available packages, agent will be installed");
+ } finally {
+ try {
+ if (reader != null) {
+ reader.close();
+ }
+ } catch (IOException ignored) {
+ //
+ }
+ }
+ return hasAgent;
+ }
+
+ /**
+ * This method installs the Android Agent ( WSO2 iot agent ).
+ */
+ private void installAgent() {
+ String androidAgentLocation = workingDirectory + Constants.APK_LOCATION;
+ System.out.println("Installing agent ...");
+ ProcessBuilder installAgentProcessBuilder = new ProcessBuilder(adbLocation, "install",
+ androidAgentLocation);
+ try {
+ Process installAgentProcess = installAgentProcessBuilder.start();
+ installAgentProcess.waitFor();
+ } catch (Exception e) {
+ System.out.println("WSO2 Agent installation failed");
+ //TODO
+ Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString());
+ System.out.println("Do you want to install agent again (Y/N) ? ");
+ if (read.next().toLowerCase().matches("y")) {
+ installAgent();
+ }
+ }
+ }
+
+ /**
+ * This method starts the package (wso2.iot.agent).
+ *
+ * @param agents package name and launchable activity name.
+ */
+ private void startPackage(String[] agents) {
+ String pkg = agents[0];
+ String activity = agents[1];
+ ProcessBuilder pkgStartProcessBuilder = new ProcessBuilder(adbLocation, "shell", "am", "start",
+ "-n", pkg + "/" + activity);
+ try {
+ Process pkgStartProcess = pkgStartProcessBuilder.start();
+ pkgStartProcess.waitFor();
+ } catch (InterruptedException ignored) {
+ //
+ } catch (IOException e) {
+ handleException("Unable to start WSO2 package", e);
+ }
+ }
+
+ /**
+ * This method checks for the availability of Android Platform in SDK and if not available downloads it.
+ */
+ private void checkForPlatform() {
+ File platform = new File(androidSdkHome + File.separator + "platforms" + File.separator
+ + System.getProperty(Constants.TARGET_VERSION));
+ if (!platform.isDirectory()) {
+ getTools(System.getProperty(Constants.PLATFORM_URL), "_Android-platforms.zip");
+ if (!new File(androidSdkHome + File.separator + "platforms").exists()
+ && !new File(androidSdkHome + File.separator + "platforms").mkdir()) {
+ makeDirectoryError("platforms", androidSdkHome);
+ }
+ //noinspection ResultOfMethodCallIgnored
+ new File(androidSdkHome + File.separator + System.getProperty(Constants.DOWNLOADED_PLATFORM_NAME)).
+ renameTo(new File(androidSdkHome + File.separator + "platforms"
+ + File.separator + System.getProperty(Constants.TARGET_VERSION)));
+ }
+ }
+
+ /**
+ * This method checks for the system images in the Android SDK and downloads if not available.
+ */
+ private void checkForSystemImages() {
+ File systemImages = new File(androidSdkHome + File.separator + "system-images"
+ + File.separator + System.getProperty(Constants.TARGET_VERSION) + File.separator + "default");
+
+ if (!systemImages.isDirectory()) {
+ getTools(System.getProperty(Constants.SYSTEM_IMAGE_URL), "_sys-images.zip");
+ //noinspection ResultOfMethodCallIgnored
+ new File(androidSdkHome + File.separator + "system-images" + File.separator
+ + System.getProperty(Constants.TARGET_VERSION) + File.separator + "default").mkdirs();
+ //noinspection ResultOfMethodCallIgnored
+ new File(androidSdkHome + File.separator + System.getProperty(Constants.OS_TARGET))
+ .renameTo(new File(androidSdkHome + File.separator + "system-images" + File.separator
+ + System.getProperty(Constants.TARGET_VERSION) + File.separator + "default"
+ + File.separator + System.getProperty(Constants.OS_TARGET)));
+ }
+ }
+
+ /**
+ * This method install Hardware_Accelerated Execution_Manager in mac and windows os.
+ */
+ private void installHAXM() {
+ String haxmLocation = androidSdkHome + File.separator + "extras" + File.separator + "intel"
+ + File.separator + "Hardware_Accelerated_Execution_Manager";
+
+ if (!new File(haxmLocation).isDirectory()) {
+ //System.out.println("Downloading intel HAXM...");
+ if (!new File(haxmLocation).mkdirs()) {
+ makeDirectoryError(haxmLocation, androidSdkHome);
+ }
+ String folderName = "_haxm.zip";
+ getTools(System.getProperty(Constants.HAXM_URL), haxmLocation + File.separator
+ + folderName);
+ String haxmInstaller = haxmLocation + File.separator + "silent_install";
+ if (osSuffix.equals(Constants.WINDOWS_OS)) {
+ haxmInstaller += Constants.WINDOWS_EXTENSION_BAT;
+ } else {
+ haxmInstaller += Constants.MAC_HAXM_EXTENSION;
+ }
+ setExecutePermission(haxmInstaller);
+
+ ProcessBuilder processBuilder = new ProcessBuilder(haxmInstaller, "-m", "2048", "-log",
+ workingDirectory + File.separator + "haxmSilentRun.log");
+ processBuilder.directory(new File(haxmLocation));
+ processBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT);
+ processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
+ try {
+ Process process = processBuilder.start();
+ process.waitFor();
+ } catch (IOException | InterruptedException e) {
+ System.out.println("HAXM installation failed, install HAXM and try again");
+ }
+ System.out.println("Please restart your machine and run again.");
+ System.exit(0);
+ }
+ }
+
+ /**
+ * This method starts the Android emulator for specific device name.
+ *
+ * @param deviceId - name of the device to start the emulator.
+ */
+ private void startEmulator(String deviceId) {
+ String qemuSystemFileLocation = androidSdkHome + File.separator + "tools" + File.separator
+ + "qemu" + File.separator;
+
+ switch (osSuffix) {
+ case Constants.MAC_OS:
+ qemuSystemFileLocation += Constants.MAC_DARWIN + "-x86_64" + File.separator + "qemu-system-i386";
+ break;
+ case Constants.WINDOWS_OS:
+ qemuSystemFileLocation += osSuffix + "-x86_64" + File.separator + "qemu-system-i386.exe";
+ break;
+ default:
+ qemuSystemFileLocation += osSuffix + "-x86_64" + File.separator + "qemu-system-i386";
+ }
+ killServer();
+ setExecutePermission(qemuSystemFileLocation);
+ ExecutorService service = Executors.newSingleThreadExecutor();
+ service.execute(new TryItEmulator(deviceId, emulatorLocation));
+ }
+
+ /**
+ * This method ensures device properly starts.
+ */
+ private void killServer() {
+ ProcessBuilder processBuilderKillServer = new ProcessBuilder(adbLocation, "kill-server");
+ Process processKillServer = null;
+ try {
+ processKillServer = processBuilderKillServer.start();
+ } catch (IOException ignored) {
+ System.out.println("If the device doesn't start properly, stop running the script and restart again");
+ }
+ try {
+ if (processKillServer != null) {
+ processKillServer.waitFor();
+ }
+ } catch (InterruptedException ignored) {
+ System.out.println("If the device doesn't start properly, stop running the script and restart again");
+ }
+ }
+
+ /**
+ * This method halts the system the cache.img file is created for the particular AVD started.
+ *
+ * @param deviceId - name of the AVD.
+ */
+ private void checkCacheImg(String deviceId) {
+ File cacheImg = new File(userHome + File.separator + ".android"
+ + File.separator + "avd" + File.separator + deviceId + ".avd" + File.separator + "cache.img");
+ while (!cacheImg.exists()) {
+ System.out.print(".");
+ delay(1000);
+ }
+ System.out.println();
+ }
+
+ /**
+ * This method sets the executable permission for the specified file,
+ * if the files are not the executable, the process cannot be continued.
+ *
+ * @param fileName name of the file to set execution permission.
+ */
+ private void setExecutePermission(String fileName) {
+ if (!new File(fileName).canExecute()) {
+ if (!new File(fileName).setExecutable(true)) {
+ System.out.println("Unable to set the execute permission of : " + fileName);
+ System.out.println("Please set the executable permission for file "
+ + new File(fileName).getAbsolutePath() + " to continue");
+ System.exit(1); // if can't execute, unable to proceed
+ }
+ }
+ }
+
+ /**
+ * This method extracts the zip folder.
+ *
+ * @param zipFile -Name of zip to extract
+ */
+ private void extractFolder(String zipFile) {
+ int BUFFER = 2048;
+ File file = new File(zipFile);
+ ZipFile zip;
+ try {
+ zip = new ZipFile(file);
+ String newPath = zipFile.substring(0, zipFile.lastIndexOf(File.separator));
+ new File(newPath).mkdirs();
+ Enumeration zipFileEntries = zip.entries();
+ while (zipFileEntries.hasMoreElements()) {
+ // grab a zip file entry
+ ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();
+ String currentEntry = entry.getName();
+ File destFile = new File(newPath, currentEntry);
+ File destinationParent = destFile.getParentFile();
+ if (destinationParent == null) {
+ destFile.mkdirs();
+ continue;
+ } else {
+ //noinspection ResultOfMethodCallIgnored
+ destinationParent.mkdirs();
+ }
+ if (!entry.isDirectory()) {
+ BufferedInputStream is;
+ try {
+ is = new BufferedInputStream(zip.getInputStream(entry));
+ int currentByte;
+ // establish buffer for writing file
+ byte data[] = new byte[BUFFER];
+ // write the current file to disk
+ FileOutputStream fos = new FileOutputStream(destFile);
+ BufferedOutputStream dest = new BufferedOutputStream(fos,
+ BUFFER);
+ // read and write until last byte is encountered
+ while ((currentByte = is.read(data, 0, BUFFER)) != -1) {
+ dest.write(data, 0, currentByte);
+ }
+ dest.flush();
+ dest.close();
+ is.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.exit(0);
+ }
+ }
+ }
+ zip.close();
+ } catch (IOException e) {
+ handleException("Extraction of " + zipFile + " failed", e);
+ }
+ if (!new File(zipFile).delete()) {
+ System.out.println("Downloaded zip : " + zipFile + " - not deleted");
+ }
+ }
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java
new file mode 100644
index 000000000..d4ddd2265
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2017, 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.carbon.android.emulator;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * This class starts the Emulator with the name ID specified and log the output to emulator.log.
+ */
+public class TryItEmulator implements Runnable {
+ private String deviceId; // name of the AVD to start
+ private String emulatorLocation; // location of the executable file emulator
+
+ TryItEmulator(String id, String emulator) {
+ deviceId = id;
+ emulatorLocation = emulator;
+ }
+
+ public void run() {
+ String readLine;
+ BufferedReader reader = null;
+ Writer writer = null;
+ ProcessBuilder processBuilder = new ProcessBuilder(emulatorLocation, "-avd", deviceId);
+ try {
+ Process process = processBuilder.start();
+ reader = new BufferedReader(new InputStreamReader(process.getInputStream(),
+ StandardCharsets.UTF_8));
+ writer = new OutputStreamWriter(new FileOutputStream(new File("emulator.log")),
+ StandardCharsets.UTF_8);
+ while ((readLine = reader.readLine()) != null) {
+ writer.append(readLine);
+ }
+ } catch (IOException e) {
+ System.out.println("Error in starting " + deviceId);
+ e.printStackTrace();
+ } finally {
+ try {
+ if (reader != null) {
+ reader.close();
+ }
+ if (writer != null) {
+ writer.close();
+ }
+ } catch (IOException ignored) {
+ //
+ }
+ }
+ System.exit(0);
+ }
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml
index 9fbdb7899..9e7710603 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml
@@ -20,16 +20,21 @@
-
+
-
+
-
-
-
+
+
+
+
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 498c0e159..f10a7d2a5 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,24 +23,50 @@
android-plugin
org.wso2.carbon.devicemgt-plugins
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.mobile.android.ui
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
WSO2 Carbon - Mobile Android UI
pom
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-jar
+ package
+
+ copy
+
+
+
+
+ org.wso2.carbon.devicemgt-plugins
+ org.wso2.carbon.device.mgt.mobile.android.emulator
+ ${project.version}
+ true
+ ${project.basedir}/target/
+
+ JavaApp.jar
+
+
+
+
+
+
maven-antrun-plugin
${maven-antrun-plugin.version}
- process-resources
+ package
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml
index 579924f81..d66b520d5 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml
@@ -46,10 +46,11 @@
- /devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/
+ /devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/
+
755
-
\ No newline at end of file
+
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md
index e9c1f1123..6c5e13ae7 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md
@@ -1,21 +1,20 @@
Prerequisites
===============
-1. You should have curl in your computer.
-2. Java 7 or higher.
+1. Java 8.
-Instructions
-=================
+Instructions
+============
-1. Run 'start' script in your terminal.
+1. For Linux/Mac : Run 'startEmulator.sh' script in your terminal from the current directory.
+ For Windows : Run 'startEmulator.bat' script in your terminal from the current directory.
2. If you already have android sdk in your computer, please provide location of the sdk.
Otherwise this tool will download and install minimum SDK components which needs to run the emulator.
This is a one time process.
3. This tool will ask to create AVD if you don't have any in your computer.
Otherwise you can select existing AVD to try out IoT Agent.
-
Troubleshooting
==================
-1. If your exisitng SDK doen't work or giving any errors, delete 'sdklocation' file and try agin without selecting the existing SDK path.
+1. If your existing SDK does not work or giving any errors, delete 'sdkConfigLocation' file and try again without selecting the existing SDK path.
2. If your emulator does not start correctly, please remove all files and directories in $HOME/.android/avd/ directory. Then try again with a new emulator.
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/start b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/start
deleted file mode 100755
index 86f26699e..000000000
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/start
+++ /dev/null
@@ -1,244 +0,0 @@
-#!/bin/bash
-
-#Make sure we have got everything we need
-command -v curl >/dev/null || { echo "curl is not installed. Aborting." >&2; exit 1; }
-command -v unzip >/dev/null || { echo "unzip is not installed. Aborting." >&2; exit 1; }
-
-SCRIPT_HOME=$PWD
-
-OS_SUFFIX="linux"
-if [[ "$OSTYPE" == "darwin"* ]]; then
- OS_SUFFIX="macosx"
-fi
-
-downloadArtifacts() {
- curl -D headers -O $1
- httpStatus=$(head -1 headers | awk '{print $2}')
- [ "$httpStatus" != "200" ] && { echo "Download failed. Aborting." ; exit 1 ;}
- rm headers
- echo
-}
-
-setSDKPath () {
- echo -n "Please provide Android SDK location (ex: /mnt/tools/android-sdk):"
- read answer
- emulator="$answer/tools/emulator"
- if [ -f "$emulator" ]; then
- echo "$answer" > sdklocation
- else
- echo "Invalid SDK location"
- setSDKPath
- fi
-}
-
-getAndroidSDK() {
- echo
- echo "Downloading Android SDK tools..."
- mkdir android-sdk
- cd android-sdk
-
- downloadArtifacts "https://dl.google.com/android/repository/tools_r25.2.5-$OS_SUFFIX.zip"
- echo -n "Configuring Android SDK tools..."
- unzip -q tools_r25.2.5-$OS_SUFFIX.zip
- rm tools_r25.2.5-$OS_SUFFIX.zip
- echo " Done!"
-
- echo
- echo "Downloading Android platform tools..."
- downloadArtifacts "http://dl.google.com/android/repository/platform-tools_r25.0.3-$OS_SUFFIX.zip"
-
- echo -n "Configuring Android platform tools..."
- unzip -q platform-tools_r25.0.3-$OS_SUFFIX.zip
- rm platform-tools_r25.0.3-$OS_SUFFIX.zip
- cd ..
- echo "$PWD/android-sdk" > sdklocation
- echo " Done!"
-}
-
-createAVD() {
- if [ ! -d "$ANDROID_TRYIT_SDK_HOME/platforms/android-23" ]; then
- echo
- echo "Downloading Android platform..."
- cd $ANDROID_TRYIT_SDK_HOME
- downloadArtifacts "https://dl.google.com/android/repository/platform-23_r03.zip"
- echo -n "Configuring Android platform..."
- unzip -q platform-23_r03.zip
- mkdir -p platforms/android-23
- mv android-6.0/* platforms/android-23/
- rm -r android-6.0
- rm platform-23_r03.zip
- cd ..
- echo " Done!"
- fi
- if [ ! -d "$ANDROID_TRYIT_SDK_HOME/system-images/android-23/default" ]; then
- echo "Downloading Android system image..."
- cd $ANDROID_TRYIT_SDK_HOME
- downloadArtifacts "https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip"
- echo -n "Configuring Android system image..."
- unzip -q x86-23_r09.zip
- mkdir -p system-images/android-23/default
- mv x86 system-images/android-23/default
- rm x86-23_r09.zip
- cd ..
- echo " Done!"
- fi
- echo "Creating a new AVD device"
- if [ -f "$ANDROID_TRYIT_SDK_HOME/tools/bin/avdmanager" ]; then
- $ANDROID_TRYIT_SDK_HOME/tools/bin/avdmanager create avd -k 'system-images;android-23;default;x86' -n WSO2_AVD
- else
- $ANDROID_TRYIT_SDK_HOME/tools/android create avd -n WSO2_AVD -t android-23
- fi
- rm $HOME/.android/avd/WSO2_AVD.avd/config.ini
- cp $SCRIPT_HOME/resources/config.ini $HOME/.android/avd/WSO2_AVD.avd/
- startAVD
-}
-
-startAVD() {
- if [ ! -d "$HOME/.android/avd/WSO2_AVD.avd" ]; then
- echo -n "Looks you don't have the WSO2_AVD. Do you want to create WSO2_AVD with default configs (Y/n)?: "
- read answer
- if ! echo "$answer" | grep -iq "^n" ;then
- createAVD
- return
- fi
- fi
- echo
- echo "------------------------------"
- echo "Available AVDs in the system:"
- echo "------------------------------"
- devices=()
- count=0
- if [ ! -f "mypipe" ]; then
- mkfifo mypipe
- fi
- $ANDROID_TRYIT_SDK_HOME/tools/emulator -list-avds > mypipe &
- while IFS= read -r line
- do
- let count++
- echo "$count) $line"
- devices+=($line)
- done < mypipe
- rm mypipe
- echo "------------------------------"
- echo
- if [ $count = 0 ]; then
- echo -n "No AVDs found on your system. Do you want to create new AVD (Y/n)?: "
- read answer
- if echo "$answer" | grep -iq "^n" ;then
- exit;
- else
- createAVD
- fi
- elif [ $count = 1 ]; then
- runEmulator ${devices[0]}
- else
- echo -n "Enter AVD number to start (eg: 1): "
- read answer
- let answer--
- runEmulator ${devices[$answer]}
- fi
-}
-
-runEmulator(){
- if [ $OS_SUFFIX = "macosx" -a ! -d $ANDROID_TRYIT_SDK_HOME/extras/intel/Hardware_Accelerated_Execution_Manager ]; then
- cd $ANDROID_TRYIT_SDK_HOME
- echo "Downloading intel HAXM..."
- mkdir -p extras/intel/Hardware_Accelerated_Execution_Manager
- cd extras/intel/Hardware_Accelerated_Execution_Manager
- downloadArtifacts "https://dl.google.com/android/repository/extras/intel/haxm-macosx_r6_0_5.zip"
- echo -n "Configuring HAXM..."
- unzip -q haxm-macosx_r6_0_5.zip
- rm haxm-macosx_r6_0_5.zip
- ./"HAXM installation" -m 2048 -log $SCRIPT_HOME/haxm_silent_run.log
- echo " Done!"
- echo "Please restart your computer and run this script again."
- exit
- fi
- cd $SCRIPT_HOME
- $ANDROID_TRYIT_SDK_HOME/platform-tools/adb kill-server
- echo "Starting AVD $1"
- $ANDROID_TRYIT_SDK_HOME/tools/emulator -avd $1 > emulator.log &
- while [ ! -f "$HOME/.android/avd/$1.avd/cache.img" ]
- do
- sleep 1
- echo -n "."
- done
- count=0
- while [ $count -lt 5 ]
- do
- sleep 1
- echo -n "."
- let count++
- done
- echo
-}
-
-echo "+----------------------------------------------------------------+"
-echo "| WSO2 Android Tryit |"
-echo "+----------------------------------------------------------------+"
-echo "Detected OS: " $OSTYPE
-if [ ! -f "sdklocation" ]; then
- echo -n "Do you have an Android SDK installed on your computer (y/N)?: "
- read answer
- if echo "$answer" | grep -iq "^y" ;then
- setSDKPath
- else
- getAndroidSDK
- fi
-fi
-export ANDROID_TRYIT_SDK_HOME=$( mypipe &
-while IFS= read -r line
-do
- if [ $line = "package:$pkg" ]; then
- let hasAgent=true
- fi
-done < mypipe
-rm mypipe
-
-if [ $hasAgent = false ]; then
- echo
- echo "Installing agent..."
- cd $SCRIPT_HOME/resources
- $ANDROID_TRYIT_SDK_HOME/platform-tools/adb install android-agent.apk
-fi
-
-echo
-echo "Staring agent..."
-$ANDROID_TRYIT_SDK_HOME/platform-tools/adb shell am start -n $pkg/$act
-echo
-echo "Connected to device shell"
-$ANDROID_TRYIT_SDK_HOME/platform-tools/adb shell
-echo
-echo "Good bye!"
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat
new file mode 100755
index 000000000..aedb7fb05
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat
@@ -0,0 +1,17 @@
+@echo off
+echo Welcome
+
+java^
+ -Dsdk.tools.url="https://dl.google.com/android/repository/tools_r25.2.5-windows.zip"^
+ -Dplatform.tools.url="http://dl.google.com/android/repository/platform-tools_r25.0.3-windows.zip"^
+ -Dbuild.tools.url="https://dl.google.com/android/repository/build-tools_r25.0.2-windows.zip"^
+ -Dplatform.url="https://dl.google.com/android/repository/platform-23_r03.zip"^
+ -Dsys.img.url="https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip"^
+ -Dhaxm.url="https://dl.google.com/android/repository/extras/intel/haxm-windows_r6_0_5.zip"^
+ -Ddownloaded.build.tool.name="android-7.1.1"^
+ -Dbuild.tool.version="25.0.2"^
+ -Ddownloaded.platform.name="android-6.0"^
+ -Dtarget.version="android-23"^
+ -Dos.target="x86"^
+ -jar JavaApp.jar
+
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh
new file mode 100755
index 000000000..22b392208
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+echo Welcome
+
+OS_SUFFIX="linux"
+if [[ "$OSTYPE" == "darwin"* ]]; then
+ OS_SUFFIX="macosx"
+fi
+
+java\
+ -Dsdk.tools.url="https://dl.google.com/android/repository/tools_r25.2.5-$OS_SUFFIX.zip"\
+ -Dplatform.tools.url="http://dl.google.com/android/repository/platform-tools_r25.0.3-$OS_SUFFIX.zip"\
+ -Dbuild.tools.url="https://dl.google.com/android/repository/build-tools_r25.0.2-$OS_SUFFIX.zip"\
+ -Dplatform.url="https://dl.google.com/android/repository/platform-23_r03.zip"\
+ -Dsys.img.url="https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip"\
+ -Dhaxm.url="https://dl.google.com/android/repository/extras/intel/haxm-macosx_r6_0_5.zip"\
+ -Ddownloaded.build.tool.name="android-7.1.1"\
+ -Dbuild.tool.version="25.0.2"\
+ -Ddownloaded.platform.name="android-6.0"\
+ -Dtarget.version="android-23"\
+ -Dos.target="x86"\
+ -jar JavaApp.jar
+
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 09121c01f..a9cb25acb 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
@@ -50,25 +50,27 @@
{{/zone}}
{{#zone "device-details"}}
- {{#if device.deviceInfoAvailable}}
- {{#if device.BatteryLevel}}
- {{device.BatteryLevel.value}}%
- {{/if}}
- {{#if device.ramUsage}}
- {{device.ramUsage.value}}%
- {{/if}}
- {{#if device.internalMemory}}
- {{device.internalMemory.usage}}
- GB/{{device.internalMemory.total}}GB
- {{/if}}
- {{#if device.externalMemory}}
- {{device.externalMemory.usage}}
- GB/{{device.externalMemory.total}}GB
+
+ {{#if device.deviceInfoAvailable}}
+ {{#if device.BatteryLevel}}
+
{{device.BatteryLevel.value}}%
+ {{/if}}
+ {{#if device.ramUsage}}
+
{{device.ramUsage.value}}%
+ {{/if}}
+ {{#if device.internalMemory}}
+
{{device.internalMemory.usage}}
+ GB/{{device.internalMemory.total}}GB
+ {{/if}}
+ {{#if device.externalMemory}}
+
{{device.externalMemory.usage}}
+ GB/{{device.externalMemory.total}}GB
+ {{/if}}
+ {{else}}
+
Battery, RAM and Storage related information are not
+ available yet.
{{/if}}
- {{else}}
-
Battery, RAM and Storage related information are not
- available yet.
- {{/if}}
+
{{/zone}}
{{#zone "device-details-tab-injected"}}
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 d98431db5..9a1c330cc 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidDeviceManagementService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidDeviceManagementService.java
index 51c8cffd3..ce992492d 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidDeviceManagementService.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidDeviceManagementService.java
@@ -30,6 +30,7 @@ import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
import org.wso2.carbon.device.mgt.common.policy.mgt.PolicyMonitoringManager;
+import org.wso2.carbon.device.mgt.common.pull.notification.PullNotificationSubscriber;
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService;
import org.wso2.carbon.device.mgt.mobile.android.impl.util.AndroidPluginConstants;
@@ -121,6 +122,12 @@ public class AndroidDeviceManagementService implements DeviceManagementService {
return null;
}
+ @Override
+ public PullNotificationSubscriber getPullNotificationSubscriber() {
+ return null;
+ }
+
+ @Override
public DeviceStatusTaskPluginConfig getDeviceStatusTaskPluginConfig() {
return null;
}
diff --git a/components/mobile-plugins/android-plugin/pom.xml b/components/mobile-plugins/android-plugin/pom.xml
index 304098e22..9b6da809a 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
@@ -35,6 +35,7 @@
org.wso2.carbon.device.mgt.mobile.android
org.wso2.carbon.device.mgt.mobile.android.api
+ org.wso2.carbon.device.mgt.mobile.android.emulator
org.wso2.carbon.device.mgt.mobile.android.ui
diff --git a/components/mobile-plugins/pom.xml b/components/mobile-plugins/pom.xml
index e0d01625e..7c0023869 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 2627a921e..7cbe7ddab 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 9793ee3ce..6d8a319d8 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.mobile.windows.ui
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
WSO2 Carbon - Mobile Windows UI
pom
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 35eac6114..1fb4ef320 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
@@ -52,21 +52,23 @@
{{/zone}}
{{#zone "device-details"}}
- {{#if device.deviceInfoAvailable}}
- {{#if device.BatteryLevel}}
- {{device.BatteryLevel.value}}%
+
+ {{#if device.deviceInfoAvailable}}
+ {{#if device.BatteryLevel}}
+
{{device.BatteryLevel.value}}%
+ {{/if}}
+ {{#if device.ramUsage}}
+
{{device.ramUsage.value}} MB
+ {{/if}}
+ {{#if device.internalMemory}}
+
{{device.internalMemory.value}} GB
+
+ {{/if}}
+ {{else}}
+
Battery, RAM and Storage related information are not
+ available yet.
{{/if}}
- {{#if device.ramUsage}}
-
{{device.ramUsage.value}} MB
- {{/if}}
- {{#if device.internalMemory}}
-
{{device.internalMemory.value}} GB
-
- {{/if}}
- {{else}}
-
Battery, RAM and Storage related information are not
- available yet.
- {{/if}}
+
{{/zone}}
{{#zone "device-details-tab-injected"}}
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 f88797ec2..3a8b4394f 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/WindowsDeviceManagementService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/WindowsDeviceManagementService.java
index b6140b263..1bbd6a8e5 100644
--- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/WindowsDeviceManagementService.java
+++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/WindowsDeviceManagementService.java
@@ -21,6 +21,7 @@ package org.wso2.carbon.device.mgt.mobile.windows.impl;
import org.wso2.carbon.device.mgt.common.*;
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager;
import org.wso2.carbon.device.mgt.common.policy.mgt.PolicyMonitoringManager;
+import org.wso2.carbon.device.mgt.common.pull.notification.PullNotificationSubscriber;
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService;
@@ -80,6 +81,12 @@ public class WindowsDeviceManagementService implements DeviceManagementService {
return null;
}
+ @Override
+ public PullNotificationSubscriber getPullNotificationSubscriber() {
+ return null;
+ }
+
+ @Override
public DeviceStatusTaskPluginConfig getDeviceStatusTaskPluginConfig() {
return null;
}
diff --git a/components/mobile-plugins/windows-plugin/pom.xml b/components/mobile-plugins/windows-plugin/pom.xml
index 086290a69..f89ee1cad 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/analytics-feature/org.wso2.carbon.device.mgt.cdmf.analytics.feature/pom.xml b/features/analytics-feature/org.wso2.carbon.device.mgt.cdmf.analytics.feature/pom.xml
index eae803ab1..e74e7db88 100644
--- a/features/analytics-feature/org.wso2.carbon.device.mgt.cdmf.analytics.feature/pom.xml
+++ b/features/analytics-feature/org.wso2.carbon.device.mgt.cdmf.analytics.feature/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
analytics-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-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 0585b1006..bb09440e0 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.iot.analytics.feature
- 4.0.5-SNAPSHOT
+ 4.0.6-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 9975cbfe3..86931a431 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.iot.device.statistics.dashboard.feature
- 4.0.5-SNAPSHOT
+ 4.0.6-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 c371eee88..8a3ff0934 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/analytics-feature/pom.xml b/features/analytics-feature/pom.xml
index f93e1791b..3c2b90592 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../../pom.xml
diff --git a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.analytics.feature/pom.xml b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.analytics.feature/pom.xml
index 68f63bb7c..0d0ec74c0 100644
--- a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.analytics.feature/pom.xml
+++ b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.analytics.feature/pom.xml
@@ -23,13 +23,13 @@
org.wso2.carbon.devicemgt-plugins
androidsense-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.iot.androidsense.analytics.feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
pom
WSO2 Carbon - IoT Server Android Sense Analytics Feature
http://wso2.org
diff --git a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/pom.xml b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/pom.xml
index 6309f0ea0..33e2ff39f 100644
--- a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/pom.xml
+++ b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/pom.xml
@@ -23,13 +23,13 @@
org.wso2.carbon.devicemgt-plugins
androidsense-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.iot.androidsense.backend.feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
pom
WSO2 Carbon - IoT Server Android Sense Backend Feature
http://wso2.org
diff --git a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/src/main/resources/devicetypes/android_sense.xml b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/src/main/resources/devicetypes/android_sense.xml
index 9699c5699..e7c5c97fc 100644
--- a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/src/main/resources/devicetypes/android_sense.xml
+++ b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.backend.feature/src/main/resources/devicetypes/android_sense.xml
@@ -52,9 +52,9 @@
true
-
+
true
-
+
en_US
diff --git a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/pom.xml b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/pom.xml
index 6d9aceab6..417696a29 100644
--- a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/pom.xml
+++ b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/pom.xml
@@ -23,13 +23,13 @@
org.wso2.carbon.devicemgt-plugins
androidsense-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.iot.androidsense.ui.feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
pom
WSO2 Carbon - IoT Server Android Sense UI Feature
http://wso2.org
diff --git a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/src/main/resources/devicetypes/android_sense.xml b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/src/main/resources/devicetypes/android_sense.xml
index 9699c5699..e7c5c97fc 100644
--- a/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/src/main/resources/devicetypes/android_sense.xml
+++ b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.ui.feature/src/main/resources/devicetypes/android_sense.xml
@@ -52,9 +52,9 @@
true
-
+
true
-
+
en_US
diff --git a/features/device-types-feature/androidsense-plugin-feature/pom.xml b/features/device-types-feature/androidsense-plugin-feature/pom.xml
index f1ef0178b..f22637b55 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.analytics.feature/pom.xml b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.analytics.feature/pom.xml
index 23faea5b8..bf14899cb 100644
--- a/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.analytics.feature/pom.xml
+++ b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.analytics.feature/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
arduino-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/pom.xml b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/pom.xml
index fda8906d1..32cd312ab 100644
--- a/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/pom.xml
+++ b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.backend.feature/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
arduino-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.ui.feature/pom.xml b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.ui.feature/pom.xml
index f1b35cb5c..1f8ccef94 100644
--- a/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.ui.feature/pom.xml
+++ b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.ui.feature/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
arduino-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-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 748366797..d12131cdd 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/device-types-feature/pom.xml b/features/device-types-feature/pom.xml
index dce40047e..767d6a8a0 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../../pom.xml
4.0.0
device-types-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-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.analytics.feature/pom.xml b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics.feature/pom.xml
index 3cdad32be..0a45fdeb5 100644
--- a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics.feature/pom.xml
+++ b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics.feature/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
raspberrypi-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/pom.xml b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/pom.xml
index 4acb6b02e..7f9aaaf12 100644
--- a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/pom.xml
+++ b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
raspberrypi-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/devicetypes/raspberrypi.xml b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/devicetypes/raspberrypi.xml
index cc2800ea8..70de5d4f8 100644
--- a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/devicetypes/raspberrypi.xml
+++ b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.backend.feature/src/main/resources/devicetypes/raspberrypi.xml
@@ -34,9 +34,9 @@
true
-
+
true
-
+
en_US
diff --git a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/pom.xml b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/pom.xml
index 864e55590..abca3b088 100644
--- a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/pom.xml
+++ b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
raspberrypi-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/src/main/resources/devicetypes/raspberrypi.xml b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/src/main/resources/devicetypes/raspberrypi.xml
index cc2800ea8..70de5d4f8 100644
--- a/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/src/main/resources/devicetypes/raspberrypi.xml
+++ b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.ui.feature/src/main/resources/devicetypes/raspberrypi.xml
@@ -34,9 +34,9 @@
true
-
+
true
-
+
en_US
diff --git a/features/device-types-feature/raspberrypi-plugin-feature/pom.xml b/features/device-types-feature/raspberrypi-plugin-feature/pom.xml
index 2231a1e25..5f8176294 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics.feature/pom.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics.feature/pom.xml
index ea14e55b6..626689619 100644
--- a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics.feature/pom.xml
+++ b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.analytics.feature/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
virtual-fire-alarm-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
@@ -90,28 +90,6 @@
-
- unpack-analytics
- package
-
- unpack
-
-
-
-
- org.wso2.carbon.devicemgt-plugins
- org.wso2.carbon.device.mgt.iot.analytics
- ${project.version}
- zip
- true
-
- ${project.build.directory}/maven-shared-archive-resources/carbonapps
-
- **/*
-
-
-
-
diff --git a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/pom.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/pom.xml
index b87dcb26e..8ce9be3d8 100644
--- a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/pom.xml
+++ b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
virtual-fire-alarm-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
@@ -155,28 +155,6 @@
-
- unpack-analytics
- package
-
- unpack
-
-
-
-
- org.wso2.carbon.devicemgt-plugins
- org.wso2.carbon.device.mgt.iot.analytics
- ${project.version}
- zip
- true
-
- ${project.build.directory}/maven-shared-archive-resources/carbonapps
-
- **/*
-
-
-
-
diff --git a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/devicetypes/virtual_firealarm.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/devicetypes/virtual_firealarm.xml
index 10f1985ca..59ed4bcb4 100644
--- a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/devicetypes/virtual_firealarm.xml
+++ b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.backend.feature/src/main/resources/devicetypes/virtual_firealarm.xml
@@ -34,11 +34,11 @@
true
-
+
true
-
+
-
+
@@ -50,7 +50,7 @@
-
+
en_US
diff --git a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/pom.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/pom.xml
index f3300092b..50186fec7 100644
--- a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/pom.xml
+++ b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
virtual-fire-alarm-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/src/main/resources/devicetypes/virtual_firealarm.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/src/main/resources/devicetypes/virtual_firealarm.xml
index 145709c86..aedb9e7fa 100644
--- a/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/src/main/resources/devicetypes/virtual_firealarm.xml
+++ b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui.feature/src/main/resources/devicetypes/virtual_firealarm.xml
@@ -34,12 +34,12 @@
true
-
+
true
-
+
-
+
@@ -51,7 +51,7 @@
-
+
en_US
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 3c49b6484..d92d464e1 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 13be9b3ff..b214cb1c3 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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 93ad37bf3..1dd76808d 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
org.wso2.carbon.appmgt.mdm.osgiconnector.feature
pom
- 4.0.5-SNAPSHOT
+ 4.0.6-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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 738635b5c..ba14121a5 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
org.wso2.carbon.appmgt.mdm.restconnector.feature
pom
- 4.0.5-SNAPSHOT
+ 4.0.6-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
- 4.0.5-SNAPSHOT
+ 4.0.6-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 73670fdd1..0c7afcb8a 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.adapter.feature
pom
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
WSO2 Carbon - Device Management Adapters Feature
http://wso2.org
This feature contains the adapter bundles required for IoT Server
@@ -52,10 +52,6 @@
org.wso2.carbon.devicemgt-plugins
org.wso2.carbon.device.mgt.input.adapter.extension
-
- org.wso2.carbon.devicemgt-plugins
- org.wso2.carbon.device.mgt.input.adapter.http
-
org.wso2.carbon.devicemgt-plugins
org.wso2.carbon.device.mgt.input.adapter.mqtt
@@ -163,7 +159,7 @@
org.wso2.carbon.p2.category.type:server
- org.eclipse.equinox.p2.type.group:false
+ org.eclipse.equinox.p2.type.group:true
@@ -176,9 +172,6 @@
org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.input.adapter.extension:${carbon.devicemgt.plugins.version}
-
- org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.input.adapter.http:${carbon.devicemgt.plugins.version}
-
org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.input.adapter.mqtt:${carbon.devicemgt.plugins.version}
diff --git a/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/p2.inf b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/p2.inf
index f9b3d0c5b..e47305ada 100644
--- a/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/p2.inf
+++ b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/p2.inf
@@ -1,4 +1,3 @@
instructions.configure = \
org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../deployment/server/webapps/);\
-org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.adapter_${feature.version}/webapps/,target:${installFolder}/../../deployment/server/webapps/,overwrite:true);\
-org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.adapter_${feature.version}/websocket-validation.xml,target:${installFolder}/../../conf/etc/websocket-validation.xml,overwrite:true);\
+org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.adapter_${feature.version}/webapps/,target:${installFolder}/../../deployment/server/webapps/,overwrite:true);\
\ No newline at end of file
diff --git a/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/websocket-validation.xml b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/websocket-validation.xml
deleted file mode 100644
index b8c789dc7..000000000
--- a/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/websocket-validation.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
-
-
-
-
- https://localhost:9443/services/OAuth2TokenValidationService
- admin
- admin
- 2
- 100
-
-
-
-
-
-
-
- /permission/device-mgt/user/groups/device_monitor
- admin
- admin
- https://localhost:9443/oauth2
-
- 100
- https://localhost:9443
-
-
-
\ No newline at end of file
diff --git a/features/extensions-feature/org.wso2.carbon.device.mgt.notification.listener.feature/pom.xml b/features/extensions-feature/org.wso2.carbon.device.mgt.notification.listener.feature/pom.xml
new file mode 100644
index 000000000..5850f7bd1
--- /dev/null
+++ b/features/extensions-feature/org.wso2.carbon.device.mgt.notification.listener.feature/pom.xml
@@ -0,0 +1,59 @@
+
+
+
+ org.wso2.carbon.devicemgt-plugins
+ extensions-feature
+ 4.0.6-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.wso2.carbon.device.mgt.notification.listener.feature
+ pom
+ 4.0.6-SNAPSHOT
+ WSO2 Carbon - Notification Listener
+ http://wso2.org
+ This feature contains the core bundles required iot core listeners
+
+
+
+ org.wso2.carbon.devicemgt-plugins
+ org.wso2.carbon.device.mgt.mqtt.notification.listener
+
+
+
+
+
+
+ org.wso2.maven
+ carbon-p2-plugin
+ ${carbon.p2.plugin.version}
+
+
+ 4-p2-feature-generation
+ package
+
+ p2-feature-gen
+
+
+ org.wso2.carbon.device.mgt.notification.listener
+ ../etc/feature.properties
+
+
+ org.wso2.carbon.p2.category.type:server
+ org.eclipse.equinox.p2.type.group:false
+
+
+
+
+ org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.mqtt.notification.listener:${carbon.devicemgt.plugins.version}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/features/extensions-feature/org.wso2.carbon.device.mgt.notification.listener.feature/src/main/resources/build.properties b/features/extensions-feature/org.wso2.carbon.device.mgt.notification.listener.feature/src/main/resources/build.properties
new file mode 100644
index 000000000..33bb0980d
--- /dev/null
+++ b/features/extensions-feature/org.wso2.carbon.device.mgt.notification.listener.feature/src/main/resources/build.properties
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+
+custom = true
diff --git a/features/extensions-feature/org.wso2.carbon.device.mgt.notification.listener.feature/src/main/resources/p2.inf b/features/extensions-feature/org.wso2.carbon.device.mgt.notification.listener.feature/src/main/resources/p2.inf
new file mode 100644
index 000000000..7ab37b9d7
--- /dev/null
+++ b/features/extensions-feature/org.wso2.carbon.device.mgt.notification.listener.feature/src/main/resources/p2.inf
@@ -0,0 +1 @@
+instructions.configure = \
\ No newline at end of file
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 eb65c6650..5e05c66df 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
org.wso2.extension.siddhi.execution.json.feature
pom
- 4.0.5-SNAPSHOT
+ 4.0.6-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/org.wso2.gpl.siddhi.extension.geo.script.feature/pom.xml b/features/extensions-feature/org.wso2.gpl.siddhi.extension.geo.script.feature/pom.xml
index 0fad7e0f0..cdc28e258 100644
--- a/features/extensions-feature/org.wso2.gpl.siddhi.extension.geo.script.feature/pom.xml
+++ b/features/extensions-feature/org.wso2.gpl.siddhi.extension.geo.script.feature/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
extensions-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
diff --git a/features/extensions-feature/pom.xml b/features/extensions-feature/pom.xml
index 82566ccdf..3fa781fff 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../../pom.xml
4.0.0
extensions-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
pom
WSO2 Carbon - Device Management Extensions
http://wso2.org
@@ -39,6 +39,7 @@
org.wso2.carbon.device.mgt.adapter.feature
org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization.feature
org.wso2.extension.siddhi.execution.json.feature
+ org.wso2.carbon.device.mgt.notification.listener.feature
org.wso2.gpl.siddhi.extension.geo.script.feature
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 8c3b7c49f..6c3818c77 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.mobile.android.feature
pom
- 4.0.5-SNAPSHOT
+ 4.0.6-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/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/devicetypes/android.xml b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/devicetypes/android.xml
index d1637978f..415d7bc3c 100644
--- a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/devicetypes/android.xml
+++ b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/devicetypes/android.xml
@@ -57,8 +57,8 @@
access server after receiving push notification.
-->
-
-
+
+
diff --git a/features/mobile-plugins-feature/android-plugin-feature/pom.xml b/features/mobile-plugins-feature/android-plugin-feature/pom.xml
index 4b864eb27..06de43a60 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
android-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-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 10fd3bafa..d17f632e3 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../../pom.xml
4.0.0
mobile-plugins-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-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 81733c2d7..b25ac050b 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.mobile.windows.feature
pom
- 4.0.5-SNAPSHOT
+ 4.0.6-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 9ba56524d..1b94e7af9 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
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
../pom.xml
4.0.0
windows-plugin-feature
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
pom
WSO2 Carbon - Device Management Windows Plugin Feature
http://wso2.org
diff --git a/pom.xml b/pom.xml
index 3a77e5bae..7780334bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt-plugins
carbon-device-mgt-plugins-parent
pom
- 4.0.5-SNAPSHOT
+ 4.0.6-SNAPSHOT
WSO2 Carbon - Device Management Plugins Parent
http://wso2.org
WSO2 Carbon - Device Management Plugins Parent
@@ -355,11 +355,11 @@
org.wso2.carbon.event.output.adapter.core
${carbon.analytics.common.version}
-
- org.wso2.carbon.analytics-common
- org.wso2.carbon.event.input.adapter.wso2event
- ${carbon.analytics.common.version}
-
+
+ org.wso2.carbon.analytics-common
+ org.wso2.carbon.event.input.adapter.wso2event
+ ${carbon.analytics.common.version}
+
org.wso2.carbon.analytics-common
org.wso2.carbon.event.input.adapter.core
@@ -370,21 +370,21 @@
org.wso2.carbon.databridge.commons
${carbon.analytics.common.version}
-
- org.wso2.carbon.analytics-common
- org.wso2.carbon.databridge.commons.thrift
- ${carbon.analytics.common.version}
-
-
- org.wso2.carbon.analytics-common
- org.wso2.carbon.databridge.commons.binary
- ${carbon.analytics.common.version}
-
-
- org.wso2.carbon.analytics-common
- org.wso2.carbon.databridge.core
- ${carbon.analytics.common.version}
-
+
+ org.wso2.carbon.analytics-common
+ org.wso2.carbon.databridge.commons.thrift
+ ${carbon.analytics.common.version}
+
+
+ org.wso2.carbon.analytics-common
+ org.wso2.carbon.databridge.commons.binary
+ ${carbon.analytics.common.version}
+
+
+ org.wso2.carbon.analytics-common
+ org.wso2.carbon.databridge.core
+ ${carbon.analytics.common.version}
+
org.wso2.carbon.analytics
org.wso2.carbon.analytics.api
@@ -407,11 +407,11 @@
org.wso2.carbon.device.mgt.output.adapter.mqtt
${carbon.devicemgt.plugins.version}
-
- org.wso2.carbon.devicemgt-plugins
- org.wso2.carbon.device.mgt.input.adapter.thrift
- ${carbon.devicemgt.plugins.version}
-
+
+ org.wso2.carbon.devicemgt-plugins
+ org.wso2.carbon.device.mgt.input.adapter.thrift
+ ${carbon.devicemgt.plugins.version}
+
org.wso2.carbon.devicemgt-plugins
org.wso2.carbon.device.mgt.output.adapter.xmpp
@@ -448,7 +448,11 @@
org.wso2.carbon.device.mgt.output.adapter.websocket
${carbon.devicemgt.plugins.version}
-
+
+ org.wso2.carbon.devicemgt-plugins
+ org.wso2.carbon.device.mgt.mqtt.notification.listener
+ ${carbon.devicemgt.plugins.version}
+
org.wso2.carbon.devicemgt-plugins
@@ -543,16 +547,16 @@
org.wso2.carbon.appmgt
org.wso2.carbon.appmgt.mobile
${carbon.appmgt.version}
-
-
- org.apache.ws.commons.axiom
- axiom-api
-
-
- org.apache.ws.commons.axiom
- axiom-impl
-
-
+
+
+ org.apache.ws.commons.axiom
+ axiom-api
+
+
+ org.apache.ws.commons.axiom
+ axiom-impl
+
+
@@ -813,11 +817,11 @@
commons-httpclient
${orbit.version.commons-httpclient}
-
- commons-codec.wso2
- commons-codec
- ${commons-codec.version.wso2}
-
+
+ commons-codec.wso2
+ commons-codec
+ ${commons-codec.version.wso2}
+
commons-codec
commons-codec
@@ -978,11 +982,11 @@
${identity.inbound.auth.oauth.version}
provided
-
- org.wso2.carbon.identity.carbon.auth.jwt
- org.wso2.carbon.identity.authenticator.signedjwt
- ${identity.carbon.auth.jwt.version}
-
+
+ org.wso2.carbon.identity.carbon.auth.jwt
+ org.wso2.carbon.identity.authenticator.signedjwt
+ ${identity.carbon.auth.jwt.version}
+
org.apache.httpcomponents.wso2
httpcore
@@ -1076,11 +1080,11 @@
feign-gson
${io.github.openfeign.version}
-
- io.github.openfeign
- feign-slf4j
- ${io.github.openfeign.version}
-
+
+ io.github.openfeign
+ feign-slf4j
+ ${io.github.openfeign.version}
+
@@ -1142,14 +1146,14 @@
1.1.1
- 3.0.7
+ 3.0.8
[3.0.0, 4.0.0)
1.2.25
- 4.0.4
+ 4.0.6-SNAPSHOT
4.4.8
@@ -1161,7 +1165,7 @@
5.6.89
5.3.1
[5.2.0, 6.0.0)
- 5.1.2
+ 5.1.2
4.6.1
@@ -1228,7 +1232,7 @@
3.0.0.wso2v1
(3.0.0, 4.0.0]
- [2.0.0,4.0.0)
+ [2.0.0,4.0.0)
0.9.1
1.1.wso2v1
3.2.2
@@ -1385,6 +1389,11 @@
maven-war-plugin
2.2
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.0.2
+