From 9148c3baeaf8c74963cfa99db665e847afe9de71 Mon Sep 17 00:00:00 2001 From: Rasika Perera Date: Thu, 22 Sep 2016 08:54:40 +0530 Subject: [PATCH 1/8] Fixing dashboard styling issues --- .../pages/cdmf.page.dashboard/dashboard.hbs | 129 ++++++++---------- .../pages/cdmf.page.dashboard/dashboard.js | 18 +-- 2 files changed, 65 insertions(+), 82 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.hbs index 02be4f0a7e..199e362a46 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.hbs @@ -26,25 +26,26 @@ {{/zone}} {{#zone "content"}} -
+
{{#if permissions.VIEW_DASHBOARD}} -
-
-
-
Devices
-
-
-
- {{device_count}} +
+
+
Devices
+
+
+
+ {{deviceCount}} - - - - - - View - + {{#if deviceCount}} + + + + + + View + + {{/if}} @@ -54,20 +55,19 @@ Add -
-
-
-
-
Groups
-
-
-
- {{group_count}} +
+
+
Groups
+
+
+
+ {{groupCount}} + {{#if groupCount}} @@ -76,6 +76,7 @@ View + {{/if}} @@ -85,20 +86,19 @@ Add -
-
-
-
-
Users
-
-
-
- {{user_count}} +
+
+
Users
+
+
+
+ {{userCount}} + {{#if userCount}} @@ -107,6 +107,7 @@ View + {{/if}} @@ -116,20 +117,19 @@ Add -
-
-
-
-
Policies
-
-
-
- {{policy_count}} +
+
+
Policies
+
+
+
+ {{policyCount}} + {{#if policyCount}} @@ -138,6 +138,7 @@ View + {{/if}} @@ -147,20 +148,19 @@ Add -
-
-
-
-
Roles
-
-
-
- {{role_count}} +
+
+
Roles
+
+
+
+ {{roleCount}} + {{#if roleCount}} @@ -169,6 +169,7 @@ View + {{/if}} @@ -178,32 +179,14 @@ Add -
{{else}} - Permission denied +

+ Permitted None +

{{/if}}
- {{/zone}} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.js index c5682c0c5b..c848b86f6e 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.js @@ -32,16 +32,16 @@ function onRequest() { return; } - var page = {}; - page.permissions = permissions; - page.enrollmentURL = devicemgtProps.enrollmentURL; - page.device_count = deviceModule.getDevicesCount(); + var viewModel = {}; + viewModel.permissions = permissions; + viewModel.enrollmentURL = devicemgtProps.enrollmentURL; + viewModel.deviceCount = deviceModule.getDevicesCount(); //TODO: Enable Group Management Service API on CDMF //page.group_count = groupModule.getGroupCount(); - page.group_count = -1; - page.user_count = userModule.getUsersCount(); - page.policy_count = policyModule.getPoliciesCount(); - page.role_count = userModule.getRolesCount(); + viewModel.groupCount = -1; + viewModel.userCount = userModule.getUsersCount(); + viewModel.policyCount = policyModule.getPoliciesCount(); + viewModel.roleCount = userModule.getRolesCount(); - return page; + return viewModel; } \ No newline at end of file From 0fb87f3aa273922a570dc1b7d58fc21b84fa834e Mon Sep 17 00:00:00 2001 From: Rasika Perera Date: Thu, 22 Sep 2016 08:56:12 +0530 Subject: [PATCH 2/8] Fixing device types not shown issue --- .../cdmf.unit.device.types.listing/listing.js | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.types.listing/listing.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.types.listing/listing.js index e9c68c6452..62ca011b0b 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.types.listing/listing.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.types.listing/listing.js @@ -27,12 +27,12 @@ function onRequest(context) { var utility = require("/app/modules/utility.js").utility; var typesListResponse = deviceModule.getDeviceTypes(); if (typesListResponse["status"] == "success") { - var deviceTypes = typesListResponse["content"]; + var deviceTypes = typesListResponse.content.deviceTypes; if (deviceTypes) { var deviceTypesList = [], virtualDeviceTypesList = []; for (var i = 0; i < deviceTypes.length; i++) { - - var deviceTypeLabel = deviceTypes[i].name; + var deviceType = deviceTypes[i]; + var deviceTypeLabel = deviceType; var configs = utility.getDeviceTypeConfig(deviceTypeLabel); var deviceCategory = "device"; if (configs) { @@ -45,22 +45,20 @@ function onRequest(context) { } if (deviceCategory == 'virtual') { virtualDeviceTypesList.push({ - "hasCustTemplate": false, - "deviceTypeLabel": deviceTypeLabel, - "deviceTypeName": deviceTypes[i].name, - "deviceCategory": deviceCategory, - "deviceTypeId": deviceTypes[i].id, - "thumb": utility.getDeviceThumb(deviceTypes[i].name) - }); + "hasCustTemplate": false, + "deviceTypeLabel": deviceTypeLabel, + "deviceTypeName": deviceType, + "deviceCategory": deviceCategory, + "thumb": utility.getDeviceThumb(deviceType) + }); } else { deviceTypesList.push({ - "hasCustTemplate": false, - "deviceTypeLabel": deviceTypeLabel, - "deviceTypeName": deviceTypes[i].name, - "deviceCategory": deviceCategory, - "deviceTypeId": deviceTypes[i].id, - "thumb": utility.getDeviceThumb(deviceTypes[i].name) - }); + "hasCustTemplate": false, + "deviceTypeLabel": deviceTypeLabel, + "deviceTypeName": deviceType, + "deviceCategory": deviceCategory, + "thumb": utility.getDeviceThumb(deviceType) + }); } } if (virtualDeviceTypesList.length > 0) { From 513015c1b5f752215f79c78b89261f071190e0ed Mon Sep 17 00:00:00 2001 From: Rasika Perera Date: Thu, 22 Sep 2016 08:56:41 +0530 Subject: [PATCH 3/8] Changing context path /emm into /devicemgt on cdmf base app --- .../main/resources/jaggeryapps/devicemgt/app/conf/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json index cf19f5ec5b..9625762d80 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json @@ -1,5 +1,5 @@ { - "appContext": "/emm/", + "appContext": "/devicemgt/", "webAgentContext" : "/emm-web-agent/", "apiContext": "api", "httpsURL" : "%https.ip%", From e71d3947cba6eb7dc369481b8920f304f15cba4f Mon Sep 17 00:00:00 2001 From: Rasika Perera Date: Thu, 22 Sep 2016 08:57:34 +0530 Subject: [PATCH 4/8] Adding intuitive error when specified notification provider is not found --- .../DeviceManagementPluginRepository.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementPluginRepository.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementPluginRepository.java index 504d29d5f1..8246c7e283 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementPluginRepository.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementPluginRepository.java @@ -26,6 +26,7 @@ import org.wso2.carbon.device.mgt.common.ProvisioningConfig; import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager; import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy; import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig; +import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationProvider; import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent; @@ -74,7 +75,7 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis } } catch (DeviceManagementException e) { throw new DeviceManagementException("Error occurred while adding device management provider '" + - deviceType + "'", e); + deviceType + "'", e); } if (isSharedWithAllTenants) { DeviceTypeIdentifier deviceTypeIdentifier = new DeviceTypeIdentifier(deviceType); @@ -137,10 +138,16 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); deviceTypeIdentifier = new DeviceTypeIdentifier(deviceManagementService.getType(), tenantId); } + if (pushNoteConfig != null) { - NotificationStrategy notificationStrategy = - DeviceManagementDataHolder.getInstance().getPushNotificationProviderRepository().getProvider( - pushNoteConfig.getType()).getNotificationStrategy(pushNoteConfig); + PushNotificationProvider provider = DeviceManagementDataHolder.getInstance() + .getPushNotificationProviderRepository().getProvider(pushNoteConfig.getType()); + if (provider == null) { + throw new DeviceManagementException( + "No registered push notification provider found for the type: '" + + pushNoteConfig.getType() + "'."); + } + NotificationStrategy notificationStrategy = provider.getNotificationStrategy(pushNoteConfig); operationManagerRepository.addOperationManager(deviceTypeIdentifier, new OperationManagerImpl( notificationStrategy)); } else { @@ -172,7 +179,8 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis deviceTypeName = provider.getType().toLowerCase(); ProvisioningConfig provisioningConfig = provider.getProvisioningConfig(); int tenantId = DeviceManagerUtil.getTenantId(provisioningConfig.getProviderTenantDomain()); - DeviceManagerUtil.registerDeviceType(deviceTypeName, tenantId, provisioningConfig.isSharedWithAllTenants()); + DeviceManagerUtil.registerDeviceType(deviceTypeName, tenantId, + provisioningConfig.isSharedWithAllTenants()); registerPushNotificationStrategy(provider); //TODO: //This is a temporory fix. @@ -180,12 +188,13 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis //until fix that, use following variable to enable and disable of checking user authorization. DeviceManagementDataHolder.getInstance().setRequireDeviceAuthorization(provider.getType(), - provider.getDeviceManager().requireDeviceAuthorization()); + provider.getDeviceManager() + .requireDeviceAuthorization()); } catch (Throwable e) { /* Throwable is caught intentionally as failure of one plugin - due to invalid start up parameters, etc - should not block the initialization of other device management providers */ log.error("Error occurred while initializing device management provider '" + - provider.getType() + "'", e); + provider.getType() + "'", e); } } this.isInited = true; From 1d3f5f39a7c38b2c741c679db8a0bdbb1ad8a239 Mon Sep 17 00:00:00 2001 From: Rasika Perera Date: Thu, 22 Sep 2016 14:33:53 +0530 Subject: [PATCH 5/8] Adding custom headers support to invoker util --- .../oauth/token-protected-service-invokers.js | 77 ++++++++++++------- 1 file changed, 50 insertions(+), 27 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/oauth/token-protected-service-invokers.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/oauth/token-protected-service-invokers.js index 6520a819b5..a743acaae1 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/oauth/token-protected-service-invokers.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/oauth/token-protected-service-invokers.js @@ -66,11 +66,15 @@ var invokers = function () { * @param endpoint Backend REST API url. * @param responseCallback a function to be called with response retrieved. * @param count a counter which hold the number of recursive execution + * @param headers a list of name value pairs for additional http headers */ - privateMethods["execute"] = function (httpMethod, requestPayload, endpoint, responseCallback, count) { + privateMethods["execute"] = function (httpMethod, requestPayload, endpoint, responseCallback, count, headers) { var xmlHttpRequest = new XMLHttpRequest(); xmlHttpRequest.open(httpMethod, endpoint); + for(var i in headers){ + xmlHttpRequest.setRequestHeader(headers[i].name, headers[i].value); + } xmlHttpRequest.setRequestHeader(constants["CONTENT_TYPE_IDENTIFIER"], constants["APPLICATION_JSON"]); xmlHttpRequest.setRequestHeader(constants["ACCEPT_IDENTIFIER"], constants["APPLICATION_JSON"]); @@ -82,7 +86,7 @@ var invokers = function () { }); } else { xmlHttpRequest.setRequestHeader(constants["AUTHORIZATION_HEADER"], - constants["BEARER_PREFIX"] + accessToken); + constants["BEARER_PREFIX"] + accessToken); } } @@ -98,9 +102,9 @@ var invokers = function () { log.debug("Response payload if any : " + xmlHttpRequest.responseText); if (xmlHttpRequest.status == 401 && (xmlHttpRequest.responseText == TOKEN_EXPIRED || - xmlHttpRequest.responseText == TOKEN_INVALID ) && count < 5) { + xmlHttpRequest.responseText == TOKEN_INVALID ) && count < 5) { tokenUtil.refreshTokenPair(); - return privateMethods.execute(httpMethod, requestPayload, endpoint, responseCallback, ++count); + return privateMethods.execute(httpMethod, requestPayload, endpoint, responseCallback, ++count, headers); } else { return responseCallback(xmlHttpRequest); } @@ -113,8 +117,8 @@ var invokers = function () { * @param endpoint Backend REST API url. * @param responseCallback a function to be called with response retrieved. */ - privateMethods["initiateXMLHTTPRequest"] = function (httpMethod, requestPayload, endpoint, responseCallback) { - return privateMethods.execute(httpMethod, requestPayload, endpoint, responseCallback, 0); + privateMethods["initiateXMLHTTPRequest"] = function (httpMethod, requestPayload, endpoint, responseCallback, headers) { + return privateMethods.execute(httpMethod, requestPayload, endpoint, responseCallback, 0, headers); }; /** @@ -122,9 +126,9 @@ var invokers = function () { * @param endpoint Backend REST API url. * @param responseCallback a function to be called with response retrieved. */ - publicXMLHTTPInvokers["get"] = function (endpoint, responseCallback) { + publicXMLHTTPInvokers["get"] = function (endpoint, responseCallback, headers) { var requestPayload = null; - return privateMethods.initiateXMLHTTPRequest(constants["HTTP_GET"], requestPayload, endpoint, responseCallback); + return privateMethods.initiateXMLHTTPRequest(constants["HTTP_GET"], requestPayload, endpoint, responseCallback, headers); }; /** @@ -133,8 +137,8 @@ var invokers = function () { * @param requestPayload payload/data if exists which is needed to be send. * @param responseCallback a function to be called with response retrieved. */ - publicXMLHTTPInvokers["post"] = function (endpoint, requestPayload, responseCallback) { - return privateMethods.initiateXMLHTTPRequest(constants["HTTP_POST"], requestPayload, endpoint, responseCallback); + publicXMLHTTPInvokers["post"] = function (endpoint, requestPayload, responseCallback, headers) { + return privateMethods.initiateXMLHTTPRequest(constants["HTTP_POST"], requestPayload, endpoint, responseCallback, headers); }; /** @@ -143,8 +147,8 @@ var invokers = function () { * @param requestPayload payload/data if exists which is needed to be send. * @param responseCallback a function to be called with response retrieved. */ - publicXMLHTTPInvokers["put"] = function (endpoint, requestPayload, responseCallback) { - return privateMethods.initiateXMLHTTPRequest(constants["HTTP_PUT"], requestPayload, endpoint, responseCallback); + publicXMLHTTPInvokers["put"] = function (endpoint, requestPayload, responseCallback, headers) { + return privateMethods.initiateXMLHTTPRequest(constants["HTTP_PUT"], requestPayload, endpoint, responseCallback, headers); }; /** @@ -152,9 +156,9 @@ var invokers = function () { * @param endpoint Backend REST API url. * @param responseCallback a function to be called with response retrieved. */ - publicXMLHTTPInvokers["delete"] = function (endpoint, responseCallback) { + publicXMLHTTPInvokers["delete"] = function (endpoint, responseCallback, headers) { var requestPayload = null; - return privateMethods.initiateXMLHTTPRequest(constants["HTTP_DELETE"], requestPayload, endpoint, responseCallback); + return privateMethods.initiateXMLHTTPRequest(constants["HTTP_DELETE"], requestPayload, endpoint, responseCallback, headers); }; /** @@ -239,8 +243,9 @@ var invokers = function () { * @param payload payload/data which need to be send. * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. + * @param headers a list of name value pairs for additional http headers. */ - privateMethods["initiateHTTPClientRequest"] = function (method, url, successCallback, errorCallback, payload) { + privateMethods["initiateHTTPClientRequest"] = function (method, url, successCallback, errorCallback, payload, headers) { //noinspection JSUnresolvedVariable var HttpClient = Packages.org.apache.commons.httpclient.HttpClient; var httpMethodObject; @@ -269,6 +274,14 @@ var invokers = function () { //noinspection JSUnresolvedFunction throw new IllegalArgumentException("Invalid HTTP request method: " + method); } + + for(var i in headers){ + var header = new Header(); + header.setName(headers[i].name); + header.setValue(headers[i].value); + httpMethodObject.addRequestHeader(header); + } + //noinspection JSUnresolvedVariable var Header = Packages.org.apache.commons.httpclient.Header; var header = new Header(); @@ -295,15 +308,19 @@ var invokers = function () { } } //noinspection JSUnresolvedFunction - var stringRequestEntity = new StringRequestEntity(stringify(payload)); - //noinspection JSUnresolvedFunction - httpMethodObject.setRequestEntity(stringRequestEntity); + if (payload != null) { + var StringRequestEntity = Packages.org.apache.commons.httpclient.methods.StringRequestEntity; + var stringRequestEntity = new StringRequestEntity(stringify(payload)); + //noinspection JSUnresolvedFunction + httpMethodObject.setRequestEntity(stringRequestEntity); + } var client = new HttpClient(); try { //noinspection JSUnresolvedFunction client.executeMethod(httpMethodObject); //noinspection JSUnresolvedFunction var status = httpMethodObject.getStatusCode(); + new Log().error(status); if (status == 200) { //noinspection JSUnresolvedFunction return successCallback(httpMethodObject.getResponseBody()); @@ -315,7 +332,9 @@ var invokers = function () { return errorCallback(response); } finally { //noinspection JSUnresolvedFunction - method.releaseConnection(); + if (method != constants["HTTP_GET"]) { + method.releaseConnection(); + } } }; @@ -324,11 +343,12 @@ var invokers = function () { * @param url target url. * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. + * @param headers a list of name value pairs for additional http headers. */ - publicHTTPClientInvokers["get"] = function (url, successCallback, errorCallback) { + publicHTTPClientInvokers["get"] = function (url, successCallback, errorCallback, headers) { var requestPayload = null; return privateMethods. - initiateHTTPClientRequest(constants["HTTP_GET"], url, successCallback, errorCallback, requestPayload); + initiateHTTPClientRequest(constants["HTTP_GET"], url, successCallback, errorCallback, requestPayload, headers); }; /** @@ -337,10 +357,11 @@ var invokers = function () { * @param payload payload/data which need to be send. * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. + * @param headers a list of name value pairs for additional http headers. */ - publicHTTPClientInvokers["post"] = function (url, payload, successCallback, errorCallback) { + publicHTTPClientInvokers["post"] = function (url, payload, successCallback, errorCallback, headers) { return privateMethods. - initiateHTTPClientRequest(constants["HTTP_POST"], url, successCallback, errorCallback, payload); + initiateHTTPClientRequest(constants["HTTP_POST"], url, successCallback, errorCallback, payload, headers); }; /** @@ -349,10 +370,11 @@ var invokers = function () { * @param payload payload/data which need to be send. * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. + * @param headers a list of name value pairs for additional http headers. */ - publicHTTPClientInvokers["put"] = function (url, payload, successCallback, errorCallback) { + publicHTTPClientInvokers["put"] = function (url, payload, successCallback, errorCallback, headers) { return privateMethods. - initiateHTTPClientRequest(constants["HTTP_PUT"], url, successCallback, errorCallback, payload); + initiateHTTPClientRequest(constants["HTTP_PUT"], url, successCallback, errorCallback, payload, headers); }; /** @@ -360,11 +382,12 @@ var invokers = function () { * @param url target url. * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. + * @param headers a list of name value pairs for additional http headers. */ - publicHTTPClientInvokers["delete"] = function (url, successCallback, errorCallback) { + publicHTTPClientInvokers["delete"] = function (url, successCallback, errorCallback, headers) { var requestPayload = null; return privateMethods. - initiateHTTPClientRequest(constants["HTTP_DELETE"], url, successCallback, errorCallback, requestPayload); + initiateHTTPClientRequest(constants["HTTP_DELETE"], url, successCallback, errorCallback, requestPayload, headers); }; var publicMethods = {}; From c6c555abc6a270a1ba812981a430f37c894ad97e Mon Sep 17 00:00:00 2001 From: Rasika Perera Date: Thu, 22 Sep 2016 14:34:25 +0530 Subject: [PATCH 6/8] Fixing null pointer issue on mqtt notification strategy implementation --- .../provider/mqtt/MQTTNotificationStrategy.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/mqtt/MQTTNotificationStrategy.java b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/mqtt/MQTTNotificationStrategy.java index ee4105922d..24d43a6ac3 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/mqtt/MQTTNotificationStrategy.java +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/mqtt/MQTTNotificationStrategy.java @@ -20,6 +20,8 @@ package org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.common.push.notification.NotificationContext; import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy; import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig; @@ -32,6 +34,7 @@ import org.wso2.carbon.event.output.adapter.core.exception.OutputEventAdapterExc import java.util.HashMap; import java.util.Map; +import java.util.Properties; public class MQTTNotificationStrategy implements NotificationStrategy { @@ -75,7 +78,16 @@ public class MQTTNotificationStrategy implements NotificationStrategy { @Override public void execute(NotificationContext ctx) throws PushNotificationExecutionFailedException { Map dynamicProperties = new HashMap<>(); - dynamicProperties.put("topic", (String) ctx.getOperation().getProperties().get(MQTT_ADAPTER_TOPIC)); + Properties properties = ctx.getOperation().getProperties(); + if (properties != null && properties.get(MQTT_ADAPTER_TOPIC) != null) { + dynamicProperties.put("topic", (String) properties.get(MQTT_ADAPTER_TOPIC)); + } else { + Operation operation = ctx.getOperation(); + String topic = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true) + "/" + + ctx.getDeviceId().getType() + "/" + ctx.getDeviceId().getId() + "/" + operation.getType(); + dynamicProperties.put("topic", topic); + } + MQTTDataHolder.getInstance().getOutputEventAdapterService().publish(mqttAdapterName, dynamicProperties, ctx.getOperation().getPayLoad()); } From 4691bedbc525d5e60609f38474e99a2dfb762a3f Mon Sep 17 00:00:00 2001 From: Rasika Perera Date: Thu, 22 Sep 2016 14:35:17 +0530 Subject: [PATCH 7/8] Fixes to devices listing --- .../app/pages/cdmf.page.devices/devices.js | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js index d7a19da36b..ae506f4b07 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js @@ -24,22 +24,22 @@ function onRequest(context) { var groupName = request.getParameter("groupName"); var groupOwner = request.getParameter("groupOwner"); - var page = {}; + var viewModel = {}; var title = "Devices"; if (groupName) { title = groupName + " " + title; - page.groupName = groupName; + viewModel.groupName = groupName; } - page.title = title; + viewModel.title = title; var currentUser = session.get(constants.USER_SESSION_KEY); if (currentUser) { - page.permissions = {}; + viewModel.permissions = {}; var uiPermissions = userModule.getUIPermissions(); - page.permissions.list = stringify(uiPermissions); + viewModel.permissions.list = stringify(uiPermissions); if (uiPermissions.ADD_DEVICE) { - page.permissions.enroll = true; + viewModel.permissions.enroll = true; } - page.currentUser = currentUser; + viewModel.currentUser = currentUser; var deviceCount = 0; if (groupName && groupOwner) { var groupModule = require("/app/modules/business-controllers/group.js")["groupModule"]; @@ -48,30 +48,30 @@ function onRequest(context) { deviceCount = deviceModule.getDevicesCount(); } if (deviceCount > 0) { - page.deviceCount = deviceCount; + viewModel.deviceCount = deviceCount; var utility = require("/app/modules/utility.js").utility; var typesListResponse = deviceModule.getDeviceTypes(); var deviceTypes = []; if (typesListResponse["status"] == "success") { - var data = typesListResponse["content"]; + var data = typesListResponse.content.deviceTypes; if (data) { for (var i = 0; i < data.length; i++) { - var config = utility.getDeviceTypeConfig(data[i].name); + var config = utility.getDeviceTypeConfig(data[i]); if (!config) { continue; } var deviceType = config.deviceType; deviceTypes.push({ - "type": data[i].name, - "category": deviceType.category, - "label": deviceType.label, - "thumb": utility.getDeviceThumb(data[i].name) - }); + "type": data[i], + "category": deviceType.category, + "label": deviceType.label, + "thumb": utility.getDeviceThumb(data[i]) + }); } } } - page.deviceTypes = stringify(deviceTypes); + viewModel.deviceTypes = stringify(deviceTypes); } } - return page; + return viewModel; } From 728307defda4856abd8219b0e04c84ee5bd4b368 Mon Sep 17 00:00:00 2001 From: Rasika Perera Date: Thu, 22 Sep 2016 14:57:00 +0530 Subject: [PATCH 8/8] Adding bundle import --- .../pom.xml | 1 + .../notification/provider/mqtt/MQTTNotificationStrategy.java | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml index 54f056436e..4402eacd05 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml @@ -139,6 +139,7 @@ org.wso2.carbon.context, org.wso2.carbon.device.mgt.common.operation.mgt, org.wso2.carbon.device.mgt.common.push.notification, + org.wso2.carbon.device.mgt.common, org.wso2.carbon.device.mgt.core.service, org.wso2.carbon.event.output.adapter.core, org.wso2.carbon.event.output.adapter.core.exception, diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/mqtt/MQTTNotificationStrategy.java b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/mqtt/MQTTNotificationStrategy.java index 24d43a6ac3..29d623b349 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/mqtt/MQTTNotificationStrategy.java +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/mqtt/MQTTNotificationStrategy.java @@ -21,7 +21,6 @@ package org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.common.push.notification.NotificationContext; import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy; import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig; @@ -82,9 +81,8 @@ public class MQTTNotificationStrategy implements NotificationStrategy { if (properties != null && properties.get(MQTT_ADAPTER_TOPIC) != null) { dynamicProperties.put("topic", (String) properties.get(MQTT_ADAPTER_TOPIC)); } else { - Operation operation = ctx.getOperation(); String topic = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true) + "/" - + ctx.getDeviceId().getType() + "/" + ctx.getDeviceId().getId() + "/" + operation.getType(); + + ctx.getDeviceId().getType() + "/" + ctx.getDeviceId().getId() + "/" + ctx.getOperation().getType(); dynamicProperties.put("topic", topic); }