Merge pull request #491 from menakaj/release-3.0.x

Multi line chats added.
revert-dabc3590
sinthuja 8 years ago committed by GitHub
commit 2f5c68d29e

@ -3,16 +3,16 @@
@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);
define stream AccelerometerStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value
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);
define stream AccelerometerStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value 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
select meta_owner, meta_deviceId, meta_timestamp, axis, value, 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;

@ -0,0 +1,16 @@
{
"provider-conf": {
"streamName": "org.wso2.iot.android.accelerometer:1.0.0",
"provider-name": "realtime"
},
"chart-conf": {
"x": "TIMESTAMP",
"xType": "time",
"y": "value",
"yType": "number",
"color": "axis",
"maxLength": "30",
"gadget-name": "ANDROID_ACCELETOMETER_GADGET",
"chart-name": "line-chart"
}
}

@ -0,0 +1,9 @@
{
"id": "ANDROID_ACCELETOMETER_GADGET",
"title": "ANDROID_ACCELETOMETER_GADGET",
"type": "gadget",
"thumbnail": "gadget/ANDROID_ACCELETOMETER_GADGET/thumbnail.png",
"data": {
"url": "gadget/ANDROID_ACCELETOMETER_GADGET/gadget.xml"
}
}

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="ACCELEROMETER Z" description="This is a template gadget">
<ModulePrefs title="ANDROID_ACCELETOMETER_GADGET" description="This is a template gadget">
<Require feature="dynamic-height"/>
<Require feature="wso2-gadgets-identity"/>
</ModulePrefs>
@ -20,8 +20,6 @@
<!-- chart specific css -->
<link href="css/number-chart.css" rel="stylesheet" type="text/css">
<!-- jQuery -->
<script src="/portal/libs/jquery_1.11.0/jquery-1.11.3.min.js"></script>
@ -50,7 +48,7 @@
<script src="js/core/provider-client.js"></script>
<script src="js/core/gadget-util.js"></script>
<script src="js/core/number-chart-api.js"></script>
<script src="js/core/line-chart-api.js"></script>
<script src="js/core/gadget-core.js"></script>
</head>

@ -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/ANDROID_ACCELEROMETER_GADGET";
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);
}
}

@ -24,16 +24,30 @@ var getConfig, validate, isProviderRequired, draw, update;
* @param schema
*/
getConfig = function(schema) {
var chartConf = require(CHART_LOCATION + '/number-chart/config.json').config;
var chartConf = require(CHART_LOCATION + '/line-chart/config.json').config;
/*
dynamic logic goes here
*/
return chartConf;
var columns = [];
columns.push("None");
for(var i=0; i < schema.length; i++) {
columns.push(schema[i]["fieldName"]);
}
for(var i=0; i < chartConf.length; i++) {
if (chartConf[i]["fieldName"] == "color") {
chartConf[i]["valueSet"] = columns;
break;
}
}
return chartConf;
};
/**
* validate the user inout for the chart configurationx
* validate the user inout for the chart configuration
* @param chartConfig
*/
validate = function(chartConfig) {
@ -55,7 +69,9 @@ var getConfig, validate, isProviderRequired, draw, update;
* @param data
*/
draw = function(placeholder, chartConfig, _schema, data) {
_schema = updateUserPrefXYTypes(_schema, chartConfig);
var schema = toVizGrammarSchema(_schema);
var view = {
id: "chart-0",
schema: schema,
@ -93,19 +109,26 @@ var getConfig, validate, isProviderRequired, draw, update;
*/
update = function(data) {
wso2gadgets.onDataReady(data,"append");
}
};
buildChartConfig = function (_chartConfig) {
var conf = {};
conf.x = _chartConfig.x;
conf.xType = _chartConfig.xType;
conf.yType = _chartConfig.yType;
conf.maxLength = _chartConfig.maxLength;
conf.charts = [];
conf.charts[0] = {
type : "number",
title : _chartConfig.title
type : "line",
y: _chartConfig.y
};
if (_chartConfig.color != "None") {
conf.charts[0].color = _chartConfig.color;
}
return conf;
};
}());
}());

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ 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.
-->
<artifact name= "android_accelerometer_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
<file>ANDROID_ACCELEROMETER_GADGET</file>
</artifact>

@ -26,23 +26,15 @@
<Type>LONG</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>x</Name>
<Name>axis</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>FLOAT</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>y</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>FLOAT</Type>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>z</Name>
<Name>value</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>

@ -19,15 +19,11 @@
],
"payloadData": [
{
"name": "x",
"type": "FLOAT"
},
{
"name": "y",
"type": "FLOAT"
"name": "axis",
"type": "STRING"
},
{
"name": "z",
"name": "value",
"type": "FLOAT"
},
{

@ -19,15 +19,11 @@
],
"payloadData": [
{
"name": "x",
"type": "FLOAT"
},
{
"name": "y",
"type": "FLOAT"
"name": "axis",
"type": "STRING"
},
{
"name": "z",
"name": "value",
"type": "FLOAT"
}
]

@ -1 +0,0 @@
{"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"}}

@ -1,35 +0,0 @@
#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;
}

@ -1,9 +0,0 @@
{
"id": "Accelerometer_X",
"title": "Accelerometer X",
"type": "gadget",
"thumbnail": "gadget/Accelerometer_X/thumbnail.png",
"data": {
"url": "gadget/Accelerometer_X/gadget.xml"
}
}

@ -1 +0,0 @@
{"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"}}

@ -1,35 +0,0 @@
#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;
}

@ -1,9 +0,0 @@
{
"id": "ACCELEROMETER_Y",
"title": "ACCELEROMETER Y",
"type": "gadget",
"thumbnail": "gadget/ACCELEROMETER_Y/thumbnail.png",
"data": {
"url": "gadget/ACCELEROMETER_Y/gadget.xml"
}
}

@ -1 +0,0 @@
{"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"}}

@ -1,35 +0,0 @@
#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;
}

@ -1,9 +0,0 @@
{
"id": "ACCELEROMETER_Z",
"title": "ACCELEROMETER Z",
"type": "gadget",
"thumbnail": "gadget/ACCELEROMETER_Z/thumbnail.png",
"data": {
"url": "gadget/ACCELEROMETER_Z/gadget.xml"
}
}

@ -33,19 +33,19 @@ define stream SmsStream (meta_owner string, meta_deviceId string, meta_timestamp
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);
define stream AccelerometerStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value 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);
define stream GyroscopeStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value 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);
define stream MagneticStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value 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);
define stream RotationStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value float);
@Export('org.wso2.iot.android.pressure:1.0.0')
define stream PressureStream (meta_owner string, meta_deviceId string, meta_timestamp long, pressure float);
@ -57,14 +57,39 @@ define stream LightStream (meta_owner string, meta_deviceId string, meta_timesta
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
select meta_owner, meta_deviceId, meta_timestamp, 'X' as axis, accelerometer_x as value
insert into AccelerometerStream;
from AndroidSense[meta_type == 'accelerometer']
select meta_owner, meta_deviceId, meta_timestamp, 'Y' as axis, accelerometer_y as value
insert into AccelerometerStream;
from AndroidSense[meta_type == 'accelerometer']
select meta_owner, meta_deviceId, meta_timestamp, 'Z' as axis, accelerometer_z as value
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
select meta_owner, meta_deviceId, meta_timestamp, 'X' as axis, gyroscope_x as value
insert into GyroscopeStream;
from AndroidSense[meta_type == 'gyroscope']
select meta_owner, meta_deviceId, meta_timestamp, 'Y' as axis, gyroscope_y as value
insert into GyroscopeStream;
from AndroidSense[meta_type == 'gyroscope']
select meta_owner, meta_deviceId, meta_timestamp, 'Z' as axis, gyroscope_z as value
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
select meta_owner, meta_deviceId, meta_timestamp, 'X' as axis, magnetic_x as value
insert into MagneticStream;
from AndroidSense[meta_type == 'magnetic']
select meta_owner, meta_deviceId, meta_timestamp, 'Y' as axis, magnetic_y as value
insert into MagneticStream;
from AndroidSense[meta_type == 'magnetic']
select meta_owner, meta_deviceId, meta_timestamp, 'Z' as axis, magnetic_z as value
insert into MagneticStream;
from AndroidSense[meta_type == 'gravity']
@ -72,7 +97,15 @@ select meta_owner, meta_deviceId, meta_timestamp, gravity_x as x, gravity_y as y
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
select meta_owner, meta_deviceId, meta_timestamp, 'X' as axis, rotation_x as value
insert into RotationStream;
from AndroidSense[meta_type == 'rotation']
select meta_owner, meta_deviceId, meta_timestamp, 'Y' as axis, rotation_y as value
insert into RotationStream;
from AndroidSense[meta_type == 'rotation']
select meta_owner, meta_deviceId, meta_timestamp, 'Z' as axis, rotation_z as value
insert into RotationStream;
from AndroidSense[meta_type == 'pressure']

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except

@ -3,16 +3,16 @@
@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);
define stream GyroscopeStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value 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);
define stream GyroscopeStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value
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
select meta_owner, meta_deviceId, meta_timestamp, axis, value, 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;

@ -0,0 +1,16 @@
{
"provider-conf": {
"streamName": "org.wso2.iot.android.gyroscope:1.0.0",
"provider-name": "realtime"
},
"chart-conf": {
"x": "TIMESTAMP",
"xType": "time",
"y": "value",
"yType": "number",
"color": "axis",
"maxLength": "30",
"gadget-name": "ANDROID_GYROSCOPE_GADGET",
"chart-name": "line-chart"
}
}

@ -0,0 +1,9 @@
{
"id": "ANDROID_GYROSCOPE_GADGET",
"title": "ANDROID_GYROSCOPE_GADGET",
"type": "gadget",
"thumbnail": "gadget/ANDROID_GYROSCOPE_GADGET/thumbnail.png",
"data": {
"url": "gadget/ANDROID_GYROSCOPE_GADGET/gadget.xml"
}
}

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="ACCELEROMETER Y" description="This is a template gadget">
<ModulePrefs title="ANDROID_GYROSCOPE_GADGET" description="This is a template gadget">
<Require feature="dynamic-height"/>
<Require feature="wso2-gadgets-identity"/>
</ModulePrefs>
@ -20,8 +20,6 @@
<!-- chart specific css -->
<link href="css/number-chart.css" rel="stylesheet" type="text/css">
<!-- jQuery -->
<script src="/portal/libs/jquery_1.11.0/jquery-1.11.3.min.js"></script>
@ -50,7 +48,7 @@
<script src="js/core/provider-client.js"></script>
<script src="js/core/gadget-util.js"></script>
<script src="js/core/number-chart-api.js"></script>
<script src="js/core/line-chart-api.js"></script>
<script src="js/core/gadget-core.js"></script>
</head>

@ -14,7 +14,7 @@
* limitations under the License.
*/
var getGadgetLocation = function (callback) {
var gadgetLocation = "/portal/store/carbon.super/fs/gadget/ACCELEROMETER_Z";
var gadgetLocation = "/portal/store/carbon.super/fs/gadget/ANDROID_GYROSCOPE_GADGET";
var PATH_SEPERATOR = "/";
if (gadgetLocation.search("store") != -1) {
wso2.gadgets.identity.getTenantDomain(function (tenantDomain) {

@ -24,16 +24,30 @@ var getConfig, validate, isProviderRequired, draw, update;
* @param schema
*/
getConfig = function(schema) {
var chartConf = require(CHART_LOCATION + '/number-chart/config.json').config;
var chartConf = require(CHART_LOCATION + '/line-chart/config.json').config;
/*
dynamic logic goes here
*/
return chartConf;
var columns = [];
columns.push("None");
for(var i=0; i < schema.length; i++) {
columns.push(schema[i]["fieldName"]);
}
for(var i=0; i < chartConf.length; i++) {
if (chartConf[i]["fieldName"] == "color") {
chartConf[i]["valueSet"] = columns;
break;
}
}
return chartConf;
};
/**
* validate the user inout for the chart configurationx
* validate the user inout for the chart configuration
* @param chartConfig
*/
validate = function(chartConfig) {
@ -55,7 +69,9 @@ var getConfig, validate, isProviderRequired, draw, update;
* @param data
*/
draw = function(placeholder, chartConfig, _schema, data) {
_schema = updateUserPrefXYTypes(_schema, chartConfig);
var schema = toVizGrammarSchema(_schema);
var view = {
id: "chart-0",
schema: schema,
@ -93,19 +109,26 @@ var getConfig, validate, isProviderRequired, draw, update;
*/
update = function(data) {
wso2gadgets.onDataReady(data,"append");
}
};
buildChartConfig = function (_chartConfig) {
var conf = {};
conf.x = _chartConfig.x;
conf.xType = _chartConfig.xType;
conf.yType = _chartConfig.yType;
conf.maxLength = _chartConfig.maxLength;
conf.charts = [];
conf.charts[0] = {
type : "number",
title : _chartConfig.title
type : "line",
y: _chartConfig.y
};
if (_chartConfig.color != "None") {
conf.charts[0].color = _chartConfig.color;
}
return conf;
};
}());
}());

@ -17,7 +17,7 @@
~ under the License.
-->
<artifact name= "android_accelerometer_y_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
<file>ACCELEROMETER_Y</file>
<artifact name= "android_gyroscope_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
<file>ANDROID_GYROSCOPE_GADGET</file>
</artifact>

@ -26,23 +26,15 @@
<Type>LONG</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>x</Name>
<Name>axis</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>FLOAT</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>y</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>FLOAT</Type>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>z</Name>
<Name>value</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>

@ -19,15 +19,11 @@
],
"payloadData": [
{
"name": "x",
"type": "FLOAT"
},
{
"name": "y",
"type": "FLOAT"
"name": "axis",
"type": "STRING"
},
{
"name": "z",
"name": "value",
"type": "FLOAT"
},
{

@ -19,15 +19,11 @@
],
"payloadData": [
{
"name": "x",
"type": "FLOAT"
},
{
"name": "y",
"type": "FLOAT"
"name": "axis",
"type": "STRING"
},
{
"name": "z",
"name": "value",
"type": "FLOAT"
}
]

@ -3,16 +3,15 @@
@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);
define stream MagneticStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value 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);
define stream MagneticStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value 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
select meta_owner, meta_deviceId, meta_timestamp, axis, value, 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;

@ -0,0 +1,16 @@
{
"provider-conf": {
"streamName": "org.wso2.iot.android.magnetic:1.0.0",
"provider-name": "realtime"
},
"chart-conf": {
"x": "TIMESTAMP",
"xType": "time",
"y": "value",
"yType": "number",
"color": "axis",
"maxLength": "30",
"gadget-name": "ANDROID_MAGNETIC_GADGET",
"chart-name": "line-chart"
}
}

@ -0,0 +1,9 @@
{
"id": "ANDROID_MAGNETIC_GADGET",
"title": "ANDROID_MAGNETIC_GADGET",
"type": "gadget",
"thumbnail": "gadget/ANDROID_MAGNETIC_GADGET/thumbnail.png",
"data": {
"url": "gadget/ANDROID_MAGNETIC_GADGET/gadget.xml"
}
}

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Accelerometer X" description="This is a template gadget">
<ModulePrefs title="ANDROID_MAGNETIC_GADGET" description="This is a template gadget">
<Require feature="dynamic-height"/>
<Require feature="wso2-gadgets-identity"/>
</ModulePrefs>
@ -20,8 +20,6 @@
<!-- chart specific css -->
<link href="css/number-chart.css" rel="stylesheet" type="text/css">
<!-- jQuery -->
<script src="/portal/libs/jquery_1.11.0/jquery-1.11.3.min.js"></script>
@ -50,7 +48,7 @@
<script src="js/core/provider-client.js"></script>
<script src="js/core/gadget-util.js"></script>
<script src="js/core/number-chart-api.js"></script>
<script src="js/core/line-chart-api.js"></script>
<script src="js/core/gadget-core.js"></script>
</head>

@ -14,7 +14,7 @@
* limitations under the License.
*/
var getGadgetLocation = function (callback) {
var gadgetLocation = "/portal/store/carbon.super/fs/gadget/Accelerometer_X";
var gadgetLocation = "/portal/store/carbon.super/fs/gadget/ANDROID_MAGNETIC_GADGET";
var PATH_SEPERATOR = "/";
if (gadgetLocation.search("store") != -1) {
wso2.gadgets.identity.getTenantDomain(function (tenantDomain) {

@ -24,16 +24,30 @@ var getConfig, validate, isProviderRequired, draw, update;
* @param schema
*/
getConfig = function(schema) {
var chartConf = require(CHART_LOCATION + '/number-chart/config.json').config;
var chartConf = require(CHART_LOCATION + '/line-chart/config.json').config;
/*
dynamic logic goes here
*/
return chartConf;
var columns = [];
columns.push("None");
for(var i=0; i < schema.length; i++) {
columns.push(schema[i]["fieldName"]);
}
for(var i=0; i < chartConf.length; i++) {
if (chartConf[i]["fieldName"] == "color") {
chartConf[i]["valueSet"] = columns;
break;
}
}
return chartConf;
};
/**
* validate the user inout for the chart configurationx
* validate the user inout for the chart configuration
* @param chartConfig
*/
validate = function(chartConfig) {
@ -55,7 +69,9 @@ var getConfig, validate, isProviderRequired, draw, update;
* @param data
*/
draw = function(placeholder, chartConfig, _schema, data) {
_schema = updateUserPrefXYTypes(_schema, chartConfig);
var schema = toVizGrammarSchema(_schema);
var view = {
id: "chart-0",
schema: schema,
@ -93,19 +109,26 @@ var getConfig, validate, isProviderRequired, draw, update;
*/
update = function(data) {
wso2gadgets.onDataReady(data,"append");
}
};
buildChartConfig = function (_chartConfig) {
var conf = {};
conf.x = _chartConfig.x;
conf.xType = _chartConfig.xType;
conf.yType = _chartConfig.yType;
conf.maxLength = _chartConfig.maxLength;
conf.charts = [];
conf.charts[0] = {
type : "number",
title : _chartConfig.title
type : "line",
y: _chartConfig.y
};
if (_chartConfig.color != "None") {
conf.charts[0].color = _chartConfig.color;
}
return conf;
};
}());
}());

@ -17,7 +17,7 @@
~ under the License.
-->
<artifact name= "android_accelerometer_x_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
<file>Accelerometer_X</file>
<artifact name= "android_magnetic_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
<file>ANDROID_MAGNETIC_GADGET</file>
</artifact>

@ -26,23 +26,15 @@
<Type>LONG</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>x</Name>
<Name>axis</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>FLOAT</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>y</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>FLOAT</Type>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>z</Name>
<Name>value</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>

@ -19,15 +19,11 @@
],
"payloadData": [
{
"name": "x",
"type": "FLOAT"
},
{
"name": "y",
"type": "FLOAT"
"name": "axis",
"type": "STRING"
},
{
"name": "z",
"name": "value",
"type": "FLOAT"
},
{

@ -19,15 +19,11 @@
],
"payloadData": [
{
"name": "x",
"type": "FLOAT"
},
{
"name": "y",
"type": "FLOAT"
"name": "axis",
"type": "STRING"
},
{
"name": "z",
"name": "value",
"type": "FLOAT"
}
]

@ -3,16 +3,16 @@
@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);
define stream RotationStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value 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);
define stream RotationStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value
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
select meta_owner, meta_deviceId, meta_timestamp, axis, value, 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;

@ -0,0 +1,16 @@
{
"provider-conf": {
"streamName": "org.wso2.iot.android.rotation:1.0.0",
"provider-name": "realtime"
},
"chart-conf": {
"x": "TIMESTAMP",
"xType": "time",
"y": "value",
"yType": "number",
"color": "axis",
"maxLength": "30",
"gadget-name": "ANDROID_ROTATION_GADGET",
"chart-name": "line-chart"
}
}

@ -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;
}
}());
%>

@ -0,0 +1,9 @@
{
"id": "ANDROID_ROTATION_GADGET",
"title": "ANDROID_ROTATION_GADGET",
"type": "gadget",
"thumbnail": "gadget/ANDROID_ROTATION_GADGET/thumbnail.png",
"data": {
"url": "gadget/ANDROID_ROTATION_GADGET/gadget.xml"
}
}

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="ANDROID_ROTATION_GADGET" description="This is a template gadget">
<Require feature="dynamic-height"/>
<Require feature="wso2-gadgets-identity"/>
</ModulePrefs>
<UserPref name="windowSize"
display_name="Window Size"
default_value="10"/>
<Content type="html">
<![CDATA[
<head>
<!-- shared css -->
<link href="/portal/libs/analytics-wso2-2.0.0/common.css" rel="stylesheet" type="text/css" >
<!-- chart vendor css -->
<!-- chart specific css -->
<!-- jQuery -->
<script src="/portal/libs/jquery_1.11.0/jquery-1.11.3.min.js"></script>
<!-- provider libs -->
<script src="js/provider-libs/ws-client.js"></script>
<!-- shared libs -->
<script src="/portal/libs/analytics-wso2-2.0.0/d3.min.js"></script>
<script src="/portal/libs/analytics-wso2-2.0.0/vega.js"></script>
<script src="/portal/libs/analytics-wso2-2.0.0/VizGrammar.min.js"></script>
<script src="/portal/libs/analytics-wso2-2.0.0/wso2gadgets.js"></script>
<script src="/portal/libs/analytics-wso2-2.0.0/chart-utils.js"></script>
<!-- chart specific vendor libs -->
<!-- chart specific js -->
<!--scripts copied by framework -->
<script src="js/core/provider-client.js"></script>
<script src="js/core/gadget-util.js"></script>
<script src="js/core/line-chart-api.js"></script>
<script src="js/core/gadget-core.js"></script>
</head>
<body>
<div id="canvas"></div>
</body>
]]>
</Content>
</Module>

@ -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();
});
});

@ -14,7 +14,7 @@
* limitations under the License.
*/
var getGadgetLocation = function (callback) {
var gadgetLocation = "/portal/store/carbon.super/fs/gadget/ACCELEROMETER_Y";
var gadgetLocation = "/portal/store/carbon.super/fs/gadget/ANDROID_ROTATION_GADGET";
var PATH_SEPERATOR = "/";
if (gadgetLocation.search("store") != -1) {
wso2.gadgets.identity.getTenantDomain(function (tenantDomain) {

@ -0,0 +1,134 @@
/*
* 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 + '/line-chart/config.json').config;
/*
dynamic logic goes here
*/
var columns = [];
columns.push("None");
for(var i=0; i < schema.length; i++) {
columns.push(schema[i]["fieldName"]);
}
for(var i=0; i < chartConf.length; i++) {
if (chartConf[i]["fieldName"] == "color") {
chartConf[i]["valueSet"] = columns;
break;
}
}
return chartConf;
};
/**
* validate the user inout for the chart configuration
* @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) {
_schema = updateUserPrefXYTypes(_schema, chartConfig);
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.xType = _chartConfig.xType;
conf.yType = _chartConfig.yType;
conf.maxLength = _chartConfig.maxLength;
conf.charts = [];
conf.charts[0] = {
type : "line",
y: _chartConfig.y
};
if (_chartConfig.color != "None") {
conf.charts[0].color = _chartConfig.color;
}
return conf;
};
}());

@ -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);
};
}());

@ -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;
};
}());

@ -0,0 +1,287 @@
/*
* 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.
*/
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<eventList.length;i++){
var arr = eventList[i];
constructPayload(arr);
}
}
if(pollingContinue){
startPoll();
}
})
.fail(function(errorData) {
var errorData = JSON.parse(errorData.responseText);
onErrorFunction(errorData.error);
});
}, polingInterval);
})()
}
function stopPollingProcesses(){
//stopping the Websocket
if(websocket != null){
terminateWebsocketInstance = true;
websocket.close();
}
//stopping the HTTPS Request
pollingContinue = false;
}
function constructPayload(eventsArray){
var streamId = stream + CONSTANTS.colon + streamVersion;
var twoDimentionalArray = [eventsArray];
onSuccessFunction(streamId,twoDimentionalArray);
}

@ -17,7 +17,6 @@
~ under the License.
-->
<artifact name= "android_accelerometer_z_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
<file>ACCELEROMETER_Z</file>
<artifact name= "android_rotation_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
<file>ANDROID_ROTATION_GADGET</file>
</artifact>

@ -26,23 +26,15 @@
<Type>LONG</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>x</Name>
<Name>axis</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>FLOAT</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>y</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>FLOAT</Type>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>z</Name>
<Name>value</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>

@ -19,15 +19,11 @@
],
"payloadData": [
{
"name": "x",
"type": "FLOAT"
},
{
"name": "y",
"type": "FLOAT"
"name": "axis",
"type": "STRING"
},
{
"name": "z",
"name": "value",
"type": "FLOAT"
},
{

@ -19,15 +19,11 @@
],
"payloadData": [
{
"name": "x",
"type": "FLOAT"
},
{
"name": "y",
"type": "FLOAT"
"name": "axis",
"type": "STRING"
},
{
"name": "z",
"name": "value",
"type": "FLOAT"
}
]

@ -10,17 +10,17 @@
"hideAllMenuItems": false,
"id": "android-iot",
"identityServerUrl": "",
"isEditorEnable": true,
"isEditorEnable": false,
"isUserCustom": false,
"isanon": false,
"landing": "home",
"landing": "sensors",
"menu": [
{
"id": "home",
"id": "sensors",
"isanon": false,
"ishidden": false,
"subordinates": [],
"title": "Home"
"title": "Sensors"
},
{
"id": "real-time",
@ -61,7 +61,7 @@
"id": "test",
"isanon": false,
"ishidden": false,
"title": "test",
"title": "Test",
"subordinates": []
}
],
@ -70,22 +70,23 @@
"content": {
"anon": {},
"default": {
"a": [
"a": [],
"b": [
{
"id": "ACCELEROMETER_Y-0",
"id": "ANDROID_MAGNETIC_GADGET-0",
"content": {
"id": "ACCELEROMETER_Y",
"title": "ACCELEROMETER Y",
"id": "ANDROID_MAGNETIC_GADGET",
"title": "ANDROID_MAGNETIC_GADGET",
"type": "gadget",
"thumbnail": "fs://gadget/ACCELEROMETER_Y/thumbnail.png",
"thumbnail": "fs://gadget/ANDROID_MAGNETIC_GADGET/thumbnail.png",
"data": {
"url": "fs://gadget/ACCELEROMETER_Y/gadget.xml"
"url": "fs://gadget/ANDROID_MAGNETIC_GADGET/gadget.xml"
},
"styles": {
"no_heading": false,
"hide_gadget": false,
"titlePosition": "center",
"title": "ACCELEROMETER Y"
"title": "MAGNETIC FIELD"
},
"options": {
"windowSize": {
@ -97,7 +98,7 @@
}
},
"locale_titles": {
"en-US": "ACCELEROMETER Y"
"en-US": "MAGNETIC FIELD"
},
"settings": {
"priority": "5",
@ -106,58 +107,22 @@
}
}
],
"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",
"id": "ANDROID_ACCELEROMETER_GADGET-0",
"content": {
"id": "Accelerometer_X",
"title": "Accelerometer X",
"id": "ANDROID_ACCELEROMETER_GADGET",
"title": "ANDROID_ACCELEROMETER_GADGET",
"type": "gadget",
"thumbnail": "fs://gadget/Accelerometer_X/thumbnail.png",
"thumbnail": "fs://gadget/ANDROID_ACCELEROMETER_GADGET/thumbnail.png",
"data": {
"url": "fs://gadget/Accelerometer_X/gadget.xml"
"url": "fs://gadget/ANDROID_ACCELEROMETER_GADGET/gadget.xml"
},
"styles": {
"no_heading": false,
"hide_gadget": false,
"titlePosition": "center",
"title": "Accelerometer X"
"title": "ACCELEROMETER"
},
"options": {
"windowSize": {
@ -169,7 +134,7 @@
}
},
"locale_titles": {
"en-US": "Accelerometer X"
"en-US": "ACCELEROMETER"
},
"settings": {
"priority": "5",
@ -249,43 +214,107 @@
}
}
}
],
"765379a7012b8819ea13524e5b312509": [
{
"id": "ANDROID_ROTATION_GADGET-0",
"content": {
"id": "ANDROID_ROTATION_GADGET",
"title": "ANDROID_ROTATION_GADGET",
"type": "gadget",
"thumbnail": "fs://gadget/ANDROID_ROTATION_GADGET/thumbnail.png",
"data": {
"url": "fs://gadget/ANDROID_ROTATION_GADGET/gadget.xml"
},
"styles": {
"no_heading": false,
"hide_gadget": false,
"titlePosition": "center",
"title": "ROTATIONAL VECTOR"
},
"options": {
"windowSize": {
"type": "STRING",
"title": "Window Size",
"value": "10",
"options": [],
"required": false
}
},
"locale_titles": {
"en-US": "ROTATIONAL VECTOR"
},
"settings": {
"priority": "5",
"timeoutInterval": "60000"
}
}
}
],
"47ceaee8a089ea8ef75c91e5b83a1a36": [
{
"id": "ANDROID_GYROSCOPE_GADGET-0",
"content": {
"id": "ANDROID_GYROSCOPE_GADGET",
"title": "ANDROID_GYROSCOPE_GADGET",
"type": "gadget",
"thumbnail": "fs://gadget/ANDROID_GYROSCOPE_GADGET/thumbnail.png",
"data": {
"url": "fs://gadget/ANDROID_GYROSCOPE_GADGET/gadget.xml"
},
"styles": {
"no_heading": false,
"hide_gadget": false,
"titlePosition": "center",
"title": "GYROSCOPE"
},
"options": {
"windowSize": {
"type": "STRING",
"title": "Window Size",
"value": "10",
"options": [],
"required": false
}
},
"locale_titles": {
"en-US": "GYROSCOPE"
},
"settings": {
"priority": "5",
"timeoutInterval": "60000"
}
}
}
]
}
},
"id": "home",
"id": "sensors",
"isanon": false,
"layout": {
"content": {
"loggedIn": {
"blocks": [
{
"id": "a",
"x": 4,
"y": 0,
"width": 4,
"height": 4,
"banner": false
},
{
"id": "b",
"x": 8,
"x": 6,
"y": 0,
"width": 4,
"height": 4,
"width": 6,
"height": 5,
"banner": false
},
{
"id": "8e564cb7a1c6519179e2111cc05a79ca",
"x": 0,
"y": 0,
"width": 4,
"height": 4,
"width": 6,
"height": 5,
"banner": false
},
{
"id": "fdfada688ff9e7b3271eece314618532",
"x": 0,
"y": 4,
"y": 5,
"width": 6,
"height": 3,
"banner": false
@ -293,7 +322,7 @@
{
"id": "46193833e958e9f7e879263f372eb508",
"x": 6,
"y": 4,
"y": 5,
"width": 6,
"height": 3,
"banner": false
@ -301,25 +330,17 @@
{
"id": "765379a7012b8819ea13524e5b312509",
"x": 0,
"y": 7,
"width": 4,
"height": 4,
"y": 8,
"width": 6,
"height": 5,
"banner": false
},
{
"id": "47ceaee8a089ea8ef75c91e5b83a1a36",
"x": 8,
"y": 7,
"width": 4,
"height": 4,
"banner": false
},
{
"id": "4a9feeb19fc2ea76e252dcd62c954279",
"x": 4,
"y": 7,
"width": 4,
"height": 4,
"x": 6,
"y": 8,
"width": 6,
"height": 5,
"banner": false
}
]
@ -327,7 +348,7 @@
},
"fluidLayout": false
},
"title": "Home"
"title": "Sensors"
},
{
"content": {
@ -1281,7 +1302,7 @@
},
{
"id": "test",
"title": "test",
"title": "Test",
"layout": {
"content": {
"loggedIn": {
@ -1438,5 +1459,6 @@
},
"shareDashboard": false,
"theme": "Default Theme",
"title": "Android IOT"
}
"title": "Android IOT",
"defaultPriority": "5"
}

@ -187,11 +187,7 @@
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_accelerometer_ui_event_publisher" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_accelerometer_x_gadget" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_accelerometer_y_gadget" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_accelerometer_z_gadget" version="1.0.0" include="true"
<dependency artifact="android_accelerometer_gadget" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_gyroscope_streams" version="1.0.0" include="true"
@ -204,6 +200,8 @@
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_gyroscope_ui_event_publisher" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_gyroscope_gadget" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_gravity_streams" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
@ -228,6 +226,8 @@
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_magnetic_ui_event_publisher" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_magnetic_gadget" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_rotation_streams" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
@ -239,6 +239,8 @@
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_rotation_ui_event_publisher" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_rotation_gadget" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>
<dependency artifact="android_light_streams" version="1.0.0" include="true"
serverRole="DataAnalyticsServer"/>

Loading…
Cancel
Save