mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Improving jax-rs APIS of CDM-F
This commit is contained in:
parent
13db7c906f
commit
fd7a137b07
@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.mgt.jaxrs.beans;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@ApiModel(value = "List of activities", description = "This contains a set of activities that matches a given " +
|
||||||
|
"criteria as a collection")
|
||||||
|
public class ActivityList {
|
||||||
|
|
||||||
|
private int count;
|
||||||
|
private String next;
|
||||||
|
private String previous;
|
||||||
|
|
||||||
|
private List<Activity> activities = new ArrayList<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of Devices returned.
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "Number of activities returned.")
|
||||||
|
@JsonProperty("count")
|
||||||
|
public int getCount() {
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCount(int count) {
|
||||||
|
this.count = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Link to the next subset of resources qualified. \nEmpty if no more resources are to be returned.
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "Link to the next subset of resources qualified. \n " +
|
||||||
|
"Empty if no more resources are to be returned.")
|
||||||
|
@JsonProperty("next")
|
||||||
|
public String getNext() {
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNext(String next) {
|
||||||
|
this.next = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Link to the previous subset of resources qualified. \nEmpty if current subset is the first subset returned.
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "Link to the previous subset of resources qualified. \n" +
|
||||||
|
"Empty if current subset is the first subset returned.")
|
||||||
|
@JsonProperty("previous")
|
||||||
|
public String getPrevious() {
|
||||||
|
return previous;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrevious(String previous) {
|
||||||
|
this.previous = previous;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
**/
|
||||||
|
@ApiModelProperty(value = "List of devices returned")
|
||||||
|
@JsonProperty("activities")
|
||||||
|
public List<Activity> getList() {
|
||||||
|
return activities;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setList(List<Activity> activities) {
|
||||||
|
this.activities = activities;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("{\n");
|
||||||
|
|
||||||
|
sb.append(" count: ").append(count).append(",\n");
|
||||||
|
sb.append(" next: ").append(next).append(",\n");
|
||||||
|
sb.append(" previous: ").append(previous).append(",\n");
|
||||||
|
sb.append(" devices: [").append(activities).append("\n");
|
||||||
|
sb.append("]}\n");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -22,6 +22,8 @@ import io.swagger.annotations.*;
|
|||||||
import org.wso2.carbon.apimgt.annotations.api.API;
|
import org.wso2.carbon.apimgt.annotations.api.API;
|
||||||
import org.wso2.carbon.apimgt.annotations.api.Permission;
|
import org.wso2.carbon.apimgt.annotations.api.Permission;
|
||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.ActivityList;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
||||||
|
|
||||||
import javax.ws.rs.*;
|
import javax.ws.rs.*;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
@ -44,7 +46,6 @@ public interface ActivityInfoProviderService {
|
|||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
httpMethod = "GET",
|
httpMethod = "GET",
|
||||||
response = Activity.class,
|
|
||||||
value = "Retrieve details of a particular activity.",
|
value = "Retrieve details of a particular activity.",
|
||||||
notes = "This will return information of a particular activity i.e. meta information of an operation, " +
|
notes = "This will return information of a particular activity i.e. meta information of an operation, " +
|
||||||
"etc; including the responses from the devices.",
|
"etc; including the responses from the devices.",
|
||||||
@ -71,12 +72,20 @@ public interface ActivityInfoProviderService {
|
|||||||
code = 304,
|
code = 304,
|
||||||
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
message = "Not Modified. \n Empty body because the client has already the latest version of " +
|
||||||
"the requested resource."),
|
"the requested resource."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No activity is found under the provided id."),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 406,
|
code = 406,
|
||||||
message = "Not Acceptable.\n The requested media type is not supported"),
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 500,
|
code = 500,
|
||||||
message = "Internal Server ErrorResponse. \n Server error occurred while fetching activity data.")
|
message = "Internal Server ErrorResponse. \n Server error occurred while fetching activity data.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
})
|
})
|
||||||
@Permission(scope = "activity-view", permissions = {"/permission/admin/device-mgt/admin/activities/view"})
|
@Permission(scope = "activity-view", permissions = {"/permission/admin/device-mgt/admin/activities/view"})
|
||||||
Response getActivity(
|
Response getActivity(
|
||||||
@ -96,8 +105,6 @@ public interface ActivityInfoProviderService {
|
|||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
httpMethod = "GET",
|
httpMethod = "GET",
|
||||||
response = Activity.class,
|
|
||||||
responseContainer = "List",
|
|
||||||
value = "Retrieve details of a particular activity.",
|
value = "Retrieve details of a particular activity.",
|
||||||
notes = "This will return information of a particular activities i.e. meta information of operations, " +
|
notes = "This will return information of a particular activities i.e. meta information of operations, " +
|
||||||
"etc; including the responses from the devices which happened after given time.",
|
"etc; including the responses from the devices which happened after given time.",
|
||||||
@ -106,8 +113,7 @@ public interface ActivityInfoProviderService {
|
|||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 200,
|
code = 200,
|
||||||
message = "OK. \n Activity details are successfully fetched",
|
message = "OK. \n Activity details are successfully fetched",
|
||||||
response = Activity.class,
|
response = ActivityList.class,
|
||||||
responseContainer = "List",
|
|
||||||
responseHeaders = {
|
responseHeaders = {
|
||||||
@ResponseHeader(
|
@ResponseHeader(
|
||||||
name = "Content-Type",
|
name = "Content-Type",
|
||||||
@ -130,7 +136,8 @@ public interface ActivityInfoProviderService {
|
|||||||
message = "Not Acceptable.\n The requested media type is not supported"),
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 500,
|
code = 500,
|
||||||
message = "Internal Server ErrorResponse. \n Server error occurred while fetching activity data.")
|
message = "Internal Server ErrorResponse. \n Server error occurred while fetching activity data.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
})
|
})
|
||||||
@Permission(scope = "activity-view", permissions = {"/permission/admin/device-mgt/admin/activities/view"})
|
@Permission(scope = "activity-view", permissions = {"/permission/admin/device-mgt/admin/activities/view"})
|
||||||
Response getActivities(
|
Response getActivities(
|
||||||
@ -138,8 +145,8 @@ public interface ActivityInfoProviderService {
|
|||||||
name = "timestamp",
|
name = "timestamp",
|
||||||
value = "Validates if the requested variant has not been modified since the time specified, this " +
|
value = "Validates if the requested variant has not been modified since the time specified, this " +
|
||||||
"should be provided in unix format in seconds.",
|
"should be provided in unix format in seconds.",
|
||||||
required = false)
|
required = true)
|
||||||
@QueryParam("timestamp") String timestamp,
|
@QueryParam("timestamp") long timestamp,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "If-Modified-Since",
|
name = "If-Modified-Since",
|
||||||
value = "Validates if the requested variant has not been modified since the time specified",
|
value = "Validates if the requested variant has not been modified since the time specified",
|
||||||
|
|||||||
@ -31,7 +31,7 @@ import javax.ws.rs.core.Response;
|
|||||||
|
|
||||||
@API(name = "Application", version = "1.0.0", context = "/devicemgt_admin/applications", tags = {"devicemgt_admin"})
|
@API(name = "Application", version = "1.0.0", context = "/devicemgt_admin/applications", tags = {"devicemgt_admin"})
|
||||||
|
|
||||||
@Path("/applications")
|
@Path("/admin/applications")
|
||||||
@Api(value = "Application Management Administrative Service", description = "This an API intended to be used by " +
|
@Api(value = "Application 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. " +
|
"'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 ")
|
"Further, this is strictly restricted to admin users only ")
|
||||||
|
|||||||
@ -28,7 +28,7 @@ import javax.ws.rs.core.Response;
|
|||||||
|
|
||||||
@API(name = "DeviceManagementAdmin", version = "1.0.0", context = "/devicemgt_admin/applications",
|
@API(name = "DeviceManagementAdmin", version = "1.0.0", context = "/devicemgt_admin/applications",
|
||||||
tags = {"devicemgt_admin"})
|
tags = {"devicemgt_admin"})
|
||||||
@Path("/devices")
|
@Path("/admin/devices")
|
||||||
@Api(value = "Device Management Administrative Service", description = "This an API intended to be used by " +
|
@Api(value = "Device 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. " +
|
"'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 ")
|
"Further, this is strictly restricted to admin users only ")
|
||||||
|
|||||||
@ -27,7 +27,7 @@ import javax.ws.rs.core.MediaType;
|
|||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@Path("/groups")
|
@Path("/admin/groups")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Api(value = "Group Management Administrative Service", description = "This an API intended to be used by " +
|
@Api(value = "Group Management Administrative Service", description = "This an API intended to be used by " +
|
||||||
|
|||||||
@ -26,7 +26,7 @@ import javax.ws.rs.*;
|
|||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
@Path("/users")
|
@Path("/admin/users")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Api(value = "User Management Administrative Service", description = "This an API intended to be used by " +
|
@Api(value = "User Management Administrative Service", description = "This an API intended to be used by " +
|
||||||
|
|||||||
@ -23,7 +23,10 @@ import org.apache.commons.logging.LogFactory;
|
|||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
|
||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
|
||||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.service.api.ActivityInfoProviderService;
|
import org.wso2.carbon.device.mgt.jaxrs.service.api.ActivityInfoProviderService;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.service.impl.util.RequestValidationUtil;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.service.impl.util.UnexpectedServerErrorException;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils;
|
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils;
|
||||||
|
|
||||||
import javax.ws.rs.*;
|
import javax.ws.rs.*;
|
||||||
@ -44,23 +47,30 @@ public class ActivityProviderServiceImpl implements ActivityInfoProviderService
|
|||||||
public Response getActivity(
|
public Response getActivity(
|
||||||
@PathParam("id") String id,
|
@PathParam("id") String id,
|
||||||
@HeaderParam("If-Modified-Since") String ifModifiedSince) {
|
@HeaderParam("If-Modified-Since") String ifModifiedSince) {
|
||||||
Activity operation = null;
|
Activity activity;
|
||||||
DeviceManagementProviderService dmService;
|
DeviceManagementProviderService dmService;
|
||||||
try {
|
try {
|
||||||
|
RequestValidationUtil.validateActivityId(id);
|
||||||
|
|
||||||
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||||
operation = dmService.getOperationByActivityId(id);
|
activity = dmService.getOperationByActivityId(id);
|
||||||
|
if (activity == null) {
|
||||||
|
return Response.status(Response.Status.NOT_FOUND).entity("No activity can be found upon the provided " +
|
||||||
|
"activity id '" + id + "'").build();
|
||||||
|
}
|
||||||
} catch (OperationManagementException e) {
|
} catch (OperationManagementException e) {
|
||||||
String msg = "ErrorResponse occurred while fetching the activity for the supplied id.";
|
String msg = "ErrorResponse occurred while fetching the activity for the supplied id.";
|
||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
throw new UnexpectedServerErrorException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
|
||||||
}
|
}
|
||||||
return Response.status(Response.Status.OK).entity(operation).build();
|
return Response.status(Response.Status.OK).entity(activity).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Override
|
@Override
|
||||||
public Response getActivities(
|
public Response getActivities(
|
||||||
@QueryParam("timestamp") String timestamp,
|
@QueryParam("timestamp") long timestamp,
|
||||||
@HeaderParam("If-Modified-Since") String ifModifiedSince,
|
@HeaderParam("If-Modified-Since") String ifModifiedSince,
|
||||||
@QueryParam("offset") int offset,
|
@QueryParam("offset") int offset,
|
||||||
@QueryParam("limit") int limit) {
|
@QueryParam("limit") int limit) {
|
||||||
@ -68,11 +78,13 @@ public class ActivityProviderServiceImpl implements ActivityInfoProviderService
|
|||||||
DeviceManagementProviderService dmService;
|
DeviceManagementProviderService dmService;
|
||||||
try {
|
try {
|
||||||
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||||
activities = dmService.getActivitiesUpdatedAfter(Long.parseLong(timestamp));
|
activities = dmService.getActivitiesUpdatedAfter(timestamp);
|
||||||
|
|
||||||
} catch (OperationManagementException e) {
|
} catch (OperationManagementException e) {
|
||||||
String msg = "ErrorResponse occurred while fetching the activities updated after given time stamp.";
|
String msg = "ErrorResponse occurred while fetching the activities updated after given time stamp.";
|
||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
throw new UnexpectedServerErrorException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
|
||||||
}
|
}
|
||||||
return Response.status(Response.Status.OK).entity(activities).build();
|
return Response.status(Response.Status.OK).entity(activities).build();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,7 +40,7 @@ import javax.ws.rs.Produces;
|
|||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
@Path("/applications")
|
@Path("/admin/applications")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
public class ApplicationManagementAdminServiceImpl implements ApplicationManagementAdminService {
|
public class ApplicationManagementAdminServiceImpl implements ApplicationManagementAdminService {
|
||||||
|
|||||||
@ -30,7 +30,7 @@ import javax.ws.rs.core.MediaType;
|
|||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Path("/devices")
|
@Path("/admin/devices")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminService {
|
public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminService {
|
||||||
|
|||||||
@ -31,7 +31,7 @@ import javax.ws.rs.core.MediaType;
|
|||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@Path("/groups")
|
@Path("/admin/groups")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
public class GroupManagementAdminServiceImpl implements GroupManagementAdminService {
|
public class GroupManagementAdminServiceImpl implements GroupManagementAdminService {
|
||||||
|
|||||||
@ -26,7 +26,7 @@ import javax.ws.rs.*;
|
|||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
@Path("/users")
|
@Path("/admin/users")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
public class UserManagementAdminServiceImpl implements UserManagementAdminService {
|
public class UserManagementAdminServiceImpl implements UserManagementAdminService {
|
||||||
|
|||||||
@ -168,4 +168,43 @@ public class RequestValidationUtil {
|
|||||||
"cannot be null").build());
|
"cannot be null").build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void validateTimestamp(String timestamp) {
|
||||||
|
if (timestamp == null || timestamp.isEmpty()) {
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage("Timestamp value " +
|
||||||
|
"cannot be null or empty").build());
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Long.parseLong(timestamp);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(
|
||||||
|
"Invalid timestamp value").build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void validateActivityId(String activityId) {
|
||||||
|
if (activityId == null || activityId.isEmpty()) {
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage("Activity Id " +
|
||||||
|
"cannot be null or empty. It should be in the form of " +
|
||||||
|
"'[ACTIVITY][_][any-positive-integer]' instead").build());
|
||||||
|
}
|
||||||
|
String[] splits = activityId.split("_");
|
||||||
|
if (splits == null || splits[0] == null || splits[0].isEmpty() || !"ACTIVITY".equals(splits[0]) ||
|
||||||
|
splits[1] == null || splits[0].isEmpty()) {
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(
|
||||||
|
"Activity Id should be in the form of '[ACTIVITY][_][any-positive-integer]'").build());
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Long.parseLong(splits[1]);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(
|
||||||
|
"Activity Id should be in the form of '[ACTIVITY][_][any-positive-integer]'").build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.mgt.jaxrs.service.impl.util;
|
||||||
|
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
||||||
|
|
||||||
|
import javax.ws.rs.WebApplicationException;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
|
public class UnexpectedServerErrorException extends WebApplicationException {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 147943579458906890L;
|
||||||
|
|
||||||
|
public UnexpectedServerErrorException(ErrorResponse error) {
|
||||||
|
super(Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.device.mgt.common.operation.mgt;
|
package org.wso2.carbon.device.mgt.common.operation.mgt;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
||||||
@ -36,27 +37,36 @@ public class Activity {
|
|||||||
name = "activityId",
|
name = "activityId",
|
||||||
value = "Activity identifier",
|
value = "Activity identifier",
|
||||||
required = true)
|
required = true)
|
||||||
|
@JsonProperty("activityId")
|
||||||
private String activityId;
|
private String activityId;
|
||||||
|
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
name = "code",
|
name = "code",
|
||||||
value = "Activity code",
|
value = "Activity code",
|
||||||
required = true)
|
required = true)
|
||||||
|
@JsonProperty("code")
|
||||||
private String code;
|
private String code;
|
||||||
|
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
name = "type",
|
name = "type",
|
||||||
value = "Activity type",
|
value = "Activity type",
|
||||||
required = true,
|
required = true,
|
||||||
allowableValues = "CONFIG, MESSAGE, INFO, COMMAND, PROFILE, POLICY")
|
allowableValues = "CONFIG, MESSAGE, INFO, COMMAND, PROFILE, POLICY")
|
||||||
|
@JsonProperty("type")
|
||||||
private Type type;
|
private Type type;
|
||||||
|
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
name = "createdTimeStamp",
|
name = "createdTimeStamp",
|
||||||
value = "Timestamp recorded when the activity took place",
|
value = "Timestamp recorded when the activity took place",
|
||||||
required = true)
|
required = true)
|
||||||
|
@JsonProperty("createdTimestamp")
|
||||||
private String createdTimeStamp;
|
private String createdTimeStamp;
|
||||||
|
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
name = "activityStatuses",
|
name = "activityStatuses",
|
||||||
value = "Collection of statuses corresponding to the activity",
|
value = "Collection of statuses corresponding to the activity",
|
||||||
required = true)
|
required = true)
|
||||||
|
@JsonProperty("activityStatuses")
|
||||||
private List<ActivityStatus> activityStatus;
|
private List<ActivityStatus> activityStatus;
|
||||||
|
|
||||||
public String getActivityId() {
|
public String getActivityId() {
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.device.mgt.common.operation.mgt;
|
package org.wso2.carbon.device.mgt.common.operation.mgt;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
@ -31,25 +32,33 @@ public class ActivityStatus {
|
|||||||
public enum Status {
|
public enum Status {
|
||||||
IN_PROGRESS, PENDING, COMPLETED, ERROR, REPEATED
|
IN_PROGRESS, PENDING, COMPLETED, ERROR, REPEATED
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
name = "deviceIdentifier",
|
name = "deviceIdentifier",
|
||||||
value = "Device identifier of the device.",
|
value = "Device identifier of the device.",
|
||||||
required = true)
|
required = true)
|
||||||
|
@JsonProperty("deviceIdentifier")
|
||||||
private DeviceIdentifier deviceIdentifier;
|
private DeviceIdentifier deviceIdentifier;
|
||||||
|
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
name = "status",
|
name = "status",
|
||||||
value = "Status of the activity performed.",
|
value = "Status of the activity performed.",
|
||||||
required = true)
|
required = true)
|
||||||
|
@JsonProperty("status")
|
||||||
private Status status;
|
private Status status;
|
||||||
|
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
name = "responses",
|
name = "responses",
|
||||||
value = "Responses received from devices.",
|
value = "Responses received from devices.",
|
||||||
required = true)
|
required = true)
|
||||||
|
@JsonProperty("responses")
|
||||||
private List<OperationResponse> responses;
|
private List<OperationResponse> responses;
|
||||||
|
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
name = "updatedTimestamp ",
|
name = "updatedTimestamp ",
|
||||||
value = "Last updated time of the activity.",
|
value = "Last updated time of the activity.",
|
||||||
required = true)
|
required = true)
|
||||||
|
@JsonProperty("updatedTimestamp")
|
||||||
private String updatedTimestamp;
|
private String updatedTimestamp;
|
||||||
|
|
||||||
public DeviceIdentifier getDeviceIdentifier() {
|
public DeviceIdentifier getDeviceIdentifier() {
|
||||||
|
|||||||
@ -763,7 +763,7 @@ public class OperationManagerImpl implements OperationManager {
|
|||||||
try {
|
try {
|
||||||
OperationManagementDAOFactory.openConnection();
|
OperationManagementDAOFactory.openConnection();
|
||||||
Activity act = operationDAO.getActivity(operationId);
|
Activity act = operationDAO.getActivity(operationId);
|
||||||
act.setActivityId(activity);
|
// act.setActivityId(activity);
|
||||||
return act;
|
return act;
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new OperationManagementException("Error occurred while opening a connection to the data source.", e);
|
throw new OperationManagementException("Error occurred while opening a connection to the data source.", e);
|
||||||
|
|||||||
@ -257,7 +257,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
|
|
||||||
PreparedStatement stmt = null;
|
PreparedStatement stmt = null;
|
||||||
ResultSet rs = null;
|
ResultSet rs = null;
|
||||||
Activity activity = new Activity();
|
Activity activity = null;
|
||||||
List<ActivityStatus> activityStatusList = new ArrayList<>();
|
List<ActivityStatus> activityStatusList = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||||
@ -281,7 +281,9 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
|
|
||||||
int enrolmentId = 0;
|
int enrolmentId = 0;
|
||||||
ActivityStatus activityStatus = null;
|
ActivityStatus activityStatus = null;
|
||||||
while (rs.next()) {
|
|
||||||
|
if (rs.next()) {
|
||||||
|
activity = new Activity();
|
||||||
if (enrolmentId == 0) {
|
if (enrolmentId == 0) {
|
||||||
activity.setType(Activity.Type.valueOf(rs.getString("OPERATION_TYPE")));
|
activity.setType(Activity.Type.valueOf(rs.getString("OPERATION_TYPE")));
|
||||||
activity.setCreatedTimeStamp(new java.util.Date(rs.getLong(("CREATED_TIMESTAMP"))).toString());
|
activity.setCreatedTimeStamp(new java.util.Date(rs.getLong(("CREATED_TIMESTAMP"))).toString());
|
||||||
@ -306,6 +308,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
activityStatusList.add(activityStatus);
|
activityStatusList.add(activityStatus);
|
||||||
|
|
||||||
enrolmentId = rs.getInt("ENROLMENT_ID");
|
enrolmentId = rs.getInt("ENROLMENT_ID");
|
||||||
|
activity.setActivityStatus(activityStatusList);
|
||||||
} else {
|
} else {
|
||||||
if (rs.getInt("UPDATED_TIMESTAMP") != 0) {
|
if (rs.getInt("UPDATED_TIMESTAMP") != 0) {
|
||||||
activityStatus.getResponses().add(this.getOperationResponse(rs));
|
activityStatus.getResponses().add(this.getOperationResponse(rs));
|
||||||
@ -322,7 +325,6 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
} finally {
|
} finally {
|
||||||
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||||
}
|
}
|
||||||
activity.setActivityStatus(activityStatusList);
|
|
||||||
return activity;
|
return activity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -523,7 +525,6 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteOperation(int id) throws OperationManagementDAOException {
|
public void deleteOperation(int id) throws OperationManagementDAOException {
|
||||||
PreparedStatement stmt = null;
|
PreparedStatement stmt = null;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user