diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_executionplan/Android-Accelerometer-ExecutionPlan.siddhiql b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_executionplan/Android-Accelerometer-ExecutionPlan.siddhiql
new file mode 100755
index 000000000..fa0e7517d
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_executionplan/Android-Accelerometer-ExecutionPlan.siddhiql
@@ -0,0 +1,18 @@
+@Plan:name('Android-Accelerometer-ExecutionPlan')
+
+@Plan:description('Process accelerometer changes.')
+
+@Import('org.wso2.iot.android.accelerometer:1.0.0')
+define stream AccelerometerStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
+
+@Export('org.wso2.iot.android.accelerometer.stats:1.0.0')
+define stream AccelerometerStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, x
+float, y float, z float, year int, month int, day int, hour int, minute int);
+
+partition with (meta_deviceId of AccelerometerStream)
+begin
+ from AccelerometerStream
+ select meta_owner, meta_deviceId, meta_timestamp, x, y, z, time:extract
+ (meta_timestamp, 'year') as year, time:extract(meta_timestamp, 'month') as month, time:extract(meta_timestamp, 'day') as day, time:extract(meta_timestamp, 'hour') as hour, time:extract(meta_timestamp, 'minute') as minute
+ insert into AccelerometerStatsStream;
+end;
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_executionplan/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_executionplan/artifact.xml
new file mode 100644
index 000000000..068ee9a2d
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_executionplan/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ Android-Accelerometer-ExecutionPlan.siddhiql
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_event_sink/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_event_sink/artifact.xml
new file mode 100644
index 000000000..ada735d4c
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_event_sink/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org_wso2_iot_android_accelerometer_stats.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_event_sink/org_wso2_iot_android_accelerometer_stats.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_event_sink/org_wso2_iot_android_accelerometer_stats.xml
new file mode 100755
index 000000000..abf3b755b
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_event_sink/org_wso2_iot_android_accelerometer_stats.xml
@@ -0,0 +1,98 @@
+
+
+
+
+ meta_owner
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_deviceId
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_timestamp
+ false
+ false
+ false
+ false
+ LONG
+
+
+ x
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ y
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ z
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ year
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ month
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ day
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ hour
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ minute
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+
+ false
+ EVENT_STORE
+
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_streams/artifact.xml
new file mode 100644
index 000000000..2f5ff7deb
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_streams/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org.wso2.iot.android.accelerometer.stats_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_streams/org.wso2.iot.android.accelerometer.stats_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_streams/org.wso2.iot.android.accelerometer.stats_1.0.0.json
new file mode 100755
index 000000000..f735e0e3b
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_stats_streams/org.wso2.iot.android.accelerometer.stats_1.0.0.json
@@ -0,0 +1,54 @@
+{
+ "name": "org.wso2.iot.android.accelerometer.stats",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "x",
+ "type": "FLOAT"
+ },
+ {
+ "name": "y",
+ "type": "FLOAT"
+ },
+ {
+ "name": "z",
+ "type": "FLOAT"
+ },
+ {
+ "name": "year",
+ "type": "INT"
+ },
+ {
+ "name": "month",
+ "type": "INT"
+ },
+ {
+ "name": "day",
+ "type": "INT"
+ },
+ {
+ "name": "hour",
+ "type": "INT"
+ },
+ {
+ "name": "minute",
+ "type": "INT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_streams/artifact.xml
new file mode 100644
index 000000000..b2a12cc76
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_streams/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org.wso2.iot.android.accelerometer_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_streams/org.wso2.iot.android.accelerometer_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_streams/org.wso2.iot.android.accelerometer_1.0.0.json
new file mode 100755
index 000000000..2c7bdbe54
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_streams/org.wso2.iot.android.accelerometer_1.0.0.json
@@ -0,0 +1,34 @@
+{
+ "name": "org.wso2.iot.android.accelerometer",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "x",
+ "type": "FLOAT"
+ },
+ {
+ "name": "y",
+ "type": "FLOAT"
+ },
+ {
+ "name": "z",
+ "type": "FLOAT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_ui_event_publisher/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_ui_event_publisher/artifact.xml
new file mode 100644
index 000000000..44915d14e
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_ui_event_publisher/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.accelerometer.ui.publisher.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_ui_event_publisher/org.wso2.iot.android.accelerometer.ui.publisher.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_ui_event_publisher/org.wso2.iot.android.accelerometer.ui.publisher.xml
new file mode 100644
index 000000000..c955c6b86
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_ui_event_publisher/org.wso2.iot.android.accelerometer.ui.publisher.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/conf.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/conf.json
new file mode 100644
index 000000000..5617ac60d
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/conf.json
@@ -0,0 +1 @@
+{"provider-conf" : {"streamName" : "org.wso2.iot.android.accelerometer:1.0.0", "provider-name" : "realtime"}, "chart-conf" : {"x" : "x", "title" : "ACCELEROMETER X", "maxLength" : "30", "gadget-name" : "Accelerometer X", "chart-name" : "number-chart"}}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/css/number-chart.css b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/css/number-chart.css
new file mode 100644
index 000000000..5dde0413a
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/css/number-chart.css
@@ -0,0 +1,35 @@
+#canvas {
+ height: 100%;
+ width: 100%;
+}
+
+p {
+ margin: 0;
+ display: block;
+ text-align: center;
+ font-weight: bold;
+}
+
+.titlecanvasContent {
+ color:steelblue;
+ font-size:18px;
+ font-weight: normal;
+ padding: 10px 0;
+}
+
+.valcanvasContent {
+ color:#438CAD;
+ font-size:50px;
+ font-weight: normal;
+}
+
+
+.diffcanvasContent {
+ color:#438CAD;
+ font-size:14px;
+}
+
+.diffPercentagecanvasContent {
+ color:#ff944d;
+ font-size:14px;
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/gadget-controller.jag b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/gadget-controller.jag
new file mode 100644
index 000000000..f84538a40
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/gadget-controller.jag
@@ -0,0 +1,42 @@
+<%
+/**
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+(function () {
+
+ response.contentType = 'application/json';
+ var PROVIDER_CONF = 'provider-conf';
+ var PROVIDER_NAME = 'provider-name';
+
+ var action = request.getParameter("action");
+ var data = request.getContent();
+ var providerConf = data[PROVIDER_CONF];
+ var providerAPI = require('js/core/' + providerConf[PROVIDER_NAME] + '-provider-api.js');
+
+ if (action === 'getSchema') {
+ print(providerAPI.getSchema(providerConf));
+ return;
+ } else if(action === 'getData'){
+ print(providerAPI.getData(providerConf));
+ return;
+ }
+
+}());
+
+
+%>
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/gadget.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/gadget.json
new file mode 100644
index 000000000..90a89cbff
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/gadget.json
@@ -0,0 +1,9 @@
+{
+ "id": "Accelerometer_X",
+ "title": "Accelerometer X",
+ "type": "gadget",
+ "thumbnail": "gadget/Accelerometer_X/thumbnail.png",
+ "data": {
+ "url": "gadget/Accelerometer_X/gadget.xml"
+ }
+}
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/gadget.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/gadget.xml
new file mode 100644
index 000000000..450b1bb05
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/gadget.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]>
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/gadget-core.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/gadget-core.js
new file mode 100644
index 000000000..8bfc5f742
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/gadget-core.js
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+$(function () {
+ var gadgetLocation;
+ var conf;
+ var schema;
+ var pref = new gadgets.Prefs();
+
+ var CHART_CONF = 'chart-conf';
+ var PROVIDER_CONF = 'provider-conf';
+
+var init = function () {
+ $.ajax({
+ url: gadgetLocation + '/conf.json',
+ method: "GET",
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ conf = JSON.parse(data);
+ $.ajax({
+ url: gadgetLocation + '/gadget-controller.jag?action=getSchema',
+ method: "POST",
+ data: JSON.stringify(conf),
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ schema = data;
+ }
+ });
+
+ }
+ });
+};
+
+
+var drawGadget = function (){
+
+ draw('#canvas', conf[CHART_CONF], schema, null);
+ registerCallBackforPush(conf[PROVIDER_CONF], schema, function(providerData) {
+ update(providerData);
+ });
+
+};
+
+getGadgetLocation(function (gadget_Location) {
+ gadgetLocation = gadget_Location;
+ init();
+ drawGadget();
+
+});
+});
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/gadget-util.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/gadget-util.js
new file mode 100644
index 000000000..ccfb70698
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/gadget-util.js
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getGadgetLocation = function (callback) {
+ var gadgetLocation = "/portal/store/carbon.super/fs/gadget/Accelerometer_X";
+ var PATH_SEPERATOR = "/";
+ if (gadgetLocation.search("store") != -1) {
+ wso2.gadgets.identity.getTenantDomain(function (tenantDomain) {
+ var gadgetPath = gadgetLocation.split(PATH_SEPERATOR);
+ var modifiedPath = '';
+ for (var i = 1; i < gadgetPath.length; i++) {
+ if (i === 3) {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, tenantDomain);
+ } else {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, gadgetPath[i])
+ }
+ }
+ callback(modifiedPath);
+ });
+ } else {
+ callback(gadgetLocation);
+ }
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/number-chart-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/number-chart-api.js
new file mode 100644
index 000000000..ef2c5da98
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/number-chart-api.js
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, isProviderRequired, draw, update;
+
+(function() {
+
+ var CHART_LOCATION = '/extensions/chart-templates/';
+
+ /**
+ * return the config to be populated in the chart configuration UI
+ * @param schema
+ */
+ getConfig = function(schema) {
+ var chartConf = require(CHART_LOCATION + '/number-chart/config.json').config;
+ /*
+ dynamic logic goes here
+ */
+ return chartConf;
+
+ };
+
+ /**
+ * validate the user inout for the chart configurationx
+ * @param chartConfig
+ */
+ validate = function(chartConfig) {
+ return true;
+ };
+
+ /**
+ * TO be used when provider configuration steps need to be skipped
+ */
+ isProviderRequired = function() {
+
+ }
+
+
+ /**
+ * return the gadget content
+ * @param chartConfig
+ * @param schema
+ * @param data
+ */
+ draw = function(placeholder, chartConfig, _schema, data) {
+ var schema = toVizGrammarSchema(_schema);
+ var view = {
+ id: "chart-0",
+ schema: schema,
+ chartConfig: buildChartConfig(chartConfig),
+ data: function() {
+ if(data) {
+ var result = [];
+ console.log(data);
+ data.forEach(function(item) {
+ var row = [];
+ schema[0].metadata.names.forEach(function(name) {
+ row.push(item[name]);
+ });
+ result.push(row);
+ });
+ console.log(result);
+ wso2gadgets.onDataReady(result);
+ }
+ }
+
+ };
+
+ try {
+ wso2gadgets.init(placeholder, view);
+ var view = wso2gadgets.load("chart-0");
+ } catch (e) {
+ console.error(e);
+ }
+
+ };
+
+ /**
+ *
+ * @param data
+ */
+ update = function(data) {
+ wso2gadgets.onDataReady(data,"append");
+ }
+
+ buildChartConfig = function (_chartConfig) {
+ var conf = {};
+ conf.x = _chartConfig.x;
+ conf.maxLength = _chartConfig.maxLength;
+ conf.charts = [];
+ conf.charts[0] = {
+ type : "number",
+ title : _chartConfig.title
+ };
+ return conf;
+ };
+
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/provider-client.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/provider-client.js
new file mode 100644
index 000000000..6196677f6
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/provider-client.js
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// var registerCallBackforPush;
+
+(function() {
+
+ var callback;
+
+ /**
+ * TODO Need to read hostname,port, and tenantId from providerConfig
+ * @param providerConfig
+ * @param schema
+ */
+ registerCallBackforPush = function(providerConfig, schema, _callback) {
+ var streamId = providerConfig['streamName'];
+ var hostname = window.parent.location.hostname;
+ var port = window.parent.location.port;
+
+ subscribe(streamId.split(":")[0], streamId.split(":")[1],
+ '10',
+ onData, onError,
+ hostname,
+ port,
+ 'WEBSOCKET'
+ );
+ callback = _callback;
+ };
+
+ function onData(streamId, data) {
+ callback(data);
+ };
+
+ function onError(error) {
+ console.error(error);
+ };
+
+}());
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/realtime-provider-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/realtime-provider-api.js
new file mode 100644
index 000000000..7cf59af77
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/core/realtime-provider-api.js
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, getMode, getSchema, getData, registerCallBackforPush;
+
+(function() {
+
+ var PROVIDERS_LOCATION = '/extensions/providers/';
+ var PROVIDER_NAME = 'realtime';
+
+ var log = new Log();
+ var utils = require('/modules/utils.js');
+ var carbon = require("carbon");
+ var EventPublisherConstants = Packages.org.wso2.carbon.event.publisher.core.config.EventPublisherConstants;
+ var eventPublisherService = carbon.server.osgiService('org.wso2.carbon.event.publisher.core.EventPublisherService');
+ var eventStreamService = carbon.server.osgiService('org.wso2.carbon.event.stream.core.EventStreamService');
+
+ var typeMap = {
+ "bool": "string",
+ "boolean": "string",
+ "string": "string",
+ "int": "number",
+ "integer": "number",
+ "long": "number",
+ "double": "number",
+ "float": "number",
+ "time": "time"
+ };
+
+ getConfig = function() {
+ var formConfig = require(PROVIDERS_LOCATION + '/' + PROVIDER_NAME + '/config.json');
+ var datasources = [];
+ try {
+ var eventPublisherConfigurationList = eventPublisherService.getAllActiveEventPublisherConfigurations();
+ for (var i = 0; i < eventPublisherConfigurationList.size(); i++) {
+ var eventPublisherConfiguration = eventPublisherService.getActiveEventPublisherConfiguration(
+ eventPublisherConfigurationList.get(i).getEventPublisherName());;
+
+ var mappingTypeIsWso2 = eventPublisherConfiguration.getOutputMapping()
+ .getMappingType().equals(EventPublisherConstants.EF_WSO2EVENT_MAPPING_TYPE);
+
+ var adapterType = null;
+ if (eventPublisherConfiguration.getToAdapterConfiguration() != null) {
+ adapterType = eventPublisherConfiguration.getToAdapterConfiguration().getType();
+ }
+ if (mappingTypeIsWso2 && adapterType.trim() == "ui") {
+ var streamName = eventPublisherConfiguration.getFromStreamName();
+ var streamVersion = eventPublisherConfiguration.getFromStreamVersion();
+ var streamId = streamName + ":" + streamVersion;
+ datasources.push(streamId);
+ }
+ }
+ var datasourceCfg = {
+ "fieldLabel": "Event Stream",
+ "fieldName": "streamName",
+ "fieldType": "dropDown"
+ };
+ datasourceCfg['valueSet'] = datasources;
+ } catch (e) {
+ log.error(e);
+ }
+ formConfig.config.push(datasourceCfg);
+ return formConfig;
+ };
+
+ /**
+ * validate the user input of provider configuration
+ * @param providerConfig
+ */
+ validate = function(providerConfig) {
+ /*
+ validate the form and return
+
+ */
+ return true;
+ };
+
+ /**
+ * returns the data mode either push or pull
+ */
+ getMode = function() {
+ return 'push';
+ };
+
+ /**
+ * returns an array of column names & types
+ * @param providerConfig
+ */
+ getSchema = function(providerConfig) {
+ var streamId = providerConfig["streamName"];
+ var output = [];
+
+ output.push({
+ fieldName: "TIMESTAMP",
+ fieldType: "time"
+ });
+
+ if (eventStreamService != null) {
+ var eventStreamConfiguration = eventStreamService.getEventStreamConfiguration(streamId);
+ if (eventStreamConfiguration != null) {
+ var metaData = eventStreamConfiguration.getStreamDefinition().getMetaData();
+ var correlationData = eventStreamConfiguration.getStreamDefinition().getCorrelationData();
+ var payloadData = eventStreamConfiguration.getStreamDefinition().getPayloadData();
+ if (metaData != null) {
+ for (var i = 0; i < metaData.size(); i++) {
+ var type = metaData.get(i).getType().toString().toLowerCase();
+ output.push({
+ fieldName: metaData.get(i).getName(),
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ }
+ }
+ if (correlationData != null) {
+ for (var i = 0; i < correlationData.size(); i++) {
+ var type = correlationData.get(i).getType().toString().toLowerCase();
+ output.push({
+ fieldName: correlationData.get(i).getName(),
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ }
+ }
+ if (payloadData != null) {
+ for (var i = 0; i < payloadData.size(); i++) {
+ var type = payloadData.get(i).getType().toString().toLowerCase();
+ output.push({
+ fieldName: payloadData.get(i).getName(),
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ }
+ }
+ }
+ }
+ return output;
+ };
+
+ getData = function(providerConfig,limit) {
+ var data = [];
+ return data;
+ };
+
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/provider-libs/ws-client.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/provider-libs/ws-client.js
new file mode 100644
index 000000000..fc49d8a35
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_x_gadget/Accelerometer_X/js/provider-libs/ws-client.js
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var CONSTANTS = {
+ urlSeperator: '/',
+ queryParamStreamName : '?streamname=',
+ queryParamStreamVersion : '&version=',
+ queryParamLastUpdatedTime : '&lastUpdatedTime=',
+ urlSecureTransportWebsocket : 'wss://',
+ urlSecureTransportHttp : 'https://',
+ colon : ':',
+ defaultIntervalTime : 10 * 1000,
+ defaultHostName : 'localhost',
+ defaultSecurePortNumber : '9443',
+ defaultMode : 'AUTO',
+ processModeHTTP : 'HTTP',
+ processModeWebSocket : 'WEBSOCKET',
+ processModeAuto : 'AUTO',
+ numThousand : 1000,
+ websocketTimeAppender : 400,
+ websocketSubscriptionEndpoint : 'portal/uipublisher/websocketSubscriptionEndpoint.jag',
+ httpEventRetrievalEndpoint : 'portal/uipublisher/httpEventRetrievalEndpoint.jag'
+};
+
+var websocket = null;
+var webSocketUrl;
+var httpUrl;
+var cepHostName;
+var cepPortNumber;
+var isErrorOccured = false;
+var lastUpdatedtime = -1;
+var polingInterval;
+var stream;
+var streamVersion;
+var firstPollingAttempt;
+var processMode;
+var onSuccessFunction;
+var onErrorFunction;
+var terminateWebsocketInstance = false;
+var pollingContinue = true;
+
+function subscribe(streamName,version,intervalTime,
+ listeningFuncSuccessData,listeningFuncErrorData,cepHost,cepPort,mode){
+ stopPollingProcesses();
+ stream = streamName;
+ streamVersion = version;
+ onSuccessFunction = listeningFuncSuccessData;
+ onErrorFunction = listeningFuncErrorData;
+
+ if(intervalTime == null || intervalTime == ""){
+ polingInterval = CONSTANTS.defaultIntervalTime;
+ } else{
+ polingInterval = intervalTime * CONSTANTS.numThousand;
+ }
+
+ if(cepHost == null || cepHost == ""){
+ cepHostName = CONSTANTS.defaultHostName;
+ } else{
+ cepHostName = cepHost;
+ }
+
+ if(cepPort == null || cepPort == ""){
+ cepPortNumber = CONSTANTS.defaultSecurePortNumber;
+ } else{
+ cepPortNumber = cepPort;
+ }
+
+ if(mode == null || mode == ""){
+ processMode = CONSTANTS.defaultMode;
+ } else{
+ processMode = mode;
+ }
+
+ webSocketUrl = CONSTANTS.urlSecureTransportWebsocket + cepHostName + CONSTANTS.colon + cepPortNumber +
+ CONSTANTS.urlSeperator + CONSTANTS.websocketSubscriptionEndpoint;
+
+ if(processMode == CONSTANTS.processModeHTTP){
+ firstPollingAttempt = true;
+ pollingContinue = true;
+ startPoll();
+ } else{
+ initializeWebSocket(webSocketUrl);
+ }
+}
+
+/**
+ * Initializing Web Socket
+ */
+function initializeWebSocket(webSocketUrl){
+ websocket = new WebSocket(webSocketUrl);
+ websocket.onopen = webSocketOnOpen;
+ websocket.onmessage = webSocketOnMessage;
+ websocket.onclose = webSocketOnClose;
+ websocket.onerror = webSocketOnError;
+}
+
+function getWebsocketSubscriptionMessage(streamName, streamVersion, streamProperties, streamValues) {
+ if (streamProperties.length === streamValues.length) {
+ var message = {};
+ message.streamName = streamName;
+ message.streamVersion = streamVersion;
+ var i;
+ for (i = 0; i < streamProperties.length; i++) {
+ message.filterProps = [];
+ message.filterProps.push({
+ 'name': streamProperties[i],
+ 'value': streamValues[i]
+ });
+ }
+ return JSON.stringify(message);
+ } else {
+ console.log('stream properties and values are not in equal size');
+ }
+}
+
+/**
+ * Get the parameters as query parameters.
+ * This method parses those parameters and returns.
+ * */
+function getAllQueryParamsFromURL() {
+ var queryParamList = {}, qParam;
+ var urlQueryString = decodeURIComponent(window.top.location.search.substring(1));
+
+ if (urlQueryString) {
+ var queryStringPairs = urlQueryString.split('&');
+ for (var i = 0; i < queryStringPairs.length; i++) {
+ qParam = queryStringPairs[i].split('=');
+ queryParamList[qParam[0]] = qParam[1];
+ }
+ return queryParamList;
+
+ } else {
+ return null;
+ }
+}
+
+/**
+ * Web socket On Open
+ */
+var webSocketOnOpen = function () {
+ var params = getAllQueryParamsFromURL();
+ var deviceId;
+ var owner;
+ if (params) {
+ owner = params["owner"];
+ deviceId = params["deviceId"];
+ }
+ var filterPropNames = ["meta_owner", "meta_deviceId"];
+ var filterPropVals = [owner, deviceId];
+ var data = getWebsocketSubscriptionMessage(stream, streamVersion, filterPropNames, filterPropVals);
+ websocket.send(data);
+};
+
+/**
+ * On server sends a message
+ */
+var webSocketOnMessage = function (evt) {
+ var event = evt.data;
+ var array = JSON.parse(event);
+ constructPayload(array);
+};
+
+/**
+ * On server close
+ */
+var webSocketOnClose =function (e) {
+
+ if(isErrorOccured){
+ if(processMode != CONSTANTS.processModeWebSocket){
+ firstPollingAttempt = true;
+ pollingContinue = true;
+ startPoll();
+ }
+ } else{
+ if(!terminateWebsocketInstance){
+ waitForSocketConnection(websocket);
+ } else{
+ terminateWebsocketInstance = false;
+ }
+
+ }
+};
+
+/**
+ * On server Error
+ */
+var webSocketOnError = function (err) {
+ var error = "Error: Cannot connect to Websocket URL:" + webSocketUrl + " .Hence closing the connection!";
+
+ onErrorFunction(error);
+ isErrorOccured = true;
+
+};
+
+/**
+ * Gracefully increments the connection retry
+ */
+var waitTime = CONSTANTS.numThousand;
+function waitForSocketConnection(socket, callback){
+ setTimeout(
+ function () {
+ if (socket.readyState === 1) {
+ initializeWebSocket(webSocketUrl);
+ console.log("Connection is made");
+ if(callback != null){
+ callback();
+ }
+ return;
+ } else {
+ websocket = new WebSocket(webSocketUrl);
+ waitTime += CONSTANTS.websocketTimeAppender;
+ waitForSocketConnection(websocket, callback);
+ }
+ }, waitTime);
+}
+
+/**
+ * Polling to retrieve events from http request periodically
+ */
+function startPoll(){
+
+ (function poll(){
+ setTimeout(function(){
+ httpUrl = CONSTANTS.urlSecureTransportHttp + cepHostName + CONSTANTS.colon + cepPortNumber +
+ CONSTANTS.urlSeperator + CONSTANTS.httpEventRetrievalEndpoint + CONSTANTS.queryParamStreamName + stream +
+ CONSTANTS.queryParamStreamVersion + streamVersion + CONSTANTS.queryParamLastUpdatedTime + lastUpdatedtime;;
+ $.getJSON(httpUrl, function(responseText) {
+ if(firstPollingAttempt){
+ /*var data = $("textarea#idConsole").val();
+ $("textarea#idConsole").val(data + "Successfully connected to HTTP.");*/
+ firstPollingAttempt = false;
+ }
+ var eventList = $.parseJSON(responseText.events);
+ if(eventList.length != 0){
+ lastUpdatedtime = responseText.lastEventTime;
+ for(var i=0;i
+
+
+
+ Accelerometer_X
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/conf.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/conf.json
new file mode 100644
index 000000000..f20d0c48a
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/conf.json
@@ -0,0 +1 @@
+{"provider-conf" : {"streamName" : "org.wso2.iot.android.accelerometer:1.0.0", "provider-name" : "realtime"}, "chart-conf" : {"x" : "y", "title" : "ACCELEROMETER Y", "maxLength" : "30", "gadget-name" : "ACCELEROMETER Y", "chart-name" : "number-chart"}}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/css/number-chart.css b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/css/number-chart.css
new file mode 100644
index 000000000..5dde0413a
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/css/number-chart.css
@@ -0,0 +1,35 @@
+#canvas {
+ height: 100%;
+ width: 100%;
+}
+
+p {
+ margin: 0;
+ display: block;
+ text-align: center;
+ font-weight: bold;
+}
+
+.titlecanvasContent {
+ color:steelblue;
+ font-size:18px;
+ font-weight: normal;
+ padding: 10px 0;
+}
+
+.valcanvasContent {
+ color:#438CAD;
+ font-size:50px;
+ font-weight: normal;
+}
+
+
+.diffcanvasContent {
+ color:#438CAD;
+ font-size:14px;
+}
+
+.diffPercentagecanvasContent {
+ color:#ff944d;
+ font-size:14px;
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/gadget-controller.jag b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/gadget-controller.jag
new file mode 100644
index 000000000..f84538a40
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/gadget-controller.jag
@@ -0,0 +1,42 @@
+<%
+/**
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+(function () {
+
+ response.contentType = 'application/json';
+ var PROVIDER_CONF = 'provider-conf';
+ var PROVIDER_NAME = 'provider-name';
+
+ var action = request.getParameter("action");
+ var data = request.getContent();
+ var providerConf = data[PROVIDER_CONF];
+ var providerAPI = require('js/core/' + providerConf[PROVIDER_NAME] + '-provider-api.js');
+
+ if (action === 'getSchema') {
+ print(providerAPI.getSchema(providerConf));
+ return;
+ } else if(action === 'getData'){
+ print(providerAPI.getData(providerConf));
+ return;
+ }
+
+}());
+
+
+%>
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/gadget.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/gadget.json
new file mode 100644
index 000000000..16db7931b
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/gadget.json
@@ -0,0 +1,9 @@
+{
+ "id": "ACCELEROMETER_Y",
+ "title": "ACCELEROMETER Y",
+ "type": "gadget",
+ "thumbnail": "gadget/ACCELEROMETER_Y/thumbnail.png",
+ "data": {
+ "url": "gadget/ACCELEROMETER_Y/gadget.xml"
+ }
+}
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/gadget.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/gadget.xml
new file mode 100644
index 000000000..8d098fb3e
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/gadget.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]>
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/gadget-core.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/gadget-core.js
new file mode 100644
index 000000000..8bfc5f742
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/gadget-core.js
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+$(function () {
+ var gadgetLocation;
+ var conf;
+ var schema;
+ var pref = new gadgets.Prefs();
+
+ var CHART_CONF = 'chart-conf';
+ var PROVIDER_CONF = 'provider-conf';
+
+var init = function () {
+ $.ajax({
+ url: gadgetLocation + '/conf.json',
+ method: "GET",
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ conf = JSON.parse(data);
+ $.ajax({
+ url: gadgetLocation + '/gadget-controller.jag?action=getSchema',
+ method: "POST",
+ data: JSON.stringify(conf),
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ schema = data;
+ }
+ });
+
+ }
+ });
+};
+
+
+var drawGadget = function (){
+
+ draw('#canvas', conf[CHART_CONF], schema, null);
+ registerCallBackforPush(conf[PROVIDER_CONF], schema, function(providerData) {
+ update(providerData);
+ });
+
+};
+
+getGadgetLocation(function (gadget_Location) {
+ gadgetLocation = gadget_Location;
+ init();
+ drawGadget();
+
+});
+});
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/gadget-util.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/gadget-util.js
new file mode 100644
index 000000000..2ddc218d2
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/gadget-util.js
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getGadgetLocation = function (callback) {
+ var gadgetLocation = "/portal/store/carbon.super/fs/gadget/ACCELEROMETER_Y";
+ var PATH_SEPERATOR = "/";
+ if (gadgetLocation.search("store") != -1) {
+ wso2.gadgets.identity.getTenantDomain(function (tenantDomain) {
+ var gadgetPath = gadgetLocation.split(PATH_SEPERATOR);
+ var modifiedPath = '';
+ for (var i = 1; i < gadgetPath.length; i++) {
+ if (i === 3) {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, tenantDomain);
+ } else {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, gadgetPath[i])
+ }
+ }
+ callback(modifiedPath);
+ });
+ } else {
+ callback(gadgetLocation);
+ }
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/number-chart-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/number-chart-api.js
new file mode 100644
index 000000000..ef2c5da98
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/number-chart-api.js
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, isProviderRequired, draw, update;
+
+(function() {
+
+ var CHART_LOCATION = '/extensions/chart-templates/';
+
+ /**
+ * return the config to be populated in the chart configuration UI
+ * @param schema
+ */
+ getConfig = function(schema) {
+ var chartConf = require(CHART_LOCATION + '/number-chart/config.json').config;
+ /*
+ dynamic logic goes here
+ */
+ return chartConf;
+
+ };
+
+ /**
+ * validate the user inout for the chart configurationx
+ * @param chartConfig
+ */
+ validate = function(chartConfig) {
+ return true;
+ };
+
+ /**
+ * TO be used when provider configuration steps need to be skipped
+ */
+ isProviderRequired = function() {
+
+ }
+
+
+ /**
+ * return the gadget content
+ * @param chartConfig
+ * @param schema
+ * @param data
+ */
+ draw = function(placeholder, chartConfig, _schema, data) {
+ var schema = toVizGrammarSchema(_schema);
+ var view = {
+ id: "chart-0",
+ schema: schema,
+ chartConfig: buildChartConfig(chartConfig),
+ data: function() {
+ if(data) {
+ var result = [];
+ console.log(data);
+ data.forEach(function(item) {
+ var row = [];
+ schema[0].metadata.names.forEach(function(name) {
+ row.push(item[name]);
+ });
+ result.push(row);
+ });
+ console.log(result);
+ wso2gadgets.onDataReady(result);
+ }
+ }
+
+ };
+
+ try {
+ wso2gadgets.init(placeholder, view);
+ var view = wso2gadgets.load("chart-0");
+ } catch (e) {
+ console.error(e);
+ }
+
+ };
+
+ /**
+ *
+ * @param data
+ */
+ update = function(data) {
+ wso2gadgets.onDataReady(data,"append");
+ }
+
+ buildChartConfig = function (_chartConfig) {
+ var conf = {};
+ conf.x = _chartConfig.x;
+ conf.maxLength = _chartConfig.maxLength;
+ conf.charts = [];
+ conf.charts[0] = {
+ type : "number",
+ title : _chartConfig.title
+ };
+ return conf;
+ };
+
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/provider-client.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/provider-client.js
new file mode 100644
index 000000000..6196677f6
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/provider-client.js
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// var registerCallBackforPush;
+
+(function() {
+
+ var callback;
+
+ /**
+ * TODO Need to read hostname,port, and tenantId from providerConfig
+ * @param providerConfig
+ * @param schema
+ */
+ registerCallBackforPush = function(providerConfig, schema, _callback) {
+ var streamId = providerConfig['streamName'];
+ var hostname = window.parent.location.hostname;
+ var port = window.parent.location.port;
+
+ subscribe(streamId.split(":")[0], streamId.split(":")[1],
+ '10',
+ onData, onError,
+ hostname,
+ port,
+ 'WEBSOCKET'
+ );
+ callback = _callback;
+ };
+
+ function onData(streamId, data) {
+ callback(data);
+ };
+
+ function onError(error) {
+ console.error(error);
+ };
+
+}());
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/realtime-provider-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/realtime-provider-api.js
new file mode 100644
index 000000000..7cf59af77
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/core/realtime-provider-api.js
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, getMode, getSchema, getData, registerCallBackforPush;
+
+(function() {
+
+ var PROVIDERS_LOCATION = '/extensions/providers/';
+ var PROVIDER_NAME = 'realtime';
+
+ var log = new Log();
+ var utils = require('/modules/utils.js');
+ var carbon = require("carbon");
+ var EventPublisherConstants = Packages.org.wso2.carbon.event.publisher.core.config.EventPublisherConstants;
+ var eventPublisherService = carbon.server.osgiService('org.wso2.carbon.event.publisher.core.EventPublisherService');
+ var eventStreamService = carbon.server.osgiService('org.wso2.carbon.event.stream.core.EventStreamService');
+
+ var typeMap = {
+ "bool": "string",
+ "boolean": "string",
+ "string": "string",
+ "int": "number",
+ "integer": "number",
+ "long": "number",
+ "double": "number",
+ "float": "number",
+ "time": "time"
+ };
+
+ getConfig = function() {
+ var formConfig = require(PROVIDERS_LOCATION + '/' + PROVIDER_NAME + '/config.json');
+ var datasources = [];
+ try {
+ var eventPublisherConfigurationList = eventPublisherService.getAllActiveEventPublisherConfigurations();
+ for (var i = 0; i < eventPublisherConfigurationList.size(); i++) {
+ var eventPublisherConfiguration = eventPublisherService.getActiveEventPublisherConfiguration(
+ eventPublisherConfigurationList.get(i).getEventPublisherName());;
+
+ var mappingTypeIsWso2 = eventPublisherConfiguration.getOutputMapping()
+ .getMappingType().equals(EventPublisherConstants.EF_WSO2EVENT_MAPPING_TYPE);
+
+ var adapterType = null;
+ if (eventPublisherConfiguration.getToAdapterConfiguration() != null) {
+ adapterType = eventPublisherConfiguration.getToAdapterConfiguration().getType();
+ }
+ if (mappingTypeIsWso2 && adapterType.trim() == "ui") {
+ var streamName = eventPublisherConfiguration.getFromStreamName();
+ var streamVersion = eventPublisherConfiguration.getFromStreamVersion();
+ var streamId = streamName + ":" + streamVersion;
+ datasources.push(streamId);
+ }
+ }
+ var datasourceCfg = {
+ "fieldLabel": "Event Stream",
+ "fieldName": "streamName",
+ "fieldType": "dropDown"
+ };
+ datasourceCfg['valueSet'] = datasources;
+ } catch (e) {
+ log.error(e);
+ }
+ formConfig.config.push(datasourceCfg);
+ return formConfig;
+ };
+
+ /**
+ * validate the user input of provider configuration
+ * @param providerConfig
+ */
+ validate = function(providerConfig) {
+ /*
+ validate the form and return
+
+ */
+ return true;
+ };
+
+ /**
+ * returns the data mode either push or pull
+ */
+ getMode = function() {
+ return 'push';
+ };
+
+ /**
+ * returns an array of column names & types
+ * @param providerConfig
+ */
+ getSchema = function(providerConfig) {
+ var streamId = providerConfig["streamName"];
+ var output = [];
+
+ output.push({
+ fieldName: "TIMESTAMP",
+ fieldType: "time"
+ });
+
+ if (eventStreamService != null) {
+ var eventStreamConfiguration = eventStreamService.getEventStreamConfiguration(streamId);
+ if (eventStreamConfiguration != null) {
+ var metaData = eventStreamConfiguration.getStreamDefinition().getMetaData();
+ var correlationData = eventStreamConfiguration.getStreamDefinition().getCorrelationData();
+ var payloadData = eventStreamConfiguration.getStreamDefinition().getPayloadData();
+ if (metaData != null) {
+ for (var i = 0; i < metaData.size(); i++) {
+ var type = metaData.get(i).getType().toString().toLowerCase();
+ output.push({
+ fieldName: metaData.get(i).getName(),
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ }
+ }
+ if (correlationData != null) {
+ for (var i = 0; i < correlationData.size(); i++) {
+ var type = correlationData.get(i).getType().toString().toLowerCase();
+ output.push({
+ fieldName: correlationData.get(i).getName(),
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ }
+ }
+ if (payloadData != null) {
+ for (var i = 0; i < payloadData.size(); i++) {
+ var type = payloadData.get(i).getType().toString().toLowerCase();
+ output.push({
+ fieldName: payloadData.get(i).getName(),
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ }
+ }
+ }
+ }
+ return output;
+ };
+
+ getData = function(providerConfig,limit) {
+ var data = [];
+ return data;
+ };
+
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/provider-libs/ws-client.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/provider-libs/ws-client.js
new file mode 100644
index 000000000..fc49d8a35
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_y_gadget/ACCELEROMETER_Y/js/provider-libs/ws-client.js
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var CONSTANTS = {
+ urlSeperator: '/',
+ queryParamStreamName : '?streamname=',
+ queryParamStreamVersion : '&version=',
+ queryParamLastUpdatedTime : '&lastUpdatedTime=',
+ urlSecureTransportWebsocket : 'wss://',
+ urlSecureTransportHttp : 'https://',
+ colon : ':',
+ defaultIntervalTime : 10 * 1000,
+ defaultHostName : 'localhost',
+ defaultSecurePortNumber : '9443',
+ defaultMode : 'AUTO',
+ processModeHTTP : 'HTTP',
+ processModeWebSocket : 'WEBSOCKET',
+ processModeAuto : 'AUTO',
+ numThousand : 1000,
+ websocketTimeAppender : 400,
+ websocketSubscriptionEndpoint : 'portal/uipublisher/websocketSubscriptionEndpoint.jag',
+ httpEventRetrievalEndpoint : 'portal/uipublisher/httpEventRetrievalEndpoint.jag'
+};
+
+var websocket = null;
+var webSocketUrl;
+var httpUrl;
+var cepHostName;
+var cepPortNumber;
+var isErrorOccured = false;
+var lastUpdatedtime = -1;
+var polingInterval;
+var stream;
+var streamVersion;
+var firstPollingAttempt;
+var processMode;
+var onSuccessFunction;
+var onErrorFunction;
+var terminateWebsocketInstance = false;
+var pollingContinue = true;
+
+function subscribe(streamName,version,intervalTime,
+ listeningFuncSuccessData,listeningFuncErrorData,cepHost,cepPort,mode){
+ stopPollingProcesses();
+ stream = streamName;
+ streamVersion = version;
+ onSuccessFunction = listeningFuncSuccessData;
+ onErrorFunction = listeningFuncErrorData;
+
+ if(intervalTime == null || intervalTime == ""){
+ polingInterval = CONSTANTS.defaultIntervalTime;
+ } else{
+ polingInterval = intervalTime * CONSTANTS.numThousand;
+ }
+
+ if(cepHost == null || cepHost == ""){
+ cepHostName = CONSTANTS.defaultHostName;
+ } else{
+ cepHostName = cepHost;
+ }
+
+ if(cepPort == null || cepPort == ""){
+ cepPortNumber = CONSTANTS.defaultSecurePortNumber;
+ } else{
+ cepPortNumber = cepPort;
+ }
+
+ if(mode == null || mode == ""){
+ processMode = CONSTANTS.defaultMode;
+ } else{
+ processMode = mode;
+ }
+
+ webSocketUrl = CONSTANTS.urlSecureTransportWebsocket + cepHostName + CONSTANTS.colon + cepPortNumber +
+ CONSTANTS.urlSeperator + CONSTANTS.websocketSubscriptionEndpoint;
+
+ if(processMode == CONSTANTS.processModeHTTP){
+ firstPollingAttempt = true;
+ pollingContinue = true;
+ startPoll();
+ } else{
+ initializeWebSocket(webSocketUrl);
+ }
+}
+
+/**
+ * Initializing Web Socket
+ */
+function initializeWebSocket(webSocketUrl){
+ websocket = new WebSocket(webSocketUrl);
+ websocket.onopen = webSocketOnOpen;
+ websocket.onmessage = webSocketOnMessage;
+ websocket.onclose = webSocketOnClose;
+ websocket.onerror = webSocketOnError;
+}
+
+function getWebsocketSubscriptionMessage(streamName, streamVersion, streamProperties, streamValues) {
+ if (streamProperties.length === streamValues.length) {
+ var message = {};
+ message.streamName = streamName;
+ message.streamVersion = streamVersion;
+ var i;
+ for (i = 0; i < streamProperties.length; i++) {
+ message.filterProps = [];
+ message.filterProps.push({
+ 'name': streamProperties[i],
+ 'value': streamValues[i]
+ });
+ }
+ return JSON.stringify(message);
+ } else {
+ console.log('stream properties and values are not in equal size');
+ }
+}
+
+/**
+ * Get the parameters as query parameters.
+ * This method parses those parameters and returns.
+ * */
+function getAllQueryParamsFromURL() {
+ var queryParamList = {}, qParam;
+ var urlQueryString = decodeURIComponent(window.top.location.search.substring(1));
+
+ if (urlQueryString) {
+ var queryStringPairs = urlQueryString.split('&');
+ for (var i = 0; i < queryStringPairs.length; i++) {
+ qParam = queryStringPairs[i].split('=');
+ queryParamList[qParam[0]] = qParam[1];
+ }
+ return queryParamList;
+
+ } else {
+ return null;
+ }
+}
+
+/**
+ * Web socket On Open
+ */
+var webSocketOnOpen = function () {
+ var params = getAllQueryParamsFromURL();
+ var deviceId;
+ var owner;
+ if (params) {
+ owner = params["owner"];
+ deviceId = params["deviceId"];
+ }
+ var filterPropNames = ["meta_owner", "meta_deviceId"];
+ var filterPropVals = [owner, deviceId];
+ var data = getWebsocketSubscriptionMessage(stream, streamVersion, filterPropNames, filterPropVals);
+ websocket.send(data);
+};
+
+/**
+ * On server sends a message
+ */
+var webSocketOnMessage = function (evt) {
+ var event = evt.data;
+ var array = JSON.parse(event);
+ constructPayload(array);
+};
+
+/**
+ * On server close
+ */
+var webSocketOnClose =function (e) {
+
+ if(isErrorOccured){
+ if(processMode != CONSTANTS.processModeWebSocket){
+ firstPollingAttempt = true;
+ pollingContinue = true;
+ startPoll();
+ }
+ } else{
+ if(!terminateWebsocketInstance){
+ waitForSocketConnection(websocket);
+ } else{
+ terminateWebsocketInstance = false;
+ }
+
+ }
+};
+
+/**
+ * On server Error
+ */
+var webSocketOnError = function (err) {
+ var error = "Error: Cannot connect to Websocket URL:" + webSocketUrl + " .Hence closing the connection!";
+
+ onErrorFunction(error);
+ isErrorOccured = true;
+
+};
+
+/**
+ * Gracefully increments the connection retry
+ */
+var waitTime = CONSTANTS.numThousand;
+function waitForSocketConnection(socket, callback){
+ setTimeout(
+ function () {
+ if (socket.readyState === 1) {
+ initializeWebSocket(webSocketUrl);
+ console.log("Connection is made");
+ if(callback != null){
+ callback();
+ }
+ return;
+ } else {
+ websocket = new WebSocket(webSocketUrl);
+ waitTime += CONSTANTS.websocketTimeAppender;
+ waitForSocketConnection(websocket, callback);
+ }
+ }, waitTime);
+}
+
+/**
+ * Polling to retrieve events from http request periodically
+ */
+function startPoll(){
+
+ (function poll(){
+ setTimeout(function(){
+ httpUrl = CONSTANTS.urlSecureTransportHttp + cepHostName + CONSTANTS.colon + cepPortNumber +
+ CONSTANTS.urlSeperator + CONSTANTS.httpEventRetrievalEndpoint + CONSTANTS.queryParamStreamName + stream +
+ CONSTANTS.queryParamStreamVersion + streamVersion + CONSTANTS.queryParamLastUpdatedTime + lastUpdatedtime;;
+ $.getJSON(httpUrl, function(responseText) {
+ if(firstPollingAttempt){
+ /*var data = $("textarea#idConsole").val();
+ $("textarea#idConsole").val(data + "Successfully connected to HTTP.");*/
+ firstPollingAttempt = false;
+ }
+ var eventList = $.parseJSON(responseText.events);
+ if(eventList.length != 0){
+ lastUpdatedtime = responseText.lastEventTime;
+ for(var i=0;i
+
+
+
+ ACCELEROMETER_Y
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/conf.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/conf.json
new file mode 100644
index 000000000..1940ff1dd
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/conf.json
@@ -0,0 +1 @@
+{"provider-conf" : {"streamName" : "org.wso2.iot.android.accelerometer:1.0.0", "provider-name" : "realtime"}, "chart-conf" : {"x" : "z", "title" : "ACCELEROMETER Z", "maxLength" : "30", "gadget-name" : "ACCELEROMETER Z", "chart-name" : "number-chart"}}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/css/number-chart.css b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/css/number-chart.css
new file mode 100644
index 000000000..5dde0413a
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/css/number-chart.css
@@ -0,0 +1,35 @@
+#canvas {
+ height: 100%;
+ width: 100%;
+}
+
+p {
+ margin: 0;
+ display: block;
+ text-align: center;
+ font-weight: bold;
+}
+
+.titlecanvasContent {
+ color:steelblue;
+ font-size:18px;
+ font-weight: normal;
+ padding: 10px 0;
+}
+
+.valcanvasContent {
+ color:#438CAD;
+ font-size:50px;
+ font-weight: normal;
+}
+
+
+.diffcanvasContent {
+ color:#438CAD;
+ font-size:14px;
+}
+
+.diffPercentagecanvasContent {
+ color:#ff944d;
+ font-size:14px;
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/gadget-controller.jag b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/gadget-controller.jag
new file mode 100644
index 000000000..f84538a40
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/gadget-controller.jag
@@ -0,0 +1,42 @@
+<%
+/**
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+(function () {
+
+ response.contentType = 'application/json';
+ var PROVIDER_CONF = 'provider-conf';
+ var PROVIDER_NAME = 'provider-name';
+
+ var action = request.getParameter("action");
+ var data = request.getContent();
+ var providerConf = data[PROVIDER_CONF];
+ var providerAPI = require('js/core/' + providerConf[PROVIDER_NAME] + '-provider-api.js');
+
+ if (action === 'getSchema') {
+ print(providerAPI.getSchema(providerConf));
+ return;
+ } else if(action === 'getData'){
+ print(providerAPI.getData(providerConf));
+ return;
+ }
+
+}());
+
+
+%>
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/gadget.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/gadget.json
new file mode 100644
index 000000000..4236c240a
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/gadget.json
@@ -0,0 +1,9 @@
+{
+ "id": "ACCELEROMETER_Z",
+ "title": "ACCELEROMETER Z",
+ "type": "gadget",
+ "thumbnail": "gadget/ACCELEROMETER_Z/thumbnail.png",
+ "data": {
+ "url": "gadget/ACCELEROMETER_Z/gadget.xml"
+ }
+}
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/gadget.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/gadget.xml
new file mode 100644
index 000000000..77802fd2d
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/gadget.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]>
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/gadget-core.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/gadget-core.js
new file mode 100644
index 000000000..8bfc5f742
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/gadget-core.js
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+$(function () {
+ var gadgetLocation;
+ var conf;
+ var schema;
+ var pref = new gadgets.Prefs();
+
+ var CHART_CONF = 'chart-conf';
+ var PROVIDER_CONF = 'provider-conf';
+
+var init = function () {
+ $.ajax({
+ url: gadgetLocation + '/conf.json',
+ method: "GET",
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ conf = JSON.parse(data);
+ $.ajax({
+ url: gadgetLocation + '/gadget-controller.jag?action=getSchema',
+ method: "POST",
+ data: JSON.stringify(conf),
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ schema = data;
+ }
+ });
+
+ }
+ });
+};
+
+
+var drawGadget = function (){
+
+ draw('#canvas', conf[CHART_CONF], schema, null);
+ registerCallBackforPush(conf[PROVIDER_CONF], schema, function(providerData) {
+ update(providerData);
+ });
+
+};
+
+getGadgetLocation(function (gadget_Location) {
+ gadgetLocation = gadget_Location;
+ init();
+ drawGadget();
+
+});
+});
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/gadget-util.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/gadget-util.js
new file mode 100644
index 000000000..ffdc7ddc1
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/gadget-util.js
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getGadgetLocation = function (callback) {
+ var gadgetLocation = "/portal/store/carbon.super/fs/gadget/ACCELEROMETER_Z";
+ var PATH_SEPERATOR = "/";
+ if (gadgetLocation.search("store") != -1) {
+ wso2.gadgets.identity.getTenantDomain(function (tenantDomain) {
+ var gadgetPath = gadgetLocation.split(PATH_SEPERATOR);
+ var modifiedPath = '';
+ for (var i = 1; i < gadgetPath.length; i++) {
+ if (i === 3) {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, tenantDomain);
+ } else {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, gadgetPath[i])
+ }
+ }
+ callback(modifiedPath);
+ });
+ } else {
+ callback(gadgetLocation);
+ }
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/number-chart-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/number-chart-api.js
new file mode 100644
index 000000000..ef2c5da98
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/number-chart-api.js
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, isProviderRequired, draw, update;
+
+(function() {
+
+ var CHART_LOCATION = '/extensions/chart-templates/';
+
+ /**
+ * return the config to be populated in the chart configuration UI
+ * @param schema
+ */
+ getConfig = function(schema) {
+ var chartConf = require(CHART_LOCATION + '/number-chart/config.json').config;
+ /*
+ dynamic logic goes here
+ */
+ return chartConf;
+
+ };
+
+ /**
+ * validate the user inout for the chart configurationx
+ * @param chartConfig
+ */
+ validate = function(chartConfig) {
+ return true;
+ };
+
+ /**
+ * TO be used when provider configuration steps need to be skipped
+ */
+ isProviderRequired = function() {
+
+ }
+
+
+ /**
+ * return the gadget content
+ * @param chartConfig
+ * @param schema
+ * @param data
+ */
+ draw = function(placeholder, chartConfig, _schema, data) {
+ var schema = toVizGrammarSchema(_schema);
+ var view = {
+ id: "chart-0",
+ schema: schema,
+ chartConfig: buildChartConfig(chartConfig),
+ data: function() {
+ if(data) {
+ var result = [];
+ console.log(data);
+ data.forEach(function(item) {
+ var row = [];
+ schema[0].metadata.names.forEach(function(name) {
+ row.push(item[name]);
+ });
+ result.push(row);
+ });
+ console.log(result);
+ wso2gadgets.onDataReady(result);
+ }
+ }
+
+ };
+
+ try {
+ wso2gadgets.init(placeholder, view);
+ var view = wso2gadgets.load("chart-0");
+ } catch (e) {
+ console.error(e);
+ }
+
+ };
+
+ /**
+ *
+ * @param data
+ */
+ update = function(data) {
+ wso2gadgets.onDataReady(data,"append");
+ }
+
+ buildChartConfig = function (_chartConfig) {
+ var conf = {};
+ conf.x = _chartConfig.x;
+ conf.maxLength = _chartConfig.maxLength;
+ conf.charts = [];
+ conf.charts[0] = {
+ type : "number",
+ title : _chartConfig.title
+ };
+ return conf;
+ };
+
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/provider-client.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/provider-client.js
new file mode 100644
index 000000000..6196677f6
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/provider-client.js
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// var registerCallBackforPush;
+
+(function() {
+
+ var callback;
+
+ /**
+ * TODO Need to read hostname,port, and tenantId from providerConfig
+ * @param providerConfig
+ * @param schema
+ */
+ registerCallBackforPush = function(providerConfig, schema, _callback) {
+ var streamId = providerConfig['streamName'];
+ var hostname = window.parent.location.hostname;
+ var port = window.parent.location.port;
+
+ subscribe(streamId.split(":")[0], streamId.split(":")[1],
+ '10',
+ onData, onError,
+ hostname,
+ port,
+ 'WEBSOCKET'
+ );
+ callback = _callback;
+ };
+
+ function onData(streamId, data) {
+ callback(data);
+ };
+
+ function onError(error) {
+ console.error(error);
+ };
+
+}());
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/realtime-provider-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/realtime-provider-api.js
new file mode 100644
index 000000000..7cf59af77
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/core/realtime-provider-api.js
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, getMode, getSchema, getData, registerCallBackforPush;
+
+(function() {
+
+ var PROVIDERS_LOCATION = '/extensions/providers/';
+ var PROVIDER_NAME = 'realtime';
+
+ var log = new Log();
+ var utils = require('/modules/utils.js');
+ var carbon = require("carbon");
+ var EventPublisherConstants = Packages.org.wso2.carbon.event.publisher.core.config.EventPublisherConstants;
+ var eventPublisherService = carbon.server.osgiService('org.wso2.carbon.event.publisher.core.EventPublisherService');
+ var eventStreamService = carbon.server.osgiService('org.wso2.carbon.event.stream.core.EventStreamService');
+
+ var typeMap = {
+ "bool": "string",
+ "boolean": "string",
+ "string": "string",
+ "int": "number",
+ "integer": "number",
+ "long": "number",
+ "double": "number",
+ "float": "number",
+ "time": "time"
+ };
+
+ getConfig = function() {
+ var formConfig = require(PROVIDERS_LOCATION + '/' + PROVIDER_NAME + '/config.json');
+ var datasources = [];
+ try {
+ var eventPublisherConfigurationList = eventPublisherService.getAllActiveEventPublisherConfigurations();
+ for (var i = 0; i < eventPublisherConfigurationList.size(); i++) {
+ var eventPublisherConfiguration = eventPublisherService.getActiveEventPublisherConfiguration(
+ eventPublisherConfigurationList.get(i).getEventPublisherName());;
+
+ var mappingTypeIsWso2 = eventPublisherConfiguration.getOutputMapping()
+ .getMappingType().equals(EventPublisherConstants.EF_WSO2EVENT_MAPPING_TYPE);
+
+ var adapterType = null;
+ if (eventPublisherConfiguration.getToAdapterConfiguration() != null) {
+ adapterType = eventPublisherConfiguration.getToAdapterConfiguration().getType();
+ }
+ if (mappingTypeIsWso2 && adapterType.trim() == "ui") {
+ var streamName = eventPublisherConfiguration.getFromStreamName();
+ var streamVersion = eventPublisherConfiguration.getFromStreamVersion();
+ var streamId = streamName + ":" + streamVersion;
+ datasources.push(streamId);
+ }
+ }
+ var datasourceCfg = {
+ "fieldLabel": "Event Stream",
+ "fieldName": "streamName",
+ "fieldType": "dropDown"
+ };
+ datasourceCfg['valueSet'] = datasources;
+ } catch (e) {
+ log.error(e);
+ }
+ formConfig.config.push(datasourceCfg);
+ return formConfig;
+ };
+
+ /**
+ * validate the user input of provider configuration
+ * @param providerConfig
+ */
+ validate = function(providerConfig) {
+ /*
+ validate the form and return
+
+ */
+ return true;
+ };
+
+ /**
+ * returns the data mode either push or pull
+ */
+ getMode = function() {
+ return 'push';
+ };
+
+ /**
+ * returns an array of column names & types
+ * @param providerConfig
+ */
+ getSchema = function(providerConfig) {
+ var streamId = providerConfig["streamName"];
+ var output = [];
+
+ output.push({
+ fieldName: "TIMESTAMP",
+ fieldType: "time"
+ });
+
+ if (eventStreamService != null) {
+ var eventStreamConfiguration = eventStreamService.getEventStreamConfiguration(streamId);
+ if (eventStreamConfiguration != null) {
+ var metaData = eventStreamConfiguration.getStreamDefinition().getMetaData();
+ var correlationData = eventStreamConfiguration.getStreamDefinition().getCorrelationData();
+ var payloadData = eventStreamConfiguration.getStreamDefinition().getPayloadData();
+ if (metaData != null) {
+ for (var i = 0; i < metaData.size(); i++) {
+ var type = metaData.get(i).getType().toString().toLowerCase();
+ output.push({
+ fieldName: metaData.get(i).getName(),
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ }
+ }
+ if (correlationData != null) {
+ for (var i = 0; i < correlationData.size(); i++) {
+ var type = correlationData.get(i).getType().toString().toLowerCase();
+ output.push({
+ fieldName: correlationData.get(i).getName(),
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ }
+ }
+ if (payloadData != null) {
+ for (var i = 0; i < payloadData.size(); i++) {
+ var type = payloadData.get(i).getType().toString().toLowerCase();
+ output.push({
+ fieldName: payloadData.get(i).getName(),
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ }
+ }
+ }
+ }
+ return output;
+ };
+
+ getData = function(providerConfig,limit) {
+ var data = [];
+ return data;
+ };
+
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/provider-libs/ws-client.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/provider-libs/ws-client.js
new file mode 100644
index 000000000..fc49d8a35
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_accelerometer_z_gadget/ACCELEROMETER_Z/js/provider-libs/ws-client.js
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var CONSTANTS = {
+ urlSeperator: '/',
+ queryParamStreamName : '?streamname=',
+ queryParamStreamVersion : '&version=',
+ queryParamLastUpdatedTime : '&lastUpdatedTime=',
+ urlSecureTransportWebsocket : 'wss://',
+ urlSecureTransportHttp : 'https://',
+ colon : ':',
+ defaultIntervalTime : 10 * 1000,
+ defaultHostName : 'localhost',
+ defaultSecurePortNumber : '9443',
+ defaultMode : 'AUTO',
+ processModeHTTP : 'HTTP',
+ processModeWebSocket : 'WEBSOCKET',
+ processModeAuto : 'AUTO',
+ numThousand : 1000,
+ websocketTimeAppender : 400,
+ websocketSubscriptionEndpoint : 'portal/uipublisher/websocketSubscriptionEndpoint.jag',
+ httpEventRetrievalEndpoint : 'portal/uipublisher/httpEventRetrievalEndpoint.jag'
+};
+
+var websocket = null;
+var webSocketUrl;
+var httpUrl;
+var cepHostName;
+var cepPortNumber;
+var isErrorOccured = false;
+var lastUpdatedtime = -1;
+var polingInterval;
+var stream;
+var streamVersion;
+var firstPollingAttempt;
+var processMode;
+var onSuccessFunction;
+var onErrorFunction;
+var terminateWebsocketInstance = false;
+var pollingContinue = true;
+
+function subscribe(streamName,version,intervalTime,
+ listeningFuncSuccessData,listeningFuncErrorData,cepHost,cepPort,mode){
+ stopPollingProcesses();
+ stream = streamName;
+ streamVersion = version;
+ onSuccessFunction = listeningFuncSuccessData;
+ onErrorFunction = listeningFuncErrorData;
+
+ if(intervalTime == null || intervalTime == ""){
+ polingInterval = CONSTANTS.defaultIntervalTime;
+ } else{
+ polingInterval = intervalTime * CONSTANTS.numThousand;
+ }
+
+ if(cepHost == null || cepHost == ""){
+ cepHostName = CONSTANTS.defaultHostName;
+ } else{
+ cepHostName = cepHost;
+ }
+
+ if(cepPort == null || cepPort == ""){
+ cepPortNumber = CONSTANTS.defaultSecurePortNumber;
+ } else{
+ cepPortNumber = cepPort;
+ }
+
+ if(mode == null || mode == ""){
+ processMode = CONSTANTS.defaultMode;
+ } else{
+ processMode = mode;
+ }
+
+ webSocketUrl = CONSTANTS.urlSecureTransportWebsocket + cepHostName + CONSTANTS.colon + cepPortNumber +
+ CONSTANTS.urlSeperator + CONSTANTS.websocketSubscriptionEndpoint;
+
+ if(processMode == CONSTANTS.processModeHTTP){
+ firstPollingAttempt = true;
+ pollingContinue = true;
+ startPoll();
+ } else{
+ initializeWebSocket(webSocketUrl);
+ }
+}
+
+/**
+ * Initializing Web Socket
+ */
+function initializeWebSocket(webSocketUrl){
+ websocket = new WebSocket(webSocketUrl);
+ websocket.onopen = webSocketOnOpen;
+ websocket.onmessage = webSocketOnMessage;
+ websocket.onclose = webSocketOnClose;
+ websocket.onerror = webSocketOnError;
+}
+
+function getWebsocketSubscriptionMessage(streamName, streamVersion, streamProperties, streamValues) {
+ if (streamProperties.length === streamValues.length) {
+ var message = {};
+ message.streamName = streamName;
+ message.streamVersion = streamVersion;
+ var i;
+ for (i = 0; i < streamProperties.length; i++) {
+ message.filterProps = [];
+ message.filterProps.push({
+ 'name': streamProperties[i],
+ 'value': streamValues[i]
+ });
+ }
+ return JSON.stringify(message);
+ } else {
+ console.log('stream properties and values are not in equal size');
+ }
+}
+
+/**
+ * Get the parameters as query parameters.
+ * This method parses those parameters and returns.
+ * */
+function getAllQueryParamsFromURL() {
+ var queryParamList = {}, qParam;
+ var urlQueryString = decodeURIComponent(window.top.location.search.substring(1));
+
+ if (urlQueryString) {
+ var queryStringPairs = urlQueryString.split('&');
+ for (var i = 0; i < queryStringPairs.length; i++) {
+ qParam = queryStringPairs[i].split('=');
+ queryParamList[qParam[0]] = qParam[1];
+ }
+ return queryParamList;
+
+ } else {
+ return null;
+ }
+}
+
+/**
+ * Web socket On Open
+ */
+var webSocketOnOpen = function () {
+ var params = getAllQueryParamsFromURL();
+ var deviceId;
+ var owner;
+ if (params) {
+ owner = params["owner"];
+ deviceId = params["deviceId"];
+ }
+ var filterPropNames = ["meta_owner", "meta_deviceId"];
+ var filterPropVals = [owner, deviceId];
+ var data = getWebsocketSubscriptionMessage(stream, streamVersion, filterPropNames, filterPropVals);
+ websocket.send(data);
+};
+
+/**
+ * On server sends a message
+ */
+var webSocketOnMessage = function (evt) {
+ var event = evt.data;
+ var array = JSON.parse(event);
+ constructPayload(array);
+};
+
+/**
+ * On server close
+ */
+var webSocketOnClose =function (e) {
+
+ if(isErrorOccured){
+ if(processMode != CONSTANTS.processModeWebSocket){
+ firstPollingAttempt = true;
+ pollingContinue = true;
+ startPoll();
+ }
+ } else{
+ if(!terminateWebsocketInstance){
+ waitForSocketConnection(websocket);
+ } else{
+ terminateWebsocketInstance = false;
+ }
+
+ }
+};
+
+/**
+ * On server Error
+ */
+var webSocketOnError = function (err) {
+ var error = "Error: Cannot connect to Websocket URL:" + webSocketUrl + " .Hence closing the connection!";
+
+ onErrorFunction(error);
+ isErrorOccured = true;
+
+};
+
+/**
+ * Gracefully increments the connection retry
+ */
+var waitTime = CONSTANTS.numThousand;
+function waitForSocketConnection(socket, callback){
+ setTimeout(
+ function () {
+ if (socket.readyState === 1) {
+ initializeWebSocket(webSocketUrl);
+ console.log("Connection is made");
+ if(callback != null){
+ callback();
+ }
+ return;
+ } else {
+ websocket = new WebSocket(webSocketUrl);
+ waitTime += CONSTANTS.websocketTimeAppender;
+ waitForSocketConnection(websocket, callback);
+ }
+ }, waitTime);
+}
+
+/**
+ * Polling to retrieve events from http request periodically
+ */
+function startPoll(){
+
+ (function poll(){
+ setTimeout(function(){
+ httpUrl = CONSTANTS.urlSecureTransportHttp + cepHostName + CONSTANTS.colon + cepPortNumber +
+ CONSTANTS.urlSeperator + CONSTANTS.httpEventRetrievalEndpoint + CONSTANTS.queryParamStreamName + stream +
+ CONSTANTS.queryParamStreamVersion + streamVersion + CONSTANTS.queryParamLastUpdatedTime + lastUpdatedtime;;
+ $.getJSON(httpUrl, function(responseText) {
+ if(firstPollingAttempt){
+ /*var data = $("textarea#idConsole").val();
+ $("textarea#idConsole").val(data + "Successfully connected to HTTP.");*/
+ firstPollingAttempt = false;
+ }
+ var eventList = $.parseJSON(responseText.events);
+ if(eventList.length != 0){
+ lastUpdatedtime = responseText.lastEventTime;
+ for(var i=0;i
+
+
+
+ ACCELEROMETER_Z
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_sense_executionplan/Android-Sense-ExecutionPlan.siddhiql b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_sense_executionplan/Android-Sense-ExecutionPlan.siddhiql
index 05eed9510..3b4d7b32f 100755
--- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_sense_executionplan/Android-Sense-ExecutionPlan.siddhiql
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_android_sense_executionplan/Android-Sense-ExecutionPlan.siddhiql
@@ -32,6 +32,61 @@ define stream SmsStream (meta_owner string, meta_deviceId string, meta_timestamp
@Export('org.wso2.geo.LocationStream:1.0.0')
define stream geoLocationStream (id string, timeStamp long, latitude double, longitude double, type string, speed float, heading float);
+@Export('org.wso2.iot.android.accelerometer:1.0.0')
+define stream AccelerometerStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
+
+@Export('org.wso2.iot.android.gyroscope:1.0.0')
+define stream GyroscopeStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
+
+@Export('org.wso2.iot.android.magnetic:1.0.0')
+define stream MagneticStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
+
+@Export('org.wso2.iot.android.gravity:1.0.0')
+define stream GravityStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
+
+@Export('org.wso2.iot.android.rotation:1.0.0')
+define stream RotationStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
+
+@Export('org.wso2.iot.android.pressure:1.0.0')
+define stream PressureStream (meta_owner string, meta_deviceId string, meta_timestamp long, pressure float);
+
+@Export('org.wso2.iot.android.light:1.0.0')
+define stream LightStream (meta_owner string, meta_deviceId string, meta_timestamp long, light float);
+
+@Export('org.wso2.iot.android.proximity:1.0.0')
+define stream ProximityStream (meta_owner string, meta_deviceId string, meta_timestamp long, proximity float);
+
+from AndroidSense[meta_type == 'accelerometer']
+select meta_owner, meta_deviceId, meta_timestamp, accelerometer_x as x, accelerometer_y as y, accelerometer_z as z
+insert into AccelerometerStream;
+
+from AndroidSense[meta_type == 'gyroscope']
+select meta_owner, meta_deviceId, meta_timestamp, gyroscope_x as x, gyroscope_y as y, gyroscope_z as z
+insert into GyroscopeStream;
+from AndroidSense[meta_type == 'magnetic']
+select meta_owner, meta_deviceId, meta_timestamp, magnetic_x as x, magnetic_y as y, magnetic_z as z
+insert into MagneticStream;
+
+from AndroidSense[meta_type == 'gravity']
+select meta_owner, meta_deviceId, meta_timestamp, gravity_x as x, gravity_y as y, gravity_z as z
+insert into GravityStream;
+
+from AndroidSense[meta_type == 'rotation']
+select meta_owner, meta_deviceId, meta_timestamp, rotation_x as x, rotation_y as y, rotation_z as z
+insert into RotationStream;
+
+from AndroidSense[meta_type == 'pressure']
+select meta_owner, meta_deviceId, meta_timestamp, pressure as pressure
+insert into PressureStream;
+
+from AndroidSense[meta_type == 'light']
+select meta_owner, meta_deviceId, meta_timestamp, light as light
+insert into LightStream;
+
+from AndroidSense[meta_type == 'proximity']
+select meta_owner, meta_deviceId, meta_timestamp, proximity as proximity
+insert into ProximityStream;
+
from AndroidSense[meta_type == 'sms']
select meta_owner, meta_deviceId, meta_timestamp, sms_number as number, action as type, "" as body
insert into SmsStream;
@@ -66,4 +121,4 @@ insert into DataStream;
from AndroidSense[meta_type == 'gps']
select meta_deviceId as id, meta_timestamp as timeStamp, gps_lat as latitude, gps_long as longitude, "android_sense" as type, speed_limit as speed, 0.0f as heading
-insert into geoLocationStream;
\ No newline at end of file
+insert into geoLocationStream;
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_executionplan/Android-Gravity-ExecutionPlan.siddhiql b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_executionplan/Android-Gravity-ExecutionPlan.siddhiql
new file mode 100755
index 000000000..051d8c18f
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_executionplan/Android-Gravity-ExecutionPlan.siddhiql
@@ -0,0 +1,18 @@
+@Plan:name('Android-Gravity-ExecutionPlan')
+
+@Plan:description('Process gravity changes.')
+
+@Import('org.wso2.iot.android.gravity:1.0.0')
+define stream GravityStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
+
+@Export('org.wso2.iot.android.gravity.stats:1.0.0')
+define stream GravityStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, x
+float, y float, z float, year int, month int, day int, hour int, minute int);
+
+partition with (meta_deviceId of GravityStream)
+begin
+ from GravityStream
+ select meta_owner, meta_deviceId, meta_timestamp, x, y, z, time:extract
+ (meta_timestamp, 'year') as year, time:extract(meta_timestamp, 'month') as month, time:extract(meta_timestamp, 'day') as day, time:extract(meta_timestamp, 'hour') as hour, time:extract(meta_timestamp, 'minute') as minute
+ insert into GravityStatsStream;
+end;
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_executionplan/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_executionplan/artifact.xml
new file mode 100644
index 000000000..2aed83ad8
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_executionplan/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ Android-Gravity-ExecutionPlan.siddhiql
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/conf.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/conf.json
new file mode 100644
index 000000000..4cedf32bd
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/conf.json
@@ -0,0 +1 @@
+{"provider-conf" : {"tableName" : "ORG_WSO2_IOT_ANDROID_GRAVITY_STATS", "query" : "", "limit" : "", "provider-name" : "batch"}, "chart-conf" : {"x" : "z", "title" : "GRAVITY", "maxLength" : "30", "gadget-name" : "GRAVITY", "chart-name" : "number-chart"}}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/css/number-chart.css b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/css/number-chart.css
new file mode 100644
index 000000000..5dde0413a
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/css/number-chart.css
@@ -0,0 +1,35 @@
+#canvas {
+ height: 100%;
+ width: 100%;
+}
+
+p {
+ margin: 0;
+ display: block;
+ text-align: center;
+ font-weight: bold;
+}
+
+.titlecanvasContent {
+ color:steelblue;
+ font-size:18px;
+ font-weight: normal;
+ padding: 10px 0;
+}
+
+.valcanvasContent {
+ color:#438CAD;
+ font-size:50px;
+ font-weight: normal;
+}
+
+
+.diffcanvasContent {
+ color:#438CAD;
+ font-size:14px;
+}
+
+.diffPercentagecanvasContent {
+ color:#ff944d;
+ font-size:14px;
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/gadget-controller.jag b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/gadget-controller.jag
new file mode 100644
index 000000000..f84538a40
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/gadget-controller.jag
@@ -0,0 +1,42 @@
+<%
+/**
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+(function () {
+
+ response.contentType = 'application/json';
+ var PROVIDER_CONF = 'provider-conf';
+ var PROVIDER_NAME = 'provider-name';
+
+ var action = request.getParameter("action");
+ var data = request.getContent();
+ var providerConf = data[PROVIDER_CONF];
+ var providerAPI = require('js/core/' + providerConf[PROVIDER_NAME] + '-provider-api.js');
+
+ if (action === 'getSchema') {
+ print(providerAPI.getSchema(providerConf));
+ return;
+ } else if(action === 'getData'){
+ print(providerAPI.getData(providerConf));
+ return;
+ }
+
+}());
+
+
+%>
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/gadget.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/gadget.json
new file mode 100644
index 000000000..96e28c842
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/gadget.json
@@ -0,0 +1,9 @@
+{
+ "id": "GRAVITY",
+ "title": "GRAVITY",
+ "type": "gadget",
+ "thumbnail": "gadget/GRAVITY/thumbnail.png",
+ "data": {
+ "url": "gadget/GRAVITY/gadget.xml"
+ }
+}
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/gadget.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/gadget.xml
new file mode 100644
index 000000000..80b23b686
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/gadget.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]>
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/batch-provider-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/batch-provider-api.js
new file mode 100644
index 000000000..30c96902a
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/batch-provider-api.js
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, getMode, getSchema, getData, registerCallBackforPush;
+
+(function() {
+
+ var PROVIDERS_LOCATION = '/extensions/providers/';
+
+ var PROVIDER_NAME = 'batch';
+ var TYPE = "type";
+ var TABLE_NAME = "tableName";
+ var HTTPS_TRANSPORT = "https";
+ var CONTENT_TYPE_JSON = "application/json";
+ var AUTHORIZATION_HEADER = "Authorization";
+ var USER_TOKEN = "user";
+ var TENANT_DOMAIN = "domain";
+ var CONST_AT = "@";
+ var USERNAME = "username";
+ var HTTP_USER_NOT_AUTHENTICATED = 403;
+ var JS_MAX_VALUE = "9007199254740992";
+ var JS_MIN_VALUE = "-9007199254740992";
+
+ var typeMap = {
+ "bool" : "string",
+ "boolean" : "string",
+ "string" : "string",
+ "int" : "number",
+ "integer" : "number",
+ "long" : "number",
+ "double" : "number",
+ "float" : "number",
+ "time": "time"
+ };
+
+ var log = new Log();
+ var carbon = require('carbon');
+ var configs = require('/configs/designer.json');
+ var utils = require('/modules/utils.js');
+ var JSUtils = Packages.org.wso2.carbon.analytics.jsservice.Utils;
+ var AnalyticsCachedJSServiceConnector = Packages.org.wso2.carbon.analytics.jsservice.AnalyticsCachedJSServiceConnector;
+ var AnalyticsCache = Packages.org.wso2.carbon.analytics.jsservice.AnalyticsCachedJSServiceConnector.AnalyticsCache;
+ var cacheTimeoutSeconds = 5;
+ var loggedInUser = null;
+
+ if (configs.cacheTimeoutSeconds) {
+ cacheTimeoutSeconds = parseInt(configs.cacheTimeoutSeconds);
+ }
+ var cacheSizeBytes = 1024 * 1024 * 1024; // 1GB
+ if (configs.cacheSizeBytes) {
+ cacheSizeBytes = parseInt(configs.cacheSizeBytes);
+ }
+ response.contentType = CONTENT_TYPE_JSON;
+
+ var authParam = request.getHeader(AUTHORIZATION_HEADER);
+ if (authParam != null) {
+ credentials = JSUtils.authenticate(authParam);
+ loggedInUser = credentials[0];
+ } else {
+ var token = session.get(USER_TOKEN);
+ if (token != null) {
+ loggedInUser = token[USERNAME] + CONST_AT + token[TENANT_DOMAIN];
+ } else {
+ log.error("user is not authenticated!");
+ response.status = HTTP_USER_NOT_AUTHENTICATED;
+ print('{ "status": "Failed", "message": "User is not authenticated." }');
+ return;
+ }
+ }
+
+ var cache = application.get("AnalyticsWebServiceCache");
+ if (cache == null) {
+ cache = new AnalyticsCache(cacheTimeoutSeconds, cacheSizeBytes);
+ application.put("AnalyticsWebServiceCache", cache);
+ }
+ var connector = new AnalyticsCachedJSServiceConnector(cache);
+
+ /**
+ * require the existing config.json and push any dynamic fields that needs to be populated in the UI
+ */
+ getConfig = function() {
+ var formConfig = require(PROVIDERS_LOCATION + '/' + PROVIDER_NAME + '/config.json');
+ var tables;
+ try {
+ tables = JSON.parse(connector.getTableList(loggedInUser).getMessage());
+ } catch (e) {
+ log.error(e);
+ }
+ var configs = formConfig.config;
+ configs.forEach(function(config) {
+ if (config.fieldName === TABLE_NAME) {
+ config.valueSet = tables;
+ }
+ });
+ return formConfig;
+ }
+
+ /**
+ * validate the user input of provider configuration
+ * @param providerConfig
+ */
+ validate = function(providerConfig) {
+ /*
+ validate the form and return
+
+ */
+ return true;
+ }
+
+ /**
+ * returns the data mode either push or pull
+ */
+ getMode = function() {
+ return "PULL";
+ }
+
+ /**
+ * returns an array of column names & types
+ * @param providerConfig
+ */
+ getSchema = function(providerConfig) {
+ var schema = [];
+ var tableName = providerConfig["tableName"];
+ var result = connector.getTableSchema(loggedInUser, tableName).getMessage();
+ result = JSON.parse(result);
+
+ var columns = result.columns;
+ Object.getOwnPropertyNames(columns).forEach(function(name, idx, array) {
+ var type = "ordinal";
+ if(columns[name]['type']) {
+ type = columns[name]['type'];
+ }
+ schema.push({
+ fieldName: name,
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ });
+ // log.info(schema);
+ return schema;
+ };
+
+ /**
+ * returns the actual data
+ * @param providerConfig
+ * @param limit
+ */
+ getData = function(providerConfig, limit) {
+ var tableName = providerConfig.tableName;
+ var query = providerConfig.query;
+ var limit = 100;
+ if (providerConfig.limit) {
+ limit = providerConfig.limit;
+ }
+ var result;
+ //if there's a filter present, we should perform a Lucene search instead of reading the table
+ if (query) {
+ var filter = {
+ "query": query,
+ "start": 0,
+ "count": limit
+ };
+ result = connector.search(loggedInUser, tableName, stringify(filter)).getMessage();
+ } else {
+ var from = JS_MIN_VALUE;
+ var to = JS_MAX_VALUE;
+ result = connector.getRecordsByRange(loggedInUser, tableName, from, to, 0, limit, null).getMessage();
+
+ }
+ result = JSON.parse(result);
+ var data = [];
+ for (var i = 0; i < result.length; i++) {
+ var values = result[i].values;
+ data.push(values);
+ }
+ return data;
+ };
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/gadget-core.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/gadget-core.js
new file mode 100644
index 000000000..9dfe8683b
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/gadget-core.js
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+$(function () {
+ var gadgetLocation;
+ var conf;
+ var schema;
+ var pref = new gadgets.Prefs();
+
+ var refreshInterval;
+ var providerData;
+
+ var CHART_CONF = 'chart-conf';
+ var PROVIDER_CONF = 'provider-conf';
+
+ var REFRESH_INTERVAL = 'refreshInterval';
+
+var init = function () {
+ $.ajax({
+ url: gadgetLocation + '/conf.json',
+ method: "GET",
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ conf = JSON.parse(data);
+ $.ajax({
+ url: gadgetLocation + '/gadget-controller.jag?action=getSchema',
+ method: "POST",
+ data: JSON.stringify(conf),
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ schema = data;
+ }
+ });
+
+ getProviderData();
+
+ }
+ });
+};
+
+var getProviderData = function (){
+ $.ajax({
+ url: gadgetLocation + '/gadget-controller.jag?action=getData',
+ method: "POST",
+ data: JSON.stringify(conf),
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ providerData = data;
+ }
+ });
+ return providerData;
+};
+
+
+var drawGadget = function (){
+
+ draw('#canvas', conf[CHART_CONF], schema, providerData);
+ setInterval(function() {
+ draw('#canvas', conf[CHART_CONF], schema, getProviderData());
+ },pref.getInt(REFRESH_INTERVAL));
+
+};
+
+getGadgetLocation(function (gadget_Location) {
+ gadgetLocation = gadget_Location;
+ init();
+ drawGadget();
+
+});
+});
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/gadget-util.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/gadget-util.js
new file mode 100644
index 000000000..5ecb5cc0d
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/gadget-util.js
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getGadgetLocation = function (callback) {
+ var gadgetLocation = "/portal/store/carbon.super/fs/gadget/GRAVITY";
+ var PATH_SEPERATOR = "/";
+ if (gadgetLocation.search("store") != -1) {
+ wso2.gadgets.identity.getTenantDomain(function (tenantDomain) {
+ var gadgetPath = gadgetLocation.split(PATH_SEPERATOR);
+ var modifiedPath = '';
+ for (var i = 1; i < gadgetPath.length; i++) {
+ if (i === 3) {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, tenantDomain);
+ } else {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, gadgetPath[i])
+ }
+ }
+ callback(modifiedPath);
+ });
+ } else {
+ callback(gadgetLocation);
+ }
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/number-chart-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/number-chart-api.js
new file mode 100644
index 000000000..ef2c5da98
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/js/core/number-chart-api.js
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, isProviderRequired, draw, update;
+
+(function() {
+
+ var CHART_LOCATION = '/extensions/chart-templates/';
+
+ /**
+ * return the config to be populated in the chart configuration UI
+ * @param schema
+ */
+ getConfig = function(schema) {
+ var chartConf = require(CHART_LOCATION + '/number-chart/config.json').config;
+ /*
+ dynamic logic goes here
+ */
+ return chartConf;
+
+ };
+
+ /**
+ * validate the user inout for the chart configurationx
+ * @param chartConfig
+ */
+ validate = function(chartConfig) {
+ return true;
+ };
+
+ /**
+ * TO be used when provider configuration steps need to be skipped
+ */
+ isProviderRequired = function() {
+
+ }
+
+
+ /**
+ * return the gadget content
+ * @param chartConfig
+ * @param schema
+ * @param data
+ */
+ draw = function(placeholder, chartConfig, _schema, data) {
+ var schema = toVizGrammarSchema(_schema);
+ var view = {
+ id: "chart-0",
+ schema: schema,
+ chartConfig: buildChartConfig(chartConfig),
+ data: function() {
+ if(data) {
+ var result = [];
+ console.log(data);
+ data.forEach(function(item) {
+ var row = [];
+ schema[0].metadata.names.forEach(function(name) {
+ row.push(item[name]);
+ });
+ result.push(row);
+ });
+ console.log(result);
+ wso2gadgets.onDataReady(result);
+ }
+ }
+
+ };
+
+ try {
+ wso2gadgets.init(placeholder, view);
+ var view = wso2gadgets.load("chart-0");
+ } catch (e) {
+ console.error(e);
+ }
+
+ };
+
+ /**
+ *
+ * @param data
+ */
+ update = function(data) {
+ wso2gadgets.onDataReady(data,"append");
+ }
+
+ buildChartConfig = function (_chartConfig) {
+ var conf = {};
+ conf.x = _chartConfig.x;
+ conf.maxLength = _chartConfig.maxLength;
+ conf.charts = [];
+ conf.charts[0] = {
+ type : "number",
+ title : _chartConfig.title
+ };
+ return conf;
+ };
+
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/thumbnail.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/thumbnail.png
new file mode 100644
index 000000000..8b3f43540
Binary files /dev/null and b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/GRAVITY/thumbnail.png differ
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/artifact.xml
new file mode 100644
index 000000000..016334df8
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_gadget/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ GRAVITY
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_event_sink/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_event_sink/artifact.xml
new file mode 100644
index 000000000..5e6606c34
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_event_sink/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org_wso2_iot_android_gravity_stats.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_event_sink/org_wso2_iot_android_gravity_stats.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_event_sink/org_wso2_iot_android_gravity_stats.xml
new file mode 100755
index 000000000..20959d61e
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_event_sink/org_wso2_iot_android_gravity_stats.xml
@@ -0,0 +1,98 @@
+
+
+
+
+ meta_owner
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_deviceId
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_timestamp
+ false
+ false
+ false
+ false
+ LONG
+
+
+ x
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ y
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ z
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ year
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ month
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ day
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ hour
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ minute
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+
+ false
+ EVENT_STORE
+
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_streams/artifact.xml
new file mode 100644
index 000000000..a1bcd3a44
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_streams/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.gravity.stats_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_streams/org.wso2.iot.android.gravity.stats_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_streams/org.wso2.iot.android.gravity.stats_1.0.0.json
new file mode 100755
index 000000000..de9ad2217
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_stats_streams/org.wso2.iot.android.gravity.stats_1.0.0.json
@@ -0,0 +1,54 @@
+{
+ "name": "org.wso2.iot.android.gravity.stats",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "x",
+ "type": "FLOAT"
+ },
+ {
+ "name": "y",
+ "type": "FLOAT"
+ },
+ {
+ "name": "z",
+ "type": "FLOAT"
+ },
+ {
+ "name": "year",
+ "type": "INT"
+ },
+ {
+ "name": "month",
+ "type": "INT"
+ },
+ {
+ "name": "day",
+ "type": "INT"
+ },
+ {
+ "name": "hour",
+ "type": "INT"
+ },
+ {
+ "name": "minute",
+ "type": "INT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_streams/artifact.xml
new file mode 100644
index 000000000..e15f70b7c
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_streams/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org.wso2.iot.android.gravity_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_streams/org.wso2.iot.android.gravity_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_streams/org.wso2.iot.android.gravity_1.0.0.json
new file mode 100755
index 000000000..b2ce30f46
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_streams/org.wso2.iot.android.gravity_1.0.0.json
@@ -0,0 +1,34 @@
+{
+ "name": "org.wso2.iot.android.gravity",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "x",
+ "type": "FLOAT"
+ },
+ {
+ "name": "y",
+ "type": "FLOAT"
+ },
+ {
+ "name": "z",
+ "type": "FLOAT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_ui_event_publisher/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_ui_event_publisher/artifact.xml
new file mode 100644
index 000000000..d08d8ab33
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_ui_event_publisher/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.gravity.ui.publisher.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_ui_event_publisher/org.wso2.iot.android.gravity.ui.publisher.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_ui_event_publisher/org.wso2.iot.android.gravity.ui.publisher.xml
new file mode 100644
index 000000000..6439b8299
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gravity_ui_event_publisher/org.wso2.iot.android.gravity.ui.publisher.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_executionplan/Android-Gyroscope-ExecutionPlan.siddhiql b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_executionplan/Android-Gyroscope-ExecutionPlan.siddhiql
new file mode 100755
index 000000000..85d502500
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_executionplan/Android-Gyroscope-ExecutionPlan.siddhiql
@@ -0,0 +1,18 @@
+@Plan:name('Android-Gyroscope-ExecutionPlan')
+
+@Plan:description('Process gyroscope changes.')
+
+@Import('org.wso2.iot.android.gyroscope:1.0.0')
+define stream GyroscopeStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
+
+@Export('org.wso2.iot.android.gyroscope.stats:1.0.0')
+define stream GyroscopeStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, x
+float, y float, z float, year int, month int, day int, hour int, minute int);
+
+partition with (meta_deviceId of GyroscopeStream)
+begin
+ from GyroscopeStream
+ select meta_owner, meta_deviceId, meta_timestamp, x, y, z, time:extract
+ (meta_timestamp, 'year') as year, time:extract(meta_timestamp, 'month') as month, time:extract(meta_timestamp, 'day') as day, time:extract(meta_timestamp, 'hour') as hour, time:extract(meta_timestamp, 'minute') as minute
+ insert into GyroscopeStatsStream;
+end;
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_executionplan/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_executionplan/artifact.xml
new file mode 100644
index 000000000..fd2150b23
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_executionplan/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ Android-Gyroscope-ExecutionPlan.siddhiql
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_event_sink/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_event_sink/artifact.xml
new file mode 100644
index 000000000..76174e09e
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_event_sink/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org_wso2_iot_android_gyroscope_stats.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_event_sink/org_wso2_iot_android_gyroscope_stats.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_event_sink/org_wso2_iot_android_gyroscope_stats.xml
new file mode 100755
index 000000000..ba42b4ba7
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_event_sink/org_wso2_iot_android_gyroscope_stats.xml
@@ -0,0 +1,98 @@
+
+
+
+
+ meta_owner
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_deviceId
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_timestamp
+ false
+ false
+ false
+ false
+ LONG
+
+
+ x
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ y
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ z
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ year
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ month
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ day
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ hour
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ minute
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+
+ false
+ EVENT_STORE
+
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_streams/artifact.xml
new file mode 100644
index 000000000..63c532140
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_streams/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org.wso2.iot.android.gyroscope.stats_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_streams/org.wso2.iot.android.gyroscope.stats_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_streams/org.wso2.iot.android.gyroscope.stats_1.0.0.json
new file mode 100755
index 000000000..6282a16a5
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_stats_streams/org.wso2.iot.android.gyroscope.stats_1.0.0.json
@@ -0,0 +1,54 @@
+{
+ "name": "org.wso2.iot.android.gyroscope.stats",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "x",
+ "type": "FLOAT"
+ },
+ {
+ "name": "y",
+ "type": "FLOAT"
+ },
+ {
+ "name": "z",
+ "type": "FLOAT"
+ },
+ {
+ "name": "year",
+ "type": "INT"
+ },
+ {
+ "name": "month",
+ "type": "INT"
+ },
+ {
+ "name": "day",
+ "type": "INT"
+ },
+ {
+ "name": "hour",
+ "type": "INT"
+ },
+ {
+ "name": "minute",
+ "type": "INT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_streams/artifact.xml
new file mode 100644
index 000000000..70af655a5
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_streams/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org.wso2.iot.android.gyroscope_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_streams/org.wso2.iot.android.gyroscope_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_streams/org.wso2.iot.android.gyroscope_1.0.0.json
new file mode 100755
index 000000000..b7fcf81b7
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_streams/org.wso2.iot.android.gyroscope_1.0.0.json
@@ -0,0 +1,34 @@
+{
+ "name": "org.wso2.iot.android.gyroscope",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "x",
+ "type": "FLOAT"
+ },
+ {
+ "name": "y",
+ "type": "FLOAT"
+ },
+ {
+ "name": "z",
+ "type": "FLOAT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_ui_event_publisher/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_ui_event_publisher/artifact.xml
new file mode 100644
index 000000000..0e0fd9182
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_ui_event_publisher/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.gyroscope.ui.publisher.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_ui_event_publisher/org.wso2.iot.android.gyroscope.ui.publisher.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_ui_event_publisher/org.wso2.iot.android.gyroscope.ui.publisher.xml
new file mode 100644
index 000000000..2cd783def
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_gyroscope_ui_event_publisher/org.wso2.iot.android.gyroscope.ui.publisher.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_executionplan/Android-Light-ExecutionPlan.siddhiql b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_executionplan/Android-Light-ExecutionPlan.siddhiql
new file mode 100755
index 000000000..2ba5eb06d
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_executionplan/Android-Light-ExecutionPlan.siddhiql
@@ -0,0 +1,18 @@
+@Plan:name('Android-Light-ExecutionPlan')
+
+@Plan:description('Process light changes.')
+
+@Import('org.wso2.iot.android.light:1.0.0')
+define stream LightStream (meta_owner string, meta_deviceId string, meta_timestamp long, light float);
+
+@Export('org.wso2.iot.android.light.stats:1.0.0')
+define stream LightStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, light float, year int,
+month int, day int, hour int, minute int);
+
+partition with (meta_deviceId of LightStream)
+begin
+ from LightStream
+ select meta_owner, meta_deviceId, meta_timestamp, light, time:extract
+ (meta_timestamp, 'year') as year, time:extract(meta_timestamp, 'month') as month, time:extract(meta_timestamp, 'day') as day, time:extract(meta_timestamp, 'hour') as hour, time:extract(meta_timestamp, 'minute') as minute
+ insert into LightStatsStream;
+end;
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_executionplan/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_executionplan/artifact.xml
new file mode 100644
index 000000000..24d4bd5d7
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_executionplan/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ Android-Light-ExecutionPlan.siddhiql
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_event_sink/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_event_sink/artifact.xml
new file mode 100644
index 000000000..4b2fe479d
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_event_sink/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org_wso2_iot_android_light_stats.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_event_sink/org_wso2_iot_android_light_stats.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_event_sink/org_wso2_iot_android_light_stats.xml
new file mode 100755
index 000000000..dd831adc5
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_event_sink/org_wso2_iot_android_light_stats.xml
@@ -0,0 +1,82 @@
+
+
+
+
+ meta_owner
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_deviceId
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_timestamp
+ false
+ false
+ false
+ false
+ LONG
+
+
+ light
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ year
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ month
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ day
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ hour
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ minute
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+
+ false
+ EVENT_STORE
+
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_streams/artifact.xml
new file mode 100644
index 000000000..bfd1b53e6
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_streams/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org.wso2.iot.android.light.stats_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_streams/org.wso2.iot.android.light.stats_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_streams/org.wso2.iot.android.light.stats_1.0.0.json
new file mode 100755
index 000000000..5a6485077
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_stats_streams/org.wso2.iot.android.light.stats_1.0.0.json
@@ -0,0 +1,46 @@
+{
+ "name": "org.wso2.iot.android.light.stats",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "light",
+ "type": "FLOAT"
+ },
+ {
+ "name": "year",
+ "type": "INT"
+ },
+ {
+ "name": "month",
+ "type": "INT"
+ },
+ {
+ "name": "day",
+ "type": "INT"
+ },
+ {
+ "name": "hour",
+ "type": "INT"
+ },
+ {
+ "name": "minute",
+ "type": "INT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_streams/artifact.xml
new file mode 100644
index 000000000..3dd8461cd
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_streams/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org.wso2.iot.android.light_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_streams/org.wso2.iot.android.light_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_streams/org.wso2.iot.android.light_1.0.0.json
new file mode 100755
index 000000000..91b794355
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_streams/org.wso2.iot.android.light_1.0.0.json
@@ -0,0 +1,26 @@
+{
+ "name": "org.wso2.iot.android.light",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "light",
+ "type": "FLOAT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_ui_event_publisher/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_ui_event_publisher/artifact.xml
new file mode 100644
index 000000000..63ea4431a
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_ui_event_publisher/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.light.ui.publisher.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_ui_event_publisher/org.wso2.iot.android.light.ui.publisher.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_ui_event_publisher/org.wso2.iot.android.light.ui.publisher.xml
new file mode 100644
index 000000000..779e6bf42
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_light_ui_event_publisher/org.wso2.iot.android.light.ui.publisher.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_executionplan/Android-Magnetic-ExecutionPlan.siddhiql b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_executionplan/Android-Magnetic-ExecutionPlan.siddhiql
new file mode 100755
index 000000000..d7af0016f
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_executionplan/Android-Magnetic-ExecutionPlan.siddhiql
@@ -0,0 +1,18 @@
+@Plan:name('Android-Magnetic-ExecutionPlan')
+
+@Plan:description('Process magnetic field changes.')
+
+@Import('org.wso2.iot.android.magnetic:1.0.0')
+define stream MagneticStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
+
+@Export('org.wso2.iot.android.magnetic.stats:1.0.0')
+define stream MagneticStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, x
+float, y float, z float, year int, month int, day int, hour int, minute int);
+
+partition with (meta_deviceId of MagneticStream)
+begin
+ from MagneticStream
+ select meta_owner, meta_deviceId, meta_timestamp, x, y, z, time:extract
+ (meta_timestamp, 'year') as year, time:extract(meta_timestamp, 'month') as month, time:extract(meta_timestamp, 'day') as day, time:extract(meta_timestamp, 'hour') as hour, time:extract(meta_timestamp, 'minute') as minute
+ insert into MagneticStatsStream;
+end;
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_executionplan/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_executionplan/artifact.xml
new file mode 100644
index 000000000..40f53b8c4
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_executionplan/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ Android-Magnetic-ExecutionPlan.siddhiql
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_event_sink/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_event_sink/artifact.xml
new file mode 100644
index 000000000..bfe1f9863
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_event_sink/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org_wso2_iot_android_magnetic_stats.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_event_sink/org_wso2_iot_android_magnetic_stats.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_event_sink/org_wso2_iot_android_magnetic_stats.xml
new file mode 100755
index 000000000..93328ca02
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_event_sink/org_wso2_iot_android_magnetic_stats.xml
@@ -0,0 +1,98 @@
+
+
+
+
+ meta_owner
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_deviceId
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_timestamp
+ false
+ false
+ false
+ false
+ LONG
+
+
+ x
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ y
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ z
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ year
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ month
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ day
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ hour
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ minute
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+
+ false
+ EVENT_STORE
+
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_streams/artifact.xml
new file mode 100644
index 000000000..234b34b0e
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_streams/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.magnetic.stats_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_streams/org.wso2.iot.android.magnetic.stats_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_streams/org.wso2.iot.android.magnetic.stats_1.0.0.json
new file mode 100755
index 000000000..109ba5b1d
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_stats_streams/org.wso2.iot.android.magnetic.stats_1.0.0.json
@@ -0,0 +1,54 @@
+{
+ "name": "org.wso2.iot.android.magnetic.stats",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "x",
+ "type": "FLOAT"
+ },
+ {
+ "name": "y",
+ "type": "FLOAT"
+ },
+ {
+ "name": "z",
+ "type": "FLOAT"
+ },
+ {
+ "name": "year",
+ "type": "INT"
+ },
+ {
+ "name": "month",
+ "type": "INT"
+ },
+ {
+ "name": "day",
+ "type": "INT"
+ },
+ {
+ "name": "hour",
+ "type": "INT"
+ },
+ {
+ "name": "minute",
+ "type": "INT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_streams/artifact.xml
new file mode 100644
index 000000000..f7a79240e
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_streams/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org.wso2.iot.android.magnetic_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_streams/org.wso2.iot.android.magnetic_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_streams/org.wso2.iot.android.magnetic_1.0.0.json
new file mode 100755
index 000000000..a9ad5d8dc
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_streams/org.wso2.iot.android.magnetic_1.0.0.json
@@ -0,0 +1,34 @@
+{
+ "name": "org.wso2.iot.android.magnetic",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "x",
+ "type": "FLOAT"
+ },
+ {
+ "name": "y",
+ "type": "FLOAT"
+ },
+ {
+ "name": "z",
+ "type": "FLOAT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_ui_event_publisher/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_ui_event_publisher/artifact.xml
new file mode 100644
index 000000000..b34157e4b
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_ui_event_publisher/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.magnetic.ui.publisher.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_ui_event_publisher/org.wso2.iot.android.magnetic.ui.publisher.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_ui_event_publisher/org.wso2.iot.android.magnetic.ui.publisher.xml
new file mode 100644
index 000000000..2c8af401c
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_magnetic_ui_event_publisher/org.wso2.iot.android.magnetic.ui.publisher.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_executionplan/Android-Pressure-ExecutionPlan.siddhiql b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_executionplan/Android-Pressure-ExecutionPlan.siddhiql
new file mode 100755
index 000000000..d23044e27
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_executionplan/Android-Pressure-ExecutionPlan.siddhiql
@@ -0,0 +1,18 @@
+@Plan:name('Android-Pressure-ExecutionPlan')
+
+@Plan:description('Process pressure changes.')
+
+@Import('org.wso2.iot.android.pressure:1.0.0')
+define stream PressureStream (meta_owner string, meta_deviceId string, meta_timestamp long, pressure float);
+
+@Export('org.wso2.iot.android.pressure.stats:1.0.0')
+define stream PressureStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, pressure float, year int,
+month int, day int, hour int, minute int);
+
+partition with (meta_deviceId of PressureStream)
+begin
+ from PressureStream
+ select meta_owner, meta_deviceId, meta_timestamp, pressure, time:extract
+ (meta_timestamp, 'year') as year, time:extract(meta_timestamp, 'month') as month, time:extract(meta_timestamp, 'day') as day, time:extract(meta_timestamp, 'hour') as hour, time:extract(meta_timestamp, 'minute') as minute
+ insert into PressureStatsStream;
+end;
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_executionplan/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_executionplan/artifact.xml
new file mode 100644
index 000000000..f01be9b20
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_executionplan/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ Android-Pressure-ExecutionPlan.siddhiql
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/conf.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/conf.json
new file mode 100644
index 000000000..295d3bf27
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/conf.json
@@ -0,0 +1,15 @@
+{
+ "provider-conf": {
+ "tableName": "ORG_WSO2_IOT_ANDROID_PRESSURE_STATS",
+ "query": "",
+ "limit": "",
+ "provider-name": "batch"
+ },
+ "chart-conf": {
+ "x": "pressure",
+ "title": "PRESSURE",
+ "maxLength": "30",
+ "gadget-name": "PRESSURE",
+ "chart-name": "number-chart"
+ }
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/css/number-chart.css b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/css/number-chart.css
new file mode 100644
index 000000000..5dde0413a
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/css/number-chart.css
@@ -0,0 +1,35 @@
+#canvas {
+ height: 100%;
+ width: 100%;
+}
+
+p {
+ margin: 0;
+ display: block;
+ text-align: center;
+ font-weight: bold;
+}
+
+.titlecanvasContent {
+ color:steelblue;
+ font-size:18px;
+ font-weight: normal;
+ padding: 10px 0;
+}
+
+.valcanvasContent {
+ color:#438CAD;
+ font-size:50px;
+ font-weight: normal;
+}
+
+
+.diffcanvasContent {
+ color:#438CAD;
+ font-size:14px;
+}
+
+.diffPercentagecanvasContent {
+ color:#ff944d;
+ font-size:14px;
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/gadget-controller.jag b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/gadget-controller.jag
new file mode 100644
index 000000000..f84538a40
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/gadget-controller.jag
@@ -0,0 +1,42 @@
+<%
+/**
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+(function () {
+
+ response.contentType = 'application/json';
+ var PROVIDER_CONF = 'provider-conf';
+ var PROVIDER_NAME = 'provider-name';
+
+ var action = request.getParameter("action");
+ var data = request.getContent();
+ var providerConf = data[PROVIDER_CONF];
+ var providerAPI = require('js/core/' + providerConf[PROVIDER_NAME] + '-provider-api.js');
+
+ if (action === 'getSchema') {
+ print(providerAPI.getSchema(providerConf));
+ return;
+ } else if(action === 'getData'){
+ print(providerAPI.getData(providerConf));
+ return;
+ }
+
+}());
+
+
+%>
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/gadget.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/gadget.json
new file mode 100644
index 000000000..6590fbd07
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/gadget.json
@@ -0,0 +1,9 @@
+{
+ "id": "PRESSURE",
+ "title": "PRESSURE",
+ "type": "gadget",
+ "thumbnail": "gadget/PRESSURE/thumbnail.png",
+ "data": {
+ "url": "gadget/PRESSURE/gadget.xml"
+ }
+}
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/gadget.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/gadget.xml
new file mode 100644
index 000000000..68a0626b5
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/gadget.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]>
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/batch-provider-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/batch-provider-api.js
new file mode 100644
index 000000000..c275f8c9f
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/batch-provider-api.js
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, getMode, getSchema, getData, registerCallBackforPush;
+
+(function() {
+
+ var PROVIDERS_LOCATION = '/extensions/providers/';
+
+ var PROVIDER_NAME = 'batch';
+ var TYPE = "type";
+ var TABLE_NAME = "tableName";
+ var HTTPS_TRANSPORT = "https";
+ var CONTENT_TYPE_JSON = "application/json";
+ var AUTHORIZATION_HEADER = "Authorization";
+ var USER_TOKEN = "user";
+ var TENANT_DOMAIN = "domain";
+ var CONST_AT = "@";
+ var USERNAME = "username";
+ var HTTP_USER_NOT_AUTHENTICATED = 403;
+ var JS_MAX_VALUE = "9007199254740992";
+ var JS_MIN_VALUE = "-9007199254740992";
+
+ var typeMap = {
+ "bool" : "string",
+ "boolean" : "string",
+ "string" : "string",
+ "int" : "number",
+ "integer" : "number",
+ "long" : "number",
+ "double" : "number",
+ "float" : "number",
+ "time": "time"
+ };
+
+ var log = new Log();
+ var carbon = require('carbon');
+ var configs = require('/configs/designer.json');
+ var utils = require('/modules/utils.js');
+ var JSUtils = Packages.org.wso2.carbon.analytics.jsservice.Utils;
+ var AnalyticsCachedJSServiceConnector = Packages.org.wso2.carbon.analytics.jsservice.AnalyticsCachedJSServiceConnector;
+ var AnalyticsCache = Packages.org.wso2.carbon.analytics.jsservice.AnalyticsCachedJSServiceConnector.AnalyticsCache;
+ var cacheTimeoutSeconds = 5;
+ var loggedInUser = null;
+
+ if (configs.cacheTimeoutSeconds) {
+ cacheTimeoutSeconds = parseInt(configs.cacheTimeoutSeconds);
+ }
+ var cacheSizeBytes = 1024 * 1024 * 1024; // 1GB
+ if (configs.cacheSizeBytes) {
+ cacheSizeBytes = parseInt(configs.cacheSizeBytes);
+ }
+ response.contentType = CONTENT_TYPE_JSON;
+
+ var authParam = request.getHeader(AUTHORIZATION_HEADER);
+ if (authParam != null) {
+ credentials = JSUtils.authenticate(authParam);
+ loggedInUser = credentials[0];
+ } else {
+ var token = session.get(USER_TOKEN);
+ if (token != null) {
+ loggedInUser = token[USERNAME] + CONST_AT + token[TENANT_DOMAIN];
+ } else {
+ log.error("user is not authenticated!");
+ response.status = HTTP_USER_NOT_AUTHENTICATED;
+ print('{ "status": "Failed", "message": "User is not authenticated." }');
+ return;
+ }
+ }
+
+ var cache = application.get("AnalyticsWebServiceCache");
+ if (cache == null) {
+ cache = new AnalyticsCache(cacheTimeoutSeconds, cacheSizeBytes);
+ application.put("AnalyticsWebServiceCache", cache);
+ }
+ var connector = new AnalyticsCachedJSServiceConnector(cache);
+
+ /**
+ * require the existing config.json and push any dynamic fields that needs to be populated in the UI
+ */
+ getConfig = function() {
+ var formConfig = require(PROVIDERS_LOCATION + '/' + PROVIDER_NAME + '/config.json');
+ var tables;
+ try {
+ tables = JSON.parse(connector.getTableList(loggedInUser).getMessage());
+ } catch (e) {
+ log.error(e);
+ }
+ var configs = formConfig.config;
+ configs.forEach(function(config) {
+ if (config.fieldName === TABLE_NAME) {
+ config.valueSet = tables;
+ }
+ });
+ return formConfig;
+ }
+
+ /**
+ * validate the user input of provider configuration
+ * @param providerConfig
+ */
+ validate = function(providerConfig) {
+ /*
+ validate the form and return
+
+ */
+ return true;
+ }
+
+ /**
+ * returns the data mode either push or pull
+ */
+ getMode = function() {
+ return "PULL";
+ }
+
+ /**
+ * returns an array of column names & types
+ * @param providerConfig
+ */
+ getSchema = function(providerConfig) {
+ var schema = [];
+ var tableName = providerConfig["tableName"];
+ var result = connector.getTableSchema(loggedInUser, tableName).getMessage();
+ result = JSON.parse(result);
+ log.info(result);
+
+ var columns = result.columns;
+ Object.getOwnPropertyNames(columns).forEach(function(name, idx, array) {
+ var type = "ordinal";
+ if(columns[name]['type']) {
+ type = columns[name]['type'];
+ }
+ schema.push({
+ fieldName: name,
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ });
+ // log.info(schema);
+ return schema;
+ };
+
+ /**
+ * returns the actual data
+ * @param providerConfig
+ * @param limit
+ */
+ getData = function(providerConfig, limit) {
+ var tableName = providerConfig.tableName;
+ var query = providerConfig.query;
+ var limit = 100;
+ if (providerConfig.limit) {
+ limit = providerConfig.limit;
+ }
+ var result;
+ //if there's a filter present, we should perform a Lucene search instead of reading the table
+ if (query) {
+ var filter = {
+ "query": query,
+ "start": 0,
+ "count": limit
+ };
+ result = connector.search(loggedInUser, tableName, stringify(filter)).getMessage();
+ } else {
+ var from = JS_MIN_VALUE;
+ var to = JS_MAX_VALUE;
+ result = connector.getRecordsByRange(loggedInUser, tableName, from, to, 0, limit, null).getMessage();
+
+ }
+ result = JSON.parse(result);
+ var data = [];
+ for (var i = 0; i < result.length; i++) {
+ var values = result[i].values;
+ data.push(values);
+ }
+ return data;
+ };
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/gadget-core.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/gadget-core.js
new file mode 100644
index 000000000..9dfe8683b
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/gadget-core.js
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+$(function () {
+ var gadgetLocation;
+ var conf;
+ var schema;
+ var pref = new gadgets.Prefs();
+
+ var refreshInterval;
+ var providerData;
+
+ var CHART_CONF = 'chart-conf';
+ var PROVIDER_CONF = 'provider-conf';
+
+ var REFRESH_INTERVAL = 'refreshInterval';
+
+var init = function () {
+ $.ajax({
+ url: gadgetLocation + '/conf.json',
+ method: "GET",
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ conf = JSON.parse(data);
+ $.ajax({
+ url: gadgetLocation + '/gadget-controller.jag?action=getSchema',
+ method: "POST",
+ data: JSON.stringify(conf),
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ schema = data;
+ }
+ });
+
+ getProviderData();
+
+ }
+ });
+};
+
+var getProviderData = function (){
+ $.ajax({
+ url: gadgetLocation + '/gadget-controller.jag?action=getData',
+ method: "POST",
+ data: JSON.stringify(conf),
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ providerData = data;
+ }
+ });
+ return providerData;
+};
+
+
+var drawGadget = function (){
+
+ draw('#canvas', conf[CHART_CONF], schema, providerData);
+ setInterval(function() {
+ draw('#canvas', conf[CHART_CONF], schema, getProviderData());
+ },pref.getInt(REFRESH_INTERVAL));
+
+};
+
+getGadgetLocation(function (gadget_Location) {
+ gadgetLocation = gadget_Location;
+ init();
+ drawGadget();
+
+});
+});
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/gadget-util.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/gadget-util.js
new file mode 100644
index 000000000..a095aa89e
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/gadget-util.js
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getGadgetLocation = function (callback) {
+ var gadgetLocation = "/portal/store/carbon.super/fs/gadget/PRESSURE";
+ var PATH_SEPERATOR = "/";
+ if (gadgetLocation.search("store") != -1) {
+ wso2.gadgets.identity.getTenantDomain(function (tenantDomain) {
+ var gadgetPath = gadgetLocation.split(PATH_SEPERATOR);
+ var modifiedPath = '';
+ for (var i = 1; i < gadgetPath.length; i++) {
+ if (i === 3) {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, tenantDomain);
+ } else {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, gadgetPath[i])
+ }
+ }
+ callback(modifiedPath);
+ });
+ } else {
+ callback(gadgetLocation);
+ }
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/number-chart-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/number-chart-api.js
new file mode 100644
index 000000000..ef2c5da98
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/js/core/number-chart-api.js
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, isProviderRequired, draw, update;
+
+(function() {
+
+ var CHART_LOCATION = '/extensions/chart-templates/';
+
+ /**
+ * return the config to be populated in the chart configuration UI
+ * @param schema
+ */
+ getConfig = function(schema) {
+ var chartConf = require(CHART_LOCATION + '/number-chart/config.json').config;
+ /*
+ dynamic logic goes here
+ */
+ return chartConf;
+
+ };
+
+ /**
+ * validate the user inout for the chart configurationx
+ * @param chartConfig
+ */
+ validate = function(chartConfig) {
+ return true;
+ };
+
+ /**
+ * TO be used when provider configuration steps need to be skipped
+ */
+ isProviderRequired = function() {
+
+ }
+
+
+ /**
+ * return the gadget content
+ * @param chartConfig
+ * @param schema
+ * @param data
+ */
+ draw = function(placeholder, chartConfig, _schema, data) {
+ var schema = toVizGrammarSchema(_schema);
+ var view = {
+ id: "chart-0",
+ schema: schema,
+ chartConfig: buildChartConfig(chartConfig),
+ data: function() {
+ if(data) {
+ var result = [];
+ console.log(data);
+ data.forEach(function(item) {
+ var row = [];
+ schema[0].metadata.names.forEach(function(name) {
+ row.push(item[name]);
+ });
+ result.push(row);
+ });
+ console.log(result);
+ wso2gadgets.onDataReady(result);
+ }
+ }
+
+ };
+
+ try {
+ wso2gadgets.init(placeholder, view);
+ var view = wso2gadgets.load("chart-0");
+ } catch (e) {
+ console.error(e);
+ }
+
+ };
+
+ /**
+ *
+ * @param data
+ */
+ update = function(data) {
+ wso2gadgets.onDataReady(data,"append");
+ }
+
+ buildChartConfig = function (_chartConfig) {
+ var conf = {};
+ conf.x = _chartConfig.x;
+ conf.maxLength = _chartConfig.maxLength;
+ conf.charts = [];
+ conf.charts[0] = {
+ type : "number",
+ title : _chartConfig.title
+ };
+ return conf;
+ };
+
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/thumbnail.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/thumbnail.png
new file mode 100644
index 000000000..8b3f43540
Binary files /dev/null and b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/PRESSURE/thumbnail.png differ
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/artifact.xml
new file mode 100644
index 000000000..38d79fcf9
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_gadget/artifact.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ PRESSURE
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_event_sink/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_event_sink/artifact.xml
new file mode 100644
index 000000000..082085bbb
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_event_sink/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org_wso2_iot_android_pressure_stats.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_event_sink/org_wso2_iot_android_pressure_stats.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_event_sink/org_wso2_iot_android_pressure_stats.xml
new file mode 100755
index 000000000..27202bb35
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_event_sink/org_wso2_iot_android_pressure_stats.xml
@@ -0,0 +1,82 @@
+
+
+
+
+ meta_owner
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_deviceId
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_timestamp
+ false
+ false
+ false
+ false
+ LONG
+
+
+ pressure
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ year
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ month
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ day
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ hour
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ minute
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+
+ false
+ EVENT_STORE
+
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_streams/artifact.xml
new file mode 100644
index 000000000..67384b242
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_streams/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.pressure.stats_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_streams/org.wso2.iot.android.pressure.stats_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_streams/org.wso2.iot.android.pressure.stats_1.0.0.json
new file mode 100755
index 000000000..e8a9072d5
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_stats_streams/org.wso2.iot.android.pressure.stats_1.0.0.json
@@ -0,0 +1,46 @@
+{
+ "name": "org.wso2.iot.android.pressure.stats",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "pressure",
+ "type": "FLOAT"
+ },
+ {
+ "name": "year",
+ "type": "INT"
+ },
+ {
+ "name": "month",
+ "type": "INT"
+ },
+ {
+ "name": "day",
+ "type": "INT"
+ },
+ {
+ "name": "hour",
+ "type": "INT"
+ },
+ {
+ "name": "minute",
+ "type": "INT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_streams/artifact.xml
new file mode 100644
index 000000000..209ead68d
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_streams/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org.wso2.iot.android.pressure_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_streams/org.wso2.iot.android.pressure_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_streams/org.wso2.iot.android.pressure_1.0.0.json
new file mode 100755
index 000000000..985bef5f1
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_streams/org.wso2.iot.android.pressure_1.0.0.json
@@ -0,0 +1,26 @@
+{
+ "name": "org.wso2.iot.android.pressure",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "pressure",
+ "type": "FLOAT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_ui_event_publisher/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_ui_event_publisher/artifact.xml
new file mode 100644
index 000000000..957a53ff1
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_ui_event_publisher/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.pressure.ui.publisher.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_ui_event_publisher/org.wso2.iot.android.pressure.ui.publisher.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_ui_event_publisher/org.wso2.iot.android.pressure.ui.publisher.xml
new file mode 100644
index 000000000..e34ec35e9
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_pressure_ui_event_publisher/org.wso2.iot.android.pressure.ui.publisher.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_executionplan/Android-Proximity-ExecutionPlan.siddhiql b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_executionplan/Android-Proximity-ExecutionPlan.siddhiql
new file mode 100755
index 000000000..0ba5318e9
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_executionplan/Android-Proximity-ExecutionPlan.siddhiql
@@ -0,0 +1,18 @@
+@Plan:name('Android-Proximity-ExecutionPlan')
+
+@Plan:description('Process proximity changes.')
+
+@Import('org.wso2.iot.android.proximity:1.0.0')
+define stream ProximityStream (meta_owner string, meta_deviceId string, meta_timestamp long, proximity float);
+
+@Export('org.wso2.iot.android.proximity.stats:1.0.0')
+define stream ProximityStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, proximity float, year int,
+month int, day int, hour int, minute int);
+
+partition with (meta_deviceId of ProximityStream)
+begin
+ from ProximityStream
+ select meta_owner, meta_deviceId, meta_timestamp, proximity, time:extract
+ (meta_timestamp, 'year') as year, time:extract(meta_timestamp, 'month') as month, time:extract(meta_timestamp, 'day') as day, time:extract(meta_timestamp, 'hour') as hour, time:extract(meta_timestamp, 'minute') as minute
+ insert into ProximityStatsStream;
+end;
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_executionplan/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_executionplan/artifact.xml
new file mode 100644
index 000000000..bd310d7b2
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_executionplan/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ Android-Proximity-ExecutionPlan.siddhiql
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/conf.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/conf.json
new file mode 100644
index 000000000..849f327b9
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/conf.json
@@ -0,0 +1 @@
+{"provider-conf" : {"tableName" : "ORG_WSO2_IOT_ANDROID_PRESSURE_STATS", "query" : "", "limit" : "", "provider-name" : "batch"}, "chart-conf" : {"x" : "pressure", "title" : "PRESSURE", "maxLength" : "30", "gadget-name" : "PROXIMITY", "chart-name" : "number-chart"}}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/css/number-chart.css b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/css/number-chart.css
new file mode 100644
index 000000000..5dde0413a
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/css/number-chart.css
@@ -0,0 +1,35 @@
+#canvas {
+ height: 100%;
+ width: 100%;
+}
+
+p {
+ margin: 0;
+ display: block;
+ text-align: center;
+ font-weight: bold;
+}
+
+.titlecanvasContent {
+ color:steelblue;
+ font-size:18px;
+ font-weight: normal;
+ padding: 10px 0;
+}
+
+.valcanvasContent {
+ color:#438CAD;
+ font-size:50px;
+ font-weight: normal;
+}
+
+
+.diffcanvasContent {
+ color:#438CAD;
+ font-size:14px;
+}
+
+.diffPercentagecanvasContent {
+ color:#ff944d;
+ font-size:14px;
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/gadget-controller.jag b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/gadget-controller.jag
new file mode 100644
index 000000000..f84538a40
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/gadget-controller.jag
@@ -0,0 +1,42 @@
+<%
+/**
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+(function () {
+
+ response.contentType = 'application/json';
+ var PROVIDER_CONF = 'provider-conf';
+ var PROVIDER_NAME = 'provider-name';
+
+ var action = request.getParameter("action");
+ var data = request.getContent();
+ var providerConf = data[PROVIDER_CONF];
+ var providerAPI = require('js/core/' + providerConf[PROVIDER_NAME] + '-provider-api.js');
+
+ if (action === 'getSchema') {
+ print(providerAPI.getSchema(providerConf));
+ return;
+ } else if(action === 'getData'){
+ print(providerAPI.getData(providerConf));
+ return;
+ }
+
+}());
+
+
+%>
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/gadget.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/gadget.json
new file mode 100644
index 000000000..43b51c3b6
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/gadget.json
@@ -0,0 +1,9 @@
+{
+ "id": "PROXIMITY",
+ "title": "PROXIMITY",
+ "type": "gadget",
+ "thumbnail": "gadget/PROXIMITY/thumbnail.png",
+ "data": {
+ "url": "gadget/PROXIMITY/gadget.xml"
+ }
+}
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/gadget.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/gadget.xml
new file mode 100644
index 000000000..de27540da
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/gadget.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]>
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/batch-provider-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/batch-provider-api.js
new file mode 100644
index 000000000..30c96902a
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/batch-provider-api.js
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, getMode, getSchema, getData, registerCallBackforPush;
+
+(function() {
+
+ var PROVIDERS_LOCATION = '/extensions/providers/';
+
+ var PROVIDER_NAME = 'batch';
+ var TYPE = "type";
+ var TABLE_NAME = "tableName";
+ var HTTPS_TRANSPORT = "https";
+ var CONTENT_TYPE_JSON = "application/json";
+ var AUTHORIZATION_HEADER = "Authorization";
+ var USER_TOKEN = "user";
+ var TENANT_DOMAIN = "domain";
+ var CONST_AT = "@";
+ var USERNAME = "username";
+ var HTTP_USER_NOT_AUTHENTICATED = 403;
+ var JS_MAX_VALUE = "9007199254740992";
+ var JS_MIN_VALUE = "-9007199254740992";
+
+ var typeMap = {
+ "bool" : "string",
+ "boolean" : "string",
+ "string" : "string",
+ "int" : "number",
+ "integer" : "number",
+ "long" : "number",
+ "double" : "number",
+ "float" : "number",
+ "time": "time"
+ };
+
+ var log = new Log();
+ var carbon = require('carbon');
+ var configs = require('/configs/designer.json');
+ var utils = require('/modules/utils.js');
+ var JSUtils = Packages.org.wso2.carbon.analytics.jsservice.Utils;
+ var AnalyticsCachedJSServiceConnector = Packages.org.wso2.carbon.analytics.jsservice.AnalyticsCachedJSServiceConnector;
+ var AnalyticsCache = Packages.org.wso2.carbon.analytics.jsservice.AnalyticsCachedJSServiceConnector.AnalyticsCache;
+ var cacheTimeoutSeconds = 5;
+ var loggedInUser = null;
+
+ if (configs.cacheTimeoutSeconds) {
+ cacheTimeoutSeconds = parseInt(configs.cacheTimeoutSeconds);
+ }
+ var cacheSizeBytes = 1024 * 1024 * 1024; // 1GB
+ if (configs.cacheSizeBytes) {
+ cacheSizeBytes = parseInt(configs.cacheSizeBytes);
+ }
+ response.contentType = CONTENT_TYPE_JSON;
+
+ var authParam = request.getHeader(AUTHORIZATION_HEADER);
+ if (authParam != null) {
+ credentials = JSUtils.authenticate(authParam);
+ loggedInUser = credentials[0];
+ } else {
+ var token = session.get(USER_TOKEN);
+ if (token != null) {
+ loggedInUser = token[USERNAME] + CONST_AT + token[TENANT_DOMAIN];
+ } else {
+ log.error("user is not authenticated!");
+ response.status = HTTP_USER_NOT_AUTHENTICATED;
+ print('{ "status": "Failed", "message": "User is not authenticated." }');
+ return;
+ }
+ }
+
+ var cache = application.get("AnalyticsWebServiceCache");
+ if (cache == null) {
+ cache = new AnalyticsCache(cacheTimeoutSeconds, cacheSizeBytes);
+ application.put("AnalyticsWebServiceCache", cache);
+ }
+ var connector = new AnalyticsCachedJSServiceConnector(cache);
+
+ /**
+ * require the existing config.json and push any dynamic fields that needs to be populated in the UI
+ */
+ getConfig = function() {
+ var formConfig = require(PROVIDERS_LOCATION + '/' + PROVIDER_NAME + '/config.json');
+ var tables;
+ try {
+ tables = JSON.parse(connector.getTableList(loggedInUser).getMessage());
+ } catch (e) {
+ log.error(e);
+ }
+ var configs = formConfig.config;
+ configs.forEach(function(config) {
+ if (config.fieldName === TABLE_NAME) {
+ config.valueSet = tables;
+ }
+ });
+ return formConfig;
+ }
+
+ /**
+ * validate the user input of provider configuration
+ * @param providerConfig
+ */
+ validate = function(providerConfig) {
+ /*
+ validate the form and return
+
+ */
+ return true;
+ }
+
+ /**
+ * returns the data mode either push or pull
+ */
+ getMode = function() {
+ return "PULL";
+ }
+
+ /**
+ * returns an array of column names & types
+ * @param providerConfig
+ */
+ getSchema = function(providerConfig) {
+ var schema = [];
+ var tableName = providerConfig["tableName"];
+ var result = connector.getTableSchema(loggedInUser, tableName).getMessage();
+ result = JSON.parse(result);
+
+ var columns = result.columns;
+ Object.getOwnPropertyNames(columns).forEach(function(name, idx, array) {
+ var type = "ordinal";
+ if(columns[name]['type']) {
+ type = columns[name]['type'];
+ }
+ schema.push({
+ fieldName: name,
+ fieldType: typeMap[type.toLowerCase()]
+ });
+ });
+ // log.info(schema);
+ return schema;
+ };
+
+ /**
+ * returns the actual data
+ * @param providerConfig
+ * @param limit
+ */
+ getData = function(providerConfig, limit) {
+ var tableName = providerConfig.tableName;
+ var query = providerConfig.query;
+ var limit = 100;
+ if (providerConfig.limit) {
+ limit = providerConfig.limit;
+ }
+ var result;
+ //if there's a filter present, we should perform a Lucene search instead of reading the table
+ if (query) {
+ var filter = {
+ "query": query,
+ "start": 0,
+ "count": limit
+ };
+ result = connector.search(loggedInUser, tableName, stringify(filter)).getMessage();
+ } else {
+ var from = JS_MIN_VALUE;
+ var to = JS_MAX_VALUE;
+ result = connector.getRecordsByRange(loggedInUser, tableName, from, to, 0, limit, null).getMessage();
+
+ }
+ result = JSON.parse(result);
+ var data = [];
+ for (var i = 0; i < result.length; i++) {
+ var values = result[i].values;
+ data.push(values);
+ }
+ return data;
+ };
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/gadget-core.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/gadget-core.js
new file mode 100644
index 000000000..9dfe8683b
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/gadget-core.js
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+$(function () {
+ var gadgetLocation;
+ var conf;
+ var schema;
+ var pref = new gadgets.Prefs();
+
+ var refreshInterval;
+ var providerData;
+
+ var CHART_CONF = 'chart-conf';
+ var PROVIDER_CONF = 'provider-conf';
+
+ var REFRESH_INTERVAL = 'refreshInterval';
+
+var init = function () {
+ $.ajax({
+ url: gadgetLocation + '/conf.json',
+ method: "GET",
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ conf = JSON.parse(data);
+ $.ajax({
+ url: gadgetLocation + '/gadget-controller.jag?action=getSchema',
+ method: "POST",
+ data: JSON.stringify(conf),
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ schema = data;
+ }
+ });
+
+ getProviderData();
+
+ }
+ });
+};
+
+var getProviderData = function (){
+ $.ajax({
+ url: gadgetLocation + '/gadget-controller.jag?action=getData',
+ method: "POST",
+ data: JSON.stringify(conf),
+ contentType: "application/json",
+ async: false,
+ success: function (data) {
+ providerData = data;
+ }
+ });
+ return providerData;
+};
+
+
+var drawGadget = function (){
+
+ draw('#canvas', conf[CHART_CONF], schema, providerData);
+ setInterval(function() {
+ draw('#canvas', conf[CHART_CONF], schema, getProviderData());
+ },pref.getInt(REFRESH_INTERVAL));
+
+};
+
+getGadgetLocation(function (gadget_Location) {
+ gadgetLocation = gadget_Location;
+ init();
+ drawGadget();
+
+});
+});
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/gadget-util.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/gadget-util.js
new file mode 100644
index 000000000..13f2120f1
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/gadget-util.js
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getGadgetLocation = function (callback) {
+ var gadgetLocation = "/portal/store/carbon.super/fs/gadget/PROXIMITY";
+ var PATH_SEPERATOR = "/";
+ if (gadgetLocation.search("store") != -1) {
+ wso2.gadgets.identity.getTenantDomain(function (tenantDomain) {
+ var gadgetPath = gadgetLocation.split(PATH_SEPERATOR);
+ var modifiedPath = '';
+ for (var i = 1; i < gadgetPath.length; i++) {
+ if (i === 3) {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, tenantDomain);
+ } else {
+ modifiedPath = modifiedPath.concat(PATH_SEPERATOR, gadgetPath[i])
+ }
+ }
+ callback(modifiedPath);
+ });
+ } else {
+ callback(gadgetLocation);
+ }
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/number-chart-api.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/number-chart-api.js
new file mode 100644
index 000000000..ef2c5da98
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/js/core/number-chart-api.js
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var getConfig, validate, isProviderRequired, draw, update;
+
+(function() {
+
+ var CHART_LOCATION = '/extensions/chart-templates/';
+
+ /**
+ * return the config to be populated in the chart configuration UI
+ * @param schema
+ */
+ getConfig = function(schema) {
+ var chartConf = require(CHART_LOCATION + '/number-chart/config.json').config;
+ /*
+ dynamic logic goes here
+ */
+ return chartConf;
+
+ };
+
+ /**
+ * validate the user inout for the chart configurationx
+ * @param chartConfig
+ */
+ validate = function(chartConfig) {
+ return true;
+ };
+
+ /**
+ * TO be used when provider configuration steps need to be skipped
+ */
+ isProviderRequired = function() {
+
+ }
+
+
+ /**
+ * return the gadget content
+ * @param chartConfig
+ * @param schema
+ * @param data
+ */
+ draw = function(placeholder, chartConfig, _schema, data) {
+ var schema = toVizGrammarSchema(_schema);
+ var view = {
+ id: "chart-0",
+ schema: schema,
+ chartConfig: buildChartConfig(chartConfig),
+ data: function() {
+ if(data) {
+ var result = [];
+ console.log(data);
+ data.forEach(function(item) {
+ var row = [];
+ schema[0].metadata.names.forEach(function(name) {
+ row.push(item[name]);
+ });
+ result.push(row);
+ });
+ console.log(result);
+ wso2gadgets.onDataReady(result);
+ }
+ }
+
+ };
+
+ try {
+ wso2gadgets.init(placeholder, view);
+ var view = wso2gadgets.load("chart-0");
+ } catch (e) {
+ console.error(e);
+ }
+
+ };
+
+ /**
+ *
+ * @param data
+ */
+ update = function(data) {
+ wso2gadgets.onDataReady(data,"append");
+ }
+
+ buildChartConfig = function (_chartConfig) {
+ var conf = {};
+ conf.x = _chartConfig.x;
+ conf.maxLength = _chartConfig.maxLength;
+ conf.charts = [];
+ conf.charts[0] = {
+ type : "number",
+ title : _chartConfig.title
+ };
+ return conf;
+ };
+
+
+}());
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/thumbnail.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/thumbnail.png
new file mode 100644
index 000000000..8b3f43540
Binary files /dev/null and b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/PROXIMITY/thumbnail.png differ
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/artifact.xml
new file mode 100644
index 000000000..50d606102
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_gadget/artifact.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ PROXIMITY
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_event_sink/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_event_sink/artifact.xml
new file mode 100644
index 000000000..d49f1fbc5
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_event_sink/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org_wso2_iot_android_proximity_stats.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_event_sink/org_wso2_iot_android_proximity_stats.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_event_sink/org_wso2_iot_android_proximity_stats.xml
new file mode 100755
index 000000000..f8dba0ed4
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_event_sink/org_wso2_iot_android_proximity_stats.xml
@@ -0,0 +1,82 @@
+
+
+
+
+ meta_owner
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_deviceId
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_timestamp
+ false
+ false
+ false
+ false
+ LONG
+
+
+ proximity
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ year
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ month
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ day
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ hour
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ minute
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+
+ false
+ EVENT_STORE
+
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_streams/artifact.xml
new file mode 100644
index 000000000..f7c5e84f3
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_streams/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.proximity.stats_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_streams/org.wso2.iot.android.proximity.stats_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_streams/org.wso2.iot.android.proximity.stats_1.0.0.json
new file mode 100755
index 000000000..601fb0455
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_stats_streams/org.wso2.iot.android.proximity.stats_1.0.0.json
@@ -0,0 +1,46 @@
+{
+ "name": "org.wso2.iot.android.proximity.stats",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "proximity",
+ "type": "FLOAT"
+ },
+ {
+ "name": "year",
+ "type": "INT"
+ },
+ {
+ "name": "month",
+ "type": "INT"
+ },
+ {
+ "name": "day",
+ "type": "INT"
+ },
+ {
+ "name": "hour",
+ "type": "INT"
+ },
+ {
+ "name": "minute",
+ "type": "INT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_streams/artifact.xml
new file mode 100644
index 000000000..94043deb5
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_streams/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org.wso2.iot.android.proximity_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_streams/org.wso2.iot.android.proximity_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_streams/org.wso2.iot.android.proximity_1.0.0.json
new file mode 100755
index 000000000..a3f6e7bef
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_streams/org.wso2.iot.android.proximity_1.0.0.json
@@ -0,0 +1,26 @@
+{
+ "name": "org.wso2.iot.android.proximity",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "proximity",
+ "type": "FLOAT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_ui_event_publisher/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_ui_event_publisher/artifact.xml
new file mode 100644
index 000000000..dbdeeb073
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_ui_event_publisher/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.proximity.ui.publisher.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_ui_event_publisher/org.wso2.iot.android.proximity.ui.publisher.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_ui_event_publisher/org.wso2.iot.android.proximity.ui.publisher.xml
new file mode 100644
index 000000000..4d689764f
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_proximity_ui_event_publisher/org.wso2.iot.android.proximity.ui.publisher.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_executionplan/Android-Rotation-ExecutionPlan.siddhiql b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_executionplan/Android-Rotation-ExecutionPlan.siddhiql
new file mode 100755
index 000000000..df2e44c6d
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_executionplan/Android-Rotation-ExecutionPlan.siddhiql
@@ -0,0 +1,18 @@
+@Plan:name('Android-Rotation-ExecutionPlan')
+
+@Plan:description('Process rotation field changes.')
+
+@Import('org.wso2.iot.android.rotation:1.0.0')
+define stream RotationStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
+
+@Export('org.wso2.iot.android.rotation.stats:1.0.0')
+define stream RotationStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, x
+float, y float, z float, year int, month int, day int, hour int, minute int);
+
+partition with (meta_deviceId of RotationStream)
+begin
+ from RotationStream
+ select meta_owner, meta_deviceId, meta_timestamp, x, y, z, time:extract
+ (meta_timestamp, 'year') as year, time:extract(meta_timestamp, 'month') as month, time:extract(meta_timestamp, 'day') as day, time:extract(meta_timestamp, 'hour') as hour, time:extract(meta_timestamp, 'minute') as minute
+ insert into RotationStatsStream;
+end;
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_executionplan/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_executionplan/artifact.xml
new file mode 100644
index 000000000..eb2066187
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_executionplan/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ Android-Rotation-ExecutionPlan.siddhiql
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_event_sink/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_event_sink/artifact.xml
new file mode 100644
index 000000000..4963ddebf
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_event_sink/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org_wso2_iot_android_rotation_stats.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_event_sink/org_wso2_iot_android_rotation_stats.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_event_sink/org_wso2_iot_android_rotation_stats.xml
new file mode 100755
index 000000000..018b265f6
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_event_sink/org_wso2_iot_android_rotation_stats.xml
@@ -0,0 +1,98 @@
+
+
+
+
+ meta_owner
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_deviceId
+ false
+ false
+ false
+ false
+ STRING
+
+
+ meta_timestamp
+ false
+ false
+ false
+ false
+ LONG
+
+
+ x
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ y
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ z
+ false
+ false
+ false
+ false
+ FLOAT
+
+
+ year
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ month
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ day
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ hour
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+ minute
+ false
+ false
+ false
+ false
+ INTEGER
+
+
+
+ false
+ EVENT_STORE
+
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_streams/artifact.xml
new file mode 100644
index 000000000..eba1e16bb
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_streams/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.rotation.stats_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_streams/org.wso2.iot.android.rotation.stats_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_streams/org.wso2.iot.android.rotation.stats_1.0.0.json
new file mode 100755
index 000000000..1bf43d4d6
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_stats_streams/org.wso2.iot.android.rotation.stats_1.0.0.json
@@ -0,0 +1,54 @@
+{
+ "name": "org.wso2.iot.android.rotation.stats",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "x",
+ "type": "FLOAT"
+ },
+ {
+ "name": "y",
+ "type": "FLOAT"
+ },
+ {
+ "name": "z",
+ "type": "FLOAT"
+ },
+ {
+ "name": "year",
+ "type": "INT"
+ },
+ {
+ "name": "month",
+ "type": "INT"
+ },
+ {
+ "name": "day",
+ "type": "INT"
+ },
+ {
+ "name": "hour",
+ "type": "INT"
+ },
+ {
+ "name": "minute",
+ "type": "INT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_streams/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_streams/artifact.xml
new file mode 100644
index 000000000..22ed7929c
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_streams/artifact.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ org.wso2.iot.android.rotation_1.0.0.json
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_streams/org.wso2.iot.android.rotation_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_streams/org.wso2.iot.android.rotation_1.0.0.json
new file mode 100755
index 000000000..22e6988e2
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_streams/org.wso2.iot.android.rotation_1.0.0.json
@@ -0,0 +1,34 @@
+{
+ "name": "org.wso2.iot.android.rotation",
+ "version": "1.0.0",
+ "nickName": "",
+ "description": "",
+ "metaData": [
+ {
+ "name": "owner",
+ "type": "STRING"
+ },
+ {
+ "name": "deviceId",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "LONG"
+ }
+ ],
+ "payloadData": [
+ {
+ "name": "x",
+ "type": "FLOAT"
+ },
+ {
+ "name": "y",
+ "type": "FLOAT"
+ },
+ {
+ "name": "z",
+ "type": "FLOAT"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_ui_event_publisher/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_ui_event_publisher/artifact.xml
new file mode 100644
index 000000000..428aa7a8d
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_ui_event_publisher/artifact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ org.wso2.iot.android.rotation.ui.publisher.xml
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_ui_event_publisher/org.wso2.iot.android.rotation.ui.publisher.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_ui_event_publisher/org.wso2.iot.android.rotation.ui.publisher.xml
new file mode 100644
index 000000000..7209a1af1
--- /dev/null
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_rotation_ui_event_publisher/org.wso2.iot.android.rotation.ui.publisher.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_dashboard/android-iot.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_dashboard/android-iot.json
index 6be9afa05..36570f484 100644
--- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_dashboard/android-iot.json
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_dashboard/android-iot.json
@@ -72,20 +72,128 @@
"default": {
"a": [
{
- "id": "Android_Details-0",
+ "id": "ACCELEROMETER_Y-0",
"content": {
- "id": "Android_Details",
- "title": "Android Device Details",
+ "id": "ACCELEROMETER_Y",
+ "title": "ACCELEROMETER Y",
"type": "gadget",
- "thumbnail": "fs://gadget/Android_Details/thumbnail.png",
+ "thumbnail": "fs://gadget/ACCELEROMETER_Y/thumbnail.png",
"data": {
- "url": "fs://gadget/Android_Details/gadget.xml"
+ "url": "fs://gadget/ACCELEROMETER_Y/gadget.xml"
},
"styles": {
- "no_heading": true,
+ "no_heading": false,
"hide_gadget": false,
- "titlePosition": "left",
- "title": "Android Device Details"
+ "titlePosition": "center",
+ "title": "ACCELEROMETER Y"
+ },
+ "options": {
+ "windowSize": {
+ "type": "STRING",
+ "title": "Window Size",
+ "value": "10",
+ "options": [],
+ "required": false
+ }
+ },
+ "locale_titles": {
+ "en-US": "ACCELEROMETER Y"
+ },
+ "settings": {
+ "priority": "5",
+ "timeoutInterval": "60000"
+ }
+ }
+ }
+ ],
+ "b": [
+ {
+ "id": "ACCELEROMETER_Z-0",
+ "content": {
+ "id": "ACCELEROMETER_Z",
+ "title": "ACCELEROMETER Z",
+ "type": "gadget",
+ "thumbnail": "fs://gadget/ACCELEROMETER_Z/thumbnail.png",
+ "data": {
+ "url": "fs://gadget/ACCELEROMETER_Z/gadget.xml"
+ },
+ "styles": {
+ "no_heading": false,
+ "hide_gadget": false,
+ "titlePosition": "center",
+ "title": "ACCELEROMETER Z"
+ },
+ "options": {
+ "windowSize": {
+ "type": "STRING",
+ "title": "Window Size",
+ "value": "10",
+ "options": [],
+ "required": false
+ }
+ },
+ "locale_titles": {
+ "en-US": "ACCELEROMETER Z"
+ },
+ "settings": {
+ "priority": "5",
+ "timeoutInterval": "60000"
+ }
+ }
+ }
+ ],
+ "8e564cb7a1c6519179e2111cc05a79ca": [
+ {
+ "id": "Accelerometer_X-0",
+ "content": {
+ "id": "Accelerometer_X",
+ "title": "Accelerometer X",
+ "type": "gadget",
+ "thumbnail": "fs://gadget/Accelerometer_X/thumbnail.png",
+ "data": {
+ "url": "fs://gadget/Accelerometer_X/gadget.xml"
+ },
+ "styles": {
+ "no_heading": false,
+ "hide_gadget": false,
+ "titlePosition": "center",
+ "title": "Accelerometer X"
+ },
+ "options": {
+ "windowSize": {
+ "type": "STRING",
+ "title": "Window Size",
+ "value": "10",
+ "options": [],
+ "required": false
+ }
+ },
+ "locale_titles": {
+ "en-US": "Accelerometer X"
+ },
+ "settings": {
+ "priority": "5",
+ "timeoutInterval": "60000"
+ }
+ }
+ }
+ ],
+ "fdfada688ff9e7b3271eece314618532": [
+ {
+ "id": "GRAVITY-0",
+ "content": {
+ "id": "GRAVITY",
+ "title": "GRAVITY",
+ "type": "gadget",
+ "thumbnail": "fs://gadget/GRAVITY/thumbnail.png",
+ "data": {
+ "url": "fs://gadget/GRAVITY/gadget.xml"
+ },
+ "styles": {
+ "no_heading": false,
+ "hide_gadget": false,
+ "titlePosition": "center",
+ "title": "GRAVITY"
},
"options": {
"refreshInterval": {
@@ -97,18 +205,51 @@
}
},
"locale_titles": {
- "en-US": "Android Device Details"
+ "en-US": "GRAVITY"
},
"settings": {
"priority": "5",
"timeoutInterval": "60000"
}
- },
- "fullViewPoped": false,
- "viewOption": "default"
+ }
}
],
- "b": []
+ "46193833e958e9f7e879263f372eb508": [
+ {
+ "id": "PRESSURE-0",
+ "content": {
+ "id": "PRESSURE",
+ "title": "PRESSURE",
+ "type": "gadget",
+ "thumbnail": "fs://gadget/PRESSURE/thumbnail.png",
+ "data": {
+ "url": "fs://gadget/PRESSURE/gadget.xml"
+ },
+ "styles": {
+ "no_heading": false,
+ "hide_gadget": false,
+ "titlePosition": "center",
+ "title": "PRESSURE"
+ },
+ "options": {
+ "refreshInterval": {
+ "type": "STRING",
+ "title": "Refresh Interval",
+ "value": "1000000",
+ "options": [],
+ "required": false
+ }
+ },
+ "locale_titles": {
+ "en-US": "PRESSURE"
+ },
+ "settings": {
+ "priority": "5",
+ "timeoutInterval": "60000"
+ }
+ }
+ }
+ ]
}
},
"id": "home",
@@ -119,18 +260,66 @@
"blocks": [
{
"id": "a",
+ "x": 4,
+ "y": 0,
+ "width": 4,
+ "height": 4,
+ "banner": false
+ },
+ {
+ "id": "b",
+ "x": 8,
+ "y": 0,
+ "width": 4,
+ "height": 4,
+ "banner": false
+ },
+ {
+ "id": "8e564cb7a1c6519179e2111cc05a79ca",
"x": 0,
"y": 0,
+ "width": 4,
+ "height": 4,
+ "banner": false
+ },
+ {
+ "id": "fdfada688ff9e7b3271eece314618532",
+ "x": 0,
+ "y": 4,
"width": 6,
- "height": 6,
+ "height": 3,
"banner": false
},
{
- "id": "b",
+ "id": "46193833e958e9f7e879263f372eb508",
"x": 6,
- "y": 0,
+ "y": 4,
"width": 6,
- "height": 6,
+ "height": 3,
+ "banner": false
+ },
+ {
+ "id": "765379a7012b8819ea13524e5b312509",
+ "x": 0,
+ "y": 7,
+ "width": 4,
+ "height": 4,
+ "banner": false
+ },
+ {
+ "id": "47ceaee8a089ea8ef75c91e5b83a1a36",
+ "x": 8,
+ "y": 7,
+ "width": 4,
+ "height": 4,
+ "banner": false
+ },
+ {
+ "id": "4a9feeb19fc2ea76e252dcd62c954279",
+ "x": 4,
+ "y": 7,
+ "width": 4,
+ "height": 4,
"banner": false
}
]
diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/artifacts.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/artifacts.xml
index 1a63a5b03..0d9518345 100644
--- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/artifacts.xml
+++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/artifacts.xml
@@ -176,5 +176,105 @@
serverRole="DataAnalyticsServer"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+