Merge pull request #221 from charithag/master

Refactor group management service
revert-dabc3590
Prabath Abeysekara 9 years ago
commit 26303f0849

@ -25,12 +25,14 @@ import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyEixistException;
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser;
import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService;
import org.wso2.carbon.device.mgt.iot.util.APIUtil;
import org.wso2.carbon.device.mgt.iot.util.ResponsePayload;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
@ -44,6 +46,7 @@ import javax.ws.rs.core.Response;
import java.util.Date;
import java.util.List;
@SuppressWarnings("NonJaxWsWebServices")
public class GroupManagerService {
private static final String DEFAULT_ADMIN_ROLE = "admin";
@ -66,97 +69,75 @@ public class GroupManagerService {
@POST
@Produces("application/json")
public Response createGroup(@FormParam("groupName") String groupName,
@FormParam("userName") String username,
@FormParam("description") String description) {
String owner = getCurrentUserName();
DeviceGroup group = new DeviceGroup();
group.setName(username);
group.setName(groupName);
group.setDescription(description);
group.setOwner(username);
group.setOwner(owner);
group.setDateOfCreation(new Date().getTime());
group.setDateOfLastUpdate(new Date().getTime());
boolean isAdded = false;
try {
GroupManagementProviderService groupManagementService = APIUtil.getGroupManagementProviderService();
int groupId = groupManagementService.createGroup(group, DEFAULT_ADMIN_ROLE, DEFAULT_ADMIN_PERMISSIONS);
if (groupId == -2) {
ResponsePayload responsePayload = new ResponsePayload();
responsePayload.setStatusCode(HttpStatus.SC_CONFLICT);
responsePayload.setMessageFromServer("Group name is already exists.");
responsePayload.setResponseContent("CONFLICT");
return Response.status(HttpStatus.SC_CONFLICT).entity(responsePayload).build();
} else {
isAdded = (groupId > 0) && groupManagementService.addGroupSharingRole(username, groupId,
groupManagementService.createGroup(group, DEFAULT_ADMIN_ROLE, DEFAULT_ADMIN_PERMISSIONS);
groupManagementService.addGroupSharingRole(owner, groupName, owner,
DEFAULT_OPERATOR_ROLE,
DEFAULT_OPERATOR_PERMISSIONS);
groupManagementService.addGroupSharingRole(username, groupId, DEFAULT_STATS_MONITOR_ROLE,
groupManagementService.addGroupSharingRole(owner, groupName, owner, DEFAULT_STATS_MONITOR_ROLE,
DEFAULT_STATS_MONITOR_PERMISSIONS);
groupManagementService.addGroupSharingRole(username, groupId, DEFAULT_VIEW_POLICIES,
groupManagementService.addGroupSharingRole(owner, groupName, owner, DEFAULT_VIEW_POLICIES,
DEFAULT_VIEW_POLICIES_PERMISSIONS);
groupManagementService.addGroupSharingRole(username, groupId, DEFAULT_MANAGE_POLICIES,
groupManagementService.addGroupSharingRole(owner, groupName, owner, DEFAULT_MANAGE_POLICIES,
DEFAULT_MANAGE_POLICIES_PERMISSIONS);
groupManagementService.addGroupSharingRole(username, groupId, DEFAULT_VIEW_EVENTS,
groupManagementService.addGroupSharingRole(owner, groupName, owner, DEFAULT_VIEW_EVENTS,
DEFAULT_VIEW_EVENTS_PERMISSIONS);
ResponsePayload responsePayload = new ResponsePayload();
responsePayload.setStatusCode(HttpStatus.SC_OK);
return Response.status(HttpStatus.SC_OK).entity(responsePayload).build();
}
return Response.status(Response.Status.CREATED).build();
} catch (GroupManagementException e) {
log.error(e.getErrorMessage(), e);
return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
} catch (GroupAlreadyEixistException e) {
ResponsePayload responsePayload = new ResponsePayload();
responsePayload.setStatusCode(HttpStatus.SC_CONFLICT);
responsePayload.setMessageFromServer("Group name is already exists.");
responsePayload.setResponseContent("CONFLICT");
return Response.status(HttpStatus.SC_CONFLICT).entity(responsePayload).build();
}
}
@Path("/groups/{groupId}")
@Path("/groups/{owner}/{groupName}")
@PUT
@Consumes("application/json")
@Produces("application/json")
public Response updateGroup(@PathParam("groupId") int groupId, @FormParam("groupName") String groupName,
@FormParam("userName") String userName,
@FormParam("description") String description) {
public Response updateGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
DeviceGroup deviceGroup) {
try {
GroupManagementProviderService groupManagementService = APIUtil.getGroupManagementProviderService();
DeviceGroup group = groupManagementService.getGroup(groupId);
group.setName(groupName);
group.setDescription(description);
group.setOwner(userName);
group.setDateOfLastUpdate(new Date().getTime());
Response.status(Response.Status.OK.getStatusCode());
groupManagementService.updateGroup(group);
return Response.status(Response.Status.NO_CONTENT).build();
APIUtil.getGroupManagementProviderService().updateGroup(deviceGroup, groupName, owner);
return Response.status(Response.Status.OK).build();
} catch (GroupManagementException e) {
log.error(e.getErrorMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/groups/{groupId}")
@Path("/groups/{owner}/{groupName}")
@DELETE
@Produces("application/json")
public Response deleteGroup(@PathParam("groupId") int groupId, @QueryParam("userName") String userName) {
if (!checkAuthorize(getCurrentUserName(), groupId, "/permission/device-mgt/admin/groups/delete")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
public Response deleteGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner) {
try {
boolean isDeleted = APIUtil.getGroupManagementProviderService().deleteGroup(
groupId);
if (isDeleted) {
return Response.status(Response.Status.NO_CONTENT).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
APIUtil.getGroupManagementProviderService().deleteGroup(groupName, owner);
return Response.status(Response.Status.OK).build();
} catch (GroupManagementException e) {
log.error(e.getMessage());
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@Path("/groups/{groupId}")
@Path("/groups/{owner}/{groupName}")
@GET
@Produces("application/json")
public Response getGroup(@PathParam("groupId") int groupId) {
public Response getGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner) {
try {
DeviceGroup deviceGroup = APIUtil.getGroupManagementProviderService().getGroup(
groupId);
DeviceGroup deviceGroup = APIUtil.getGroupManagementProviderService().getGroup(groupName, owner);
if (deviceGroup != null) {
return Response.status(Response.Status.OK).entity(deviceGroup).build();
} else {
@ -220,23 +201,20 @@ public class GroupManagerService {
}
}
@Path("/groups/{groupId}/share")
@Path("/groups/{owner}/{groupName}/share")
@PUT
@Produces("application/json")
public Response shareGroup(@FormParam("userName") String userName,
@FormParam("shareUser") String shareUser, @PathParam("groupId") int groupId,
public Response shareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
@FormParam("shareUser") String shareUser,
@FormParam("roleName") String sharingRole) {
if (!checkAuthorize(getCurrentUserName(), groupId, "/permission/device-mgt/admin/groups/share")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
try {
boolean isShared = APIUtil.getGroupManagementProviderService().shareGroup(
shareUser, groupId, sharingRole);
shareUser, groupName, owner, sharingRole);
if (isShared) {
return Response.status(Response.Status.NO_CONTENT).build();
return Response.status(Response.Status.OK).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
return Response.status(Response.Status.NOT_FOUND).build();
}
} catch (GroupManagementException e) {
log.error(e.getMessage(), e);
@ -244,24 +222,19 @@ public class GroupManagerService {
}
}
@Path("/groups/{groupId}/unshare")
@Path("/groups/{owner}/{groupName}/unshare")
@PUT
@Produces("application/json")
public Response unShareGroup(@FormParam("userName") String userName,
public Response unShareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
@FormParam("unShareUser") String unShareUser,
@PathParam("groupId") int groupId,
@FormParam("roleName") String sharingRole) {
if (!checkAuthorize(getCurrentUserName(), groupId, "/permission/device-mgt/admin/groups/share")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
try {
boolean isUnShared = APIUtil.getGroupManagementProviderService().unshareGroup(
unShareUser, groupId, sharingRole);
unShareUser, groupName, owner, sharingRole);
if (isUnShared) {
return Response.status(Response.Status.NO_CONTENT).build();
return Response.status(Response.Status.OK).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
return Response.status(Response.Status.NOT_FOUND).build();
}
} catch (GroupManagementException e) {
log.error(e.getMessage(), e);
@ -269,23 +242,21 @@ public class GroupManagerService {
}
}
@Path("/groups/{groupId}/share/roles/{roleName}/permissions")
@Path("/groups/{owner}/{groupName}/share/roles/{roleName}/permissions")
@PUT
@Produces("application/json")
public Response addSharing(@QueryParam("userName") String userName, @PathParam("groupId") int groupId,
public Response addSharing(@QueryParam("shareUser") String shareUser, @PathParam("groupName") String groupName,
@PathParam("owner") String owner,
@PathParam("roleName") String roleName,
@FormParam("permissions") String[] permissions) {
if (!checkAuthorize(getCurrentUserName(), groupId, "/permission/device-mgt/admin/groups/share")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
try {
boolean isAdded = APIUtil.getGroupManagementProviderService().addGroupSharingRole(
userName, groupId, roleName, permissions);
shareUser, groupName, owner, roleName, permissions);
if (isAdded) {
return Response.status(Response.Status.NO_CONTENT).build();
return Response.status(Response.Status.OK).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
return Response.status(Response.Status.NOT_FOUND).build();
}
} catch (GroupManagementException e) {
log.error(e.getMessage(), e);
@ -294,21 +265,18 @@ public class GroupManagerService {
}
@DELETE
@Path("/groups/{groupId}/share/roles/{roleName}/permissions")
@Path("/groups/{owner}/{groupName}/share/roles/{roleName}/permissions")
@Produces("application/json")
public Response removeSharing(@QueryParam("userName") String userName, @PathParam("groupId") int groupId,
public Response removeSharing(@QueryParam("userName") String userName, @PathParam("groupName") String groupName,
@PathParam("owner") String owner,
@PathParam("roleName") String roleName) {
if (!checkAuthorize(getCurrentUserName(), groupId, "/permission/device-mgt/admin/groups/share")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
try {
boolean isRemoved = APIUtil.getGroupManagementProviderService().removeGroupSharingRole(
groupId, roleName);
groupName, owner, roleName);
if (isRemoved) {
return Response.status(Response.Status.NO_CONTENT).build();
return Response.status(Response.Status.OK).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
return Response.status(Response.Status.NOT_FOUND).build();
}
} catch (GroupManagementException e) {
log.error(e.getMessage(), e);
@ -317,16 +285,16 @@ public class GroupManagerService {
}
@GET
@Path("/groups/{groupId}/share/roles")
@Path("/groups/{owner}/{groupName}/share/roles")
@Produces("application/json")
public Response getRoles(@PathParam("groupId") int groupId, @QueryParam("userName") String userName) {
public Response getRoles(@PathParam("groupName") String groupName,
@PathParam("owner") String owner, @QueryParam("userName") String userName) {
try {
List<String> roles;
if (userName != null && !userName.isEmpty()) {
roles = APIUtil.getGroupManagementProviderService().getRoles(userName,
groupId);
roles = APIUtil.getGroupManagementProviderService().getRoles(userName, groupName, owner);
} else {
roles = APIUtil.getGroupManagementProviderService().getRoles(groupId);
roles = APIUtil.getGroupManagementProviderService().getRoles(groupName, owner);
}
String[] rolesArray = new String[roles.size()];
roles.toArray(rolesArray);
@ -338,12 +306,13 @@ public class GroupManagerService {
}
@GET
@Path("/groups/{groupId}/users")
@Path("/groups/{owner}/{groupName}/users")
@Produces("application/json")
public Response getUsers(@PathParam("groupId") int groupId) {
public Response getUsers(@PathParam("groupName") String groupName,
@PathParam("owner") String owner) {
try {
List<GroupUser> users = APIUtil.getGroupManagementProviderService().getUsers(
groupId);
groupName, owner);
GroupUser[] usersArray = new GroupUser[users.size()];
users.toArray(usersArray);
return Response.status(Response.Status.OK).entity(usersArray).build();
@ -354,12 +323,13 @@ public class GroupManagerService {
}
@GET
@Path("/groups/{groupId}/devices/all")
@Path("/groups/{owner}/{groupName}/devices/all")
@Produces("application/json")
public Response getDevices(@PathParam("groupId") int groupId) {
public Response getDevices(@PathParam("groupName") String groupName,
@PathParam("owner") String owner) {
try {
List<Device> devices = APIUtil.getGroupManagementProviderService().getDevices(
groupId);
groupName, owner);
Device[] deviceArray = new Device[devices.size()];
devices.toArray(deviceArray);
return Response.status(Response.Status.OK).entity(deviceArray).build();
@ -370,11 +340,12 @@ public class GroupManagerService {
}
@GET
@Path("/groups/{groupId}/devices/count")
@Path("/groups/{owner}/{groupName}/devices/count")
@Produces("application/json")
public Response getDeviceCount(@PathParam("groupId") int groupId) {
public Response getDeviceCount(@PathParam("groupName") String groupName,
@PathParam("owner") String owner) {
try {
int count = APIUtil.getGroupManagementProviderService().getDeviceCount(groupId);
int count = APIUtil.getGroupManagementProviderService().getDeviceCount(groupName, owner);
return Response.status(Response.Status.OK).entity(count).build();
} catch (GroupManagementException e) {
log.error(e.getMessage(), e);
@ -383,23 +354,20 @@ public class GroupManagerService {
}
@PUT
@Path("/groups/{groupId}/devices/{deviceType}/{deviceId}")
@Path("/groups/{owner}/{groupName}/devices/{deviceType}/{deviceId}")
@Produces("application/json")
public Response addDevice(@PathParam("groupId") int groupId, @PathParam("deviceId") String deviceId,
public Response addDevice(@PathParam("groupName") String groupName,
@PathParam("owner") String owner, @PathParam("deviceId") String deviceId,
@PathParam("deviceType") String deviceType,
@FormParam("userName") String userName) {
if (!checkAuthorize(getCurrentUserName(), groupId,
"/permission/device-mgt/admin/groups/add_devices")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(deviceId, deviceType);
boolean isAdded = APIUtil.getGroupManagementProviderService().addDevice(
deviceIdentifier, groupId);
deviceIdentifier, groupName, owner);
if (isAdded) {
return Response.status(Response.Status.NO_CONTENT).build();
return Response.status(Response.Status.OK).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
return Response.status(Response.Status.NOT_FOUND).build();
}
} catch (GroupManagementException e) {
log.error(e.getMessage(), e);
@ -408,22 +376,19 @@ public class GroupManagerService {
}
@DELETE
@Path("/groups/{groupId}/devices/{deviceType}/{deviceId}")
@Path("/groups/{owner}/{groupName}/devices/{deviceType}/{deviceId}")
@Produces("application/json")
public Response removeDevice(@PathParam("groupId") int groupId, @PathParam("deviceId") String deviceId,
public Response removeDevice(@PathParam("groupName") String groupName,
@PathParam("owner") String owner, @PathParam("deviceId") String deviceId,
@PathParam("deviceType") String deviceType) {
if (!checkAuthorize(getCurrentUserName(), groupId,
"/permission/device-mgt/admin/groups/remove_devices")) {
return Response.status(Response.Status.FORBIDDEN).build();
}
try {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(deviceId, deviceType);
boolean isRemoved = APIUtil.getGroupManagementProviderService().removeDevice(
deviceIdentifier, groupId);
deviceIdentifier, groupName, owner);
if (isRemoved) {
return Response.status(Response.Status.NO_CONTENT).build();
return Response.status(Response.Status.OK).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
return Response.status(Response.Status.NOT_FOUND).build();
}
} catch (GroupManagementException e) {
log.error(e.getMessage(), e);
@ -432,13 +397,14 @@ public class GroupManagerService {
}
@GET
@Path("/groups/{groupId}/users/{userName}/permissions")
@Path("/groups/{owner}/{groupName}/users/{userName}/permissions")
@Produces("application/json")
public Response getPermissions(@PathParam("userName") String userName,
@PathParam("groupId") int groupId) {
@PathParam("groupName") String groupName,
@PathParam("owner") String owner) {
try {
String[] permissions = APIUtil.getGroupManagementProviderService()
.getPermissions(userName, groupId);
.getPermissions(userName, groupName, owner);
return Response.status(Response.Status.OK).entity(permissions).build();
} catch (GroupManagementException e) {
log.error(e.getMessage(), e);
@ -446,28 +412,6 @@ public class GroupManagerService {
}
}
@GET
@Path("/groups/{groupId}/users/{userName}/authorized")
@Produces("application/json")
public Response isAuthorized(@PathParam("userName") String userName, @PathParam("groupId") int groupId,
@QueryParam("permission") String permission) {
boolean isAuthorized = checkAuthorize(userName, groupId, permission);
if (isAuthorized) {
return Response.status(Response.Status.OK).build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
private boolean checkAuthorize(String userName, int groupId, String permission) {
try {
return APIUtil.getGroupManagementProviderService().isAuthorized(userName, groupId, permission);
} catch (GroupManagementException e) {
log.error(e.getMessage(), e);
return false;
}
}
private String getCurrentUserName() {
return PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
}

Loading…
Cancel
Save