mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge pull request 'Add hierarchical group count API' (#214) from ThilinaPremachandra/device-mgt-core:Bug#10300 into master
Reviewed-on: https://repository.entgra.net/community/device-mgt-core/pulls/214
This commit is contained in:
commit
28b18941aa
@ -355,6 +355,52 @@ public interface GroupManagementService {
|
|||||||
@QueryParam("limit")
|
@QueryParam("limit")
|
||||||
int limit);
|
int limit);
|
||||||
|
|
||||||
|
@Path("/hierarchy/count")
|
||||||
|
@GET
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = HTTPConstants.HEADER_GET,
|
||||||
|
value = "Getting the Number of Hirarchical Device Groups",
|
||||||
|
notes = "Get the number of hierarchical device groups in the server that the current signed in user can access.",
|
||||||
|
tags = "Device Group Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:groups:count")
|
||||||
|
})
|
||||||
|
},
|
||||||
|
nickname = "getGroupCountNonAdmin"
|
||||||
|
|
||||||
|
)
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(code = 200, message = "OK. \n Successfully fetched the hierarchical device group count.",
|
||||||
|
response = DeviceGroupList.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 group count.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getHierarchicalGroupCount();
|
||||||
|
|
||||||
@Path("/count")
|
@Path("/count")
|
||||||
@GET
|
@GET
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
|
|||||||
@ -256,6 +256,58 @@ public interface GroupManagementAdminService {
|
|||||||
@QueryParam("limit")
|
@QueryParam("limit")
|
||||||
int limit);
|
int limit);
|
||||||
|
|
||||||
|
@Path("/hierarchy/count")
|
||||||
|
@GET
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = HTTPConstants.HEADER_GET,
|
||||||
|
value = "Get the count of all hierarchical groups belongs to current admin user.",
|
||||||
|
notes = "Returns count of all permitted hierarchical groups enrolled with the system.",
|
||||||
|
tags = "Device Group Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:admin-groups:count")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(code = 200, message = "OK. \n Successfully fetched the hierarchical device group count.",
|
||||||
|
response = Integer.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 = 404,
|
||||||
|
message = "No groups found.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@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 group count.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getHierarchicalGroupCount(@ApiParam(
|
||||||
|
name = "status",
|
||||||
|
value = "status of hierarchical groups of which count should be retrieved")
|
||||||
|
@QueryParam("status")
|
||||||
|
String status);
|
||||||
|
|
||||||
@Path("/count")
|
@Path("/count")
|
||||||
@GET
|
@GET
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
|
|||||||
@ -140,6 +140,19 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Response getHierarchicalGroupCount() {
|
||||||
|
try {
|
||||||
|
String currentUser = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||||
|
int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getHierarchicalGroupCount(currentUser, null);
|
||||||
|
return Response.status(Response.Status.OK).entity(count).build();
|
||||||
|
} catch (GroupManagementException e) {
|
||||||
|
String msg = "Error occurred while retrieving hierarchical group count.";
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response getGroupCount() {
|
public Response getGroupCount() {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -133,6 +133,23 @@ public class GroupManagementAdminServiceImpl implements GroupManagementAdminServ
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Response getHierarchicalGroupCount(String status) {
|
||||||
|
try {
|
||||||
|
int count;
|
||||||
|
if (status == null || status.isEmpty()) {
|
||||||
|
count = DeviceMgtAPIUtils.getGroupManagementProviderService().getHierarchicalGroupCount();
|
||||||
|
} else {
|
||||||
|
count = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroupCountByStatus(status);
|
||||||
|
}
|
||||||
|
return Response.status(Response.Status.OK).entity(count).build();
|
||||||
|
} catch (GroupManagementException e) {
|
||||||
|
String msg = "ErrorResponse occurred while retrieving hierarchical group count.";
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response getGroupCount(String status) {
|
public Response getGroupCount(String status) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -189,6 +189,14 @@ public interface GroupManagementProviderService {
|
|||||||
PaginationResult getGroupsWithHierarchy(String username, GroupPaginationRequest request,
|
PaginationResult getGroupsWithHierarchy(String username, GroupPaginationRequest request,
|
||||||
boolean requireGroupProps) throws GroupManagementException;
|
boolean requireGroupProps) throws GroupManagementException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all hierarchical device groups count in tenant
|
||||||
|
*
|
||||||
|
* @return hierarchical group count
|
||||||
|
* @throws GroupManagementException
|
||||||
|
*/
|
||||||
|
int getHierarchicalGroupCount() throws GroupManagementException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all device group count in tenant
|
* Get all device group count in tenant
|
||||||
*
|
*
|
||||||
@ -215,6 +223,16 @@ public interface GroupManagementProviderService {
|
|||||||
*/
|
*/
|
||||||
int getGroupCount(String username, String parentPath) throws GroupManagementException;
|
int getGroupCount(String username, String parentPath) throws GroupManagementException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get hierarchical device groups count of user
|
||||||
|
*
|
||||||
|
* @param username of the user
|
||||||
|
* @param parentPath of the group
|
||||||
|
* @return hierarchical group count
|
||||||
|
* @throws GroupManagementException
|
||||||
|
*/
|
||||||
|
int getHierarchicalGroupCount(String username, String parentPath) throws GroupManagementException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manage device group sharing with user with list of roles.
|
* Manage device group sharing with user with list of roles.
|
||||||
*
|
*
|
||||||
|
|||||||
@ -854,6 +854,28 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid
|
|||||||
return groupResult;
|
return groupResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHierarchicalGroupCount() throws GroupManagementException {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Get groups count");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
GroupManagementDAOFactory.openConnection();
|
||||||
|
int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||||
|
return groupDAO.getGroupCount(tenantId, null);
|
||||||
|
} catch (GroupManagementDAOException e) {
|
||||||
|
String msg = "Error occurred while retrieving all groups in tenant";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new GroupManagementException(msg, e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while opening a connection to the data source.";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new GroupManagementException(msg, e);
|
||||||
|
} finally {
|
||||||
|
GroupManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getGroupCount() throws GroupManagementException {
|
public int getGroupCount() throws GroupManagementException {
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
@ -962,6 +984,52 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int getHierarchicalGroupCount(String username, String parentPath) throws GroupManagementException {
|
||||||
|
if (username == null || username.isEmpty()) {
|
||||||
|
String msg = "Received empty user name for getHierarchicalGroupCount";
|
||||||
|
log.error(msg);
|
||||||
|
throw new GroupManagementException(msg);
|
||||||
|
}
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Get groups count of '" + username + "'");
|
||||||
|
}
|
||||||
|
UserStoreManager userStoreManager;
|
||||||
|
int count;
|
||||||
|
try {
|
||||||
|
GroupManagementDAOFactory.openConnection();
|
||||||
|
int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||||
|
userStoreManager = DeviceManagementDataHolder.getInstance().getRealmService().getTenantUserRealm(tenantId)
|
||||||
|
.getUserStoreManager();
|
||||||
|
if (isAdminUser(username, userStoreManager)) {
|
||||||
|
count = groupDAO.getGroupCount(tenantId, null);
|
||||||
|
return count;
|
||||||
|
} else {
|
||||||
|
String[] roleList = userStoreManager.getRoleListOfUser(username);
|
||||||
|
count = groupDAO.getOwnGroupsCount(username, tenantId, parentPath);
|
||||||
|
count += groupDAO.getGroupsCount(roleList, tenantId, parentPath);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
} catch (UserStoreException e) {
|
||||||
|
String msg = "Error occurred while retrieving role list of user '" + username + "'";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new GroupManagementException(msg, e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while opening db connection to get group count.";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new GroupManagementException(msg, e);
|
||||||
|
} catch (GroupManagementDAOException e) {
|
||||||
|
String msg = "Error occurred while retrieving group count of user '" + username + "'";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new GroupManagementException(msg, e);
|
||||||
|
} finally {
|
||||||
|
GroupManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user