mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
HierarchicalGrouping (#153)
Goals Complete hierarchical grouping task https://roadmap.entgra.net/issues/9528 and https://roadmap.entgra.net/issues/9529 Approach Fix the encountered issues Co-authored-by: ThilinaPremachandra <thilina@entgra.io> Co-authored-by: Pahansith Gunathilake <pahansith@entgra.io> Reviewed-on: https://repository.entgra.net/community/device-mgt-core/pulls/153 Co-authored-by: Thilina Sandaruwan <thilina@entgra.io> Co-committed-by: Thilina Sandaruwan <thilina@entgra.io>
This commit is contained in:
parent
729f1fd85f
commit
0ce7cd954c
@ -211,6 +211,19 @@ public interface GroupDAO {
|
||||
*/
|
||||
List<DeviceGroup> getGroups(GroupPaginationRequest paginationRequest, int tenantId) throws GroupManagementDAOException;
|
||||
|
||||
/**
|
||||
* Get paginated list of Device Groups in tenant with specified device group ids.
|
||||
*
|
||||
* @param paginationRequest to filter results.
|
||||
* @param deviceGroupIds of groups required.
|
||||
* @param tenantId of user's tenant.
|
||||
* @param isWithParentPath of user's ParentPath.
|
||||
* @return List of all Device Groups in tenant.
|
||||
* @throws GroupManagementDAOException
|
||||
*/
|
||||
List<DeviceGroup> getGroups(GroupPaginationRequest paginationRequest, List<Integer> deviceGroupIds,
|
||||
int tenantId, boolean isWithParentPath) throws GroupManagementDAOException;
|
||||
|
||||
/**
|
||||
* Get paginated list of Device Groups in tenant with specified device group ids.
|
||||
*
|
||||
|
||||
@ -165,6 +165,73 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
throw new GroupManagementDAOException(msg, e);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public List<DeviceGroup> getGroups(GroupPaginationRequest request, List<Integer> deviceGroupIds,
|
||||
int tenantId, boolean isWithParentPath) throws GroupManagementDAOException {
|
||||
int deviceGroupIdsCount = deviceGroupIds.size();
|
||||
if (deviceGroupIdsCount == 0) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
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 ?";
|
||||
}
|
||||
if (StringUtils.isNotBlank(request.getOwner())) {
|
||||
sql += " AND OWNER LIKE ?";
|
||||
}
|
||||
if (StringUtils.isNotBlank(request.getParentPath())) {
|
||||
if(isWithParentPath){
|
||||
sql += " AND PARENT_PATH LIKE ?";
|
||||
}
|
||||
}
|
||||
sql += " AND ID IN (";
|
||||
for (int i = 0; i < deviceGroupIdsCount; i++) {
|
||||
sql += (deviceGroupIdsCount - 1 != i) ? "?," : "?";
|
||||
}
|
||||
sql += ")";
|
||||
if (request.getRowCount() != 0) {
|
||||
sql += " LIMIT ? OFFSET ?";
|
||||
}
|
||||
|
||||
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||
int paramIndex = 1;
|
||||
stmt.setInt(paramIndex++, tenantId);
|
||||
if (StringUtils.isNotBlank(request.getGroupName())) {
|
||||
stmt.setString(paramIndex++, request.getGroupName() + "%");
|
||||
}
|
||||
if (StringUtils.isNotBlank(request.getOwner())) {
|
||||
stmt.setString(paramIndex++, request.getOwner() + "%");
|
||||
}
|
||||
if (StringUtils.isNotBlank(request.getParentPath())) {
|
||||
if(isWithParentPath){
|
||||
stmt.setString(paramIndex++, request.getParentPath());
|
||||
}
|
||||
}
|
||||
for (Integer deviceGroupId : deviceGroupIds) {
|
||||
stmt.setInt(paramIndex++, deviceGroupId);
|
||||
}
|
||||
if (request.getRowCount() != 0) {
|
||||
stmt.setInt(paramIndex++, request.getRowCount());
|
||||
stmt.setInt(paramIndex, request.getStartIndex());
|
||||
}
|
||||
List<DeviceGroup> deviceGroupList = new ArrayList<>();
|
||||
try (ResultSet resultSet = stmt.executeQuery()) {
|
||||
while (resultSet.next()) {
|
||||
deviceGroupList.add(GroupManagementDAOUtil.loadGroup(resultSet));
|
||||
}
|
||||
}
|
||||
return deviceGroupList;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while retrieving groups of groups IDs " + deviceGroupIds.toString()
|
||||
+ " in tenant: " + tenantId;
|
||||
log.error(msg);
|
||||
throw new GroupManagementDAOException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int addGroup(DeviceGroup deviceGroup, int tenantId) throws GroupManagementDAOException {
|
||||
@ -373,7 +440,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
try {
|
||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||
String sql = "UPDATE DM_GROUP SET DESCRIPTION = ?, GROUP_NAME = ?, OWNER = ?, STATUS = ?, "
|
||||
+ "PARENT_PATH = ? WHERE ID = ? AND TENANT_ID = ?";
|
||||
+ "PARENT_PATH = ?, PARENT_GROUP_ID = ? WHERE ID = ? AND TENANT_ID = ?";
|
||||
try (PreparedStatement stmt = conn.prepareStatement(sql)){
|
||||
for (DeviceGroup deviceGroup : deviceGroups) {
|
||||
stmt.setString(1, deviceGroup.getDescription());
|
||||
@ -381,8 +448,9 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||
stmt.setString(3, deviceGroup.getOwner());
|
||||
stmt.setString(4, deviceGroup.getStatus());
|
||||
stmt.setString(5, deviceGroup.getParentPath());
|
||||
stmt.setInt(6, deviceGroup.getGroupId());
|
||||
stmt.setInt(7, tenantId);
|
||||
stmt.setInt(6, deviceGroup.getParentGroupId());
|
||||
stmt.setInt(7, deviceGroup.getGroupId());
|
||||
stmt.setInt(8, tenantId);
|
||||
stmt.addBatch();
|
||||
}
|
||||
stmt.executeBatch();
|
||||
|
||||
@ -312,6 +312,13 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid
|
||||
newParentPath = DeviceGroupConstants.HierarchicalGroup.SEPERATOR;
|
||||
}
|
||||
childrenGroup.setParentPath(newParentPath);
|
||||
if (!newParentPath.equals(DeviceGroupConstants.HierarchicalGroup.SEPERATOR)) {
|
||||
String[] groupIds = newParentPath.split(DeviceGroupConstants.HierarchicalGroup.SEPERATOR);
|
||||
int latestGroupId = Integer.parseInt(groupIds[groupIds.length - 1]);
|
||||
childrenGroup.setParentGroupId(latestGroupId);
|
||||
} else {
|
||||
childrenGroup.setParentGroupId(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -527,6 +534,7 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Get groups with hierarchy " + request.toString());
|
||||
}
|
||||
boolean isWithParentPath = false;
|
||||
DeviceManagerUtil.validateGroupListPageSize(request);
|
||||
List<DeviceGroup> rootGroups;
|
||||
try {
|
||||
@ -538,7 +546,7 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid
|
||||
} else {
|
||||
List<Integer> allDeviceGroupIdsOfUser = getGroupIds(username);
|
||||
GroupManagementDAOFactory.openConnection();
|
||||
rootGroups = this.groupDAO.getGroups(request, allDeviceGroupIdsOfUser, tenantId);
|
||||
rootGroups = this.groupDAO.getGroups(request, allDeviceGroupIdsOfUser, tenantId, isWithParentPath);
|
||||
}
|
||||
String parentPath;
|
||||
List<DeviceGroup> childrenGroups;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user