From 3f7b93163be76a7ba33c7b07554a5ff80543d89a Mon Sep 17 00:00:00 2001 From: Dulitha Wijewantha Date: Fri, 23 Jan 2015 22:03:01 +0530 Subject: [PATCH] * Added a description to the feature implementation * Added the feature insert, changed the feature_id to int and added device_type to features * Included the updated database file * Developed the feature to view device features * Developed the implementation to call the Operation Manager from the UI --- .../AndroidMobileOperationManager.java | 1 + .../repository/database/WSO2MobileDM_DB.h2.db | Bin 45056 -> 1093632 bytes .../repository/dbscripts/cdm/plugins/h2.sql | 8 +++- .../dbscripts/cdm/plugins/mysql.sql | 5 +++ .../jaggeryapps/cdm/api/mobile/device-api.jag | 1 + .../cdm/api/mobile/operation-api.jag | 40 ++++++++++++++++++ .../jaggeryapps/cdm/client/javascript/main.js | 20 ++++++++- .../jaggeryapps/cdm/includes/footer.jag | 20 ++++++++- .../repository/jaggeryapps/cdm/jaggery.conf | 4 ++ .../jaggeryapps/cdm/modules/device.js | 40 +++++++++++++++--- .../jaggeryapps/cdm/pages/dashboard.jag | 1 + .../jaggeryapps/cdm/pages/device.jag | 19 ++++++--- 12 files changed, 143 insertions(+), 16 deletions(-) create mode 100644 product/modules/distribution/src/repository/jaggeryapps/cdm/api/mobile/operation-api.jag diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidMobileOperationManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidMobileOperationManager.java index cd6d04cb9c..96706117e7 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidMobileOperationManager.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidMobileOperationManager.java @@ -166,6 +166,7 @@ public class AndroidMobileOperationManager extends AbstractMobileOperationManage feature.setId(mobileFeature.getId()); feature.setDeviceType(mobileFeature.getDeviceType()); feature.setName(mobileFeature.getName()); + feature.setDescription(mobileFeature.getDescription()); List metadataEntries = new ArrayList(); List properties = featurePropertyDAO.getFeaturePropertyOfFeature(mobileFeature.getId()); diff --git a/product/modules/distribution/src/repository/database/WSO2MobileDM_DB.h2.db b/product/modules/distribution/src/repository/database/WSO2MobileDM_DB.h2.db index 78086440fdc9634924760809b633ef648247456a..361e1db39d23d458f9ed4ace29d112f5802a6dc1 100644 GIT binary patch delta 6943 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 DQVd7p delta 57 tcmZp8;MDMdX#oe%EZql>8Nh(WceCTQFYK5ilO$Lf*@1Gu*cT~G002UQ6WIU& diff --git a/product/modules/distribution/src/repository/dbscripts/cdm/plugins/h2.sql b/product/modules/distribution/src/repository/dbscripts/cdm/plugins/h2.sql index aab99bd146..86e0de45ff 100644 --- a/product/modules/distribution/src/repository/dbscripts/cdm/plugins/h2.sql +++ b/product/modules/distribution/src/repository/dbscripts/cdm/plugins/h2.sql @@ -20,6 +20,7 @@ CREATE TABLE IF NOT EXISTS `MBL_DEVICE` ( -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `MBL_FEATURE` ( `FEATURE_ID` INT NOT NULL AUTO_INCREMENT , + `DEVICE_TYPE` VARCHAR(45) NOT NULL , `CODE` VARCHAR(45) NOT NULL , `NAME` VARCHAR(100) NULL , `DESCRIPTION` VARCHAR(200) NULL , @@ -74,10 +75,15 @@ CREATE TABLE IF NOT EXISTS `MBL_OPERATION_PROPERTY` ( -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `MBL_FEATURE_PROPERTY` ( `PROPERTY` VARCHAR(45) NOT NULL , - `FEATURE_ID` VARCHAR(45) NOT NULL , + `FEATURE_ID` INT NOT NULL , PRIMARY KEY (`PROPERTY`) , CONSTRAINT `fk_MBL_FEATURE_PROPERTY_MBL_FEATURE1` FOREIGN KEY (`FEATURE_ID` ) REFERENCES `MBL_FEATURE` (`FEATURE_ID` ) ON DELETE NO ACTION ON UPDATE NO ACTION); + +-- ----------------------------------------------------- +-- Inserts +-- ----------------------------------------------------- +Insert into MBL_FEATURE (DEVICE_TYPE_ID,CODE, NAME, DESCRIPTION) VALUES ('android', "503A", "DEVICE_LOCK", "Device lock"); \ No newline at end of file diff --git a/product/modules/distribution/src/repository/dbscripts/cdm/plugins/mysql.sql b/product/modules/distribution/src/repository/dbscripts/cdm/plugins/mysql.sql index 3e6ee30a5f..2928514d4a 100644 --- a/product/modules/distribution/src/repository/dbscripts/cdm/plugins/mysql.sql +++ b/product/modules/distribution/src/repository/dbscripts/cdm/plugins/mysql.sql @@ -20,6 +20,7 @@ ENGINE = InnoDB; -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `MBL_FEATURE` ( `FEATURE_ID` INT NOT NULL AUTO_INCREMENT, + `DEVICE_TYPE_ID` INT NOT NULL, `CODE` VARCHAR(45) NULL, `NAME` VARCHAR(100) NULL, `DESCRIPTION` VARCHAR(200) NULL, @@ -97,4 +98,8 @@ CREATE TABLE IF NOT EXISTS `MBL_FEATURE_PROPERTY` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Inserts +-- ----------------------------------------------------- +Insert into MBL_FEATURE (DEVICE_TYPE_ID,CODE, NAME, DESCRIPTION) VALUES ('android', "503A", "DEVICE_LOCK", "Device lock"); diff --git a/product/modules/distribution/src/repository/jaggeryapps/cdm/api/mobile/device-api.jag b/product/modules/distribution/src/repository/jaggeryapps/cdm/api/mobile/device-api.jag index 783176d285..298a62d763 100644 --- a/product/modules/distribution/src/repository/jaggeryapps/cdm/api/mobile/device-api.jag +++ b/product/modules/distribution/src/repository/jaggeryapps/cdm/api/mobile/device-api.jag @@ -22,6 +22,7 @@ var uri = request.getRequestURI(); var callPath=uri.replace("/cdm/api/",""); var log = new Log(); var deviceModule = require("/modules/device.js"); + if (uri != null) { var uriMatcher = new URIMatcher(callPath); log.info(callPath); diff --git a/product/modules/distribution/src/repository/jaggeryapps/cdm/api/mobile/operation-api.jag b/product/modules/distribution/src/repository/jaggeryapps/cdm/api/mobile/operation-api.jag new file mode 100644 index 0000000000..b11875d1eb --- /dev/null +++ b/product/modules/distribution/src/repository/jaggeryapps/cdm/api/mobile/operation-api.jag @@ -0,0 +1,40 @@ +<% +/* + * 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 verb = request.getMethod(); +var uri = request.getRequestURI(); +var callPath=uri.replace("/cdm/api/",""); +var log = new Log(); +var deviceModule = require("/modules/device.js"); + +if (uri != null) { + var uriMatcher = new URIMatcher(callPath); + //log.info(callPath); + log.info(uriMatcher.match("operation/{type}/{deviceid}/{operation}")); + if (uriMatcher.match("operation/{type}/{deviceid}/{operation}")) { + + var deviceId = uriMatcher.elements().deviceid; + var type = uriMatcher.elements().type; + var operation = uriMatcher.elements().operation; + var result = deviceModule.performOperation(deviceId, operation,[],type); + + + } +} +%> \ No newline at end of file diff --git a/product/modules/distribution/src/repository/jaggeryapps/cdm/client/javascript/main.js b/product/modules/distribution/src/repository/jaggeryapps/cdm/client/javascript/main.js index 0fa9dd49d8..af57503dac 100644 --- a/product/modules/distribution/src/repository/jaggeryapps/cdm/client/javascript/main.js +++ b/product/modules/distribution/src/repository/jaggeryapps/cdm/client/javascript/main.js @@ -21,4 +21,22 @@ function identifierFormatter(value, row, index) { value, '' ].join(''); -} \ No newline at end of file +} + +var currentDeviceOperation; +var currentDevice; +var currentDeviceType; +function performOperation(){ + currentDevice = $("#deviceMain").data("deviceid"); + currentDeviceType = $("#deviceMain").data("devicetype"); + $.post("/cdm/api/operation/"+currentDeviceType+"/"+currentDevice+"/"+currentDeviceOperation,function(){ + $('#confirmModel').modal('hide'); + }); +} + +$(document).ready(function(){ + $(".device-operation").click(function(){ + currentDeviceOperation = $(this).data("operation"); + $('#confirmModel').modal('show'); + }); +}); \ No newline at end of file diff --git a/product/modules/distribution/src/repository/jaggeryapps/cdm/includes/footer.jag b/product/modules/distribution/src/repository/jaggeryapps/cdm/includes/footer.jag index 49db93e039..a62b5cfb80 100644 --- a/product/modules/distribution/src/repository/jaggeryapps/cdm/includes/footer.jag +++ b/product/modules/distribution/src/repository/jaggeryapps/cdm/includes/footer.jag @@ -1,3 +1,21 @@ <% // footer includes -%> \ No newline at end of file +%> + + \ No newline at end of file diff --git a/product/modules/distribution/src/repository/jaggeryapps/cdm/jaggery.conf b/product/modules/distribution/src/repository/jaggeryapps/cdm/jaggery.conf index efc8b12576..92697a30fa 100644 --- a/product/modules/distribution/src/repository/jaggeryapps/cdm/jaggery.conf +++ b/product/modules/distribution/src/repository/jaggeryapps/cdm/jaggery.conf @@ -10,6 +10,10 @@ "url": "/dashboard", "path": "/pages/dashboard.jag" }, + { + "url" : "/api/operation/*", + "path": "/api/mobile/operation-api.jag" + }, { "url": "/api/devices/mobile/*", "path": "/api/mobile/device-api.jag" diff --git a/product/modules/distribution/src/repository/jaggeryapps/cdm/modules/device.js b/product/modules/distribution/src/repository/jaggeryapps/cdm/modules/device.js index 13d77bc291..59fd1ba0c5 100644 --- a/product/modules/distribution/src/repository/jaggeryapps/cdm/modules/device.js +++ b/product/modules/distribution/src/repository/jaggeryapps/cdm/modules/device.js @@ -19,16 +19,16 @@ var utility = require("/modules/utility.js"); var DeviceIdentifier = Packages.org.wso2.carbon.device.mgt.common.DeviceIdentifier; var DeviceManagerUtil = Packages.org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil; +var Operation = Packages.org.wso2.carbon.device.mgt.common.Operation; +var Type = Packages.org.wso2.carbon.device.mgt.common.Operation.Type; +var Properties = Packages.java.util.Properties; +var ArrayList = Packages.java.util.ArrayList; var log = new Log(); var deviceManagementService = utility.getDeviceManagementService(); var listDevices = function () { - var devices = deviceManagementService.getAllDevices("android"); - var deviceList = []; - - for (i = 0; i < devices.size(); i++) { var device = devices.get(i); @@ -54,10 +54,38 @@ var getDevice = function(type, deviceId){ return device; } -var viewDevice = function(type, deviceId){ +var getOperations = function(type){ + var features = deviceManagementService.getOperationManager("android").getFeaturesForDeviceType(type); + var featuresConverted = []; + for (i = 0; i < features.size(); i++) { + var feature = features.get(i); + featuresConverted.push({ + "featureName": feature.getName(), + "featureDescription": feature.getDescription() + }); + } + return featuresConverted; +} +var performOperation = function(deviceId, featureName, properties, type){ + var operation = new Operation(); + operation.setCode(featureName); + operation.setType(Type.COMMAND); + var props = new Properties(); + for (i = 0; i < properties.length; i++) { + var object = properties[i]; + props.setProperty(object.key,object.value); + } + operation.setProperties(props); + var deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(deviceId) + deviceIdentifier.setType(type); + var deviceList = new ArrayList(); + deviceList.add(deviceIdentifier); + deviceManagementService.getOperationManager("android").addOperation(operation, deviceList); +} +var viewDevice = function(type, deviceId){ var device = this.getDevice(type, deviceId); - var propertiesList = DeviceManagerUtil.convertPropertiesToMap(device.getProperties()); var entries = propertiesList.entrySet(); var iterator = entries.iterator(); diff --git a/product/modules/distribution/src/repository/jaggeryapps/cdm/pages/dashboard.jag b/product/modules/distribution/src/repository/jaggeryapps/cdm/pages/dashboard.jag index 46c5cd3dad..8bf721890f 100644 --- a/product/modules/distribution/src/repository/jaggeryapps/cdm/pages/dashboard.jag +++ b/product/modules/distribution/src/repository/jaggeryapps/cdm/pages/dashboard.jag @@ -73,6 +73,7 @@ var title="WSO2 CDM"; <% + include("/includes/footer.jag"); include("/includes/layout-footer.jag"); %> diff --git a/product/modules/distribution/src/repository/jaggeryapps/cdm/pages/device.jag b/product/modules/distribution/src/repository/jaggeryapps/cdm/pages/device.jag index 91977bdade..17a14734d5 100644 --- a/product/modules/distribution/src/repository/jaggeryapps/cdm/pages/device.jag +++ b/product/modules/distribution/src/repository/jaggeryapps/cdm/pages/device.jag @@ -35,22 +35,26 @@ var title="WSO2 CDM"; var deviceId = uriMatcher.elements().deviceid; var type = uriMatcher.elements().type; var device = deviceModule.viewDevice(type, deviceId); + var operations = deviceModule.getOperations("android"); %> -
+

<%=device.name%>

- - + <% + } +%>
@@ -97,6 +101,7 @@ var title="WSO2 CDM";
<% + include("/includes/footer.jag"); include("/includes/layout-footer.jag"); %>