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 29d623b349..fae2658228 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,6 +21,7 @@ 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; @@ -77,17 +78,22 @@ public class MQTTNotificationStrategy implements NotificationStrategy { @Override public void execute(NotificationContext ctx) throws PushNotificationExecutionFailedException { Map dynamicProperties = new HashMap<>(); - Properties properties = ctx.getOperation().getProperties(); + Operation operation = ctx.getOperation(); + Properties properties = operation.getProperties(); if (properties != null && properties.get(MQTT_ADAPTER_TOPIC) != null) { dynamicProperties.put("topic", (String) properties.get(MQTT_ADAPTER_TOPIC)); } else { String topic = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true) + "/" - + ctx.getDeviceId().getType() + "/" + ctx.getDeviceId().getId() + "/" + ctx.getOperation().getType(); + + ctx.getDeviceId().getType() + "/" + ctx.getDeviceId().getId() + "/" + operation.getType() + + "/" + operation.getCode(); dynamicProperties.put("topic", topic); + if (operation.getPayLoad() == null) { + operation.setPayLoad(""); + } } MQTTDataHolder.getInstance().getOutputEventAdapterService().publish(mqttAdapterName, dynamicProperties, - ctx.getOperation().getPayLoad()); + operation.getPayLoad()); } @Override diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceTypeManagementService.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceTypeManagementService.java index 79fbf42489..8aa54a5378 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceTypeManagementService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceTypeManagementService.java @@ -18,17 +18,29 @@ */ package org.wso2.carbon.device.mgt.jaxrs.service.api; -import io.swagger.annotations.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.ResponseHeader; import org.wso2.carbon.apimgt.annotations.api.API; import org.wso2.carbon.apimgt.annotations.api.Permission; import org.wso2.carbon.device.mgt.jaxrs.beans.DeviceTypeList; import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse; -import javax.ws.rs.*; +import javax.validation.constraints.Size; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -@API(name = "Device Type Management", version = "1.0.0", context = "/api/device-mgt/v1.0/admin/device-types", tags = {"devicemgt_admin"}) +@API(name = "Device Type Management", version = "1.0.0", context = "/api/device-mgt/v1.0/admin/device-types", + tags = {"devicemgt_admin"}) @Path("/device-types") @Api(value = "Device Type Management", description = "This API corresponds to all tasks related to device " + @@ -60,14 +72,17 @@ public interface DeviceTypeManagementService { "Used by caches, or in conditional requests."), @ResponseHeader( name = "Last-Modified", - description = "Date and time the resource has been modified the last time.\n" + - "Used by caches, or in conditional requests."), + description = + "Date and time the resource has been modified the last time.\n" + + "Used by caches, or in conditional requests."), } ), @ApiResponse( code = 304, - message = "Not Modified. \n Empty body because the client has already the latest version of " + - "the requested resource."), + message = + "Not Modified. \n Empty body because the client has already the latest version of" + + " " + + "the requested resource."), @ApiResponse( code = 406, message = "Not Acceptable.\n The requested media type is not supported"), @@ -85,6 +100,66 @@ public interface DeviceTypeManagementService { value = "Validates if the requested variant has not been modified since the time specified", required = false) @HeaderParam("If-Modified-Since") - String ifModifiedSince); + String ifModifiedSince); + + @GET + @ApiOperation( + produces = MediaType.APPLICATION_JSON, + httpMethod = "GET", + value = "Get the list of features for a give device type.", + notes = "Retrieves the list of features of a given device type.", + tags = "Device Type Management") + @ApiResponses( + value = { + @ApiResponse( + code = 200, + message = "OK. \n Successfully fetched the list of supported features.", + response = DeviceTypeList.class, + responseHeaders = { + @ResponseHeader( + name = "Content-Type", + description = "The content type of the body"), + @ResponseHeader( + name = "ETag", + description = "Entity Tag of the response resource.\n" + + "Used by caches, or in conditional requests."), + @ResponseHeader( + name = "Last-Modified", + description = + "Date and time the resource has been modified the last time.\n" + + "Used by caches, or in conditional requests."), + } + ), + @ApiResponse( + code = 304, + message = + "Not Modified. \n Empty body because the client has already the latest version of" + + " " + + "the requested resource."), + @ApiResponse( + code = 406, + message = "Not Acceptable.\n The requested media type is not supported"), + @ApiResponse( + code = 500, + message = "Internal Server Error. \n Server error occurred while fetching the " + + "list of supported device types.", + response = ErrorResponse.class) + } + ) + @Permission(name = "View Device Types", permission = "/device-mgt/devices/owning-device/view") + Response getFeatures( + @ApiParam( + name = "type", + value = "The device type, such as ios, android or windows.", + required = true) + @PathParam("type") + @Size(max = 45) + String type, + @ApiParam( + name = "If-Modified-Since", + value = "Validates if the requested variant has not been modified since the time specified", + required = false) + @HeaderParam("If-Modified-Since") + String ifModifiedSince); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/GroupManagementService.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/GroupManagementService.java index cf5b2882fa..f21d1c9a4b 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/GroupManagementService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/GroupManagementService.java @@ -18,85 +18,96 @@ */ package org.wso2.carbon.device.mgt.jaxrs.service.api; -import org.wso2.carbon.apimgt.annotations.api.Scope; +import org.wso2.carbon.apimgt.annotations.api.API; +import org.wso2.carbon.apimgt.annotations.api.Permission; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -//@Path("/groups") -//@Produces(MediaType.APPLICATION_JSON) -//@Consumes(MediaType.APPLICATION_JSON) +@API(name = "Group Management", version = "1.0.0", context = "/api/device-mgt/v1.0/groups", tags = {"devicemgt_admin"}) + +@Path("/groups") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) public interface GroupManagementService { -// @GET -// @Permission(scope = "group-view", permissions = {"/permission/admin/device-mgt/user/groups/list"}) -// Response getGroups(@QueryParam("user") String user, @QueryParam("offset") int offset, -// @QueryParam("limit") int limit); -// -// @POST -// @Permission(scope = "group-add", permissions = {"/permission/admin/device-mgt/user/groups/add"}) -// Response createGroup(DeviceGroup group); -// -// @Path("/{groupName}") -// @GET -// @Permission(scope = "group-view", permissions = {"/permission/admin/device-mgt/user/groups/view"}) -// Response getGroup(@PathParam("groupName") String groupName); -// -// @Path("/{groupName}") -// @PUT -// @Permission(scope = "group-modify", permissions = {"/permission/admin/device-mgt/user/groups/update"}) -// Response updateGroup(@PathParam("groupName") String groupName, DeviceGroup deviceGroup); -// -// @Path("/{groupName}") -// @DELETE -// @Permission(scope = "group-remove", permissions = {"/permission/admin/device-mgt/user/groups/remove"}) -// Response deleteGroup(@PathParam("groupName") String groupName); -// -// @Path("/{groupName}/share-with-user") -// @POST -// @Permission(scope = "group-share", permissions = {"/permission/admin/device-mgt/user/groups/share"}) -// Response shareGroupWithUser(@PathParam("groupName") String groupName, String targetUser); -// -// @Path("/{groupName}/share-with-role") -// @POST -// @Permission(scope = "group-share", permissions = {"/permission/admin/device-mgt/user/groups/share"}) -// Response shareGroupWithRole(@PathParam("groupName") String groupName, String targetRole); -// -// @Path("/{groupName}/remove-share-with-user") -// @POST -// @Permission(scope = "group-share", permissions = {"/permission/admin/device-mgt/user/groups/unshare"}) -// Response removeShareWithUser(@PathParam("groupName") String groupName, String targetUser); -// -// @Path("/{groupName}/remove-share-with-role") -// @POST -// @Permission(scope = "group-share", permissions = {"/permission/admin/device-mgt/user/groups/unshare"}) -// Response removeShareWithRole(@PathParam("groupName") String groupName, String targetUser); -// -// @GET -// @Path("/{groupName}/users") -// @Permission(scope = "group-view", permissions = {"/permission/admin/device-mgt/user/groups/list"}) -// Response getUsersOfGroup(@PathParam("groupName") String groupName); -// -// @GET -// @Path("/{groupName}/devices") -// @Permission(scope = "group-view", permissions = {"/permission/admin/device-mgt/groups/roles"}) -// Response getDevicesOfGroup(@PathParam("groupName") String groupName, @QueryParam("offset") int offset, -// @QueryParam("limit") int limit); -// -// @POST -// @Path("/{groupName}/devices") -// @Produces("application/json") -// @Permission(scope = "group-add", permissions = {"/permission/admin/device-mgt/user/groups/devices/add"}) -// Response addDeviceToGroup(@PathParam("groupName") String groupName, DeviceIdentifier deviceIdentifier); -// -// @DELETE -// @Path("/{groupName}/devices") -// @Permission(scope = "group-remove", permissions = {"/permission/admin/device-mgt/user/groups/devices/remove"}) -// Response removeDeviceFromGroup(@PathParam("groupName") String groupName, @QueryParam("type") String type, -// @QueryParam("id") String id); + @GET + @Permission(name = "View Group", permission = "/permission/admin/device-mgt/user/groups/list") + Response getGroups(@QueryParam("user") String user, @QueryParam("offset") int offset, + @QueryParam("limit") int limit); + + @POST + @Permission(name = "Add Group", permission = "/permission/admin/device-mgt/user/groups/add") + Response createGroup(DeviceGroup group); + + @Path("/{groupName}") + @GET + @Permission(name = "View Group", permission = "/permission/admin/device-mgt/user/groups/view") + Response getGroup(@PathParam("groupName") String groupName); + + @Path("/{groupName}") + @PUT + @Permission(name = "Update Group", permission = "/permission/admin/device-mgt/user/groups/update") + Response updateGroup(@PathParam("groupName") String groupName, DeviceGroup deviceGroup); + + @Path("/{groupName}") + @DELETE + @Permission(name = "Remove Groups", permission = "/permission/admin/device-mgt/user/groups/remove") + Response deleteGroup(@PathParam("groupName") String groupName); + + @Path("/{groupName}/share-with-user") + @POST + @Permission(name = "Share Group to a User", permission = "/permission/admin/device-mgt/user/groups/share") + Response shareGroupWithUser(@PathParam("groupName") String groupName, String targetUser); + + @Path("/{groupName}/share-with-role") + @POST + @Permission(name = "Share Group to a Role", permission = "/permission/admin/device-mgt/user/groups/share") + Response shareGroupWithRole(@PathParam("groupName") String groupName, String targetRole); + + @Path("/{groupName}/remove-share-with-user") + @POST + @Permission(name = "Unshare a Group", permission = "/permission/admin/device-mgt/user/groups/unshare") + Response removeShareWithUser(@PathParam("groupName") String groupName, String targetUser); + + @Path("/{groupName}/remove-share-with-role") + @POST + @Permission(name = "Unshare a Group", permission = "/permission/admin/device-mgt/user/groups/unshare") + Response removeShareWithRole(@PathParam("groupName") String groupName, String targetUser); + + @GET + @Path("/{groupName}/users") + @Permission(name = "Get Users of Group", permission = "/permission/admin/device-mgt/user/groups/list") + Response getUsersOfGroup(@PathParam("groupName") String groupName); + + @GET + @Path("/{groupName}/devices") + @Permission(name = "Get Devices of Group", permission = "/permission/admin/device-mgt/groups/roles") + Response getDevicesOfGroup(@PathParam("groupName") String groupName, @QueryParam("offset") int offset, + @QueryParam("limit") int limit); + + @POST + @Path("/{groupName}/devices") + @Produces("application/json") + @Permission(name = "Add Device to a Group", permission = "/permission/admin/device-mgt/user/groups/devices/add") + Response addDeviceToGroup(@PathParam("groupName") String groupName, DeviceIdentifier deviceIdentifier); + @DELETE + @Path("/{groupName}/devices") + @Permission(name = "Remove Devices from Group", + permission = "/permission/admin/device-mgt/user/groups/devices/remove") + Response removeDeviceFromGroup(@PathParam("groupName") String groupName, @QueryParam("type") String type, + @QueryParam("id") String id); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java index 0580d8504d..885005944a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java @@ -18,82 +18,92 @@ */ package org.wso2.carbon.device.mgt.jaxrs.service.api.admin; -import io.swagger.annotations.*; -import org.wso2.carbon.apimgt.annotations.api.Scope; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.ResponseHeader; +import org.wso2.carbon.apimgt.annotations.api.API; +import org.wso2.carbon.apimgt.annotations.api.Permission; import org.wso2.carbon.policy.mgt.common.DeviceGroupWrapper; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.util.Date; -//@Path("/admin/groups") -//@Produces(MediaType.APPLICATION_JSON) -//@Consumes(MediaType.APPLICATION_JSON) -//@Api(value = "Group Management Administrative Service", description = "This an API intended to be used by " + -// "'internal' components to log in as an admin user and do a selected number of operations. " + -// "Further, this is strictly restricted to admin users only ") -public interface GroupManagementAdminService { - -// @GET -// @ApiOperation( -// produces = MediaType.APPLICATION_JSON, -// httpMethod = "GET", -// value = "Get groups by the name.", -// notes = "Get devices the name of device and tenant.", -// response = DeviceGroupWrapper.class, -// responseContainer = "List", -// tags = "Group Management Administrative Service") -// @ApiResponses(value = { -// @ApiResponse(code = 200, message = "OK. \n Successfully fetched the list of groups.", -// response = DeviceGroupWrapper.class, -// responseContainer = "List", -// responseHeaders = { -// @ResponseHeader( -// name = "Content-Type", -// description = "The content type of the body"), -// @ResponseHeader( -// name = "ETag", -// description = "Entity Tag of the response resource.\n" + -// "Used by caches, or in conditional requests."), -// @ResponseHeader( -// name = "Last-Modified", -// description = "Date and time the resource has been modified the last time.\n" + -// "Used by caches, or in conditional requests."), -// }), -// @ApiResponse( -// code = 304, -// message = "Not Modified. \n Empty body because the client has already the latest version of the requested resource."), -// @ApiResponse( -// code = 406, -// message = "Not Acceptable.\n The requested media type is not supported"), -// @ApiResponse( -// code = 500, -// message = "Internal Server ErrorResponse. \n Server error occurred while fetching the group list.") -// }) -// @Permission(scope = "group-view", permissions = {"/permission/admin/device-mgt/user/groups/list"}) -// Response getGroupsOfUser( -// @ApiParam( -// name = "username", -// value = "Username of the user.", -// required = true) -// @QueryParam("username") String username, -// @ApiParam( -// name = "If-Modified-Since", -// value = "Timestamp of the last modified date", -// required = false) -// @HeaderParam("If-Modified-Since") String timestamp, -// @ApiParam( -// name = "offset", -// value = "Starting point within the complete list of items qualified.", -// required = false) -// @QueryParam("offset") int offset, -// @ApiParam( -// name = "limit", -// value = "Maximum size of resource array to return.", -// required = false) -// @QueryParam("limit") int limit); -// +@API(name = "Group Management Admin", version = "1.0.0", context = "/api/device-mgt/v1.0/admin/groups", tags = {"devicemgt_admin"}) +@Path("/admin/groups") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +@Api(value = "Group Management Administrative Service", description = "This an API intended to be used by " + + "'internal' components to log in as an admin user and do a selected number of operations. " + + "Further, this is strictly restricted to admin users only ") +public interface GroupManagementAdminService { + @GET + @ApiOperation( + produces = MediaType.APPLICATION_JSON, + httpMethod = "GET", + value = "Get groups by the name.", + notes = "Get devices the name of device and tenant.", + response = DeviceGroupWrapper.class, + responseContainer = "List", + tags = "Group Management Administrative Service") + @ApiResponses(value = { + @ApiResponse(code = 200, message = "OK. \n Successfully fetched the list of groups.", + response = DeviceGroupWrapper.class, + responseContainer = "List", + responseHeaders = { + @ResponseHeader( + name = "Content-Type", + description = "The content type of the body"), + @ResponseHeader( + name = "ETag", + description = "Entity Tag of the response resource.\n" + + "Used by caches, or in conditional requests."), + @ResponseHeader( + name = "Last-Modified", + description = "Date and time the resource has been modified the last time.\n" + + "Used by caches, or in conditional requests."), + }), + @ApiResponse( + code = 304, + message = "Not Modified. \n Empty body because the client has already the latest version of the " + + "requested resource."), + @ApiResponse( + code = 406, + message = "Not Acceptable.\n The requested media type is not supported"), + @ApiResponse( + code = 500, + message = "Internal Server ErrorResponse. \n Server error occurred while fetching the group list.") + }) + @Permission(name = "View All Groups", permission = "/permission/admin/device-mgt/user/groups/list") + Response getGroupsOfUser( + @ApiParam( + name = "username", + value = "Username of the user.", + required = true) + @QueryParam("username") String username, + @ApiParam( + name = "If-Modified-Since", + value = "Timestamp of the last modified date", + required = false) + @HeaderParam("If-Modified-Since") String timestamp, + @ApiParam( + name = "offset", + value = "Starting point within the complete list of items qualified.", + required = false) + @QueryParam("offset") int offset, + @ApiParam( + name = "limit", + value = "Maximum size of resource array to return.", + required = false) + @QueryParam("limit") int limit); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/DeviceTypeManagementServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/DeviceTypeManagementServiceImpl.java index e38f02a027..3bd43681e9 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/DeviceTypeManagementServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/DeviceTypeManagementServiceImpl.java @@ -21,14 +21,20 @@ package org.wso2.carbon.device.mgt.jaxrs.service.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.common.Feature; +import org.wso2.carbon.device.mgt.common.FeatureManager; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; import org.wso2.carbon.device.mgt.jaxrs.beans.DeviceTypeList; import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse; import org.wso2.carbon.device.mgt.jaxrs.service.api.DeviceTypeManagementService; +import org.wso2.carbon.device.mgt.jaxrs.service.impl.util.RequestValidationUtil; import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils; +import javax.validation.constraints.Size; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; import java.util.List; @@ -56,4 +62,28 @@ public class DeviceTypeManagementServiceImpl implements DeviceTypeManagementServ } } + @GET + @Override + @Path("/{type}/features") + public Response getFeatures(@PathParam("type") @Size(max = 45) String type, @HeaderParam("If-Modified-Since") String ifModifiedSince) { + List features; + DeviceManagementProviderService dms; + try { + dms = DeviceMgtAPIUtils.getDeviceManagementService(); + FeatureManager fm = dms.getFeatureManager(type); + if (fm == null) { + return Response.status(Response.Status.NOT_FOUND).entity( + new ErrorResponse.ErrorResponseBuilder().setMessage("No feature manager is " + + "registered with the given type '" + type + "'").build()).build(); + } + features = fm.getFeatures(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while retrieving the list of features of '" + type + "' device type"; + log.error(msg, e); + return Response.serverError().entity( + new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build(); + } + return Response.status(Response.Status.OK).entity(features).build(); + } + } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java index 0b12ebb687..10e6fef2c9 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java @@ -18,10 +18,6 @@ */ package org.wso2.carbon.device.mgt.jaxrs.service.impl; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; -import org.wso2.carbon.device.mgt.jaxrs.service.api.GroupManagementService; -import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; @@ -33,105 +29,108 @@ import org.wso2.carbon.device.mgt.jaxrs.service.api.GroupManagementService; import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils; import org.wso2.carbon.policy.mgt.common.DeviceGroupWrapper; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.List; -//@Path("/groups") -//@Produces(MediaType.APPLICATION_JSON) -//@Consumes(MediaType.APPLICATION_JSON) +@Path("/groups") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) public class GroupManagementServiceImpl implements GroupManagementService { -// private static final Log log = LogFactory.getLog(GroupManagementServiceImpl.class); -// -// @Override -// public Response getGroups(@QueryParam("user") String user, @QueryParam("offset") int offset, -// @QueryParam("limit") int limit) { -// try { -// List groupWrappers = new ArrayList<>(); -// GroupManagementProviderService service = DeviceMgtAPIUtils.getGroupManagementProviderService(); -// List deviceGroups = service.getGroups(user); -// int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); -// for (DeviceGroup dg : deviceGroups) { -// DeviceGroupWrapper gw = new DeviceGroupWrapper(); -// gw.setId(dg.getId()); -// gw.setOwner(dg.getOwner()); -// gw.setName(dg.getName()); -// gw.setTenantId(tenantId); -// groupWrappers.add(gw); -// } -// return Response.status(Response.Status.OK).entity(groupWrappers).build(); -// } catch (GroupManagementException e) { -// String error = "ErrorResponse occurred while getting the groups related to users for policy."; -// log.error(error, e); -// return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build(); -// } -// } -// -// @Override -// public Response createGroup(DeviceGroup group) { -// return null; -// } -// -// @Override -// public Response getGroup(@PathParam("groupName") String groupName) { -// return null; -// } -// -// @Override -// public Response updateGroup(@PathParam("groupName") String groupName, DeviceGroup deviceGroup) { -// return null; -// } -// -// @Override -// public Response deleteGroup(@PathParam("groupName") String groupName) { -// return null; -// } -// -// @Override -// public Response shareGroupWithUser(String groupName, String targetUser) { -// return null; -// } -// -// @Override -// public Response shareGroupWithRole(String groupName, String targetRole) { -// return null; -// } -// -// @Override -// public Response removeShareWithUser(@PathParam("groupName") String groupName, -// @QueryParam("username") String targetUser) { -// return null; -// } -// -// @Override -// public Response removeShareWithRole(@PathParam("groupName") String groupName, -// @QueryParam("roleName") String targetUser) { -// return null; -// } -// -// @Override -// public Response getUsersOfGroup(@PathParam("groupName") String groupName) { -// return null; -// } -// -// @Override -// public Response getDevicesOfGroup(@PathParam("groupName") String groupName, @QueryParam("offset") int offset, -// @QueryParam("limit") int limit) { -// return null; -// } -// -// @Override -// public Response addDeviceToGroup(@PathParam("groupName") String groupName, DeviceIdentifier deviceIdentifier) { -// return null; -// } -// -// @Override -// public Response removeDeviceFromGroup(@PathParam("groupName") String groupName, @QueryParam("type") String type, -// @QueryParam("id") String id) { -// return null; -// } - -} + private static final Log log = LogFactory.getLog(GroupManagementServiceImpl.class); + + @Override + public Response getGroups(@QueryParam("user") String user, @QueryParam("offset") int offset, + @QueryParam("limit") int limit) { + try { + List groupWrappers = new ArrayList<>(); + GroupManagementProviderService service = DeviceMgtAPIUtils.getGroupManagementProviderService(); + List deviceGroups = service.getGroups(user); + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + for (DeviceGroup dg : deviceGroups) { + DeviceGroupWrapper gw = new DeviceGroupWrapper(); + gw.setId(dg.getId()); + gw.setOwner(dg.getOwner()); + gw.setName(dg.getName()); + gw.setTenantId(tenantId); + groupWrappers.add(gw); + } + return Response.status(Response.Status.OK).entity(groupWrappers).build(); + } catch (GroupManagementException e) { + String error = "ErrorResponse occurred while getting the groups related to users for policy."; + log.error(error, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build(); + } + } + + @Override + public Response createGroup(DeviceGroup group) { + return null; + } + + @Override + public Response getGroup(@PathParam("groupName") String groupName) { + return null; + } + + @Override + public Response updateGroup(@PathParam("groupName") String groupName, DeviceGroup deviceGroup) { + return null; + } + + @Override + public Response deleteGroup(@PathParam("groupName") String groupName) { + return null; + } + + @Override + public Response shareGroupWithUser(String groupName, String targetUser) { + return null; + } + + @Override + public Response shareGroupWithRole(String groupName, String targetRole) { + return null; + } + + @Override + public Response removeShareWithUser(@PathParam("groupName") String groupName, + @QueryParam("username") String targetUser) { + return null; + } + + @Override + public Response removeShareWithRole(@PathParam("groupName") String groupName, + @QueryParam("roleName") String targetUser) { + return null; + } + + @Override + public Response getUsersOfGroup(@PathParam("groupName") String groupName) { + return null; + } + + @Override + public Response getDevicesOfGroup(@PathParam("groupName") String groupName, @QueryParam("offset") int offset, + @QueryParam("limit") int limit) { + return null; + } + + @Override + public Response addDeviceToGroup(@PathParam("groupName") String groupName, DeviceIdentifier deviceIdentifier) { + return null; + } + + @Override + public Response removeDeviceFromGroup(@PathParam("groupName") String groupName, @QueryParam("type") String type, + @QueryParam("id") String id) { + return null; + } +} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java index 7573df0f5e..9cf5253c2c 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java @@ -18,7 +18,6 @@ */ package org.wso2.carbon.device.mgt.jaxrs.service.impl.admin; -import io.swagger.annotations.ApiParam; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.PaginationResult; @@ -26,37 +25,42 @@ import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException; import org.wso2.carbon.device.mgt.jaxrs.service.api.admin.GroupManagementAdminService; import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.util.Date; -//@Path("/admin/groups") -//@Produces(MediaType.APPLICATION_JSON) -//@Consumes(MediaType.APPLICATION_JSON) +@Path("/admin/groups") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) public class GroupManagementAdminServiceImpl implements GroupManagementAdminService { -// -// private static final Log log = LogFactory.getLog(GroupManagementAdminServiceImpl.class); -// -// @Override -// public Response getGroupsOfUser( -// @QueryParam("username") String username, -// @HeaderParam("If-Modified-Since") String timestamp, -// @QueryParam("offset") int offset, -// @QueryParam("limit") int limit) { -// try { -// PaginationResult result = -// DeviceMgtAPIUtils.getGroupManagementProviderService().getGroups(username, offset, limit); -// if (result != null && result.getRecordsTotal() > 0) { -// return Response.status(Response.Status.OK).entity(result).build(); -// } else { -// return Response.status(Response.Status.NOT_FOUND).build(); -// } -// } catch (GroupManagementException e) { -// String msg = "ErrorResponse occurred while retrieving the groups of user '" + username + "'"; -// log.error(msg, e); -// return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); -// } -// } + + private static final Log log = LogFactory.getLog(GroupManagementAdminServiceImpl.class); + + @GET + @Override + public Response getGroupsOfUser( + @QueryParam("username") String username, + @HeaderParam("If-Modified-Since") String timestamp, + @QueryParam("offset") int offset, + @QueryParam("limit") int limit) { + try { + PaginationResult result = + DeviceMgtAPIUtils.getGroupManagementProviderService().getGroups(username, offset, limit); + if (result != null && result.getRecordsTotal() > 0) { + return Response.status(Response.Status.OK).entity(result).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + String msg = "ErrorResponse occurred while retrieving the groups of user '" + username + "'"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml index 8405fb99fc..a5f5ed308a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -73,7 +73,7 @@ - + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml index ad937f4a86..87ca742be5 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml @@ -48,10 +48,10 @@ org.wso2.carbon.device.mgt.common.* - javax.xml.bind.annotation, + javax.xml.bind.annotation; version="${javax.xml.bind.imp.pkg.version}", com.fasterxml.jackson.annotation;version="${jackson-annotations.version}", org.wso2.carbon.apimgt.api.model.*;version="${carbon.api.mgt.version.range}", - io.swagger.annotations.*;resolution:=optional + io.swagger.annotations; version="${swagger.annotations.version}" diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/push/notification/mgt/PushNotificationBasedOperationManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/push/notification/mgt/PushNotificationBasedOperationManager.java index 7ba75c60c0..6f0f020482 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/push/notification/mgt/PushNotificationBasedOperationManager.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/push/notification/mgt/PushNotificationBasedOperationManager.java @@ -46,7 +46,7 @@ public class PushNotificationBasedOperationManager implements OperationManager { Activity activity = this.operationManager.addOperation(operation, devices); for (DeviceIdentifier deviceId : devices) { try { - this.notificationProvider.execute(new NotificationContext(deviceId)); + this.notificationProvider.execute(new NotificationContext(deviceId, operation)); } catch (PushNotificationExecutionFailedException e) { throw new OperationManagementException("Error occurred while sending push notification to device", e); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/device.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/device.js index 6f57d8ae56..f38e2b69fa 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/device.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/device.js @@ -104,10 +104,12 @@ deviceModule = function () { if (device["properties"] && device["properties"].length > 0) { var propertiesList = device["properties"]; var properties = {}; - for (var i = 0; i < propertiesList.length; i++) { - if (propertiesList[i]["value"]) { - properties[propertiesList[i]["name"]] = - propertiesList[i]["value"]; + if (propertiesList) { + for (var i = 0; i < propertiesList.length; i++) { + if (propertiesList[i]["value"]) { + properties[propertiesList[i]["name"]] = + propertiesList[i]["value"]; + } } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/operation.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/operation.js index 6be734ec27..c34cc04302 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/operation.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/operation.js @@ -38,42 +38,42 @@ var operationModule = function () { } privateMethods.getOperationsFromFeatures = function (deviceType, operationType) { - var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/features/" + deviceType; + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/device-types/" + deviceType + "/features"; var featuresList = serviceInvokers.XMLHttp.get(url, function (responsePayload) { - var features = responsePayload; - var featureList = []; - var feature; - for (var i = 0; i < features.length; i++) { - feature = {}; - var analyticStreams = utility.getDeviceTypeConfig(deviceType)["analyticStreams"]; - if (analyticStreams) { - for (var stream in analyticStreams) { - if (analyticStreams[stream].name == features[i].name) { - feature.ui_unit = analyticStreams[stream].ui_unit; - break; - } - } - } + var features = JSON.parse(responsePayload.responseText); + var featureList = []; + var feature; + for (var i = 0; i < features.length; i++) { + feature = {}; + var analyticStreams = utility.getDeviceTypeConfig(deviceType)["analyticStreams"]; + if (analyticStreams) { + for (var stream in analyticStreams) { + if (analyticStreams[stream].name == features[i].name) { + feature.ui_unit = analyticStreams[stream].ui_unit; + break; + } + } + } - feature["operation"] = features[i].code; - feature["name"] = features[i].name; - feature["description"] = features[i].description; - feature["deviceType"] = deviceType; - feature["params"] = []; - var metaData = features[i].metadataEntries; - if (metaData) { - for (var j = 0; j < metaData.length; j++) { - feature["params"].push(metaData[j].value); - } - featureList.push(feature); - } - } - return featureList; - }, function (responsePayload) { - var response = {}; - response["status"] = "error"; - return response; - } + feature["operation"] = features[i].code; + feature["name"] = features[i].name; + feature["description"] = features[i].description; + feature["deviceType"] = deviceType; + feature["params"] = []; + var metaData = features[i].metadataEntries; + if (metaData) { + for (var j = 0; j < metaData.length; j++) { + feature["params"].push(metaData[j].value); + } + featureList.push(feature); + } + } + return featureList; + }, function (responsePayload) { + var response = {}; + response["status"] = "error"; + return response; + } ); return featuresList; }; 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 d4fdbc3e89..1600618775 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 @@ -72,7 +72,7 @@ var invokers = function () { var xmlHttpRequest = new XMLHttpRequest(); xmlHttpRequest.open(httpMethod, endpoint); - for(var i in headers){ + for (var i in headers) { xmlHttpRequest.setRequestHeader(headers[i].name, headers[i].value); } xmlHttpRequest.setRequestHeader(constants["CONTENT_TYPE_IDENTIFIER"], constants["APPLICATION_JSON"]); @@ -117,9 +117,10 @@ 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, headers) { - return privateMethods.execute(httpMethod, requestPayload, endpoint, responseCallback, 0, headers); - }; + privateMethods["initiateXMLHTTPRequest"] = + function (httpMethod, requestPayload, endpoint, responseCallback, headers) { + return privateMethods.execute(httpMethod, requestPayload, endpoint, responseCallback, 0, headers); + }; /** * This method invokes return initiateXMLHttpRequest for get calls. @@ -128,7 +129,8 @@ var invokers = function () { */ publicXMLHTTPInvokers["get"] = function (endpoint, responseCallback, headers) { var requestPayload = null; - return privateMethods.initiateXMLHTTPRequest(constants["HTTP_GET"], requestPayload, endpoint, responseCallback, headers); + return privateMethods.initiateXMLHTTPRequest(constants["HTTP_GET"], requestPayload, endpoint, responseCallback, + headers); }; /** @@ -138,7 +140,8 @@ var invokers = function () { * @param responseCallback a function to be called with response retrieved. */ publicXMLHTTPInvokers["post"] = function (endpoint, requestPayload, responseCallback, headers) { - return privateMethods.initiateXMLHTTPRequest(constants["HTTP_POST"], requestPayload, endpoint, responseCallback, headers); + return privateMethods.initiateXMLHTTPRequest(constants["HTTP_POST"], requestPayload, endpoint, responseCallback, + headers); }; /** @@ -148,7 +151,8 @@ var invokers = function () { * @param responseCallback a function to be called with response retrieved. */ publicXMLHTTPInvokers["put"] = function (endpoint, requestPayload, responseCallback, headers) { - return privateMethods.initiateXMLHTTPRequest(constants["HTTP_PUT"], requestPayload, endpoint, responseCallback, headers); + return privateMethods.initiateXMLHTTPRequest(constants["HTTP_PUT"], requestPayload, endpoint, responseCallback, + headers); }; /** @@ -158,7 +162,8 @@ var invokers = function () { */ publicXMLHTTPInvokers["delete"] = function (endpoint, responseCallback, headers) { var requestPayload = null; - return privateMethods.initiateXMLHTTPRequest(constants["HTTP_DELETE"], requestPayload, endpoint, responseCallback, headers); + return privateMethods.initiateXMLHTTPRequest(constants["HTTP_DELETE"], requestPayload, endpoint, + responseCallback, headers); }; /** @@ -245,100 +250,105 @@ var invokers = function () { * @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, headers) { - //noinspection JSUnresolvedVariable - var HttpClient = Packages.org.apache.commons.httpclient.HttpClient; - var httpMethodObject; - switch (method) { - case constants["HTTP_GET"]: - //noinspection JSUnresolvedVariable - var GetMethod = Packages.org.apache.commons.httpclient.methods.GetMethod; - httpMethodObject = new GetMethod(url); - break; - case constants["HTTP_POST"]: - //noinspection JSUnresolvedVariable - var PostMethod = Packages.org.apache.commons.httpclient.methods.PostMethod; - httpMethodObject = new PostMethod(url); - break; - case constants["HTTP_PUT"]: - //noinspection JSUnresolvedVariable - var PutMethod = Packages.org.apache.commons.httpclient.methods.PutMethod; - httpMethodObject = new PutMethod(url); - break; - case constants["HTTP_DELETE"]: - //noinspection JSUnresolvedVariable - var DeleteMethod = Packages.org.apache.commons.httpclient.methods.DeleteMethod; - httpMethodObject = new DeleteMethod(url); - break; - default: - //noinspection JSUnresolvedFunction - throw new IllegalArgumentException("Invalid HTTP request method: " + method); - } - - //noinspection JSUnresolvedVariable - var Header = Packages.org.apache.commons.httpclient.Header; - for(var i in headers){ - var header = new Header(); - header.setName(headers[i].name); - header.setValue(headers[i].value); - httpMethodObject.addRequestHeader(header); - } - - var header = new Header(); - header.setName(constants["CONTENT_TYPE_IDENTIFIER"]); - header.setValue(constants["APPLICATION_JSON"]); - //noinspection JSUnresolvedFunction - httpMethodObject.addRequestHeader(header); - header = new Header(); - header.setName(constants["ACCEPT_IDENTIFIER"]); - header.setValue(constants["APPLICATION_JSON"]); - //noinspection JSUnresolvedFunction - httpMethodObject.addRequestHeader(header); + privateMethods["initiateHTTPClientRequest"] = + function (method, url, successCallback, errorCallback, payload, headers) { + //noinspection JSUnresolvedVariable + var HttpClient = Packages.org.apache.commons.httpclient.HttpClient; + var httpMethodObject; + switch (method) { + case constants["HTTP_GET"]: + //noinspection JSUnresolvedVariable + var GetMethod = Packages.org.apache.commons.httpclient.methods.GetMethod; + httpMethodObject = new GetMethod(url); + break; + case constants["HTTP_POST"]: + //noinspection JSUnresolvedVariable + var PostMethod = Packages.org.apache.commons.httpclient.methods.PostMethod; + httpMethodObject = new PostMethod(url); + break; + case constants["HTTP_PUT"]: + //noinspection JSUnresolvedVariable + var PutMethod = Packages.org.apache.commons.httpclient.methods.PutMethod; + httpMethodObject = new PutMethod(url); + break; + case constants["HTTP_DELETE"]: + //noinspection JSUnresolvedVariable + var DeleteMethod = Packages.org.apache.commons.httpclient.methods.DeleteMethod; + httpMethodObject = new DeleteMethod(url); + break; + default: + //noinspection JSUnresolvedFunction + throw new IllegalArgumentException("Invalid HTTP request method: " + method); + } - if (devicemgtProps["isOAuthEnabled"]) { - var accessToken = privateMethods.getAccessToken(); - if (accessToken) { - header = new Header(); - header.setName(constants["AUTHORIZATION_HEADER"]); - header.setValue(constants["BEARER_PREFIX"] + accessToken); - //noinspection JSUnresolvedFunction + //noinspection JSUnresolvedVariable + var Header = Packages.org.apache.commons.httpclient.Header; + for (var i in headers) { + var header = new Header(); + header.setName(headers[i].name); + header.setValue(headers[i].value); httpMethodObject.addRequestHeader(header); - } else { - response.sendRedirect(devicemgtProps["appContext"] + "login"); } - } - //noinspection JSUnresolvedFunction - 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 { + + var header = new Header(); + header.setName(constants["CONTENT_TYPE_IDENTIFIER"]); + header.setValue(constants["APPLICATION_JSON"]); //noinspection JSUnresolvedFunction - client.executeMethod(httpMethodObject); + httpMethodObject.addRequestHeader(header); + header = new Header(); + header.setName(constants["ACCEPT_IDENTIFIER"]); + header.setValue(constants["APPLICATION_JSON"]); //noinspection JSUnresolvedFunction - var status = httpMethodObject.getStatusCode(); - if (status == 200) { - var responseContentDispositionHeader = httpMethodObject.getResponseHeader(constants["CONTENT_DISPOSITION_IDENTIFIER"]); - if (responseContentDispositionHeader) { - return successCallback(httpMethodObject.getResponseBodyAsStream(), httpMethodObject.getResponseHeaders()); + httpMethodObject.addRequestHeader(header); + + if (devicemgtProps["isOAuthEnabled"]) { + var accessToken = privateMethods.getAccessToken(); + if (accessToken) { + header = new Header(); + header.setName(constants["AUTHORIZATION_HEADER"]); + header.setValue(constants["BEARER_PREFIX"] + accessToken); + //noinspection JSUnresolvedFunction + httpMethodObject.addRequestHeader(header); } else { - return successCallback(httpMethodObject.getResponseBody()); + response.sendRedirect(devicemgtProps["appContext"] + "login"); } - } else { - return errorCallback(httpMethodObject.getResponseBody()); } - } catch (e) { - return errorCallback(response); - } finally { //noinspection JSUnresolvedFunction - if (method != constants["HTTP_GET"]) { - method.releaseConnection(); + 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(); + if (status == 200) { + var responseContentDispositionHeader = httpMethodObject.getResponseHeader( + constants["CONTENT_DISPOSITION_IDENTIFIER"]); + if (responseContentDispositionHeader) { + return successCallback(httpMethodObject.getResponseBodyAsStream(), + httpMethodObject.getResponseHeaders()); + } else { + return successCallback(httpMethodObject.getResponseBodyAsString(), + httpMethodObject.getResponseHeaders()); + } + } else { + return errorCallback(httpMethodObject.getResponseBodyAsString(), + httpMethodObject.getResponseHeaders()); + } + } catch (e) { + return errorCallback(response); + } finally { + //noinspection JSUnresolvedFunction + if (method != constants["HTTP_GET"]) { + method.releaseConnection(); + } + } + }; /** * This method invokes return initiateHTTPClientRequest for get calls. @@ -349,8 +359,8 @@ var invokers = function () { */ publicHTTPClientInvokers["get"] = function (url, successCallback, errorCallback, headers) { var requestPayload = null; - return privateMethods. - initiateHTTPClientRequest(constants["HTTP_GET"], url, successCallback, errorCallback, requestPayload, headers); + return privateMethods.initiateHTTPClientRequest(constants["HTTP_GET"], url, successCallback, errorCallback, + requestPayload, headers); }; /** @@ -362,8 +372,8 @@ var invokers = function () { * @param headers a list of name value pairs for additional http headers. */ publicHTTPClientInvokers["post"] = function (url, payload, successCallback, errorCallback, headers) { - return privateMethods. - initiateHTTPClientRequest(constants["HTTP_POST"], url, successCallback, errorCallback, payload, headers); + return privateMethods.initiateHTTPClientRequest(constants["HTTP_POST"], url, successCallback, errorCallback, + payload, headers); }; /** @@ -375,8 +385,8 @@ var invokers = function () { * @param headers a list of name value pairs for additional http headers. */ publicHTTPClientInvokers["put"] = function (url, payload, successCallback, errorCallback, headers) { - return privateMethods. - initiateHTTPClientRequest(constants["HTTP_PUT"], url, successCallback, errorCallback, payload, headers); + return privateMethods.initiateHTTPClientRequest(constants["HTTP_PUT"], url, successCallback, errorCallback, + payload, headers); }; /** @@ -388,8 +398,8 @@ var invokers = function () { */ publicHTTPClientInvokers["delete"] = function (url, successCallback, errorCallback, headers) { var requestPayload = null; - return privateMethods. - initiateHTTPClientRequest(constants["HTTP_DELETE"], url, successCallback, errorCallback, requestPayload, headers); + return privateMethods.initiateHTTPClientRequest(constants["HTTP_DELETE"], url, successCallback, errorCallback, + requestPayload, headers); }; var publicMethods = {}; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js index 3af4f59e6a..3b96ff0056 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js @@ -24,6 +24,7 @@ utility = function () { var log = new Log("/app/modules/utility.js"); var JavaClass = Packages.java.lang.Class; var PrivilegedCarbonContext = Packages.org.wso2.carbon.context.PrivilegedCarbonContext; + var server = require("carbon")["server"]; var getOsgiService = function (className) { return PrivilegedCarbonContext.getThreadLocalCarbonContext().getOSGiService(JavaClass.forName(className)); @@ -38,8 +39,8 @@ utility = function () { PrivilegedCarbonContext.startTenantFlow(); context = PrivilegedCarbonContext.getThreadLocalCarbonContext(); context.setTenantDomain(carbon.server.tenantDomain({ - tenantId: userInfo.tenantId - })); + tenantId: userInfo.tenantId + })); context.setTenantId(userInfo.tenantId); context.setUsername(userInfo.username || null); }; @@ -62,7 +63,7 @@ utility = function () { publicMethods.getDeviceTypeConfig = function (deviceType) { var unitName = publicMethods.getTenantedDeviceUnitName(deviceType, "type-view"); - + if (deviceType in deviceTypeConfigMap) { return deviceTypeConfigMap[deviceType]; } @@ -71,7 +72,10 @@ utility = function () { if (deviceTypeConfigFile.isExists()) { try { deviceTypeConfigFile.open("r"); - deviceTypeConfig = parse(deviceTypeConfigFile.readAll()); + var config = deviceTypeConfigFile.readAll(); + config = config.replace("%https.ip%", server.address("https")); + config = config.replace("%http.ip%", server.address("http")); + deviceTypeConfig = parse(config); } catch (err) { log.error("Error while reading device config file for `" + deviceType + "`: " + err); } finally { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.hbs index fafc053374..bbaf402251 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.hbs @@ -138,11 +138,11 @@ -
+
-
+