mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Fix device count issues in subscription view
This commit is contained in:
commit
23af900343
@ -25,7 +25,11 @@ import io.entgra.device.mgt.core.application.mgt.core.dao.SubscriptionDAO;
|
|||||||
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.AbstractDAOImpl;
|
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.AbstractDAOImpl;
|
||||||
import io.entgra.device.mgt.core.application.mgt.core.exception.UnexpectedServerErrorException;
|
import io.entgra.device.mgt.core.application.mgt.core.exception.UnexpectedServerErrorException;
|
||||||
import io.entgra.device.mgt.core.application.mgt.core.util.DAOUtil;
|
import io.entgra.device.mgt.core.application.mgt.core.util.DAOUtil;
|
||||||
|
import io.entgra.device.mgt.core.application.mgt.core.util.HelperUtil;
|
||||||
|
import io.entgra.device.mgt.core.device.mgt.common.EnrolmentInfo;
|
||||||
|
import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceManagementException;
|
||||||
import io.entgra.device.mgt.core.device.mgt.common.operation.mgt.Activity;
|
import io.entgra.device.mgt.core.device.mgt.common.operation.mgt.Activity;
|
||||||
|
import io.entgra.device.mgt.core.device.mgt.core.service.DeviceManagementProviderService;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import io.entgra.device.mgt.core.application.mgt.common.ExecutionStatus;
|
import io.entgra.device.mgt.core.application.mgt.common.ExecutionStatus;
|
||||||
@ -2399,23 +2403,41 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAllSubscriptionCount(int appReleaseId, int tenantId)
|
public int getAllSubscriptionCount(int appReleaseId, int tenantId) throws ApplicationManagementDAOException {
|
||||||
throws ApplicationManagementDAOException {
|
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("Getting all subscriptions count for the application appReleaseId " + appReleaseId
|
log.debug("Getting all subscriptions count for the application appReleaseId " + appReleaseId + " from the database");
|
||||||
+ " from the database");
|
|
||||||
}
|
}
|
||||||
|
List<String> allowingDeviceStatuses = new ArrayList<>();
|
||||||
|
allowingDeviceStatuses.add(EnrolmentInfo.Status.ACTIVE.toString());
|
||||||
|
allowingDeviceStatuses.add(EnrolmentInfo.Status.INACTIVE.toString());
|
||||||
|
allowingDeviceStatuses.add(EnrolmentInfo.Status.UNREACHABLE.toString());
|
||||||
|
|
||||||
|
DeviceManagementProviderService deviceManagementProviderService = HelperUtil.getDeviceManagementProviderService();
|
||||||
try {
|
try {
|
||||||
Connection conn = this.getDBConnection();
|
Connection conn = this.getDBConnection();
|
||||||
|
List<Integer> deviceIds = deviceManagementProviderService.getDeviceIdsByStatus(allowingDeviceStatuses);
|
||||||
|
if (deviceIds.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
StringBuilder idList = new StringBuilder();
|
||||||
|
for (int i = 0; i < deviceIds.size(); i++) {
|
||||||
|
idList.append("?");
|
||||||
|
if (i < deviceIds.size() - 1) {
|
||||||
|
idList.append(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
String sql = "SELECT COUNT(*) AS count " +
|
String sql = "SELECT COUNT(*) AS count " +
|
||||||
"FROM AP_DEVICE_SUBSCRIPTION " +
|
"FROM AP_DEVICE_SUBSCRIPTION " +
|
||||||
"WHERE AP_APP_RELEASE_ID = ? " +
|
"WHERE AP_APP_RELEASE_ID = ? " +
|
||||||
"AND TENANT_ID = ? " +
|
"AND TENANT_ID = ? " +
|
||||||
"AND UNSUBSCRIBED = FALSE";
|
"AND UNSUBSCRIBED = FALSE " +
|
||||||
|
"AND DM_DEVICE_ID IN (" + idList.toString() + ")";
|
||||||
try (PreparedStatement ps = conn.prepareStatement(sql)) {
|
try (PreparedStatement ps = conn.prepareStatement(sql)) {
|
||||||
ps.setInt(1, appReleaseId);
|
ps.setInt(1, appReleaseId);
|
||||||
ps.setInt(2, tenantId);
|
ps.setInt(2, tenantId);
|
||||||
|
for (int i = 0; i < deviceIds.size(); i++) {
|
||||||
|
ps.setInt(3 + i, deviceIds.get(i));
|
||||||
|
}
|
||||||
|
|
||||||
try (ResultSet rs = ps.executeQuery()) {
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
@ -2429,7 +2451,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
|
|||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
throw new ApplicationManagementDAOException(msg, e);
|
throw new ApplicationManagementDAOException(msg, e);
|
||||||
}
|
}
|
||||||
} catch (DBConnectionException e) {
|
} catch (DBConnectionException | DeviceManagementException e) {
|
||||||
String msg = "Error occurred while obtaining the DB connection for getting all subscriptions count for appReleaseId: "
|
String msg = "Error occurred while obtaining the DB connection for getting all subscriptions count for appReleaseId: "
|
||||||
+ appReleaseId + ".";
|
+ appReleaseId + ".";
|
||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
@ -2438,23 +2460,41 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAllUnsubscriptionCount(int appReleaseId, int tenantId)
|
public int getAllUnsubscriptionCount(int appReleaseId, int tenantId) throws ApplicationManagementDAOException {
|
||||||
throws ApplicationManagementDAOException {
|
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("Getting all unsubscription count for the application appReleaseId " + appReleaseId
|
log.debug("Getting all unsubscription count for the application appReleaseId " + appReleaseId + " from the database");
|
||||||
+ " from the database");
|
|
||||||
}
|
}
|
||||||
|
List<String> allowingDeviceStatuses = new ArrayList<>();
|
||||||
|
allowingDeviceStatuses.add(EnrolmentInfo.Status.ACTIVE.toString());
|
||||||
|
allowingDeviceStatuses.add(EnrolmentInfo.Status.INACTIVE.toString());
|
||||||
|
allowingDeviceStatuses.add(EnrolmentInfo.Status.UNREACHABLE.toString());
|
||||||
|
|
||||||
|
DeviceManagementProviderService deviceManagementProviderService = HelperUtil.getDeviceManagementProviderService();
|
||||||
try {
|
try {
|
||||||
Connection conn = this.getDBConnection();
|
Connection conn = this.getDBConnection();
|
||||||
|
List<Integer> deviceIds = deviceManagementProviderService.getDeviceIdsByStatus(allowingDeviceStatuses);
|
||||||
|
if (deviceIds.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
StringBuilder idList = new StringBuilder();
|
||||||
|
for (int i = 0; i < deviceIds.size(); i++) {
|
||||||
|
idList.append("?");
|
||||||
|
if (i < deviceIds.size() - 1) {
|
||||||
|
idList.append(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
String sql = "SELECT COUNT(*) AS count " +
|
String sql = "SELECT COUNT(*) AS count " +
|
||||||
"FROM AP_DEVICE_SUBSCRIPTION " +
|
"FROM AP_DEVICE_SUBSCRIPTION " +
|
||||||
"WHERE AP_APP_RELEASE_ID = ? " +
|
"WHERE AP_APP_RELEASE_ID = ? " +
|
||||||
"AND TENANT_ID = ? " +
|
"AND TENANT_ID = ? " +
|
||||||
"AND UNSUBSCRIBED = TRUE";
|
"AND UNSUBSCRIBED = TRUE " +
|
||||||
|
"AND DM_DEVICE_ID IN (" + idList.toString() + ")";
|
||||||
try (PreparedStatement ps = conn.prepareStatement(sql)) {
|
try (PreparedStatement ps = conn.prepareStatement(sql)) {
|
||||||
ps.setInt(1, appReleaseId);
|
ps.setInt(1, appReleaseId);
|
||||||
ps.setInt(2, tenantId);
|
ps.setInt(2, tenantId);
|
||||||
|
for (int i = 0; i < deviceIds.size(); i++) {
|
||||||
|
ps.setInt(3 + i, deviceIds.get(i));
|
||||||
|
}
|
||||||
|
|
||||||
try (ResultSet rs = ps.executeQuery()) {
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
@ -2468,7 +2508,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
|
|||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
throw new ApplicationManagementDAOException(msg, e);
|
throw new ApplicationManagementDAOException(msg, e);
|
||||||
}
|
}
|
||||||
} catch (DBConnectionException e) {
|
} catch (DBConnectionException | DeviceManagementException e) {
|
||||||
String msg = "Error occurred while obtaining the DB connection for getting all unsubscription count for appReleaseId: "
|
String msg = "Error occurred while obtaining the DB connection for getting all unsubscription count for appReleaseId: "
|
||||||
+ appReleaseId + ".";
|
+ appReleaseId + ".";
|
||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package io.entgra.device.mgt.core.device.mgt.core.dao;
|
package io.entgra.device.mgt.core.device.mgt.core.dao;
|
||||||
|
|
||||||
|
import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceManagementException;
|
||||||
import org.apache.commons.collections.map.SingletonMap;
|
import org.apache.commons.collections.map.SingletonMap;
|
||||||
import io.entgra.device.mgt.core.device.mgt.common.*;
|
import io.entgra.device.mgt.core.device.mgt.common.*;
|
||||||
import io.entgra.device.mgt.core.device.mgt.common.EnrolmentInfo.Status;
|
import io.entgra.device.mgt.core.device.mgt.common.EnrolmentInfo.Status;
|
||||||
@ -879,4 +880,13 @@ public interface DeviceDAO {
|
|||||||
|
|
||||||
int getDeviceCountByDeviceIds(PaginationRequest paginationRequest, List<Integer> deviceIds, int tenantId)
|
int getDeviceCountByDeviceIds(PaginationRequest paginationRequest, List<Integer> deviceIds, int tenantId)
|
||||||
throws DeviceManagementDAOException;
|
throws DeviceManagementDAOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is used to get device count that are not within a specific group.
|
||||||
|
*
|
||||||
|
* @param statuses Device statuses to be filtered
|
||||||
|
* @return deviceIds
|
||||||
|
* @throws DeviceManagementException
|
||||||
|
*/
|
||||||
|
List<Integer> getDeviceIdsByStatus(List<String> statuses) throws DeviceManagementException;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package io.entgra.device.mgt.core.device.mgt.core.dao.impl;
|
package io.entgra.device.mgt.core.device.mgt.core.dao.impl;
|
||||||
|
|
||||||
|
import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceManagementException;
|
||||||
import org.apache.commons.collections.map.SingletonMap;
|
import org.apache.commons.collections.map.SingletonMap;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
@ -3484,4 +3485,39 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Integer> getDeviceIdsByStatus(List<String> statuses) throws DeviceManagementException {
|
||||||
|
StringBuilder deviceFilters = new StringBuilder();
|
||||||
|
for (int i = 0; i < statuses.size(); i++) {
|
||||||
|
deviceFilters.append("?");
|
||||||
|
if (i < statuses.size() - 1) {
|
||||||
|
deviceFilters.append(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Connection conn = getConnection();
|
||||||
|
String sql = "SELECT DEVICE_ID " +
|
||||||
|
"FROM DM_ENROLMENT " +
|
||||||
|
"WHERE STATUS IN (" + deviceFilters.toString() + ")";
|
||||||
|
|
||||||
|
try (PreparedStatement ps = conn.prepareStatement(sql)) {
|
||||||
|
for (int i = 0; i < statuses.size(); i++) {
|
||||||
|
ps.setString(i + 1, statuses.get(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
|
List<Integer> deviceIds = new ArrayList<>();
|
||||||
|
while (rs.next()) {
|
||||||
|
deviceIds.add(rs.getInt("DEVICE_ID"));
|
||||||
|
}
|
||||||
|
return deviceIds;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while running SQL to get device IDs by status.";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new DeviceManagementException(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1163,4 +1163,12 @@ public interface DeviceManagementProviderService {
|
|||||||
throws DeviceManagementException;
|
throws DeviceManagementException;
|
||||||
int getDeviceCountByDeviceIds(PaginationRequest paginationRequest, List<Integer> deviceIds)
|
int getDeviceCountByDeviceIds(PaginationRequest paginationRequest, List<Integer> deviceIds)
|
||||||
throws DeviceManagementException;
|
throws DeviceManagementException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is to get Device ids by statuses
|
||||||
|
* @param statuses statuses to be filtered.
|
||||||
|
* @return deviceIds
|
||||||
|
* @throws DeviceManagementException if any service level or DAO level error occurs.
|
||||||
|
*/
|
||||||
|
List<Integer> getDeviceIdsByStatus(List<String> statuses) throws DeviceManagementException;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5706,4 +5706,28 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|||||||
DeviceManagementDAOFactory.closeConnection();
|
DeviceManagementDAOFactory.closeConnection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Integer> getDeviceIdsByStatus(List<String> statuses) throws DeviceManagementException {
|
||||||
|
if (statuses == null || statuses.isEmpty()) {
|
||||||
|
String msg = "Received null or empty list for statuses";
|
||||||
|
log.error(msg);
|
||||||
|
throw new DeviceManagementException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
DeviceManagementDAOFactory.openConnection();
|
||||||
|
return deviceDAO.getDeviceIdsByStatus(statuses);
|
||||||
|
} catch (DeviceManagementException e) {
|
||||||
|
String msg = "Error encountered while getting device IDs for statuses: " + statuses;
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new DeviceManagementException(msg, e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error encountered while getting the database connection";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new DeviceManagementException(msg, e);
|
||||||
|
} finally {
|
||||||
|
DeviceManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user