mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge pull request 'HierarchicalGrouping' (#137) from ThilinaPremachandra/device-mgt-core:syncHierarchicalGrouping into master
Reviewed-on: https://repository.entgra.net/community/device-mgt-core/pulls/137
This commit is contained in:
commit
d17925cf7f
@ -40,6 +40,7 @@ import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.DeviceToGroupsAssign
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.ErrorResponse;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.RoleList;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.util.Constants;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupRoleWrapper;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.ws.rs.Consumes;
|
||||
@ -182,6 +183,13 @@ import java.util.List;
|
||||
key = "perm:groups:devices-types",
|
||||
roles = {"Internal/devicemgt-user"},
|
||||
permissions = {"/device-mgt/groups/devices/types"}
|
||||
),
|
||||
@Scope(
|
||||
name = "View whether the groups has relevant device types",
|
||||
description = "View whether the groups has relevant device types",
|
||||
key = "perm:groups:add",
|
||||
roles = {"Internal/devicemgt-user"},
|
||||
permissions = {"/device-mgt/groups/device-types"}
|
||||
)
|
||||
}
|
||||
)
|
||||
@ -1229,4 +1237,77 @@ public interface GroupManagementService {
|
||||
required = true)
|
||||
List<String> identifiers);
|
||||
|
||||
|
||||
@POST
|
||||
@Path("/roles/share")
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = HTTPConstants.HEADER_POST,
|
||||
value = "Consolidated API for Creating a Device Group, Adding Devices, and Sharing",
|
||||
notes = "This API can be used to create a new device group, add devices to the group, and share the group with user roles.",
|
||||
tags = "Device Group Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = Constants.SCOPE, value = "perm:groups:add")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 201,
|
||||
message = "Created. \n Device group has successfully been created.",
|
||||
responseHeaders = {
|
||||
@ResponseHeader(
|
||||
name = "Content-Location",
|
||||
description = "The URL of the created group."),
|
||||
@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 = 303,
|
||||
message = "See Other. \n Source can be retrieved from the URL specified at the Location " +
|
||||
"header.",
|
||||
responseHeaders = {
|
||||
@ResponseHeader(
|
||||
name = "Content-Location",
|
||||
description = "The Source URL of the document.")}),
|
||||
@ApiResponse(
|
||||
code = 400,
|
||||
message = "Bad Request. \n Invalid request or validation error.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 401,
|
||||
message = "Unauthorized. \n Current logged in user is not authorized to perform the operation.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 404,
|
||||
message = "Group not 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 creating the group or adding devices or sharing the group.",
|
||||
response = ErrorResponse.class)
|
||||
})
|
||||
Response createGroupWithRoles(@ApiParam(
|
||||
name = "group",
|
||||
value = "Define the group object with data.",
|
||||
required = true)
|
||||
@Valid DeviceGroupRoleWrapper group
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@ -36,9 +36,16 @@ import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroup;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.DeviceGroupList;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.ErrorResponse;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.util.Constants;
|
||||
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupRoleWrapper;
|
||||
import javax.validation.Valid;
|
||||
import javax.ws.rs.*;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DefaultValue;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
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;
|
||||
|
||||
@ -368,4 +375,79 @@ public interface GroupManagementAdminService {
|
||||
required = true)
|
||||
@Valid DeviceGroup group);
|
||||
|
||||
|
||||
|
||||
@POST
|
||||
@Path("/roles/share")
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = HTTPConstants.HEADER_POST,
|
||||
value = "Consolidated API for Creating a Device Group, Adding Devices, and Sharing",
|
||||
notes = "This API can be used to create a new device group, add devices to the group, and share the group with user roles.",
|
||||
tags = "Device Group Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = Constants.SCOPE, value = "perm:groups:add")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 201,
|
||||
message = "Created. \n Device group has successfully been created.",
|
||||
responseHeaders = {
|
||||
@ResponseHeader(
|
||||
name = "Content-Location",
|
||||
description = "The URL of the created group."),
|
||||
@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 = 303,
|
||||
message = "See Other. \n Source can be retrieved from the URL specified at the Location " +
|
||||
"header.",
|
||||
responseHeaders = {
|
||||
@ResponseHeader(
|
||||
name = "Content-Location",
|
||||
description = "The Source URL of the document.")}),
|
||||
@ApiResponse(
|
||||
code = 400,
|
||||
message = "Bad Request. \n Invalid request or validation error.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 401,
|
||||
message = "Unauthorized. \n Current logged in user is not authorized to perform the operation.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 404,
|
||||
message = "Group not 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 creating the group or adding devices or sharing the group.",
|
||||
response = ErrorResponse.class)
|
||||
})
|
||||
Response createGroupWithRoles(@ApiParam(
|
||||
name = "group",
|
||||
value = "Define the group object with data.",
|
||||
required = true)
|
||||
@Valid DeviceGroupRoleWrapper group
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@ -18,6 +18,14 @@
|
||||
|
||||
package io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.impl;
|
||||
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroup;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupConstants;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupRoleWrapper;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceTypesOfGroups;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupAlreadyExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupNotExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.RoleDoesNotExistException;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.CarbonConstants;
|
||||
@ -29,13 +37,6 @@ import io.entgra.device.mgt.core.device.mgt.common.GroupPaginationRequest;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.PaginationResult;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceNotFoundException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroup;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupConstants;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceTypesOfGroups;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupAlreadyExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupNotExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.RoleDoesNotExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.service.DeviceManagementProviderService;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.service.GroupManagementProviderService;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.DeviceGroupList;
|
||||
@ -430,4 +431,37 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@POST
|
||||
@Path("/roles/share")
|
||||
@Override
|
||||
public Response createGroupWithRoles(DeviceGroupRoleWrapper groups) {
|
||||
if (groups == null) {
|
||||
return Response.status(Response.Status.BAD_REQUEST).build();
|
||||
}
|
||||
groups.setOwner(PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername());
|
||||
groups.setStatus(DeviceGroupConstants.GroupStatus.ACTIVE);
|
||||
try {
|
||||
DeviceMgtAPIUtils.getGroupManagementProviderService().createGroupWithRoles(groups, DEFAULT_ADMIN_ROLE, DEFAULT_ADMIN_PERMISSIONS);
|
||||
DeviceGroup group = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroup(groups.getName(),
|
||||
PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername().isEmpty());
|
||||
if (group != null) {
|
||||
DeviceMgtAPIUtils.getGroupManagementProviderService().manageGroupSharing(group.getGroupId(), groups.getUserRoles());
|
||||
return Response.status(Response.Status.CREATED).entity(group.getGroupId()).build();
|
||||
} else {
|
||||
String msg = "Error occurred while retrieving newly created group.";
|
||||
log.error(msg);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
} catch (GroupManagementException e) {
|
||||
String msg = "Error occurred while adding " + groups.getName() + " group";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
} catch (GroupAlreadyExistException e) {
|
||||
String msg = "Group already exists with name : " + groups.getName() + ".";
|
||||
log.warn(msg);
|
||||
return Response.status(Response.Status.CONFLICT).entity(msg).build();
|
||||
} catch (RoleDoesNotExistException e) {
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -17,21 +17,25 @@
|
||||
*/
|
||||
package io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.impl.admin;
|
||||
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroup;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupConstants;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupRoleWrapper;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupAlreadyExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.RoleDoesNotExistException;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.GroupPaginationRequest;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.PaginationResult;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroup;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupConstants;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupAlreadyExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans.DeviceGroupList;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.api.admin.GroupManagementAdminService;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.impl.util.RequestValidationUtil;
|
||||
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
|
||||
import javax.ws.rs.DefaultValue;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.Response;
|
||||
@ -144,4 +148,31 @@ public class GroupManagementAdminServiceImpl implements GroupManagementAdminServ
|
||||
return Response.status(Response.Status.CONFLICT).entity(msg).build();
|
||||
}
|
||||
}
|
||||
@POST
|
||||
@Path("/roles/share")
|
||||
@Override
|
||||
public Response createGroupWithRoles(DeviceGroupRoleWrapper group) {
|
||||
if (group == null) {
|
||||
return Response.status(Response.Status.BAD_REQUEST).build();
|
||||
}
|
||||
group.setOwner(PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername());
|
||||
group.setStatus(DeviceGroupConstants.GroupStatus.ACTIVE);
|
||||
try {
|
||||
DeviceMgtAPIUtils.getGroupManagementProviderService().createGroupWithRoles(group, DEFAULT_ADMIN_ROLE, DEFAULT_ADMIN_PERMISSIONS);
|
||||
DeviceMgtAPIUtils.getGroupManagementProviderService().manageGroupSharing(group.getGroupId(), group.getUserRoles());
|
||||
return Response.status(Response.Status.CREATED).build();
|
||||
} catch (GroupManagementException e) {
|
||||
String msg = "Error occurred while adding " + group.getName() + " group";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
} catch (GroupAlreadyExistException e) {
|
||||
String msg = "Group already exists with name : " + group.getName() + ".";
|
||||
log.warn(msg);
|
||||
return Response.status(Response.Status.CONFLICT).entity(msg).build();
|
||||
} catch (RoleDoesNotExistException e) {
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,151 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.device.mgt.common.group.mgt;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Holds Device Group details and expose to external access
|
||||
*/
|
||||
@ApiModel(value = "DeviceGroupRoleWrapper", description = "This class carries all information related to a managed device group.")
|
||||
public class DeviceGroupRoleWrapper implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1998121711L;
|
||||
|
||||
@ApiModelProperty(name = "id", value = "ID of the device group in the device group information database.")
|
||||
private int id;
|
||||
|
||||
@ApiModelProperty(name = "description", value = "The device group description that can be set on the device group by the user.", required = true)
|
||||
private String description;
|
||||
|
||||
@ApiModelProperty(name = "name", value = "The device group name that can be set on the device group by the user.", required = true)
|
||||
private String name;
|
||||
|
||||
private String owner;
|
||||
|
||||
@ApiModelProperty(name = "status", value = "The status of group that needs updating/retrieval.")
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty(name = "parentGroupId", value = "Group ID of parent group")
|
||||
private int parentGroupId;
|
||||
|
||||
@ApiModelProperty(name = "parentPath", value = "Path of parent group")
|
||||
private String parentPath;
|
||||
|
||||
@ApiModelProperty(name = "childrenGroups", value = "Children groups")
|
||||
private List<DeviceGroup> childrenGroups;
|
||||
|
||||
@ApiModelProperty(name = "userRoles", value = "User roles")
|
||||
private List<String> userRoles;
|
||||
|
||||
public DeviceGroupRoleWrapper() {
|
||||
}
|
||||
|
||||
public DeviceGroupRoleWrapper(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(String status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
private Map<String, String> groupProperties;
|
||||
|
||||
public int getGroupId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setGroupId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getOwner() {
|
||||
return owner;
|
||||
}
|
||||
|
||||
public void setOwner(String owner) {
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
public Map<String, String> getGroupProperties() {
|
||||
return groupProperties;
|
||||
}
|
||||
|
||||
public void setGroupProperties(Map<String, String> groupProperties) {
|
||||
this.groupProperties = groupProperties;
|
||||
}
|
||||
|
||||
public int getParentGroupId() {
|
||||
return parentGroupId;
|
||||
}
|
||||
|
||||
public void setParentGroupId(int parentGroupId) {
|
||||
this.parentGroupId = parentGroupId;
|
||||
}
|
||||
|
||||
public String getParentPath() {
|
||||
return parentPath;
|
||||
}
|
||||
|
||||
public void setParentPath(String parentPath) {
|
||||
this.parentPath = parentPath;
|
||||
}
|
||||
|
||||
public List<DeviceGroup> getChildrenGroups() {
|
||||
return childrenGroups;
|
||||
}
|
||||
|
||||
public void setChildrenGroups(List<DeviceGroup> childrenGroups) {
|
||||
this.childrenGroups = childrenGroups;
|
||||
}
|
||||
|
||||
public List<String> getUserRoles() {
|
||||
return userRoles;
|
||||
}
|
||||
|
||||
public void setUserRoles(List<String> userRoles) {
|
||||
this.userRoles = userRoles;
|
||||
}
|
||||
}
|
||||
@ -23,6 +23,7 @@ import io.entgra.device.mgt.core.device.mgt.common.GroupPaginationRequest;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.PaginationRequest;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.ReportManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroup;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupRoleWrapper;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -41,6 +42,18 @@ public interface GroupDAO {
|
||||
*/
|
||||
int addGroup(DeviceGroup deviceGroup, int tenantId) throws GroupManagementDAOException;
|
||||
|
||||
/**
|
||||
* Add properties for device group.
|
||||
* Note that groupId parameter is considered seperately due to the groupId parameter passed with
|
||||
* device group Payload is ignored in the add/update logic instead the internal groupId reference is used.
|
||||
*
|
||||
* @param groups to be added.
|
||||
* @param tenantId of the group.
|
||||
* @return sql execution result.
|
||||
* @throws GroupManagementDAOException
|
||||
*/
|
||||
int addGroupWithRoles(DeviceGroupRoleWrapper groups, int tenantId) throws GroupManagementDAOException;
|
||||
|
||||
/**
|
||||
* Add properties for device group.
|
||||
* Note that groupId parameter is considered seperately due to the groupId parameter passed with
|
||||
@ -53,6 +66,18 @@ public interface GroupDAO {
|
||||
*/
|
||||
boolean addGroupProperties(DeviceGroup deviceGroup, int groupId, int tenantId) throws GroupManagementDAOException;
|
||||
|
||||
/**
|
||||
* Update properties for device group.
|
||||
* Note that groupId parameter is considered seperately due to the groupId parameter passed with
|
||||
* device group Payload is ignored in the add/update logic instead the internal groupId reference is used.
|
||||
*
|
||||
* @param groups to be updated.
|
||||
* @param tenantId of the group.
|
||||
* @return sql execution result.
|
||||
* @throws GroupManagementDAOException
|
||||
*/
|
||||
boolean addGroupPropertiesWithRoles(DeviceGroupRoleWrapper groups, int groupId, int tenantId) throws GroupManagementDAOException;
|
||||
|
||||
/**
|
||||
* Update properties for device group.
|
||||
* Note that groupId parameter is considered seperately due to the groupId parameter passed with
|
||||
@ -413,4 +438,4 @@ public interface GroupDAO {
|
||||
List<String> groupNames)
|
||||
throws GroupManagementDAOException;
|
||||
|
||||
}
|
||||
}
|
||||
@ -18,6 +18,7 @@
|
||||
|
||||
package io.entgra.device.mgt.core.device.mgt.core.dao.impl;
|
||||
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupRoleWrapper;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@ -53,7 +54,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
throws GroupManagementDAOException {
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH FROM DM_GROUP "
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH, PARENT_GROUP_ID FROM DM_GROUP "
|
||||
+ "WHERE TENANT_ID = ?";
|
||||
if (StringUtils.isNotBlank(request.getGroupName())) {
|
||||
sql += " AND GROUP_NAME LIKE ?";
|
||||
@ -115,7 +116,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH FROM DM_GROUP WHERE TENANT_ID = ?";
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH, PARENT_GROUP_ID FROM DM_GROUP WHERE TENANT_ID = ?";
|
||||
if (StringUtils.isNotBlank(request.getGroupName())) {
|
||||
sql += " AND GROUP_NAME LIKE ?";
|
||||
}
|
||||
@ -179,11 +180,11 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql;
|
||||
if (deviceGroup.getStatus() == null || deviceGroup.getStatus().isEmpty()) {
|
||||
sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, PARENT_PATH) "
|
||||
+ "VALUES (?, ?, ?, ?, ?)";
|
||||
} else {
|
||||
sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, PARENT_PATH, STATUS) "
|
||||
sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, PARENT_PATH, PARENT_GROUP_ID) "
|
||||
+ "VALUES (?, ?, ?, ?, ?, ?)";
|
||||
} else {
|
||||
sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, PARENT_PATH, PARENT_GROUP_ID, STATUS) "
|
||||
+ "VALUES (?, ?, ?, ?, ?, ?, ?)";
|
||||
hasStatus = true;
|
||||
}
|
||||
stmt = conn.prepareStatement(sql, new String[]{"ID"});
|
||||
@ -192,10 +193,10 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
stmt.setString(3, deviceGroup.getOwner());
|
||||
stmt.setInt(4, tenantId);
|
||||
stmt.setString(5, deviceGroup.getParentPath());
|
||||
stmt.setInt(6, deviceGroup.getParentGroupId());
|
||||
if (hasStatus) {
|
||||
stmt.setString(6, deviceGroup.getStatus());
|
||||
stmt.setString(7, deviceGroup.getStatus());
|
||||
}
|
||||
|
||||
stmt.executeUpdate();
|
||||
rs = stmt.getGeneratedKeys();
|
||||
if (rs.next()) {
|
||||
@ -210,6 +211,47 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int addGroupWithRoles(DeviceGroupRoleWrapper groups, int tenantId) throws GroupManagementDAOException {
|
||||
int groupId = -1;
|
||||
boolean hasStatus = false;
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql;
|
||||
if (groups.getStatus() == null || groups.getStatus().isEmpty()) {
|
||||
sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, PARENT_PATH, PARENT_GROUP_ID) "
|
||||
+ "VALUES (?, ?, ?, ?, ?, ?)";
|
||||
} else {
|
||||
sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, PARENT_PATH, PARENT_GROUP_ID, STATUS) "
|
||||
+ "VALUES (?, ?, ?, ?, ?, ?, ?)";
|
||||
hasStatus = true;
|
||||
}
|
||||
try (PreparedStatement stmt = conn.prepareStatement(sql, new String[]{"ID"})) {
|
||||
stmt.setString(1, groups.getDescription());
|
||||
stmt.setString(2, groups.getName());
|
||||
stmt.setString(3, groups.getOwner());
|
||||
stmt.setInt(4, tenantId);
|
||||
stmt.setString(5, groups.getParentPath());
|
||||
stmt.setInt(6, groups.getParentGroupId());
|
||||
if (hasStatus) {
|
||||
stmt.setString(7, groups.getStatus());
|
||||
}
|
||||
stmt.executeUpdate();
|
||||
try (ResultSet rs = stmt.getGeneratedKeys();) {
|
||||
if (rs.next()) {
|
||||
groupId = rs.getInt(1);
|
||||
}
|
||||
return groupId;
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while adding deviceGroup '" +
|
||||
groups.getName() + "'";
|
||||
log.error(msg);
|
||||
throw new GroupManagementDAOException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean addGroupProperties(DeviceGroup deviceGroup, int groupId, int tenantId)
|
||||
throws GroupManagementDAOException {
|
||||
boolean status;
|
||||
@ -238,6 +280,33 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
return status;
|
||||
}
|
||||
|
||||
public boolean addGroupPropertiesWithRoles(DeviceGroupRoleWrapper groups, int groupId, int tenantId)
|
||||
throws GroupManagementDAOException {
|
||||
boolean status;
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
try (PreparedStatement stmt = conn.prepareStatement(
|
||||
"INSERT INTO GROUP_PROPERTIES(GROUP_ID, PROPERTY_NAME, " +
|
||||
"PROPERTY_VALUE, TENANT_ID) VALUES (?, ?, ?, ?)")) {
|
||||
for (Map.Entry<String, String> entry : groups.getGroupProperties().entrySet()) {
|
||||
stmt.setInt(1, groupId);
|
||||
stmt.setString(2, entry.getKey());
|
||||
stmt.setString(3, entry.getValue());
|
||||
stmt.setInt(4, tenantId);
|
||||
stmt.addBatch();
|
||||
}
|
||||
stmt.executeBatch();
|
||||
status = true;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while adding properties for group '" +
|
||||
groups.getName() + "' values : " + groups.getGroupProperties();
|
||||
log.error(msg);
|
||||
throw new GroupManagementDAOException(msg, e);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
public boolean updateGroupProperties(DeviceGroup deviceGroup, int groupId, int tenantId)
|
||||
throws GroupManagementDAOException {
|
||||
boolean status;
|
||||
@ -495,7 +564,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
ResultSet resultSet = null;
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH FROM DM_GROUP WHERE ID = ? "
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH, PARENT_GROUP_ID FROM DM_GROUP WHERE ID = ? "
|
||||
+ "AND TENANT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, groupId);
|
||||
@ -518,7 +587,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
public List<DeviceGroup> getChildrenGroups(String parentPath, int tenantId) throws GroupManagementDAOException {
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH FROM DM_GROUP "
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH, PARENT_GROUP_ID FROM DM_GROUP "
|
||||
+ "WHERE PARENT_PATH LIKE ? AND TENANT_ID = ?";
|
||||
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||
stmt.setString(1, parentPath + "%");
|
||||
@ -543,7 +612,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
public List<DeviceGroup> getRootGroups(int tenantId) throws GroupManagementDAOException {
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH FROM DM_GROUP "
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH, PARENT_GROUP_ID FROM DM_GROUP "
|
||||
+ "WHERE PARENT_PATH LIKE ? AND TENANT_ID = ?";
|
||||
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||
stmt.setString(1, "/");
|
||||
@ -571,7 +640,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
List<DeviceGroup> deviceGroupBuilders = new ArrayList<>();
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql = "SELECT G.ID, G.GROUP_NAME, G.DESCRIPTION, G.OWNER, G.STATUS, G.PARENT_PATH FROM DM_GROUP G " +
|
||||
String sql = "SELECT G.ID, G.GROUP_NAME, G.DESCRIPTION, G.OWNER, G.STATUS, G.PARENT_PATH, G.PARENT_GROUP_ID FROM DM_GROUP G " +
|
||||
"INNER JOIN DM_DEVICE_GROUP_MAP GM ON G.ID = GM.GROUP_ID " +
|
||||
"WHERE GM.DEVICE_ID = ? AND GM.TENANT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
@ -709,7 +778,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql =
|
||||
"SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH FROM DM_GROUP "
|
||||
"SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH, PARENT_GROUP_ID FROM DM_GROUP "
|
||||
+ "WHERE LOWER(GROUP_NAME) = LOWER(?) AND TENANT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, groupName);
|
||||
@ -880,7 +949,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
List<DeviceGroup> deviceGroupList = null;
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH FROM DM_GROUP g, " +
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH, PARENT_GROUP_ID P FROM DM_GROUP g, " +
|
||||
"(SELECT GROUP_ID FROM DM_ROLE_GROUP_MAP WHERE ROLE IN (";
|
||||
|
||||
int index = 0;
|
||||
@ -994,7 +1063,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
List<DeviceGroup> deviceGroupList = null;
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH FROM DM_GROUP "
|
||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER, STATUS, PARENT_PATH, PARENT_GROUP_ID FROM DM_GROUP "
|
||||
+ "WHERE OWNER = ? AND TENANT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, username);
|
||||
|
||||
@ -18,6 +18,9 @@
|
||||
|
||||
package io.entgra.device.mgt.core.device.mgt.core.dao.impl.group;
|
||||
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupRoleWrapper;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.solr.common.StringUtils;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.Device;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroup;
|
||||
@ -39,6 +42,8 @@ import java.util.List;
|
||||
*/
|
||||
public class PostgreSQLGroupDAOImpl extends AbstractGroupDAOImpl {
|
||||
|
||||
private static final Log log = LogFactory.getLog(PostgreSQLGroupDAOImpl.class);
|
||||
|
||||
@Override
|
||||
public int addGroup(DeviceGroup deviceGroup, int tenantId) throws GroupManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
@ -49,7 +54,7 @@ public class PostgreSQLGroupDAOImpl extends AbstractGroupDAOImpl {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql;
|
||||
if(StringUtils.isEmpty(deviceGroup.getStatus())) {
|
||||
sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, PARENT_PATH) " +
|
||||
sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, PARENT_PATH, PARENT_GROUP_ID) " +
|
||||
"VALUES (?, ?, ?, ?) RETURNING ID";
|
||||
} else {
|
||||
sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, PARENT_PATH, STATUS) " +
|
||||
@ -79,6 +84,46 @@ public class PostgreSQLGroupDAOImpl extends AbstractGroupDAOImpl {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int addGroupWithRoles(DeviceGroupRoleWrapper groups, int tenantId) throws GroupManagementDAOException {
|
||||
int groupId = -1;
|
||||
boolean hasStatus = false;
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql;
|
||||
if (StringUtils.isEmpty(groups.getStatus())) {
|
||||
sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, PARENT_PATH) " +
|
||||
"VALUES (?, ?, ?, ?) RETURNING ID";
|
||||
} else {
|
||||
sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, PARENT_PATH, STATUS) " +
|
||||
"VALUES (?, ?, ?, ?, ?) RETURNING ID";
|
||||
hasStatus = true;
|
||||
}
|
||||
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||
stmt.setString(1, groups.getDescription());
|
||||
stmt.setString(2, groups.getName());
|
||||
stmt.setString(3, groups.getOwner());
|
||||
stmt.setInt(4, tenantId);
|
||||
stmt.setString(5, groups.getParentPath());
|
||||
if (hasStatus) {
|
||||
stmt.setString(6, groups.getStatus());
|
||||
}
|
||||
stmt.execute();
|
||||
try (ResultSet rs = stmt.getGeneratedKeys()) {
|
||||
if (rs.next()) {
|
||||
groupId = rs.getInt(1);
|
||||
}
|
||||
return groupId;
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while adding deviceGroup '" +
|
||||
groups.getName() + "'";
|
||||
log.error(msg);
|
||||
throw new GroupManagementDAOException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Device> getDevices(int groupId, int startIndex, int rowCount, int tenantId)
|
||||
throws GroupManagementDAOException {
|
||||
|
||||
@ -87,6 +87,7 @@ public final class GroupManagementDAOUtil {
|
||||
group.setOwner(resultSet.getString("OWNER"));
|
||||
group.setStatus(resultSet.getString("STATUS"));
|
||||
group.setParentPath(resultSet.getString("PARENT_PATH"));
|
||||
group.setParentGroupId(resultSet.getInt("PARENT_GROUP_ID"));
|
||||
return group;
|
||||
}
|
||||
|
||||
|
||||
@ -24,6 +24,7 @@ import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceNotFoundExce
|
||||
import io.entgra.device.mgt.core.device.mgt.common.GroupPaginationRequest;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.PaginationResult;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroup;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupRoleWrapper;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceTypesOfGroups;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupAlreadyExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupManagementException;
|
||||
@ -48,6 +49,16 @@ public interface GroupManagementProviderService {
|
||||
void createGroup(DeviceGroup deviceGroup, String defaultRole,
|
||||
String[] defaultPermissions) throws GroupManagementException, GroupAlreadyExistException;
|
||||
|
||||
/**
|
||||
* Add new device group and create default role with default permissions.
|
||||
*
|
||||
* @param groups to add
|
||||
* @param defaultRole of the deviceGroup
|
||||
* @param defaultPermissions of the default role
|
||||
* @throws GroupManagementException
|
||||
*/
|
||||
void createGroupWithRoles(DeviceGroupRoleWrapper groups, String defaultRole, String[] defaultPermissions) throws GroupManagementException, GroupAlreadyExistException, RoleDoesNotExistException;
|
||||
|
||||
/**
|
||||
* Update existing device group.
|
||||
*
|
||||
|
||||
@ -18,9 +18,24 @@
|
||||
|
||||
package io.entgra.device.mgt.core.device.mgt.core.service;
|
||||
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroup;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupConstants;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupRoleWrapper;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceTypesOfGroups;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupAlreadyExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupNotExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.RoleDoesNotExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.dao.DeviceDAO;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.dao.DeviceManagementDAOException;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.dao.DeviceManagementDAOFactory;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.dao.GroupDAO;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.dao.GroupManagementDAOException;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.dao.GroupManagementDAOFactory;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.netbeans.lib.cvsclient.commandLine.command.status;
|
||||
import org.wso2.carbon.CarbonConstants;
|
||||
import org.wso2.carbon.context.CarbonContext;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
@ -33,14 +48,6 @@ import io.entgra.device.mgt.core.device.mgt.common.GroupPaginationRequest;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.PaginationResult;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.TrackerAlreadyExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.TransactionManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroup;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceGroupConstants;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.DeviceTypesOfGroups;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupAlreadyExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.GroupNotExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.group.mgt.RoleDoesNotExistException;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.dao.*;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.event.config.GroupAssignmentEventOperationExecutor;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.geo.task.GeoFenceEventOperationManager;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.internal.DeviceManagementDataHolder;
|
||||
@ -57,7 +64,6 @@ import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -142,6 +148,59 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid
|
||||
}
|
||||
}
|
||||
|
||||
public void createGroupWithRoles(DeviceGroupRoleWrapper groups, String defaultRole, String[] defaultPermissions) throws GroupManagementException {
|
||||
if (groups == null) {
|
||||
String msg = "Received incomplete data for createGroup";
|
||||
log.error(msg);
|
||||
throw new GroupManagementException(msg);
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Creating group '" + groups.getName() + "'");
|
||||
}
|
||||
int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
try {
|
||||
GroupManagementDAOFactory.beginTransaction();
|
||||
DeviceGroup existingGroup = this.groupDAO.getGroup(groups.getName(), tenantId);
|
||||
if (existingGroup == null) {
|
||||
if (groups.getParentGroupId() == 0) {
|
||||
groups.setParentPath(DeviceGroupConstants.HierarchicalGroup.SEPERATOR);
|
||||
} else {
|
||||
DeviceGroup immediateParentGroup = groupDAO.getGroup(groups.getParentGroupId(), tenantId);
|
||||
if (immediateParentGroup == null) {
|
||||
GroupManagementDAOFactory.rollbackTransaction();
|
||||
String msg = "Parent group with group ID '" + groups.getParentGroupId() + "' does not exist. Hence creating of group '" + groups.getName() + "' was not success";
|
||||
log.error(msg);
|
||||
throw new GroupManagementException(msg);
|
||||
}
|
||||
String parentPath = DeviceManagerUtil.createParentPath(immediateParentGroup);
|
||||
groups.setParentPath(parentPath);
|
||||
}
|
||||
int updatedGroupID = this.groupDAO.addGroupWithRoles(groups, tenantId);
|
||||
if (groups.getGroupProperties() != null && groups.getGroupProperties().size() > 0) {
|
||||
this.groupDAO.addGroupPropertiesWithRoles(groups, updatedGroupID, tenantId);
|
||||
}
|
||||
GroupManagementDAOFactory.commitTransaction();
|
||||
} else {
|
||||
throw new GroupManagementException("Group exist with name " + groups.getName());
|
||||
}
|
||||
} catch (GroupManagementDAOException e) {
|
||||
GroupManagementDAOFactory.rollbackTransaction();
|
||||
String msg = e.getMessage();
|
||||
log.error(msg, e);
|
||||
throw new GroupManagementException(msg, e);
|
||||
} catch (TransactionManagementException e) {
|
||||
String msg = "Error occurred while initiating transaction.";
|
||||
log.error(msg, e);
|
||||
throw new GroupManagementException(msg, e);
|
||||
} finally {
|
||||
GroupManagementDAOFactory.closeConnection();
|
||||
}
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("DeviceGroup added: " + groups.getName());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
|
||||
@ -16,6 +16,7 @@ CREATE TABLE IF NOT EXISTS DM_GROUP (
|
||||
OWNER VARCHAR(45) DEFAULT NULL,
|
||||
PARENT_PATH VARCHAR(255) DEFAULT NULL,
|
||||
TENANT_ID INTEGER DEFAULT 0,
|
||||
PARENT_GROUP_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (ID)
|
||||
);
|
||||
|
||||
|
||||
@ -20,6 +20,7 @@ CREATE TABLE IF NOT EXISTS DM_GROUP (
|
||||
OWNER VARCHAR(45) DEFAULT NULL,
|
||||
PARENT_PATH VARCHAR(255) DEFAULT NULL,
|
||||
TENANT_ID INTEGER DEFAULT 0,
|
||||
PARENT_GROUP_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (ID)
|
||||
);
|
||||
|
||||
|
||||
@ -25,6 +25,7 @@ CREATE TABLE IF NOT EXISTS DM_GROUP (
|
||||
OWNER VARCHAR(255) DEFAULT NULL,
|
||||
PARENT_PATH VARCHAR(255) DEFAULT NULL,
|
||||
TENANT_ID INTEGER DEFAULT 0,
|
||||
PARENT_GROUP_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (ID)
|
||||
);
|
||||
|
||||
|
||||
@ -41,6 +41,7 @@ IF NOT EXISTS(SELECT *
|
||||
OWNER VARCHAR(255) DEFAULT NULL,
|
||||
PARENT_PATH VARCHAR(255) DEFAULT NULL,
|
||||
TENANT_ID INTEGER DEFAULT 0,
|
||||
PARENT_GROUP_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (ID)
|
||||
);
|
||||
|
||||
|
||||
@ -29,6 +29,7 @@ CREATE TABLE IF NOT EXISTS DM_GROUP (
|
||||
OWNER VARCHAR(255) DEFAULT NULL,
|
||||
PARENT_PATH VARCHAR(255) DEFAULT NULL,
|
||||
TENANT_ID INTEGER DEFAULT 0,
|
||||
PARENT_GROUP_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (ID)
|
||||
)
|
||||
ENGINE = InnoDB;
|
||||
|
||||
@ -52,6 +52,7 @@ CREATE TABLE DM_GROUP (
|
||||
OWNER VARCHAR2(255) DEFAULT NULL,
|
||||
PARENT_PATH VARCHAR2(255) DEFAULT NULL,
|
||||
TENANT_ID NUMBER(10) DEFAULT 0,
|
||||
PARENT_GROUP_ID NUMBER(10) DEFAULT 0,
|
||||
CONSTRAINT PK_DM_GROUP PRIMARY KEY (ID)
|
||||
)
|
||||
/
|
||||
|
||||
@ -23,6 +23,7 @@ CREATE TABLE IF NOT EXISTS DM_GROUP (
|
||||
OWNER VARCHAR(45) DEFAULT NULL,
|
||||
PARENT_PATH VARCHAR(255) DEFAULT NULL,
|
||||
TENANT_ID INTEGER DEFAULT 0,
|
||||
PARENT_GROUP_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (ID)
|
||||
)
|
||||
;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user