diff --git a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/CategorizedSubscriptionResult.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/CategorizedSubscriptionResult.java index 18da5a7736..e685284b77 100644 --- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/CategorizedSubscriptionResult.java +++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/CategorizedSubscriptionResult.java @@ -23,10 +23,15 @@ import java.util.List; public class CategorizedSubscriptionResult { private List installedDevices; + private int installedDevicesCount; private List pendingDevices; + private int pendingDevicesCount; private List errorDevices; + private int errorDevicesCount; private List newDevices; + private int newDevicesCount; private List subscribedDevices; + private int subscribedDevicesCount; public CategorizedSubscriptionResult(List installedDevices, List pendingDevices, @@ -61,6 +66,48 @@ public class CategorizedSubscriptionResult { this.subscribedDevices = subscribedDevices; } + public CategorizedSubscriptionResult(List installedDevices, + List pendingDevices, + List errorDevices, + List newDevices, + int installedDevicesCount, + int pendingDevicesCount, + int errorDevicesCount, + int newDevicesCount + ) { + this.installedDevices = installedDevices; + this.pendingDevices = pendingDevices; + this.errorDevices = errorDevices; + this.newDevices = newDevices; + this.subscribedDevices = null; + this.installedDevicesCount = installedDevicesCount; + this.pendingDevicesCount = pendingDevicesCount; + this.errorDevicesCount = errorDevicesCount; + this.newDevicesCount = newDevicesCount; + this.subscribedDevicesCount = 0; + } + + public CategorizedSubscriptionResult(List installedDevices, + List pendingDevices, + List errorDevices, + List newDevices, + List subscribedDevices, int installedDevicesCount, + int pendingDevicesCount, + int errorDevicesCount, + int newDevicesCount, + int subscribedDevicesCount) { + this.installedDevices = installedDevices; + this.pendingDevices = pendingDevices; + this.errorDevices = errorDevices; + this.newDevices = newDevices; + this.subscribedDevices = subscribedDevices; + this.installedDevicesCount = installedDevicesCount; + this.pendingDevicesCount = pendingDevicesCount; + this.errorDevicesCount = errorDevicesCount; + this.newDevicesCount = newDevicesCount; + this.subscribedDevicesCount = subscribedDevicesCount; + } + public CategorizedSubscriptionResult(List devices, String tabActionStatus) { switch (tabActionStatus) { case "COMPLETED": @@ -127,4 +174,44 @@ public class CategorizedSubscriptionResult { public void setSubscribedDevices(List subscribedDevices) { this.subscribedDevices = subscribedDevices; } + + public int getInstalledDevicesCount() { + return installedDevicesCount; + } + + public void setInstalledDevicesCount(int installedDevicesCount) { + this.installedDevicesCount = installedDevicesCount; + } + + public int getPendingDevicesCount() { + return pendingDevicesCount; + } + + public void setPendingDevicesCount(int pendingDevicesCount) { + this.pendingDevicesCount = pendingDevicesCount; + } + + public int getErrorDevicesCount() { + return errorDevicesCount; + } + + public void setErrorDevicesCount(int errorDevicesCount) { + this.errorDevicesCount = errorDevicesCount; + } + + public int getNewDevicesCount() { + return newDevicesCount; + } + + public void setNewDevicesCount(int newDevicesCount) { + this.newDevicesCount = newDevicesCount; + } + + public int getSubscribedDevicesCount() { + return subscribedDevicesCount; + } + + public void setSubscribedDevicesCount(int subscribedDevicesCount) { + this.subscribedDevicesCount = subscribedDevicesCount; + } } diff --git a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/SubscriptionDAO.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/SubscriptionDAO.java index d7a1d37d4a..cadab204ca 100644 --- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/SubscriptionDAO.java +++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/SubscriptionDAO.java @@ -529,5 +529,15 @@ public interface SubscriptionDAO { SubscriptionStatisticDTO getSubscriptionStatistic(List deviceIds, String subscriptionType, boolean isUnsubscribed, int tenantId) throws ApplicationManagementDAOException; - + /** + * This method is used to get the counts of devices related to a UUID. + * + * @param appReleaseId the UUID of the application release. + * @param tenantId id of the current tenant. + * @param actionStatus categorized status. + * @param actionTriggeredFrom type of the action. + * @return {@link int} which contains the count of the subscription type + * @throws ApplicationManagementDAOException if connection establishment or SQL execution fails. + */ + int countSubscriptionsByStatus(int appReleaseId, int tenantId, String actionStatus, String actionTriggeredFrom) throws ApplicationManagementDAOException; } diff --git a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java index 618149cd72..86b7407378 100644 --- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java +++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java @@ -313,7 +313,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic sql += " AND AP_APP_RELEASE.CURRENT_STATE = ?"; } if (deviceTypeId != -1) { - sql += "AND (AP_APP.DEVICE_TYPE_ID = ? "; + sql += " AND (AP_APP.DEVICE_TYPE_ID = ? "; if (filter.isWithWebApps()) { sql += "OR AP_APP.DEVICE_TYPE_ID = 0 "; } diff --git a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/impl/subscription/GenericSubscriptionDAOImpl.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/impl/subscription/GenericSubscriptionDAOImpl.java index acd3f3906b..a793638d2d 100644 --- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/impl/subscription/GenericSubscriptionDAOImpl.java +++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/dao/impl/subscription/GenericSubscriptionDAOImpl.java @@ -1665,15 +1665,24 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc "GS.AP_APP_RELEASE_ID " + "FROM AP_GROUP_SUBSCRIPTION GS " + "WHERE GS.AP_APP_RELEASE_ID = ? " + - "AND GS.UNSUBSCRIBED = ? AND GS.TENANT_ID = ? " + - "ORDER BY " + subscriptionStatusTime + " DESC " + - "LIMIT ? OFFSET ?"; + "AND GS.UNSUBSCRIBED = ? " + + "AND GS.TENANT_ID = ? " + + "ORDER BY " + subscriptionStatusTime + " DESC "; + + // Append limit and offset only if limit is not -1 + if (limit != -1) { + sql = sql + " LIMIT ? OFFSET ?"; + } try (PreparedStatement ps = conn.prepareStatement(sql)) { ps.setInt(1, appReleaseId); ps.setBoolean(2, unsubscribe); ps.setInt(3, tenantId); - ps.setInt(4, limit); - ps.setInt(5, offset); + + // Set limit and offset parameters only if limit is not -1 + if (limit != -1) { + ps.setInt(4, limit); + ps.setInt(5, offset); + } try (ResultSet rs = ps.executeQuery()) { SubscriptionEntity subscriptionEntity; @@ -2795,11 +2804,10 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc try { Connection connection = getDBConnection(); String sql = "SELECT COUNT(DISTINCT ID) AS COUNT, " + - "STATUS " + - "FROM AP_DEVICE_SUBSCRIPTION " + + "STATUS FROM AP_DEVICE_SUBSCRIPTION " + "WHERE TENANT_ID = ? " + - "AND UNSUBSCRIBED = ? " + - "AND DM_DEVICE_ID IN ("+ + "AND UNSUBSCRIBED = ?" + + "AND DM_DEVICE_ID IN (" + deviceIds.stream().map(id -> "?").collect(Collectors.joining(",")) + ")"; if (!Objects.equals(subscriptionType, SubscriptionMetadata.SubscriptionTypes.DEVICE)) { @@ -2851,4 +2859,39 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc throw new ApplicationManagementDAOException(msg, e); } } + + public int countSubscriptionsByStatus(int appReleaseId, int tenantId, String actionStatus, String actionTriggeredFrom) throws ApplicationManagementDAOException { + if (log.isDebugEnabled()) { + log.debug("Request received in DAO Layer to count device subscriptions by status and actionTriggeredFrom for the given AppReleaseID."); + } + try { + Connection conn = this.getDBConnection(); + String sql = "SELECT COUNT(*) FROM AP_DEVICE_SUBSCRIPTION " + + "WHERE AP_APP_RELEASE_ID = ? " + + "AND TENANT_ID = ? " + + "AND STATUS = ?" + + " AND ACTION_TRIGGERED_FROM = ?"; + try (PreparedStatement ps = conn.prepareStatement(sql)) { + ps.setInt(1, appReleaseId); + ps.setInt(2, tenantId); + ps.setString(3, actionStatus); + ps.setString(4, actionTriggeredFrom); + try (ResultSet rs = ps.executeQuery()) { + if (rs.next()) { + return rs.getInt(1); + } + } + } + } catch (DBConnectionException e) { + String msg = "Error occurred while obtaining the DB connection to count device subscriptions by status and action trigger."; + log.error(msg, e); + throw new ApplicationManagementDAOException(msg, e); + } catch (SQLException e) { + String msg = "SQL Error occurred while counting device subscriptions by status and action trigger."; + log.error(msg, e); + throw new ApplicationManagementDAOException(msg, e); + } + return 0; + } + } diff --git a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/util/subscription/mgt/impl/RoleBasedSubscriptionManagementHelperServiceImpl.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/util/subscription/mgt/impl/RoleBasedSubscriptionManagementHelperServiceImpl.java index b5d527676e..b3498db662 100644 --- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/util/subscription/mgt/impl/RoleBasedSubscriptionManagementHelperServiceImpl.java +++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/util/subscription/mgt/impl/RoleBasedSubscriptionManagementHelperServiceImpl.java @@ -118,7 +118,7 @@ public class RoleBasedSubscriptionManagementHelperServiceImpl implements Subscri } else { deviceSubscriptionDTOS = subscriptionDAO.getSubscriptionDetailsByDeviceIds(applicationReleaseDTO.getId(), isUnsubscribe, tenantId, deviceIdsOwnByRole, dbSubscriptionStatus, - subscriptionInfo.getSubscriptionType(), deviceSubscriptionFilterCriteria.getTriggeredBy(), limit, offset); + subscriptionInfo.getSubscriptionType(), deviceSubscriptionFilterCriteria.getTriggeredBy(), -1, -1); deviceCount = SubscriptionManagementHelperUtil.getTotalDeviceSubscriptionCount(deviceSubscriptionDTOS, subscriptionInfo.getDeviceSubscriptionFilterCriteria(), applicationDTO.getDeviceTypeId()); diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/src/main/java/io/entgra/device/mgt/core/device/mgt/api/jaxrs/beans/ApplicationUninstallation.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/src/main/java/io/entgra/device/mgt/core/device/mgt/api/jaxrs/beans/ApplicationUninstallation.java index f78d15966e..eee5f06c49 100644 --- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/src/main/java/io/entgra/device/mgt/core/device/mgt/api/jaxrs/beans/ApplicationUninstallation.java +++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/src/main/java/io/entgra/device/mgt/core/device/mgt/api/jaxrs/beans/ApplicationUninstallation.java @@ -18,6 +18,7 @@ package io.entgra.device.mgt.core.device.mgt.api.jaxrs.beans; +import com.google.gson.Gson; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -113,4 +114,8 @@ public class ApplicationUninstallation { public void setType(String type) { this.type = type; } + + public String toJson() { + return new Gson().toJson(this); + } } diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/src/main/java/io/entgra/device/mgt/core/device/mgt/api/jaxrs/service/impl/DeviceManagementServiceImpl.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/src/main/java/io/entgra/device/mgt/core/device/mgt/api/jaxrs/service/impl/DeviceManagementServiceImpl.java index b514277817..88cfe125ca 100644 --- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/src/main/java/io/entgra/device/mgt/core/device/mgt/api/jaxrs/service/impl/DeviceManagementServiceImpl.java +++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/src/main/java/io/entgra/device/mgt/core/device/mgt/api/jaxrs/service/impl/DeviceManagementServiceImpl.java @@ -19,7 +19,6 @@ package io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.impl; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; import io.entgra.device.mgt.core.application.mgt.common.ApplicationInstallResponse; import io.entgra.device.mgt.core.application.mgt.common.SubscriptionType; import io.entgra.device.mgt.core.application.mgt.common.exception.SubscriptionManagementException; @@ -44,6 +43,7 @@ import org.wso2.carbon.context.PrivilegedCarbonContext; import io.entgra.device.mgt.core.device.mgt.common.*; import io.entgra.device.mgt.core.device.mgt.common.app.mgt.Application; import io.entgra.device.mgt.core.device.mgt.common.app.mgt.ApplicationManagementException; +import io.entgra.device.mgt.core.device.mgt.common.app.mgt.MobileAppTypes; import io.entgra.device.mgt.core.device.mgt.common.authorization.DeviceAccessAuthorizationException; import io.entgra.device.mgt.core.device.mgt.common.authorization.DeviceAccessAuthorizationService; import io.entgra.device.mgt.core.device.mgt.common.device.details.DeviceData; @@ -1112,7 +1112,6 @@ public class DeviceManagementServiceImpl implements DeviceManagementService { @QueryParam("version") String version, @QueryParam("user") String user) { List deviceIdentifiers = new ArrayList<>(); - Operation operation = new Operation(); try { RequestValidationUtil.validateDeviceIdentifier(type, id); Device device = DeviceMgtAPIUtils.getDeviceManagementService().getDevice(id, false); @@ -1133,11 +1132,12 @@ public class DeviceManagementServiceImpl implements DeviceManagementService { //if the applications not installed via entgra store } else { if (Constants.ANDROID.equals(type)) { - ApplicationUninstallation applicationUninstallation = new ApplicationUninstallation(packageName, "PUBLIC", name, platform, version, user); - Gson gson = new Gson(); + ApplicationUninstallation applicationUninstallation = new ApplicationUninstallation(packageName, + MobileAppTypes.PUBLIC.toString(), name, platform, version, user); + ProfileOperation operation = new ProfileOperation(); operation.setCode(MDMAppConstants.AndroidConstants.UNMANAGED_APP_UNINSTALL); operation.setType(Operation.Type.PROFILE); - operation.setPayLoad(gson.toJson(applicationUninstallation)); + operation.setPayLoad(applicationUninstallation.toJson()); DeviceManagementProviderService deviceManagementProviderService = HelperUtil .getDeviceManagementProviderService(); Activity activity = deviceManagementProviderService.addOperation( diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java index 52feae35d4..b195acfc1f 100644 --- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java +++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java @@ -3306,9 +3306,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO { List filteredDeviceIds = new ArrayList<>(); try { Connection connection = getConnection(); - String sql = "SELECT ID AS DEVICE_ID " + - "FROM DM_DEVICE " + - "WHERE TENANT_ID = ?"; + String sql = "SELECT ID AS DEVICE_ID FROM DM_DEVICE WHERE TENANT_ID = ?"; if (deviceIds != null && !deviceIds.isEmpty()) { sql += " AND ID NOT IN ( " + deviceIds.stream().map(id -> "?").collect(Collectors.joining(",")) + ")"; @@ -3521,7 +3519,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO { boolean isDeviceNameProvided = false; try { Connection connection = getConnection(); - String sql = "SELECT COUNT(DISTINCT e.DEVICE_ID) " + + String sql = "SELECT COUNT(DISTINCT e.DEVICE_ID) AS COUNT " + "FROM DM_DEVICE d " + "INNER JOIN DM_ENROLMENT e " + "ON d.ID = e.DEVICE_ID " + diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractEnrollmentDAOImpl.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractEnrollmentDAOImpl.java index 70456d3be6..091716bfe7 100644 --- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractEnrollmentDAOImpl.java +++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractEnrollmentDAOImpl.java @@ -589,8 +589,11 @@ public abstract class AbstractEnrollmentDAOImpl implements EnrollmentDAO { "e.DEVICE_IDENTIFICATION AS DEVICE_IDENTIFICATION " + "FROM DM_ENROLMENT e " + "JOIN DM_DEVICE d ON e.DEVICE_ID = d.ID " + - "WHERE e.OWNER = ? AND e.TENANT_ID = ? AND d.DEVICE_TYPE_ID = ? AND e.STATUS IN (" + deviceFilters + ")"); + "WHERE e.OWNER = ? AND e.TENANT_ID = ? AND e.STATUS IN (" + deviceFilters + ")"); + if (deviceTypeId != 0) { + sql.append(" AND d.DEVICE_TYPE_ID = ?"); + } if (deviceOwner != null && !deviceOwner.isEmpty()) { sql.append(" AND e.OWNER LIKE ?"); } @@ -607,10 +610,12 @@ public abstract class AbstractEnrollmentDAOImpl implements EnrollmentDAO { int index = 1; stmt.setString(index++, owner); stmt.setInt(index++, tenantId); - stmt.setInt(index++, deviceTypeId); for (String status : allowingDeviceStatuses) { stmt.setString(index++, status); } + if (deviceTypeId != 0) { + stmt.setInt(index++, deviceTypeId); + } if (deviceOwner != null && !deviceOwner.isEmpty()) { stmt.setString(index++, "%" + deviceOwner + "%"); @@ -808,8 +813,11 @@ public abstract class AbstractEnrollmentDAOImpl implements EnrollmentDAO { StringBuilder sql = new StringBuilder("SELECT e.DEVICE_ID, e.OWNER, e.STATUS, e.DEVICE_TYPE, e.DEVICE_IDENTIFICATION " + "FROM DM_ENROLMENT e " + "JOIN DM_DEVICE d ON e.DEVICE_ID = d.ID " + - "WHERE e.TENANT_ID = ? AND e.STATUS IN (" + deviceFilters.toString() + ") AND d.DEVICE_TYPE_ID = ?"); + "WHERE e.TENANT_ID = ? AND e.STATUS IN (" + deviceFilters.toString() + ")"); + if (deviceTypeId != 0) { + sql.append(" AND d.DEVICE_TYPE_ID = ?"); + } if (deviceOwner != null && !deviceOwner.isEmpty()) { sql.append(" AND e.OWNER LIKE ?"); } @@ -827,7 +835,9 @@ public abstract class AbstractEnrollmentDAOImpl implements EnrollmentDAO { for (String status : allowingDeviceStatuses) { stmt.setString(index++, status); } - stmt.setInt(index++, deviceTypeId); + if (deviceTypeId != 0) { + stmt.setInt(index++, deviceTypeId); + } if (deviceOwner != null && !deviceOwner.isEmpty()) { stmt.setString(index++, "%" + deviceOwner + "%"); diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java index 65baf5a1d3..518919add1 100644 --- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java +++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java @@ -1482,9 +1482,11 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO { "WHERE " + " g.GROUP_NAME = ? " + " AND g.TENANT_ID = ? " + - " AND d.DEVICE_TYPE_ID = ? " + " AND e.STATUS IN (" + statusPlaceholders + ")"); + if (deviceTypeId != 0) { + sql.append(" AND d.DEVICE_TYPE_ID = ?"); + } if (deviceOwner != null && !deviceOwner.isEmpty()) { sql.append(" AND e.OWNER LIKE ?"); } @@ -1505,11 +1507,12 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO { int index = 1; stmt.setString(index++, groupName); stmt.setInt(index++, tenantId); - stmt.setInt(index++, deviceTypeId); for (String status : allowedStatuses) { stmt.setString(index++, status); } - + if (deviceTypeId != 0) { + stmt.setInt(index++, deviceTypeId); + } if (deviceOwner != null && !deviceOwner.isEmpty()) { stmt.setString(index++, "%" + deviceOwner + "%"); } diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/geo/service/GeoLocationProviderServiceImpl.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/geo/service/GeoLocationProviderServiceImpl.java index 9b380f14ee..f11914d5ea 100644 --- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/geo/service/GeoLocationProviderServiceImpl.java +++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/geo/service/GeoLocationProviderServiceImpl.java @@ -1528,7 +1528,11 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic @Override public boolean updateGeofence(GeofenceData geofenceData, int fenceId) throws GeoLocationBasedServiceException, EventConfigurationException { + EventConfigurationProviderService eventConfigService; + eventConfigService = DeviceManagementDataHolder.getInstance().getEventConfigurationService(); int tenantId; + List groupIdsToDelete = new ArrayList<>(); + List groupIdsToAdd = new ArrayList<>(); try { tenantId = DeviceManagementDAOUtil.getTenantId(); } catch (DeviceManagementDAOException e) { @@ -1543,8 +1547,6 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic int updatedRowCount = geofenceDAO.updateGeofence(geofenceData, fenceId); savedGroupIds = geofenceDAO.getGroupIdsOfGeoFence(fenceId); geofenceData.setId(fenceId); - List groupIdsToDelete = new ArrayList<>(); - List groupIdsToAdd = new ArrayList<>(); for (Integer savedGroupId : savedGroupIds) { if (!geofenceData.getGroupIds().contains(savedGroupId)) { groupIdsToDelete.add(savedGroupId); @@ -1558,6 +1560,18 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic geofenceDAO.deleteGeofenceGroupMapping(groupIdsToDelete, fenceId); geofenceDAO.createGeofenceGroupMapping(geofenceData, groupIdsToAdd); EventManagementDAOFactory.commitTransaction(); + try { + if (!groupIdsToDelete.isEmpty()) { + eventConfigService.createEventOperationTask(OperationMgtConstants.OperationCodes.EVENT_REVOKE, + DeviceManagementConstants.EventServices.GEOFENCE, + new GeoFenceEventMeta(geofenceData), tenantId, groupIdsToDelete); + } + } catch (EventConfigurationException e) { + String msg = "Failed while creating EVENT_REVOKE operation creation task entry while updating geo fence " + + geofenceData.getFenceName() + " of the tenant " + tenantId; + log.error(msg, e); + throw new GeoLocationBasedServiceException(msg, e); + } if (updatedRowCount > 0) { GeoCacheManagerImpl.getInstance().updateGeoFenceInCache(geofenceData, fenceId, tenantId); }