From 548ad336bfeeb3341d9a30a559d6a7b6770dca3c Mon Sep 17 00:00:00 2001 From: Ace Date: Fri, 18 Oct 2019 18:18:40 +0530 Subject: [PATCH] Adding status column to GROUP table and honuring same in API --- .../admin/GroupManagementAdminService.java | 14 ++++- .../impl/GroupManagementServiceImpl.java | 2 + .../GroupManagementAdminServiceImpl.java | 15 ++++- .../mgt/common/GroupPaginationRequest.java | 9 +++ .../mgt/common/group/mgt/DeviceGroup.java | 11 ++++ .../group/mgt/DeviceGroupConstants.java | 5 ++ .../carbon/device/mgt/core/dao/GroupDAO.java | 2 +- .../core/dao/impl/AbstractGroupDAOImpl.java | 56 ++++++++++++++++--- .../dao/impl/group/GenericGroupDAOImpl.java | 9 +++ .../dao/impl/group/OracleGroupDAOImpl.java | 9 +++ .../impl/group/PostgreSQLGroupDAOImpl.java | 25 ++++++++- .../dao/impl/group/SQLServerGroupDAOImpl.java | 9 +++ .../DeviceManagementProviderServiceImpl.java | 1 + .../GroupManagementProviderService.java | 8 +++ .../GroupManagementProviderServiceImpl.java | 26 ++++++++- .../src/test/resources/sql/h2.sql | 1 + .../src/test/resources/sql/CreateH2TestDB.sql | 1 + .../src/main/resources/dbscripts/cdm/h2.sql | 1 + .../main/resources/dbscripts/cdm/mssql.sql | 1 + .../main/resources/dbscripts/cdm/mysql.sql | 1 + .../main/resources/dbscripts/cdm/oracle.sql | 1 + .../resources/dbscripts/cdm/postgresql.sql | 1 + 22 files changed, 190 insertions(+), 18 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java index 3e47728c3df..c42739f2960 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java @@ -142,7 +142,13 @@ public interface GroupManagementAdminService { value = "Provide how many device details you require from the starting pagination index/offset.", defaultValue = "5") @QueryParam("limit") - int limit); + int limit, + + @ApiParam( + name = "status", + value = "status of group to be retrieve.") + @QueryParam("status") + String status); @Path("/count") @GET @@ -190,6 +196,10 @@ public interface GroupManagementAdminService { message = "Internal Server Error. \n Server error occurred while fetching the group count.", response = ErrorResponse.class) }) - Response getGroupCount(); + Response getGroupCount(@ApiParam( + name = "status", + value = "status of groups of which count should be retrieved") + @QueryParam("status") + String status); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java index e2cda27c0ca..2c11397b9a0 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java @@ -29,6 +29,7 @@ import org.wso2.carbon.device.mgt.common.exceptions.DeviceNotFoundException; import org.wso2.carbon.device.mgt.common.GroupPaginationRequest; import org.wso2.carbon.device.mgt.common.PaginationResult; import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; +import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroupConstants; import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyExistException; import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException; import org.wso2.carbon.device.mgt.common.group.mgt.RoleDoesNotExistException; @@ -100,6 +101,7 @@ public class GroupManagementServiceImpl implements GroupManagementService { return Response.status(Response.Status.BAD_REQUEST).build(); } group.setOwner(owner); + group.setStatus(DeviceGroupConstants.GroupStatus.ACTIVE); try { DeviceMgtAPIUtils.getGroupManagementProviderService().createGroup(group, DEFAULT_ADMIN_ROLE, DEFAULT_ADMIN_PERMISSIONS); return Response.status(Response.Status.CREATED).build(); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java index f1783cb619d..dcb02382041 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java @@ -20,6 +20,7 @@ package org.wso2.carbon.device.mgt.jaxrs.service.impl.admin; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.solr.common.StringUtils; import org.wso2.carbon.device.mgt.common.GroupPaginationRequest; import org.wso2.carbon.device.mgt.common.PaginationResult; import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException; @@ -36,7 +37,7 @@ public class GroupManagementAdminServiceImpl implements GroupManagementAdminServ private static final Log log = LogFactory.getLog(GroupManagementAdminServiceImpl.class); @Override - public Response getGroups(String name, String owner, int offset, int limit) { + public Response getGroups(String name, String owner, int offset, int limit, String status) { try { RequestValidationUtil.validatePaginationParameters(offset, limit); GroupPaginationRequest request = new GroupPaginationRequest(offset, limit); @@ -46,6 +47,9 @@ public class GroupManagementAdminServiceImpl implements GroupManagementAdminServ if (owner != null) { request.setOwner(owner.toUpperCase()); } + if (status != null && !status.isEmpty()) { + request.setStatus(status.toUpperCase()); + } PaginationResult deviceGroupsResult = DeviceMgtAPIUtils.getGroupManagementProviderService() .getGroups(request); DeviceGroupList deviceGroupList = new DeviceGroupList(); @@ -65,9 +69,14 @@ public class GroupManagementAdminServiceImpl implements GroupManagementAdminServ } @Override - public Response getGroupCount() { + public Response getGroupCount(String status) { try { - int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroupCount(); + int count; + if (status == null || status.isEmpty()) { + count = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroupCount(); + } else { + count = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroupCountByStatus(status); + } return Response.status(Response.Status.OK).entity(count).build(); } catch (GroupManagementException e) { String msg = "ErrorResponse occurred while retrieving group count."; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/GroupPaginationRequest.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/GroupPaginationRequest.java index 3c17ce32a96..d7a74f199b1 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/GroupPaginationRequest.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/GroupPaginationRequest.java @@ -27,12 +27,21 @@ public class GroupPaginationRequest { private int rowCount; private String owner; private String groupName; + private String status; public GroupPaginationRequest(int start, int rowCount) { this.startIndex = start; this.rowCount = rowCount; } + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + public int getStartIndex() { return startIndex; } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/group/mgt/DeviceGroup.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/group/mgt/DeviceGroup.java index 9dff8756724..20ed01fb492 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/group/mgt/DeviceGroup.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/group/mgt/DeviceGroup.java @@ -44,6 +44,17 @@ public class DeviceGroup implements Serializable { private String owner; + @ApiModelProperty(name = "status", value = "The status of group that needs updating/retrieval.") + private String status; + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + private Map groupProperties; public DeviceGroup() {} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/group/mgt/DeviceGroupConstants.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/group/mgt/DeviceGroupConstants.java index aab0fc16f3a..039219bfe88 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/group/mgt/DeviceGroupConstants.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/group/mgt/DeviceGroupConstants.java @@ -65,6 +65,11 @@ public class DeviceGroupConstants { public static final String DEFAULT_VIEW_EVENTS = "view-events"; } + public static class GroupStatus { + public static final String ACTIVE = "ACTIVE"; + public static final String INACTIVE = "INACTIVE"; + } + public static class Permissions { public static final String[] DEFAULT_ADMIN_PERMISSIONS = {"/permission/device-mgt/groups", "/permission/device-mgt/user/groups"}; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/GroupDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/GroupDAO.java index c181004dc49..9c2264b3f08 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/GroupDAO.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/GroupDAO.java @@ -158,7 +158,7 @@ public interface GroupDAO { * @return List of all Device Groups in tenant. * @throws GroupManagementDAOException */ - int getGroupCount(int tenantId) throws GroupManagementDAOException; + int getGroupCount(int tenantId, String status) throws GroupManagementDAOException; /** * Get paginated count of Device Groups in tenant. diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java index cb893438b44..d4207c4047c 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java @@ -18,6 +18,7 @@ package org.wso2.carbon.device.mgt.core.dao.impl; +import org.apache.solr.common.StringUtils; import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.GroupPaginationRequest; import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; @@ -46,14 +47,25 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO { PreparedStatement stmt = null; ResultSet rs; int groupId = -1; + boolean hasStatus = false; try { Connection conn = GroupManagementDAOFactory.getConnection(); - String sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID) VALUES (?, ?, ?, ?)"; + String sql; + if(deviceGroup.getStatus() == null || deviceGroup.getStatus().isEmpty()){ + sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID) VALUES (?, ?, ?, ?)"; + } else { + sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, STATUS) VALUES (?, ?, ?, ?, ?)"; + hasStatus = true; + } stmt = conn.prepareStatement(sql, new String[]{"ID"}); stmt.setString(1, deviceGroup.getDescription()); stmt.setString(2, deviceGroup.getName()); stmt.setString(3, deviceGroup.getOwner()); stmt.setInt(4, tenantId); + if(hasStatus) { + stmt.setString(5, deviceGroup.getStatus()); + } + stmt.executeUpdate(); rs = stmt.getGeneratedKeys(); if (rs.next()) { @@ -128,16 +140,26 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO { public void updateGroup(DeviceGroup deviceGroup, int groupId, int tenantId) throws GroupManagementDAOException { PreparedStatement stmt = null; + boolean hasStatus = false; try { Connection conn = GroupManagementDAOFactory.getConnection(); String sql = "UPDATE DM_GROUP SET DESCRIPTION = ?, GROUP_NAME = ?, OWNER = ? WHERE ID = ? AND TENANT_ID = ?"; + + if(deviceGroup.getStatus() != null && !deviceGroup.getStatus().isEmpty()){ + sql = "UPDATE DM_GROUP SET DESCRIPTION = ?, GROUP_NAME = ?, OWNER = ?, STATUS = ? WHERE ID = ? AND TENANT_ID = ?"; + hasStatus = true; + } stmt = conn.prepareStatement(sql); - stmt.setString(1, deviceGroup.getDescription()); - stmt.setString(2, deviceGroup.getName()); - stmt.setString(3, deviceGroup.getOwner()); - stmt.setInt(4, groupId); - stmt.setInt(5, tenantId); + int paramIndex = 1; + stmt.setString(paramIndex++, deviceGroup.getDescription()); + stmt.setString(paramIndex++, deviceGroup.getName()); + stmt.setString(paramIndex++, deviceGroup.getOwner()); + if(hasStatus) { + stmt.setString(paramIndex++, deviceGroup.getStatus()); + } + stmt.setInt(paramIndex++, groupId); + stmt.setInt(paramIndex++, tenantId); stmt.executeUpdate(); } catch (SQLException e) { throw new GroupManagementDAOException("Error occurred while updating deviceGroup '" + @@ -213,8 +235,8 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO { Map properties = new HashMap(); try { Connection conn = GroupManagementDAOFactory.getConnection(); - stmt = conn.prepareStatement( - "SELECT PROPERTY_NAME, PROPERTY_VALUE FROM GROUP_PROPERTIES WHERE GROUP_ID = ? AND TENANT_ID = ?"); + String sql = "SELECT PROPERTY_NAME, PROPERTY_VALUE FROM GROUP_PROPERTIES WHERE GROUP_ID = ? AND TENANT_ID = ?"; + stmt = conn.prepareStatement(sql); stmt.setInt(1, groupId); stmt.setInt(2, tenantId); resultSet = stmt.executeQuery(); @@ -304,14 +326,22 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO { } @Override - public int getGroupCount(int tenantId) throws GroupManagementDAOException { + public int getGroupCount(int tenantId, String status) throws GroupManagementDAOException { PreparedStatement stmt = null; ResultSet resultSet = null; + boolean statusAvailable = false; try { Connection conn = GroupManagementDAOFactory.getConnection(); String sql = "SELECT COUNT(ID) AS GROUP_COUNT FROM DM_GROUP WHERE TENANT_ID = ?"; + if(!StringUtils.isEmpty(status)){ + sql += " AND STATUS = ?"; + statusAvailable = true; + } stmt = conn.prepareStatement(sql); stmt.setInt(1, tenantId); + if(statusAvailable){ + stmt.setString(2, status); + } resultSet = stmt.executeQuery(); if (resultSet.next()) { return resultSet.getInt("GROUP_COUNT"); @@ -335,6 +365,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO { boolean hasGroupName = false; String owner = request.getOwner(); boolean hasOwner = false; + boolean hasStatus = false; try { Connection conn = GroupManagementDAOFactory.getConnection(); @@ -347,6 +378,10 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO { sql += " AND OWNER LIKE ?"; hasOwner = true; } + if(!StringUtils.isEmpty(request.getStatus())){ + sql += " AND STATUS = ?"; + hasStatus = true; + } int paramIndex = 1; stmt = conn.prepareStatement(sql); @@ -357,6 +392,9 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO { if (hasOwner) { stmt.setString(paramIndex, owner + "%"); } + if (hasStatus) { + stmt.setString(paramIndex, request.getStatus()); + } resultSet = stmt.executeQuery(); if (resultSet.next()) { return resultSet.getInt("GROUP_COUNT"); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/GenericGroupDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/GenericGroupDAOImpl.java index 8ef981e701a..ebfa129d42f 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/GenericGroupDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/GenericGroupDAOImpl.java @@ -48,7 +48,9 @@ public class GenericGroupDAOImpl extends AbstractGroupDAOImpl { String groupName = request.getGroupName(); boolean hasGroupName = false; String owner = request.getOwner(); + String status = request.getStatus(); boolean hasOwner = false; + boolean hasStatus = false; boolean hasLimit = request.getRowCount() != 0; try { @@ -62,6 +64,10 @@ public class GenericGroupDAOImpl extends AbstractGroupDAOImpl { sql += " AND UPPER(OWNER) LIKE ?"; hasOwner = true; } + if (status != null && !status.isEmpty()) { + sql += " AND STATUS = ?"; + hasStatus = true; + } if (hasLimit) { sql += " LIMIT ?, ?"; } @@ -75,6 +81,9 @@ public class GenericGroupDAOImpl extends AbstractGroupDAOImpl { if (hasOwner) { stmt.setString(paramIndex++, owner + "%"); } + if (hasStatus) { + stmt.setString(paramIndex++, status.toUpperCase()); + } if (hasLimit) { stmt.setInt(paramIndex++, request.getStartIndex()); stmt.setInt(paramIndex, request.getRowCount()); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/OracleGroupDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/OracleGroupDAOImpl.java index ecbe0013b71..7a540643f28 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/OracleGroupDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/OracleGroupDAOImpl.java @@ -49,7 +49,9 @@ public class OracleGroupDAOImpl extends AbstractGroupDAOImpl { String groupName = request.getGroupName(); boolean hasGroupName = false; String owner = request.getOwner(); + String status = request.getStatus(); boolean hasOwner = false; + boolean hasStatus = false; boolean hasLimit = request.getRowCount() != 0; try { @@ -63,6 +65,10 @@ public class OracleGroupDAOImpl extends AbstractGroupDAOImpl { sql += " AND OWNER LIKE ?"; hasOwner = true; } + if (status != null && !status.isEmpty()) { + sql += " AND STATUS = ?"; + hasStatus = true; + } if (hasLimit) { sql += " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; } @@ -76,6 +82,9 @@ public class OracleGroupDAOImpl extends AbstractGroupDAOImpl { if (hasOwner) { stmt.setString(paramIndex++, owner + "%"); } + if (hasStatus) { + stmt.setString(paramIndex++, status.toUpperCase()); + } if (hasLimit) { stmt.setInt(paramIndex++, request.getStartIndex()); stmt.setInt(paramIndex, request.getRowCount()); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/PostgreSQLGroupDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/PostgreSQLGroupDAOImpl.java index 83020796eff..a677f467ed2 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/PostgreSQLGroupDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/PostgreSQLGroupDAOImpl.java @@ -18,6 +18,7 @@ package org.wso2.carbon.device.mgt.core.dao.impl.group; +import org.apache.solr.common.StringUtils; import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.GroupPaginationRequest; import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; @@ -44,15 +45,26 @@ public class PostgreSQLGroupDAOImpl extends AbstractGroupDAOImpl { PreparedStatement stmt = null; ResultSet rs; int groupId = -1; + boolean hasStatus = false; try { Connection conn = GroupManagementDAOFactory.getConnection(); - String sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID) " + - "VALUES (?, ?, ?, ?) RETURNING ID"; + String sql; + if(StringUtils.isEmpty(deviceGroup.getStatus())) { + sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID) " + + "VALUES (?, ?, ?, ?) RETURNING ID"; + } else { + sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID, STATUS) " + + "VALUES (?, ?, ?, ?, ?) RETURNING ID"; + hasStatus = true; + } stmt = conn.prepareStatement(sql); stmt.setString(1, deviceGroup.getDescription()); stmt.setString(2, deviceGroup.getName()); stmt.setString(3, deviceGroup.getOwner()); stmt.setInt(4, tenantId); + if(hasStatus) { + stmt.setString(5, deviceGroup.getStatus()); + } stmt.execute(); rs = stmt.getGeneratedKeys(); if (rs.next()) { @@ -77,7 +89,9 @@ public class PostgreSQLGroupDAOImpl extends AbstractGroupDAOImpl { String groupName = request.getGroupName(); boolean hasGroupName = false; String owner = request.getOwner(); + String status = request.getStatus(); boolean hasOwner = false; + boolean hasStatus = false; boolean hasLimit = request.getRowCount() != 0; try { @@ -91,6 +105,10 @@ public class PostgreSQLGroupDAOImpl extends AbstractGroupDAOImpl { sql += " AND OWNER LIKE ?"; hasOwner = true; } + if (status != null && !status.isEmpty()) { + sql += " AND STATUS = ?"; + hasStatus = true; + } if (hasLimit) { sql += " LIMIT ? OFFSET ?"; } @@ -104,6 +122,9 @@ public class PostgreSQLGroupDAOImpl extends AbstractGroupDAOImpl { if (hasOwner) { stmt.setString(paramIndex++, owner + "%"); } + if (hasStatus) { + stmt.setString(paramIndex++, status.toUpperCase()); + } if (hasLimit) { stmt.setInt(paramIndex++, request.getRowCount()); stmt.setInt(paramIndex, request.getStartIndex()); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/SQLServerGroupDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/SQLServerGroupDAOImpl.java index 34810ae5ab3..f4f2bddc8ca 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/SQLServerGroupDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/group/SQLServerGroupDAOImpl.java @@ -50,6 +50,8 @@ public class SQLServerGroupDAOImpl extends AbstractGroupDAOImpl { boolean hasGroupName = false; String owner = request.getOwner(); boolean hasOwner = false; + String status = request.getStatus(); + boolean hasStatus = false; boolean hasLimit = request.getRowCount() != 0; try { @@ -63,6 +65,10 @@ public class SQLServerGroupDAOImpl extends AbstractGroupDAOImpl { sql += " AND OWNER LIKE ?"; hasOwner = true; } + if (status != null && !status.isEmpty()) { + sql += " AND STATUS = ?"; + hasStatus = true; + } if (hasLimit) { sql += " ORDER BY ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; } @@ -76,6 +82,9 @@ public class SQLServerGroupDAOImpl extends AbstractGroupDAOImpl { if (hasOwner) { stmt.setString(paramIndex++, owner + "%"); } + if (hasStatus) { + stmt.setString(paramIndex++, status.toUpperCase()); + } if (hasLimit) { stmt.setInt(paramIndex++, request.getStartIndex()); stmt.setInt(paramIndex, request.getRowCount()); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java index d4732d172da..abce164f010 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java @@ -2794,6 +2794,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv defaultGroup = new DeviceGroup(groupName); // Setting system level user (wso2.system.user) as the owner defaultGroup.setOwner(CarbonConstants.REGISTRY_SYSTEM_USERNAME); + defaultGroup.setStatus(DeviceGroupConstants.GroupStatus.ACTIVE); defaultGroup.setDescription("Default system group for devices with " + groupName + " ownership."); try { service.createGroup(defaultGroup, DeviceGroupConstants.Roles.DEFAULT_ADMIN_ROLE, diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderService.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderService.java index 4e3dda809d6..6951862a771 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderService.java @@ -127,6 +127,14 @@ public interface GroupManagementProviderService { */ int getGroupCount() throws GroupManagementException; + /** + * Get all device group count in tenant by group status + * + * @return group count + * @throws GroupManagementException + */ + int getGroupCountByStatus(String status) throws GroupManagementException; + /** * Get device group count of user * diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceImpl.java index 7266bf83da0..457e1217c1b 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceImpl.java @@ -472,7 +472,7 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid try { int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); GroupManagementDAOFactory.openConnection(); - return groupDAO.getGroupCount(tenantId); + return groupDAO.getGroupCount(tenantId, null); } catch (GroupManagementDAOException | SQLException e) { String msg = "Error occurred while retrieving all groups in tenant"; log.error(msg, e); @@ -485,6 +485,29 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid GroupManagementDAOFactory.closeConnection(); } } + @Override + public int getGroupCountByStatus(String status) throws GroupManagementException { + if (log.isDebugEnabled()) { + log.debug("Get groups count by Status"); + } + int tenantId = -1; + try { + tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); + GroupManagementDAOFactory.openConnection(); + return groupDAO.getGroupCount(tenantId, status); + } catch (GroupManagementDAOException | SQLException e) { + String msg = "Error occurred while retrieving all groups in tenant " + tenantId + +" by status : " + status; + log.error(msg, e); + throw new GroupManagementException(msg, e); + } catch (Exception e) { + String msg = "Error occurred"; + log.error(msg, e); + throw new GroupManagementException(msg, e); + } finally { + GroupManagementDAOFactory.closeConnection(); + } + } private int getGroupCount(GroupPaginationRequest request) throws GroupManagementException { if (log.isDebugEnabled()) { @@ -882,6 +905,7 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid DeviceGroup defaultGroup = this.getGroup(groupName); if (defaultGroup == null) { defaultGroup = new DeviceGroup(groupName); + defaultGroup.setStatus(DeviceGroupConstants.GroupStatus.ACTIVE); // Setting system level user (wso2.system.user) as the owner defaultGroup.setOwner(CarbonConstants.REGISTRY_SYSTEM_USERNAME); defaultGroup.setDescription("Default system group for devices with " + groupName + " ownership."); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/sql/h2.sql b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/sql/h2.sql index 89eaa6d335d..80ac0335bed 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/sql/h2.sql +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/sql/h2.sql @@ -11,6 +11,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE ( CREATE TABLE IF NOT EXISTS DM_GROUP ( ID INTEGER AUTO_INCREMENT NOT NULL, GROUP_NAME VARCHAR(100) DEFAULT NULL, + STATUS VARCHAR(50) DEFAULT NULL, DESCRIPTION TEXT DEFAULT NULL, OWNER VARCHAR(45) DEFAULT NULL, TENANT_ID INTEGER DEFAULT 0, diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql index 379d4a46529..8880ec56c8e 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql @@ -14,6 +14,7 @@ CREATE TABLE IF NOT EXISTS DM_GROUP ( ID INTEGER AUTO_INCREMENT NOT NULL, GROUP_NAME VARCHAR(100) DEFAULT NULL, DESCRIPTION TEXT DEFAULT NULL, + STATUS VARCHAR(50) DEFAULT NULL, DATE_OF_CREATE BIGINT DEFAULT NULL, DATE_OF_LAST_UPDATE BIGINT DEFAULT NULL, OWNER VARCHAR(45) DEFAULT NULL, diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql index 60597bc43d2..35250241a3a 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql @@ -20,6 +20,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE ( CREATE TABLE IF NOT EXISTS DM_GROUP ( ID INTEGER AUTO_INCREMENT NOT NULL, GROUP_NAME VARCHAR(100) DEFAULT NULL, + STATUS VARCHAR(50) DEFAULT NULL, DESCRIPTION TEXT DEFAULT NULL, OWNER VARCHAR(255) DEFAULT NULL, TENANT_ID INTEGER DEFAULT 0, diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql index c87b947ecab..bada9462704 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql @@ -29,6 +29,7 @@ IF NOT EXISTS(SELECT * CREATE TABLE DM_GROUP ( ID INTEGER IDENTITY (1, 1) NOT NULL, GROUP_NAME VARCHAR(100) DEFAULT NULL, + STATUS VARCHAR(50) DEFAULT NULL, DESCRIPTION VARCHAR(MAX) DEFAULT NULL, OWNER VARCHAR(255) DEFAULT NULL, TENANT_ID INTEGER DEFAULT 0, diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql index cca244f67f5..9f75c4e5d12 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql @@ -24,6 +24,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE ( CREATE TABLE IF NOT EXISTS DM_GROUP ( ID INTEGER AUTO_INCREMENT NOT NULL, GROUP_NAME VARCHAR(100) DEFAULT NULL, + STATUS VARCHAR(50) DEFAULT NULL, DESCRIPTION TEXT DEFAULT NULL, OWNER VARCHAR(255) DEFAULT NULL, TENANT_ID INTEGER DEFAULT 0, diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql index 5ee36a2193a..2520124d460 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql @@ -48,6 +48,7 @@ CREATE TABLE DM_GROUP ( ID NUMBER(10) NOT NULL, DESCRIPTION CLOB DEFAULT NULL, GROUP_NAME VARCHAR2(100) DEFAULT NULL, + STATUS VARCHAR2(50) DEFAULT NULL, OWNER VARCHAR2(255) DEFAULT NULL, TENANT_ID NUMBER(10) DEFAULT 0, CONSTRAINT PK_DM_GROUP PRIMARY KEY (ID) diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql index e5a5976b6f6..8f0229ebf90 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql @@ -19,6 +19,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE ( CREATE TABLE IF NOT EXISTS DM_GROUP ( ID BIGSERIAL NOT NULL PRIMARY KEY, GROUP_NAME VARCHAR(100) DEFAULT NULL, + STATUS VARCHAR(50) DEFAULT NULL, DESCRIPTION TEXT DEFAULT NULL, OWNER VARCHAR(255) DEFAULT NULL, TENANT_ID INTEGER DEFAULT 0