diff --git a/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.api/pom.xml b/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.api/pom.xml
index 88a059a4f2..3c71621c82 100644
--- a/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.api/pom.xml
+++ b/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.api/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
grafana-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.common/pom.xml b/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.common/pom.xml
index deadf2d3ea..e5bc7fd35e 100644
--- a/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.common/pom.xml
+++ b/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.common/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
grafana-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.core/pom.xml b/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.core/pom.xml
index d04956aeec..ca9c0efc6a 100644
--- a/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.core/pom.xml
+++ b/components/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.core/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
grafana-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/analytics-mgt/grafana-mgt/pom.xml b/components/analytics-mgt/grafana-mgt/pom.xml
index 1b3143afce..e172ba30c9 100644
--- a/components/analytics-mgt/grafana-mgt/pom.xml
+++ b/components/analytics-mgt/grafana-mgt/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
analytics-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/analytics-mgt/pom.xml b/components/analytics-mgt/pom.xml
index 8f8b773e04..9d8d7f5128 100644
--- a/components/analytics-mgt/pom.xml
+++ b/components/analytics-mgt/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.analytics.extension/pom.xml b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.analytics.extension/pom.xml
index 2b0ddfee8d..6b3d0e79c2 100644
--- a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.analytics.extension/pom.xml
+++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.analytics.extension/pom.xml
@@ -20,7 +20,7 @@
apimgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
4.0.0
diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.annotations/pom.xml b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.annotations/pom.xml
index c36688ac7f..471cf1a73f 100644
--- a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.annotations/pom.xml
+++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.annotations/pom.xml
@@ -22,7 +22,7 @@
apimgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension.api/pom.xml b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension.api/pom.xml
index 6793bd1c1a..58a44b4978 100644
--- a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension.api/pom.xml
+++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension.api/pom.xml
@@ -21,7 +21,7 @@
apimgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension/pom.xml b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension/pom.xml
index 8cb441d5c3..0f44f5812a 100644
--- a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension/pom.xml
+++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension/pom.xml
@@ -22,7 +22,7 @@
apimgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/pom.xml b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/pom.xml
index 08a4d87c2e..5f4007a21a 100644
--- a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/pom.xml
+++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/pom.xml
@@ -22,7 +22,7 @@
apimgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension.api/pom.xml b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension.api/pom.xml
index a48e30aac5..b497e98b2f 100644
--- a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension.api/pom.xml
+++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension.api/pom.xml
@@ -21,7 +21,7 @@
apimgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
4.0.0
diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension/pom.xml b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension/pom.xml
index b312bebede..e9e2ba62c2 100644
--- a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension/pom.xml
+++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension/pom.xml
@@ -21,7 +21,7 @@
apimgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.webapp.publisher/pom.xml b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.webapp.publisher/pom.xml
index f09693620d..8999e4a6b8 100644
--- a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.webapp.publisher/pom.xml
+++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.webapp.publisher/pom.xml
@@ -22,7 +22,7 @@
apimgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/apimgt-extensions/pom.xml b/components/apimgt-extensions/pom.xml
index e64ab96ea4..81121b08cb 100644
--- a/components/apimgt-extensions/pom.xml
+++ b/components/apimgt-extensions/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/pom.xml b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/pom.xml
index 707f0f58de..3f87d0369a 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/pom.xml
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
application-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
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/ApplicationArtifact.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/ApplicationArtifact.java
index 371d022ec9..cbec13d3d3 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/ApplicationArtifact.java
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/ApplicationArtifact.java
@@ -25,16 +25,52 @@ public class ApplicationArtifact {
private String installerName;
private InputStream installerStream;
+ private String installerPath;
private String bannerName;
private InputStream bannerStream;
+ private String bannerPath;
private String iconName;
private InputStream iconStream;
+ private String iconPath;
private Map screenshots;
+ private Map screenshotPaths;
+
+ public String getInstallerPath() {
+ return installerPath;
+ }
+
+ public void setInstallerPath(String installerPath) {
+ this.installerPath = installerPath;
+ }
+
+ public String getBannerPath() {
+ return bannerPath;
+ }
+
+ public void setBannerPath(String bannerPath) {
+ this.bannerPath = bannerPath;
+ }
+
+ public String getIconPath() {
+ return iconPath;
+ }
+
+ public void setIconPath(String iconPath) {
+ this.iconPath = iconPath;
+ }
+
+ public Map getScreenshotPaths() {
+ return screenshotPaths;
+ }
+
+ public void setScreenshotPaths(Map screenshotPaths) {
+ this.screenshotPaths = screenshotPaths;
+ }
public String getInstallerName() {
return installerName;
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 28cc436115..18da5a7736 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
@@ -18,6 +18,7 @@
package io.entgra.device.mgt.core.application.mgt.common;
+import java.util.ArrayList;
import java.util.List;
public class CategorizedSubscriptionResult {
@@ -60,6 +61,33 @@ public class CategorizedSubscriptionResult {
this.subscribedDevices = subscribedDevices;
}
+ public CategorizedSubscriptionResult(List devices, String tabActionStatus) {
+ switch (tabActionStatus) {
+ case "COMPLETED":
+ this.installedDevices = devices;
+ break;
+ case "PENDING":
+ this.pendingDevices = devices;
+ break;
+ case "ERROR":
+ this.errorDevices = devices;
+ break;
+ case "NEW":
+ this.newDevices = devices;
+ break;
+ case "SUBSCRIBED":
+ this.subscribedDevices = devices;
+ break;
+ default:
+ this.installedDevices = new ArrayList<>();
+ this.pendingDevices = new ArrayList<>();
+ this.errorDevices = new ArrayList<>();
+ this.newDevices = new ArrayList<>();
+ this.subscribedDevices = new ArrayList<>();
+ break;
+ }
+ }
+
public List getInstalledDevices() {
return installedDevices;
}
@@ -100,4 +128,3 @@ public class CategorizedSubscriptionResult {
this.subscribedDevices = subscribedDevices;
}
}
-
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/services/ApplicationManager.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/services/ApplicationManager.java
index 700fe9adbc..2b30b85cf9 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/services/ApplicationManager.java
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/services/ApplicationManager.java
@@ -547,5 +547,20 @@ public interface ApplicationManager {
* @throws ApplicationManagementException thrown if an error occurs when deleting data
*/
void deleteApplicationDataOfTenant(int tenantId) throws ApplicationManagementException;
+
+ /**
+ * Delete all application related data of a tenant by tenant Domain
+ *
+ * @param tenantDomain Domain of the Tenant
+ * @throws ApplicationManagementException thrown if an error occurs when deleting data
+ */
void deleteApplicationDataByTenantDomain(String tenantDomain) throws ApplicationManagementException;
+
+ /**
+ * Delete all Application artifacts related to a tenant by Tenant Domain
+ *
+ * @param tenantDomain Domain of the Tenant
+ * @throws ApplicationManagementException thrown if an error occurs when deleting app folders
+ */
+ void deleteApplicationArtifactsByTenantDomain(String tenantDomain) throws ApplicationManagementException;
}
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/services/ApplicationStorageManager.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/services/ApplicationStorageManager.java
index 698c57f55a..bab015e97e 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/services/ApplicationStorageManager.java
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/services/ApplicationStorageManager.java
@@ -140,4 +140,14 @@ public interface ApplicationStorageManager {
* @throws ApplicationStorageManagementException thrown if
*/
void deleteAppFolderOfTenant(int tenantId) throws ApplicationStorageManagementException;
+
+ /**
+ * Get absolute path of a file describe by hashVal, folder, file name and tenantId
+ * @param hashVal Hash value of the application release.
+ * @param folderName Folder name file resides.
+ * @param fileName File name of the file.
+ * @param tenantId Tenant ID
+ * @return Absolute path
+ */
+ String getAbsolutePathOfFile(String hashVal, String folderName, String fileName, int tenantId);
}
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/services/SubscriptionManager.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/services/SubscriptionManager.java
index 1cbeda5f08..c8ca40813a 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/services/SubscriptionManager.java
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.common/src/main/java/io/entgra/device/mgt/core/application/mgt/common/services/SubscriptionManager.java
@@ -233,8 +233,9 @@ public interface SubscriptionManager {
* @return {@link SubscriptionsDTO} which contains the details of subscriptions.
* @throws ApplicationManagementException if an error occurs while fetching the group details
*/
- List getGroupsSubscriptionDetailsByUUID(String uuid, String subscriptionStatus, int offset, int limit)
- throws ApplicationManagementException;
+ public List getGroupsSubscriptionDetailsByUUID(String uuid, String subscriptionStatus,
+ PaginationRequest request, int offset,
+ int limit) throws ApplicationManagementException;
/**
* Retrieves the user details associated with a given app release UUID.
@@ -246,8 +247,8 @@ public interface SubscriptionManager {
* @return {@link SubscriptionsDTO} which contains the details of subscriptions.
* @throws ApplicationManagementException if an error occurs while fetching the user details
*/
- List getUserSubscriptionsByUUID(String uuid, String subscriptionStatus, int offset, int limit)
- throws ApplicationManagementException;
+ List getUserSubscriptionsByUUID(String uuid, String subscriptionStatus, PaginationRequest request,
+ int offset, int limit) throws ApplicationManagementException;
/**
* Retrieves the Role details associated with a given app release UUID.
@@ -259,8 +260,8 @@ public interface SubscriptionManager {
* @return {@link SubscriptionsDTO} which contains the details of subscriptions.
* @throws ApplicationManagementException if an error occurs while fetching the role details
*/
- List getRoleSubscriptionsByUUID(String uuid, String subscriptionStatus, int offset, int limit)
- throws ApplicationManagementException;
+ List getRoleSubscriptionsByUUID(String uuid, String subscriptionStatus, PaginationRequest request,
+ int offset, int limit) throws ApplicationManagementException;
/**
* Retrieves the Device Subscription details associated with a given app release UUID.
@@ -272,8 +273,9 @@ public interface SubscriptionManager {
* @return {@link DeviceSubscriptionResponseDTO} which contains the details of device subscriptions.
* @throws ApplicationManagementException if an error occurs while fetching the device subscription details
*/
- DeviceSubscriptionResponseDTO getDeviceSubscriptionsDetailsByUUID(String uuid, String subscriptionStatus, int offset, int limit)
- throws ApplicationManagementException;
+ DeviceSubscriptionResponseDTO getDeviceSubscriptionsDetailsByUUID(String uuid, String subscriptionStatus,
+ PaginationRequest request, int offset,
+ int limit) throws ApplicationManagementException;
/**
* Retrieves the All Device details associated with a given app release UUID.
@@ -285,20 +287,19 @@ public interface SubscriptionManager {
* @return {@link DeviceSubscriptionResponseDTO} which contains the details of device subscriptions.
* @throws ApplicationManagementException if an error occurs while fetching the subscription details
*/
- DeviceSubscriptionResponseDTO getAllSubscriptionDetailsByUUID(String uuid, String subscriptionStatus, int offset, int limit)
- throws ApplicationManagementException;
+ DeviceSubscriptionResponseDTO getAllSubscriptionDetailsByUUID(String uuid, String subscriptionStatus,
+ PaginationRequest request, int offset,
+ int limit) throws ApplicationManagementException;
/**
* This method is responsible for retrieving device subscription details related to the given UUID.
*
* @param deviceId the deviceId of the device that need to get operation details.
* @param uuid the UUID of the application release.
- * @param offset the offset for the data set
- * @param limit the limit for the data set
* @return {@link DeviceOperationDTO} which contains the details of device subscriptions.
* @throws SubscriptionManagementException if there is an error while fetching the details.
*/
- List getSubscriptionOperationsByUUIDAndDeviceID(int deviceId, String uuid, int offset, int limit)
+ List getSubscriptionOperationsByUUIDAndDeviceID(int deviceId, String uuid)
throws ApplicationManagementException;
/**
diff --git a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/pom.xml b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/pom.xml
index ca008ce943..b7bc729b98 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/pom.xml
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
application-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
@@ -99,6 +99,7 @@
io.entgra.device.mgt.core.identity.jwt.client.extension.dto;version="[5.0,6)",
io.entgra.device.mgt.core.identity.jwt.client.extension.exception;version="[5.0,6)",
io.entgra.device.mgt.core.identity.jwt.client.extension.service;version="[5.0,6)",
+ io.entgra.device.mgt.core.tenant.mgt.common.*;version="[5.0,6)",
javax.annotation;version="[1.0,2)",
javax.naming,
javax.sql,
@@ -443,6 +444,11 @@
org.wso2.carbon.tenant.mgt
compile
+
+ io.entgra.device.mgt.core
+ io.entgra.device.mgt.core.tenant.mgt.common
+ provided
+
org.wso2.orbit.javax.xml.bind
jaxb-api
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 88465a4533..ec3717391a 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
@@ -378,12 +378,10 @@ public interface SubscriptionDAO {
* @param appReleaseId the appReleaseId of the application release.
* @param deviceId the deviceId of the device that need to get operation details.
* @param tenantId id of the current tenant.
- * @param offset the offset for the data set
- * @param limit the limit for the data set
* @return {@link DeviceOperationDTO} which contains the details of device subscriptions.
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
- List getSubscriptionOperationsByAppReleaseIDAndDeviceID(int appReleaseId, int deviceId, int tenantId, int offset, int limit)
+ List getSubscriptionOperationsByAppReleaseIDAndDeviceID(int appReleaseId, int deviceId, int tenantId)
throws ApplicationManagementDAOException;
/**
@@ -392,12 +390,16 @@ public interface SubscriptionDAO {
* @param appReleaseId the appReleaseId of the application release.
* @param unsubscribe the Status of the subscription.
* @param tenantId id of the current tenant.
+ * @param actionStatus Status of the action
+ * @param actionType type of the action
+ * @param actionTriggeredBy subscribed by
* @param deviceIds deviceIds deviceIds to retrieve data.
* @return {@link DeviceOperationDTO} which contains the details of device subscriptions.
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
- List getSubscriptionDetailsByDeviceIds(int appReleaseId, boolean unsubscribe, int tenantId, List deviceIds)
- throws ApplicationManagementDAOException;
+ List getSubscriptionDetailsByDeviceIds(int appReleaseId, boolean unsubscribe, int tenantId,
+ List deviceIds, String actionStatus, String actionType,
+ String actionTriggeredBy, String tabActionStatus) throws ApplicationManagementDAOException;
/**
* This method is used to get the details of device subscriptions related to a UUID.
@@ -405,13 +407,16 @@ public interface SubscriptionDAO {
* @param appReleaseId the appReleaseId of the application release.
* @param unsubscribe the Status of the subscription.
* @param tenantId id of the current tenant.
+ * @param actionStatus Status of the action
+ * @param actionType type of the action
+ * @param actionTriggeredBy subscribed by
* @param offset the offset for the data set
* @param limit the limit for the data set
* @return {@link DeviceOperationDTO} which contains the details of device subscriptions.
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
- List getAllSubscriptionsDetails(int appReleaseId, boolean unsubscribe, int tenantId, int offset, int limit)
- throws ApplicationManagementDAOException;
+ List getAllSubscriptionsDetails(int appReleaseId, boolean unsubscribe, int tenantId, String actionStatus, String actionType,
+ String actionTriggeredBy, int offset, int limit) throws ApplicationManagementDAOException;
/**
* This method is used to get the counts of all subscription types related to a UUID.
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 d401b77aee..322207c94e 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
@@ -1858,7 +1858,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
@Override
public List getSubscriptionOperationsByAppReleaseIDAndDeviceID(
- int appReleaseId, int deviceId, int tenantId, int offset, int limit) throws ApplicationManagementDAOException {
+ int appReleaseId, int deviceId, int tenantId) throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to get device subscriptions related to the given AppReleaseID and DeviceID.");
}
@@ -1878,13 +1878,12 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
"WHERE ads.AP_APP_RELEASE_ID = ? " +
"AND ads.DM_DEVICE_ID = ? " +
"AND ads.TENANT_ID = ? " +
- "LIMIT ? OFFSET ?";
+ "ORDER BY aasom.OPERATION_ID DESC " +
+ "LIMIT 1";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, appReleaseId);
ps.setInt(2, deviceId);
ps.setInt(3, tenantId);
- ps.setInt(4, limit);
- ps.setInt(5, offset);
try (ResultSet rs = ps.executeQuery()) {
DeviceOperationDTO deviceSubscription;
while (rs.next()) {
@@ -1913,8 +1912,9 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
}
@Override
- public List getSubscriptionDetailsByDeviceIds(int appReleaseId, boolean unsubscribe, int tenantId, List deviceIds)
- throws ApplicationManagementDAOException {
+ public List getSubscriptionDetailsByDeviceIds(int appReleaseId, boolean unsubscribe, int tenantId,
+ List deviceIds, String actionStatus, String actionType,
+ String actionTriggeredBy, String tabActionStatus) throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting device subscriptions for the application release id " + appReleaseId
+ " and device ids " + deviceIds + " from the database");
@@ -1922,7 +1922,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
try {
Connection conn = this.getDBConnection();
String subscriptionStatusTime = unsubscribe ? "DS.UNSUBSCRIBED_TIMESTAMP" : "DS.SUBSCRIBED_TIMESTAMP";
- String sql = "SELECT "
+ StringBuilder sql = new StringBuilder("SELECT "
+ "DS.ID AS ID, "
+ "DS.SUBSCRIBED_BY AS SUBSCRIBED_BY, "
+ "DS.SUBSCRIBED_TIMESTAMP AS SUBSCRIBED_AT, "
@@ -1934,16 +1934,39 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
+ "DS.DM_DEVICE_ID AS DEVICE_ID "
+ "FROM AP_DEVICE_SUBSCRIPTION DS "
+ "WHERE DS.AP_APP_RELEASE_ID = ? AND DS.UNSUBSCRIBED = ? AND DS.TENANT_ID = ? AND DS.DM_DEVICE_ID IN (" +
- deviceIds.stream().map(id -> "?").collect(Collectors.joining(",")) + ") "
- + "ORDER BY " + subscriptionStatusTime + " DESC";
+ deviceIds.stream().map(id -> "?").collect(Collectors.joining(",")) + ") ");
- try (PreparedStatement ps = conn.prepareStatement(sql)) {
- ps.setInt(1, appReleaseId);
- ps.setBoolean(2, unsubscribe);
- ps.setInt(3, tenantId);
+ if (actionStatus != null && !actionStatus.isEmpty()) {
+ sql.append(" AND DS.STATUS = ? ");
+ }
+ if (actionType != null && !actionType.isEmpty()) {
+ sql.append(" AND DS.ACTION_TRIGGERED_FROM = ? ");
+ }
+ if (actionTriggeredBy != null && !actionTriggeredBy.isEmpty()) {
+ sql.append(" AND DS.SUBSCRIBED_BY LIKE ? ");
+ }
+
+ sql.append("ORDER BY ").append(subscriptionStatusTime).append(" DESC");
+
+ try (PreparedStatement ps = conn.prepareStatement(sql.toString())) {
+ int paramIdx = 1;
+ ps.setInt(paramIdx++, appReleaseId);
+ ps.setBoolean(paramIdx++, unsubscribe);
+ ps.setInt(paramIdx++, tenantId);
for (int i = 0; i < deviceIds.size(); i++) {
- ps.setInt(4 + i, deviceIds.get(i));
+ ps.setInt(paramIdx++, deviceIds.get(i));
}
+
+ if (actionStatus != null && !actionStatus.isEmpty()) {
+ ps.setString(paramIdx++, actionStatus);
+ }
+ if (actionType != null && !actionType.isEmpty()) {
+ ps.setString(paramIdx++, actionType);
+ }
+ if (actionTriggeredBy != null && !actionTriggeredBy.isEmpty()) {
+ ps.setString(paramIdx++, "%" + actionTriggeredBy + "%");
+ }
+
try (ResultSet rs = ps.executeQuery()) {
if (log.isDebugEnabled()) {
log.debug("Successfully retrieved device subscriptions for application release id "
@@ -1982,6 +2005,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
@Override
public List getAllSubscriptionsDetails(int appReleaseId, boolean unsubscribe, int tenantId,
+ String actionStatus, String actionType, String actionTriggeredBy,
int offset, int limit) throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting device subscriptions for the application release id " + appReleaseId
@@ -1989,7 +2013,8 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
}
String subscriptionStatusTime = unsubscribe ? "DS.UNSUBSCRIBED_TIMESTAMP" : "DS.SUBSCRIBED_TIMESTAMP";
- String sql = "SELECT "
+ String actionTriggeredColumn = unsubscribe ? "DS.UNSUBSCRIBED_BY" : "DS.SUBSCRIBED_BY";
+ StringBuilder sql = new StringBuilder("SELECT "
+ "DS.ID AS ID, "
+ "DS.SUBSCRIBED_BY AS SUBSCRIBED_BY, "
+ "DS.SUBSCRIBED_TIMESTAMP AS SUBSCRIBED_AT, "
@@ -1997,21 +2022,45 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
+ "DS.UNSUBSCRIBED_BY AS UNSUBSCRIBED_BY, "
+ "DS.UNSUBSCRIBED_TIMESTAMP AS UNSUBSCRIBED_AT, "
+ "DS.ACTION_TRIGGERED_FROM AS ACTION_TRIGGERED_FROM, "
- + "DS.STATUS AS STATUS,"
+ + "DS.STATUS AS STATUS, "
+ "DS.DM_DEVICE_ID AS DEVICE_ID "
+ "FROM AP_DEVICE_SUBSCRIPTION DS "
- + "WHERE DS.AP_APP_RELEASE_ID = ? AND DS.UNSUBSCRIBED = ? AND DS.TENANT_ID=? "
- + "ORDER BY " + subscriptionStatusTime + " DESC "
- + "LIMIT ? OFFSET ?";
+ + "WHERE DS.AP_APP_RELEASE_ID = ? AND DS.UNSUBSCRIBED = ? AND DS.TENANT_ID = ? ");
+
+ if (actionStatus != null && !actionStatus.isEmpty()) {
+ sql.append(" AND DS.STATUS = ? ");
+ }
+ if (actionType != null && !actionType.isEmpty()) {
+ sql.append(" AND DS.ACTION_TRIGGERED_FROM = ? ");
+ }
+ if (actionTriggeredBy != null && !actionTriggeredBy.isEmpty()) {
+ sql.append(" AND ").append(actionTriggeredColumn).append(" LIKE ? ");
+ }
+
+ sql.append("ORDER BY ").append(subscriptionStatusTime).append(" DESC ")
+ .append("LIMIT ? OFFSET ?");
try {
Connection conn = this.getDBConnection();
- 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);
+ try (PreparedStatement ps = conn.prepareStatement(sql.toString())) {
+ int paramIdx = 1;
+ ps.setInt(paramIdx++, appReleaseId);
+ ps.setBoolean(paramIdx++, unsubscribe);
+ ps.setInt(paramIdx++, tenantId);
+
+ if (actionStatus != null && !actionStatus.isEmpty()) {
+ ps.setString(paramIdx++, actionStatus);
+ }
+ if (actionType != null && !actionType.isEmpty()) {
+ ps.setString(paramIdx++, actionType);
+ }
+ if (actionTriggeredBy != null && !actionTriggeredBy.isEmpty()) {
+ ps.setString(paramIdx++, "%" + actionTriggeredBy + "%");
+ }
+
+ ps.setInt(paramIdx++, limit);
+ ps.setInt(paramIdx++, offset);
+
try (ResultSet rs = ps.executeQuery()) {
if (log.isDebugEnabled()) {
log.debug("Successfully retrieved device subscriptions for application release id "
@@ -2042,7 +2091,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
- String msg = "Error occurred while while running SQL to get device subscription data for application ID: " + appReleaseId;
+ String msg = "Error occurred while running SQL to get device subscription data for application ID: " + appReleaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
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/impl/ApplicationManagerImpl.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/ApplicationManagerImpl.java
index 9be21a8a0c..fc90d59035 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/ApplicationManagerImpl.java
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/ApplicationManagerImpl.java
@@ -19,28 +19,11 @@
package io.entgra.device.mgt.core.application.mgt.core.impl;
import io.entgra.device.mgt.core.application.mgt.common.exception.FileDownloaderServiceException;
-import io.entgra.device.mgt.core.application.mgt.common.exception.FileTransferServiceException;
import io.entgra.device.mgt.core.application.mgt.core.exception.BadRequestException;
import io.entgra.device.mgt.core.application.mgt.core.dao.*;
import io.entgra.device.mgt.core.application.mgt.core.exception.*;
-import io.entgra.device.mgt.core.device.mgt.common.Base64File;
import io.entgra.device.mgt.core.application.mgt.core.dao.SPApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.util.ApplicationManagementUtil;
-import io.entgra.device.mgt.core.device.mgt.common.PaginationRequest;
-import io.entgra.device.mgt.core.device.mgt.common.app.mgt.App;
-import io.entgra.device.mgt.core.device.mgt.common.exceptions.MetadataManagementException;
-import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.Metadata;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.validator.routines.UrlValidator;
-import org.apache.cxf.jaxrs.ext.multipart.Attachment;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.json.JSONObject;
-import org.wso2.carbon.context.CarbonContext;
-import org.wso2.carbon.context.PrivilegedCarbonContext;
import io.entgra.device.mgt.core.application.mgt.common.ApplicationArtifact;
import io.entgra.device.mgt.core.application.mgt.common.ApplicationInstaller;
import io.entgra.device.mgt.core.application.mgt.common.ApplicationList;
@@ -91,21 +74,35 @@ import io.entgra.device.mgt.core.application.mgt.core.lifecycle.LifecycleStateMa
import io.entgra.device.mgt.core.application.mgt.core.util.APIUtil;
import io.entgra.device.mgt.core.application.mgt.core.util.ConnectionManagerUtil;
import io.entgra.device.mgt.core.application.mgt.core.util.Constants;
+import io.entgra.device.mgt.core.device.mgt.common.Base64File;
import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceManagementException;
+import io.entgra.device.mgt.core.device.mgt.common.PaginationRequest;
+import io.entgra.device.mgt.core.device.mgt.common.exceptions.MetadataManagementException;
+import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.Metadata;
import io.entgra.device.mgt.core.device.mgt.core.common.exception.StorageManagementException;
import io.entgra.device.mgt.core.device.mgt.core.dto.DeviceType;
import io.entgra.device.mgt.core.device.mgt.core.service.DeviceManagementProviderService;
-import org.wso2.carbon.stratos.common.beans.TenantInfoBean;
-import org.wso2.carbon.tenant.mgt.services.TenantMgtAdminService;
+import io.entgra.device.mgt.core.tenant.mgt.common.exception.TenantMgtException;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.validator.routines.UrlValidator;
+import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.json.JSONObject;
+import org.wso2.carbon.context.CarbonContext;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.user.api.UserRealm;
import org.wso2.carbon.user.api.UserStoreException;
-
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
-import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -722,24 +719,29 @@ public class ApplicationManagerImpl implements ApplicationManager {
* @throws ResourceManagementException if error occurred while uploading
*/
private ApplicationReleaseDTO uploadCustomAppReleaseArtifacts(ApplicationReleaseDTO releaseDTO, ApplicationArtifact applicationArtifact,
- String deviceType)
+ String deviceType)
throws ResourceManagementException, ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
- byte[] content = getByteContentOfApp(applicationArtifact);
- String md5OfApp = generateMD5OfApp(applicationArtifact, content);
- validateReleaseBinaryFileHash(md5OfApp);
- releaseDTO.setUuid(UUID.randomUUID().toString());
- releaseDTO.setAppHashValue(md5OfApp);
- releaseDTO.setInstallerName(applicationArtifact.getInstallerName());
+ try {
+ String md5OfApp = applicationStorageManager.
+ getMD5(Files.newInputStream(Paths.get(applicationArtifact.getInstallerPath())));
+ validateReleaseBinaryFileHash(md5OfApp);
+ releaseDTO.setUuid(UUID.randomUUID().toString());
+ releaseDTO.setAppHashValue(md5OfApp);
+ releaseDTO.setInstallerName(applicationArtifact.getInstallerName());
- try (ByteArrayInputStream binaryDuplicate = new ByteArrayInputStream(content)) {
applicationStorageManager.uploadReleaseArtifact(releaseDTO, deviceType,
- binaryDuplicate, tenantId);
+ Files.newInputStream(Paths.get(applicationArtifact.getInstallerPath())), tenantId);
} catch (IOException e) {
String msg = "Error occurred when uploading release artifact into the server";
log.error(msg);
throw new ApplicationManagementException(msg, e);
+ } catch (StorageManagementException e) {
+ String msg = "Error occurred while md5sum value retrieving process: application UUID "
+ + releaseDTO.getUuid();
+ log.error(msg, e);
+ throw new ApplicationManagementException(msg, e);
}
return addImageArtifacts(releaseDTO, applicationArtifact, tenantId);
}
@@ -768,6 +770,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
return Constants.GOOGLE_PLAY_STORE_URL;
} else if (DeviceTypes.IOS.toString().equalsIgnoreCase(deviceType)) {
return Constants.APPLE_STORE_URL;
+ } else if (DeviceTypes.WINDOWS.toString().equalsIgnoreCase(deviceType)) {
+ return Constants.MICROSOFT_STORE_URL;
} else {
throw new IllegalArgumentException("No such device with the name " + deviceType);
}
@@ -855,82 +859,77 @@ public class ApplicationManagerImpl implements ApplicationManager {
String uuid = UUID.randomUUID().toString();
applicationReleaseDTO.setUuid(uuid);
-
// The application executable artifacts such as apks are uploaded.
try {
- byte[] content = IOUtils.toByteArray(applicationArtifact.getInstallerStream());
applicationReleaseDTO.setInstallerName(applicationArtifact.getInstallerName());
- try (ByteArrayInputStream binary = new ByteArrayInputStream(content)) {
- if (!DeviceTypes.WINDOWS.toString().equalsIgnoreCase(deviceType)) {
- ApplicationInstaller applicationInstaller = applicationStorageManager
- .getAppInstallerData(binary, deviceType);
- applicationReleaseDTO.setVersion(applicationInstaller.getVersion());
- applicationReleaseDTO.setPackageName(applicationInstaller.getPackageName());
- } else {
- String windowsInstallerName = applicationArtifact.getInstallerName();
- String extension = windowsInstallerName.substring(windowsInstallerName.lastIndexOf(".") + 1);
- if (!extension.equalsIgnoreCase(Constants.MSI) &&
- !extension.equalsIgnoreCase(Constants.APPX)) {
- String msg = "Application Type doesn't match with supporting application types of " +
- deviceType + "platform which are APPX and MSI";
- log.error(msg);
- throw new BadRequestException(msg);
- }
+ if (!DeviceTypes.WINDOWS.toString().equalsIgnoreCase(deviceType)) {
+ ApplicationInstaller applicationInstaller = applicationStorageManager
+ .getAppInstallerData(Files.newInputStream(Paths.get(applicationArtifact.getInstallerPath())), deviceType);
+ applicationReleaseDTO.setVersion(applicationInstaller.getVersion());
+ applicationReleaseDTO.setPackageName(applicationInstaller.getPackageName());
+ } else {
+ String windowsInstallerName = applicationArtifact.getInstallerName();
+ String extension = windowsInstallerName.substring(windowsInstallerName.lastIndexOf(".") + 1);
+ if (!extension.equalsIgnoreCase(Constants.MSI) &&
+ !extension.equalsIgnoreCase(Constants.APPX)) {
+ String msg = "Application Type doesn't match with supporting application types of " +
+ deviceType + "platform which are APPX and MSI";
+ log.error(msg);
+ throw new BadRequestException(msg);
}
+ }
- String packageName = applicationReleaseDTO.getPackageName();
- try {
- ConnectionManagerUtil.openDBConnection();
- if (!isNewRelease && applicationReleaseDAO
- .isActiveReleaseExisitForPackageName(packageName, tenantId,
- lifecycleStateManager.getEndState())) {
- String msg = "Application release is already exist for the package name: " + packageName
- + ". Either you can delete all application releases for package " + packageName + " or "
- + "you can add this app release as an new application release, under the existing "
- + "application.";
- log.error(msg);
- throw new ApplicationManagementException(msg);
- }
- String md5OfApp = applicationStorageManager.getMD5(new ByteArrayInputStream(content));
- if (md5OfApp == null) {
- String msg = "Error occurred while md5sum value retrieving process: application UUID "
- + applicationReleaseDTO.getUuid();
- log.error(msg);
- throw new ApplicationStorageManagementException(msg);
- }
- if (this.applicationReleaseDAO.verifyReleaseExistenceByHash(md5OfApp, tenantId)) {
- String msg =
- "Application release exists for the uploaded binary file. Device Type: " + deviceType;
- log.error(msg);
- throw new BadRequestException(msg);
- }
- applicationReleaseDTO.setAppHashValue(md5OfApp);
-
- try (ByteArrayInputStream binaryDuplicate = new ByteArrayInputStream(content)) {
- applicationStorageManager
- .uploadReleaseArtifact(applicationReleaseDTO, deviceType, binaryDuplicate, tenantId);
- }
- } catch (StorageManagementException e) {
+ String packageName = applicationReleaseDTO.getPackageName();
+ try {
+ ConnectionManagerUtil.openDBConnection();
+ if (!isNewRelease && applicationReleaseDAO
+ .isActiveReleaseExisitForPackageName(packageName, tenantId,
+ lifecycleStateManager.getEndState())) {
+ String msg = "Application release is already exist for the package name: " + packageName
+ + ". Either you can delete all application releases for package " + packageName + " or "
+ + "you can add this app release as an new application release, under the existing "
+ + "application.";
+ log.error(msg);
+ throw new ApplicationManagementException(msg);
+ }
+ String md5OfApp = applicationStorageManager.
+ getMD5(Files.newInputStream(Paths.get(applicationArtifact.getInstallerPath())));
+ if (md5OfApp == null) {
String msg = "Error occurred while md5sum value retrieving process: application UUID "
+ applicationReleaseDTO.getUuid();
- log.error(msg, e);
- throw new ApplicationStorageManagementException(msg, e);
- } catch (DBConnectionException e) {
- String msg = "Error occurred when getting database connection for verifying app release data.";
- log.error(msg, e);
- throw new ApplicationManagementException(msg, e);
- } catch (ApplicationManagementDAOException e) {
+ log.error(msg);
+ throw new ApplicationStorageManagementException(msg);
+ }
+ if (this.applicationReleaseDAO.verifyReleaseExistenceByHash(md5OfApp, tenantId)) {
String msg =
- "Error occurred when executing the query for verifying application release existence for "
- + "the package.";
- log.error(msg, e);
- throw new ApplicationManagementException(msg, e);
- } finally {
- ConnectionManagerUtil.closeDBConnection();
+ "Application release exists for the uploaded binary file. Device Type: " + deviceType;
+ log.error(msg);
+ throw new BadRequestException(msg);
}
+ applicationReleaseDTO.setAppHashValue(md5OfApp);
+ applicationStorageManager
+ .uploadReleaseArtifact(applicationReleaseDTO, deviceType,
+ Files.newInputStream(Paths.get(applicationArtifact.getInstallerPath())), tenantId);
+ } catch (StorageManagementException e) {
+ String msg = "Error occurred while md5sum value retrieving process: application UUID "
+ + applicationReleaseDTO.getUuid();
+ log.error(msg, e);
+ throw new ApplicationStorageManagementException(msg, e);
+ } catch (DBConnectionException e) {
+ String msg = "Error occurred when getting database connection for verifying app release data.";
+ log.error(msg, e);
+ throw new ApplicationManagementException(msg, e);
+ } catch (ApplicationManagementDAOException e) {
+ String msg =
+ "Error occurred when executing the query for verifying application release existence for "
+ + "the package.";
+ log.error(msg, e);
+ throw new ApplicationManagementException(msg, e);
+ } finally {
+ ConnectionManagerUtil.closeDBConnection();
}
} catch (IOException e) {
- String msg = "Error occurred when getting byte array of binary file. Installer name: " + applicationArtifact
+ String msg = "Error occurred when getting file input stream. Installer name: " + applicationArtifact
.getInstallerName();
log.error(msg, e);
throw new ApplicationStorageManagementException(msg, e);
@@ -956,73 +955,64 @@ public class ApplicationManagerImpl implements ApplicationManager {
// The application executable artifacts such as apks are uploaded.
try {
- byte[] content = IOUtils.toByteArray(applicationArtifact.getInstallerStream());
-
- try (ByteArrayInputStream binaryClone = new ByteArrayInputStream(content)) {
- String md5OfApp = applicationStorageManager.getMD5(binaryClone);
-
- if (md5OfApp == null) {
- String msg = "Error occurred while retrieving md5sum value from the binary file for application "
- + "release UUID " + applicationReleaseDTO.getUuid();
- log.error(msg);
- throw new ApplicationStorageManagementException(msg);
- }
- if (!applicationReleaseDTO.getAppHashValue().equals(md5OfApp)) {
- applicationReleaseDTO.setInstallerName(applicationArtifact.getInstallerName());
-
- try (ByteArrayInputStream binary = new ByteArrayInputStream(content)) {
- ApplicationInstaller applicationInstaller = applicationStorageManager
- .getAppInstallerData(binary, deviceType);
- String packageName = applicationInstaller.getPackageName();
+ String md5OfApp = applicationStorageManager.getMD5(Files.newInputStream(Paths.get(applicationArtifact.getInstallerPath())));
+ if (md5OfApp == null) {
+ String msg = "Error occurred while retrieving md5sum value from the binary file for application "
+ + "release UUID " + applicationReleaseDTO.getUuid();
+ log.error(msg);
+ throw new ApplicationStorageManagementException(msg);
+ }
- try {
- ConnectionManagerUtil.getDBConnection();
- if (this.applicationReleaseDAO.verifyReleaseExistenceByHash(md5OfApp, tenantId)) {
- String msg = "Same binary file is in the server. Hence you can't add same file into the "
- + "server. Device Type: " + deviceType + " and package name: " + packageName;
- log.error(msg);
- throw new BadRequestException(msg);
- }
- if (applicationReleaseDTO.getPackageName() == null){
- String msg = "Found null value for application release package name for application "
- + "release which has UUID: " + applicationReleaseDTO.getUuid();
- log.error(msg);
- throw new ApplicationManagementException(msg);
- }
- if (!applicationReleaseDTO.getPackageName().equals(packageName)){
- String msg = "Package name of the new artifact does not match with the package name of "
- + "the exiting application release. Package name of the existing app release "
- + applicationReleaseDTO.getPackageName() + " and package name of the new "
- + "application release " + packageName;
- log.error(msg);
- throw new BadRequestException(msg);
- }
+ if (!applicationReleaseDTO.getAppHashValue().equals(md5OfApp)) {
+ applicationReleaseDTO.setInstallerName(applicationArtifact.getInstallerName());
+ ApplicationInstaller applicationInstaller = applicationStorageManager
+ .getAppInstallerData(Files.newInputStream(Paths.get(applicationArtifact.getInstallerPath())), deviceType);
+ String packageName = applicationInstaller.getPackageName();
- applicationReleaseDTO.setVersion(applicationInstaller.getVersion());
- applicationReleaseDTO.setPackageName(packageName);
- String deletingAppHashValue = applicationReleaseDTO.getAppHashValue();
- applicationReleaseDTO.setAppHashValue(md5OfApp);
- try (ByteArrayInputStream binaryDuplicate = new ByteArrayInputStream(content)) {
- applicationStorageManager
- .uploadReleaseArtifact(applicationReleaseDTO, deviceType, binaryDuplicate,
- tenantId);
- applicationStorageManager.copyImageArtifactsAndDeleteInstaller(deletingAppHashValue,
- applicationReleaseDTO, tenantId);
- }
- } catch (DBConnectionException e) {
- String msg = "Error occurred when getting database connection for verifying application "
- + "release existing for new app hash value.";
- log.error(msg, e);
- throw new ApplicationManagementException(msg, e);
- } catch (ApplicationManagementDAOException e) {
- String msg = "Error occurred when executing the query for verifying application release "
- + "existence for the new app hash value.";
- log.error(msg, e);
- throw new ApplicationManagementException(msg, e);
- } finally {
- ConnectionManagerUtil.closeDBConnection();
- }
+ try {
+ ConnectionManagerUtil.getDBConnection();
+ if (this.applicationReleaseDAO.verifyReleaseExistenceByHash(md5OfApp, tenantId)) {
+ String msg = "Same binary file is in the server. Hence you can't add same file into the "
+ + "server. Device Type: " + deviceType + " and package name: " + packageName;
+ log.error(msg);
+ throw new BadRequestException(msg);
}
+ if (applicationReleaseDTO.getPackageName() == null) {
+ String msg = "Found null value for application release package name for application "
+ + "release which has UUID: " + applicationReleaseDTO.getUuid();
+ log.error(msg);
+ throw new ApplicationManagementException(msg);
+ }
+ if (!applicationReleaseDTO.getPackageName().equals(packageName)) {
+ String msg = "Package name of the new artifact does not match with the package name of "
+ + "the exiting application release. Package name of the existing app release "
+ + applicationReleaseDTO.getPackageName() + " and package name of the new "
+ + "application release " + packageName;
+ log.error(msg);
+ throw new BadRequestException(msg);
+ }
+
+ applicationReleaseDTO.setVersion(applicationInstaller.getVersion());
+ applicationReleaseDTO.setPackageName(packageName);
+ String deletingAppHashValue = applicationReleaseDTO.getAppHashValue();
+ applicationReleaseDTO.setAppHashValue(md5OfApp);
+ applicationStorageManager.uploadReleaseArtifact(applicationReleaseDTO, deviceType,
+ Files.newInputStream(Paths.get(applicationArtifact.getInstallerPath())),
+ tenantId);
+ applicationStorageManager.copyImageArtifactsAndDeleteInstaller(deletingAppHashValue,
+ applicationReleaseDTO, tenantId);
+ } catch (DBConnectionException e) {
+ String msg = "Error occurred when getting database connection for verifying application "
+ + "release existing for new app hash value.";
+ log.error(msg, e);
+ throw new ApplicationManagementException(msg, e);
+ } catch (ApplicationManagementDAOException e) {
+ String msg = "Error occurred when executing the query for verifying application release "
+ + "existence for the new app hash value.";
+ log.error(msg, e);
+ throw new ApplicationManagementException(msg, e);
+ } finally {
+ ConnectionManagerUtil.closeDBConnection();
}
}
} catch (StorageManagementException e) {
@@ -1031,7 +1021,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
log.error(msg, e);
throw new ApplicationStorageManagementException(msg, e);
} catch (IOException e) {
- String msg = "Error occurred when getting byte array of binary file. Installer name: " + applicationArtifact
+ String msg = "Error occurred when getting file input stream. Installer name: " + applicationArtifact
.getInstallerName();
log.error(msg, e);
throw new ApplicationStorageManagementException(msg, e);
@@ -3605,52 +3595,49 @@ public class ApplicationManagerImpl implements ApplicationManager {
DeviceType deviceTypeObj = APIUtil.getDeviceTypeData(applicationDTO.getDeviceTypeId());
// The application executable artifacts such as deb are uploaded.
try {
- byte[] content = IOUtils.toByteArray(applicationArtifact.getInstallerStream());
- try (ByteArrayInputStream binaryClone = new ByteArrayInputStream(content)) {
- String md5OfApp = applicationStorageManager.getMD5(binaryClone);
- if (md5OfApp == null) {
- String msg = "Error occurred while retrieving md5sum value from the binary file for "
- + "application release UUID " + applicationReleaseDTO.get().getUuid();
- log.error(msg);
- throw new ApplicationStorageManagementException(msg);
- }
- if (!applicationReleaseDTO.get().getAppHashValue().equals(md5OfApp)) {
- try {
- ConnectionManagerUtil.getDBConnection();
- if (this.applicationReleaseDAO.verifyReleaseExistenceByHash(md5OfApp, tenantId)) {
- String msg =
- "Same binary file is in the server. Hence you can't add same file into the "
- + "server. Device Type: " + deviceTypeObj.getName()
- + " and package name: " + applicationDTO.getApplicationReleaseDTOs()
- .get(0).getPackageName();
- log.error(msg);
- throw new BadRequestException(msg);
- }
+ String md5OfApp = applicationStorageManager.getMD5(
+ Files.newInputStream(Paths.get(applicationArtifact.getInstallerPath())));
+ if (md5OfApp == null) {
+ String msg = "Error occurred while retrieving md5sum value from the binary file for "
+ + "application release UUID " + applicationReleaseDTO.get().getUuid();
+ log.error(msg);
+ throw new ApplicationStorageManagementException(msg);
+ }
- applicationReleaseDTO.get().setInstallerName(applicationArtifact.getInstallerName());
- String deletingAppHashValue = applicationReleaseDTO.get().getAppHashValue();
- applicationReleaseDTO.get().setAppHashValue(md5OfApp);
- try (ByteArrayInputStream binaryDuplicate = new ByteArrayInputStream(content)) {
- applicationStorageManager
- .uploadReleaseArtifact(applicationReleaseDTO.get(), deviceTypeObj.getName(),
- binaryDuplicate, tenantId);
- applicationStorageManager.copyImageArtifactsAndDeleteInstaller(deletingAppHashValue,
- applicationReleaseDTO.get(), tenantId);
- }
- } catch (DBConnectionException e) {
- String msg = "Error occurred when getting database connection for verifying application"
- + " release existing for new app hash value.";
- log.error(msg, e);
- throw new ApplicationManagementException(msg, e);
- } catch (ApplicationManagementDAOException e) {
+ if (!applicationReleaseDTO.get().getAppHashValue().equals(md5OfApp)) {
+ try {
+ ConnectionManagerUtil.getDBConnection();
+ if (this.applicationReleaseDAO.verifyReleaseExistenceByHash(md5OfApp, tenantId)) {
String msg =
- "Error occurred when executing the query for verifying application release "
- + "existence for the new app hash value.";
- log.error(msg, e);
- throw new ApplicationManagementException(msg, e);
- } finally {
- ConnectionManagerUtil.closeDBConnection();
+ "Same binary file is in the server. Hence you can't add same file into the "
+ + "server. Device Type: " + deviceTypeObj.getName()
+ + " and package name: " + applicationDTO.getApplicationReleaseDTOs()
+ .get(0).getPackageName();
+ log.error(msg);
+ throw new BadRequestException(msg);
}
+
+ applicationReleaseDTO.get().setInstallerName(applicationArtifact.getInstallerName());
+ String deletingAppHashValue = applicationReleaseDTO.get().getAppHashValue();
+ applicationReleaseDTO.get().setAppHashValue(md5OfApp);
+ applicationStorageManager.
+ uploadReleaseArtifact(applicationReleaseDTO.get(), deviceTypeObj.getName(),
+ Files.newInputStream(Paths.get(applicationArtifact.getInstallerPath())), tenantId);
+ applicationStorageManager.copyImageArtifactsAndDeleteInstaller(deletingAppHashValue,
+ applicationReleaseDTO.get(), tenantId);
+ } catch (DBConnectionException e) {
+ String msg = "Error occurred when getting database connection for verifying application"
+ + " release existing for new app hash value.";
+ log.error(msg, e);
+ throw new ApplicationManagementException(msg, e);
+ } catch (ApplicationManagementDAOException e) {
+ String msg =
+ "Error occurred when executing the query for verifying application release "
+ + "existence for the new app hash value.";
+ log.error(msg, e);
+ throw new ApplicationManagementException(msg, e);
+ } finally {
+ ConnectionManagerUtil.closeDBConnection();
}
}
} catch (StorageManagementException e) {
@@ -4422,7 +4409,6 @@ public class ApplicationManagerImpl implements ApplicationManager {
spApplicationDAO.deleteSPApplicationMappingByTenant(tenantId);
spApplicationDAO.deleteIdentityServerByTenant(tenantId);
applicationDAO.deleteApplicationsByTenant(tenantId);
- APIUtil.getApplicationStorageManager().deleteAppFolderOfTenant(tenantId);
ConnectionManagerUtil.commitDBTransaction();
} catch (DBConnectionException e) {
@@ -4447,12 +4433,6 @@ public class ApplicationManagerImpl implements ApplicationManager {
+ " of tenant ID: " + tenantId ;
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
- } catch (ApplicationStorageManagementException e) {
- ConnectionManagerUtil.rollbackDBTransaction();
- String msg = "Error occurred while deleting App folder of tenant"
- + " of tenant ID: " + tenantId ;
- log.error(msg, e);
- throw new ApplicationManagementException(msg, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
}
@@ -4461,19 +4441,9 @@ public class ApplicationManagerImpl implements ApplicationManager {
@Override
public void deleteApplicationDataByTenantDomain(String tenantDomain) throws ApplicationManagementException {
int tenantId;
- try{
- TenantMgtAdminService tenantMgtAdminService = new TenantMgtAdminService();
- TenantInfoBean tenantInfoBean = tenantMgtAdminService.getTenant(tenantDomain);
- tenantId = tenantInfoBean.getTenantId();
-
- } catch (Exception e) {
- String msg = "Error getting tenant ID from domain: "
- + tenantDomain;
- log.error(msg, e);
- throw new ApplicationManagementException(msg, e);
- }
-
try {
+ tenantId = DataHolder.getInstance().getTenantManagerAdminService().getTenantId(tenantDomain);
+
ConnectionManagerUtil.beginDBTransaction();
vppApplicationDAO.deleteAssociationByTenant(tenantId);
@@ -4497,40 +4467,54 @@ public class ApplicationManagerImpl implements ApplicationManager {
spApplicationDAO.deleteSPApplicationMappingByTenant(tenantId);
spApplicationDAO.deleteIdentityServerByTenant(tenantId);
applicationDAO.deleteApplicationsByTenant(tenantId);
- APIUtil.getApplicationStorageManager().deleteAppFolderOfTenant(tenantId);
ConnectionManagerUtil.commitDBTransaction();
} catch (DBConnectionException e) {
- String msg = "Error occurred while observing the database connection to delete applications for tenant with ID: "
- + tenantId;
+ String msg = "Error occurred while observing the database connection to delete applications for tenant with " +
+ "domain: " + tenantDomain;
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (ApplicationManagementDAOException e) {
ConnectionManagerUtil.rollbackDBTransaction();
- String msg = "Database access error is occurred when getting applications for tenant with ID: " + tenantId;
+ String msg = "Database access error is occurred when getting applications for tenant with domain: "
+ + tenantDomain;
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (LifeCycleManagementDAOException e) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Error occurred while deleting life-cycle state data of application releases of the tenant"
- + " of ID: " + tenantId ;
+ + " of domain: " + tenantDomain ;
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (ReviewManagementDAOException e) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Error occurred while deleting reviews of application releases of the applications"
- + " of tenant ID: " + tenantId ;
+ + " of tenant of domain: " + tenantDomain ;
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
- } catch (ApplicationStorageManagementException e) {
- ConnectionManagerUtil.rollbackDBTransaction();
- String msg = "Error occurred while deleting App folder of tenant"
- + " of tenant ID: " + tenantId ;
+ } catch (Exception e) {
+ String msg = "Error getting tenant ID from domain: "
+ + tenantDomain;
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
- } finally {
- ConnectionManagerUtil.closeDBConnection();
}
+ }
+ @Override
+ public void deleteApplicationArtifactsByTenantDomain(String tenantDomain) throws ApplicationManagementException {
+ int tenantId;
+ try {
+ tenantId = DataHolder.getInstance().getTenantManagerAdminService().getTenantId(tenantDomain);
+ DataHolder.getInstance().getApplicationStorageManager().deleteAppFolderOfTenant(tenantId);
+ } catch (ApplicationStorageManagementException e) {
+ String msg = "Error deleting app artifacts of tenant of domain: " + tenantDomain ;
+ log.error(msg, e);
+ throw new ApplicationManagementException(msg, e);
+ } catch (TenantMgtException e) {
+ String msg = "Error getting tenant ID from domain: "
+ + tenantDomain + " when trying to delete application artifacts of tenant";
+ log.error(msg, e);
+ throw new ApplicationManagementException(msg, e);
+ }
}
}
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/impl/ApplicationStorageManagerImpl.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/ApplicationStorageManagerImpl.java
index 7a20401381..c40090a887 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/ApplicationStorageManagerImpl.java
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/ApplicationStorageManagerImpl.java
@@ -32,14 +32,13 @@ import io.entgra.device.mgt.core.device.mgt.core.common.exception.StorageManagem
import io.entgra.device.mgt.core.device.mgt.core.common.util.StorageManagementUtil;
import net.dongliu.apk.parser.bean.ApkMeta;
import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.nio.file.Paths;
import java.util.List;
import static io.entgra.device.mgt.core.device.mgt.core.common.util.StorageManagementUtil.saveFile;
@@ -158,13 +157,12 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
public void uploadReleaseArtifact(ApplicationReleaseDTO applicationReleaseDTO,
String deviceType, InputStream binaryFile, int tenantId) throws ResourceManagementException {
try {
- byte [] content = IOUtils.toByteArray(binaryFile);
String artifactDirectoryPath =
storagePath + tenantId + File.separator + applicationReleaseDTO.getAppHashValue() + File.separator
+ Constants.APP_ARTIFACT;
StorageManagementUtil.createArtifactDirectory(artifactDirectoryPath);
String artifactPath = artifactDirectoryPath + File.separator + applicationReleaseDTO.getInstallerName();
- saveFile(new ByteArrayInputStream(content), artifactPath);
+ saveFile(binaryFile, artifactPath);
} catch (IOException e) {
String msg = "IO Exception while saving the release artifacts in the server for the application UUID "
+ applicationReleaseDTO.getUuid();
@@ -327,4 +325,12 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
}
}
}
+
+ @Override
+ public String getAbsolutePathOfFile(String hashVal, String folderName, String fileName, int tenantId) {
+ String filePath =
+ storagePath + tenantId + File.separator + hashVal + File.separator + folderName + File.separator
+ + fileName;
+ return Paths.get(filePath).toAbsolutePath().toString();
+ }
}
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/impl/FileTransferServiceImpl.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/FileTransferServiceImpl.java
index 52789308fd..8af3324c67 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/FileTransferServiceImpl.java
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/FileTransferServiceImpl.java
@@ -31,6 +31,7 @@ import io.entgra.device.mgt.core.device.mgt.common.exceptions.NotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.FileSystems;
@@ -103,8 +104,13 @@ public class FileTransferServiceImpl implements FileTransferService {
@Override
public boolean isExistsOnLocal(URL downloadUrl) throws FileTransferServiceException {
try {
- return FileTransferServiceHelperUtil.resolve(downloadUrl) != null;
- } catch (FileTransferServiceHelperUtilException e) {
+ FileDescriptor fileDescriptor = FileTransferServiceHelperUtil.resolve(downloadUrl);
+ if (fileDescriptor != null && fileDescriptor.getFile() != null) {
+ fileDescriptor.getFile().close();
+ return true;
+ }
+ return false;
+ } catch (FileTransferServiceHelperUtilException | IOException e) {
String msg = "Error occurred while checking the existence of artifact on the local environment";
log.error(msg, e);
throw new FileTransferServiceException(msg, e);
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/impl/SubscriptionManagerImpl.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/SubscriptionManagerImpl.java
index 623c3b6aa9..26322ae7dd 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/SubscriptionManagerImpl.java
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/impl/SubscriptionManagerImpl.java
@@ -1734,12 +1734,12 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
}
@Override
- public List getGroupsSubscriptionDetailsByUUID(String uuid, String subscriptionStatus, int offset,
- int limit) throws ApplicationManagementException {
+ public List getGroupsSubscriptionDetailsByUUID(
+ String uuid, String subscriptionStatus, PaginationRequest request, int offset, int limit)
+ throws ApplicationManagementException {
+
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
boolean unsubscribe = subscriptionStatus.equals("unsubscribed");
- String groupName;
- String status;
try {
ConnectionManagerUtil.openDBConnection();
@@ -1750,8 +1750,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
log.error(msg);
throw new NotFoundException(msg);
}
+ ApplicationDTO applicationDTO = this.applicationDAO.getAppWithRelatedRelease(uuid, tenantId);
int appReleaseId = applicationReleaseDTO.getId();
-
List groupDetailsWithDevices = new ArrayList<>();
List groupDetails =
@@ -1763,11 +1763,18 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
GroupManagementProviderService groupManagementProviderService = HelperUtil.getGroupManagementProviderService();
for (GroupSubscriptionDTO groupDetail : groupDetails) {
- groupName = groupDetail.getGroupName();
+
+ if (StringUtils.isNotBlank(request.getGroupName()) && !request.getGroupName().equals(groupDetail.getGroupName())) {
+ continue;
+ }
+
+ String groupName = StringUtils.isNotBlank(request.getGroupName()) ? request.getGroupName() : groupDetail.getGroupName();
// Retrieve group details and device IDs for the group using the service layer
GroupDetailsDTO groupDetailWithDevices =
- groupManagementProviderService.getGroupDetailsWithDevices(groupName, offset, limit);
+ groupManagementProviderService.getGroupDetailsWithDevices(
+ groupName, applicationDTO.getDeviceTypeId(), request.getOwner(),
+ request.getDeviceName(), request.getDeviceStatus(), offset, limit);
SubscriptionsDTO groupDetailDTO = new SubscriptionsDTO();
groupDetailDTO.setId(groupDetailWithDevices.getGroupId());
@@ -1790,24 +1797,29 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
List deviceIds = groupDetailWithDevices.getDeviceIds();
Map statusCounts = new HashMap<>();
- statusCounts.put("PENDING", 0);
statusCounts.put("COMPLETED", 0);
statusCounts.put("ERROR", 0);
+ statusCounts.put("PENDING", 0);
statusCounts.put("NEW", 0);
statusCounts.put("SUBSCRIBED", 0);
- // Get subscribed devices if unsubscribed devices are requested
- List subscribedDeviceSubscriptions = new ArrayList<>();
- if (unsubscribe) {
- subscribedDeviceSubscriptions = subscriptionDAO.getSubscriptionDetailsByDeviceIds(
- appReleaseId, !unsubscribe, tenantId, deviceIds);
- }
-
for (Integer deviceId : deviceIds) {
- List deviceSubscriptions = subscriptionDAO.getSubscriptionDetailsByDeviceIds(
- groupDetail.getAppReleaseId(), unsubscribe, tenantId, deviceIds);
+ // Get subscribed devices if unsubscribed devices are requested
+ List deviceSubscriptions;
+ if (unsubscribe) {
+ deviceSubscriptions = subscriptionDAO.getSubscriptionDetailsByDeviceIds(
+ appReleaseId, !unsubscribe, tenantId, deviceIds,
+ request.getActionStatus(), request.getActionType(), request.getActionTriggeredBy(), request.getTabActionStatus());
+ } else {
+ deviceSubscriptions = subscriptionDAO.getSubscriptionDetailsByDeviceIds(
+ groupDetail.getAppReleaseId(), false, tenantId, deviceIds,
+ request.getActionStatus(), request.getActionType(), request.getActionTriggeredBy(), request.getTabActionStatus());
+ }
+ List filteredDeviceSubscriptions = deviceSubscriptions.stream()
+ .filter(subscription -> StringUtils.isBlank(request.getTabActionStatus()) || subscription.getStatus().equals(request.getTabActionStatus()))
+ .collect(Collectors.toList());
boolean isNewDevice = true;
- for (DeviceSubscriptionDTO subscription : deviceSubscriptions) {
+ for (DeviceSubscriptionDTO subscription : filteredDeviceSubscriptions) {
if (subscription.getDeviceId() == deviceId) {
DeviceSubscriptionData deviceDetail = new DeviceSubscriptionData();
deviceDetail.setDeviceId(subscription.getDeviceId());
@@ -1825,7 +1837,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
deviceDetail.setType(groupDetailWithDevices.getDeviceTypes().get(deviceId));
deviceDetail.setDeviceIdentifier(groupDetailWithDevices.getDeviceIdentifiers().get(deviceId));
- status = subscription.getStatus();
+ String status = subscription.getStatus();
switch (status) {
case "COMPLETED":
installedDevices.add(deviceDetail);
@@ -1843,13 +1855,17 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
pendingDevices.add(deviceDetail);
statusCounts.put("PENDING", statusCounts.get("PENDING") + 1);
break;
+ default:
+ newDevices.add(deviceDetail);
+ statusCounts.put("NEW", statusCounts.get("NEW") + 1);
+ break;
}
isNewDevice = false;
}
}
if (isNewDevice) {
boolean isSubscribedDevice = false;
- for (DeviceSubscriptionDTO subscribedDevice : subscribedDeviceSubscriptions) {
+ for (DeviceSubscriptionDTO subscribedDevice : deviceSubscriptions) {
if (subscribedDevice.getDeviceId() == deviceId) {
DeviceSubscriptionData subscribedDeviceDetail = new DeviceSubscriptionData();
subscribedDeviceDetail.setDeviceId(subscribedDevice.getDeviceId());
@@ -1891,17 +1907,38 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
statusPercentages.put(entry.getKey(), Double.valueOf(formattedPercentage));
}
- CategorizedSubscriptionResult categorizedSubscriptionResult;
- if (subscribedDevices.isEmpty()) {
- categorizedSubscriptionResult =
- new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices);
+ List requestedDevices = new ArrayList<>();
+ if (StringUtils.isNotBlank(request.getTabActionStatus())) {
+ switch (request.getTabActionStatus()) {
+ case "COMPLETED":
+ requestedDevices = installedDevices;
+ break;
+ case "PENDING":
+ requestedDevices = pendingDevices;
+ break;
+ case "ERROR":
+ requestedDevices = errorDevices;
+ break;
+ case "NEW":
+ requestedDevices = newDevices;
+ break;
+ case "SUBSCRIBED":
+ requestedDevices = subscribedDevices;
+ break;
+ }
+ groupDetailDTO.setDevices(new CategorizedSubscriptionResult(requestedDevices, request.getTabActionStatus()));
} else {
- categorizedSubscriptionResult =
- new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices, subscribedDevices);
+ CategorizedSubscriptionResult categorizedSubscriptionResult;
+ if (subscribedDevices.isEmpty()) {
+ categorizedSubscriptionResult =
+ new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices);
+ } else {
+ categorizedSubscriptionResult =
+ new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices, subscribedDevices);
+ }
+ groupDetailDTO.setDevices(categorizedSubscriptionResult);
}
- groupDetailDTO.setDevices(categorizedSubscriptionResult);
groupDetailDTO.setStatusPercentages(statusPercentages);
-
groupDetailsWithDevices.add(groupDetailDTO);
}
@@ -1924,11 +1961,11 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
}
@Override
- public List getUserSubscriptionsByUUID(String uuid, String subscriptionStatus, int offset, int limit)
+ public List getUserSubscriptionsByUUID(String uuid, String subscriptionStatus,
+ PaginationRequest request, int offset, int limit)
throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
boolean unsubscribe = subscriptionStatus.equals("unsubscribed");
- String userName;
String status;
try {
@@ -1940,8 +1977,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
log.error(msg);
throw new NotFoundException(msg);
}
+ ApplicationDTO applicationDTO = this.applicationDAO.getAppWithRelatedRelease(uuid, tenantId);
int appReleaseId = applicationReleaseDTO.getId();
-
List userSubscriptionsWithDevices = new ArrayList<>();
List userSubscriptions =
@@ -1953,11 +1990,17 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
DeviceManagementProviderService deviceManagementProviderService = HelperUtil.getDeviceManagementProviderService();
for (SubscriptionsDTO userSubscription : userSubscriptions) {
- userName = userSubscription.getName();
+
+ if (StringUtils.isNotBlank(request.getUserName()) && !request.getUserName().equals(userSubscription.getName())) {
+ continue;
+ }
+
+ String userName = StringUtils.isNotBlank(request.getUserName()) ? request.getUserName() : userSubscription.getName();
// Retrieve owner details and device IDs for the user using the service layer
OwnerWithDeviceDTO ownerDetailsWithDevices =
- deviceManagementProviderService.getOwnersWithDeviceIds(userName);
+ deviceManagementProviderService.getOwnersWithDeviceIds(userName, applicationDTO.getDeviceTypeId(),
+ request.getOwner(), request.getDeviceName(), request.getDeviceStatus());
SubscriptionsDTO userSubscriptionDTO = new SubscriptionsDTO();
userSubscriptionDTO.setName(userSubscription.getName());
@@ -1988,21 +2031,29 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
List subscribedDeviceSubscriptions = new ArrayList<>();
if (unsubscribe) {
subscribedDeviceSubscriptions = subscriptionDAO.getSubscriptionDetailsByDeviceIds(
- appReleaseId, !unsubscribe, tenantId, deviceIds);
+ appReleaseId, !unsubscribe, tenantId, deviceIds, request.getActionStatus(), request.getActionType(),
+ request.getActionTriggeredBy(), request.getTabActionStatus());
}
for (Integer deviceId : deviceIds) {
List deviceSubscriptions = subscriptionDAO.getSubscriptionDetailsByDeviceIds(
- userSubscription.getAppReleaseId(), unsubscribe, tenantId, deviceIds);
+ userSubscription.getAppReleaseId(), unsubscribe, tenantId, deviceIds, request.getActionStatus(), request.getActionType(),
+ request.getActionTriggeredBy(), request.getTabActionStatus());
+ OwnerWithDeviceDTO ownerWithDeviceByDeviceId =
+ deviceManagementProviderService.getOwnerWithDeviceByDeviceId(deviceId, request.getOwner(), request.getDeviceName(),
+ request.getDeviceStatus());
+ if (ownerWithDeviceByDeviceId == null) {
+ continue;
+ }
boolean isNewDevice = true;
for (DeviceSubscriptionDTO subscription : deviceSubscriptions) {
if (subscription.getDeviceId() == deviceId) {
DeviceSubscriptionData deviceDetail = new DeviceSubscriptionData();
deviceDetail.setDeviceId(subscription.getDeviceId());
deviceDetail.setSubId(subscription.getId());
- deviceDetail.setDeviceOwner(ownerDetailsWithDevices.getUserName());
- deviceDetail.setDeviceStatus(ownerDetailsWithDevices.getDeviceStatus());
- deviceDetail.setDeviceName(ownerDetailsWithDevices.getDeviceNames());
+ deviceDetail.setDeviceOwner(ownerWithDeviceByDeviceId.getUserName());
+ deviceDetail.setDeviceStatus(ownerWithDeviceByDeviceId.getDeviceStatus());
+ deviceDetail.setDeviceName(ownerWithDeviceByDeviceId.getDeviceNames());
deviceDetail.setActionType(subscription.getActionTriggeredFrom());
deviceDetail.setStatus(subscription.getStatus());
deviceDetail.setActionType(subscription.getActionTriggeredFrom());
@@ -2011,8 +2062,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
deviceDetail.setUnsubscribed(subscription.isUnsubscribed());
deviceDetail.setUnsubscribedBy(subscription.getUnsubscribedBy());
deviceDetail.setUnsubscribedTimestamp(subscription.getUnsubscribedTimestamp());
- deviceDetail.setType(ownerDetailsWithDevices.getDeviceTypes());
- deviceDetail.setDeviceIdentifier(ownerDetailsWithDevices.getDeviceIdentifiers());
+ deviceDetail.setType(ownerWithDeviceByDeviceId.getDeviceTypes());
+ deviceDetail.setDeviceIdentifier(ownerWithDeviceByDeviceId.getDeviceIdentifiers());
status = subscription.getStatus();
switch (status) {
@@ -2042,16 +2093,16 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
if (subscribedDevice.getDeviceId() == deviceId) {
DeviceSubscriptionData subscribedDeviceDetail = new DeviceSubscriptionData();
subscribedDeviceDetail.setDeviceId(subscribedDevice.getDeviceId());
- subscribedDeviceDetail.setDeviceName(ownerDetailsWithDevices.getDeviceNames());
- subscribedDeviceDetail.setDeviceOwner(ownerDetailsWithDevices.getUserName());
- subscribedDeviceDetail.setDeviceStatus(ownerDetailsWithDevices.getDeviceStatus());
+ subscribedDeviceDetail.setDeviceName(ownerWithDeviceByDeviceId.getDeviceNames());
+ subscribedDeviceDetail.setDeviceOwner(ownerWithDeviceByDeviceId.getUserName());
+ subscribedDeviceDetail.setDeviceStatus(ownerWithDeviceByDeviceId.getDeviceStatus());
subscribedDeviceDetail.setSubId(subscribedDevice.getId());
subscribedDeviceDetail.setActionTriggeredBy(subscribedDevice.getSubscribedBy());
subscribedDeviceDetail.setActionTriggeredTimestamp(subscribedDevice.getSubscribedTimestamp());
subscribedDeviceDetail.setActionType(subscribedDevice.getActionTriggeredFrom());
subscribedDeviceDetail.setStatus(subscribedDevice.getStatus());
- subscribedDeviceDetail.setType(ownerDetailsWithDevices.getDeviceTypes());
- subscribedDeviceDetail.setDeviceIdentifier(ownerDetailsWithDevices.getDeviceIdentifiers());
+ subscribedDeviceDetail.setType(ownerWithDeviceByDeviceId.getDeviceTypes());
+ subscribedDeviceDetail.setDeviceIdentifier(ownerWithDeviceByDeviceId.getDeviceIdentifiers());
subscribedDevices.add(subscribedDeviceDetail);
statusCounts.put("SUBSCRIBED", statusCounts.get("SUBSCRIBED") + 1);
isSubscribedDevice = true;
@@ -2061,11 +2112,11 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
if (!isSubscribedDevice) {
DeviceSubscriptionData newDeviceDetail = new DeviceSubscriptionData();
newDeviceDetail.setDeviceId(deviceId);
- newDeviceDetail.setDeviceOwner(ownerDetailsWithDevices.getUserName());
- newDeviceDetail.setDeviceStatus(ownerDetailsWithDevices.getDeviceStatus());
- newDeviceDetail.setDeviceName(ownerDetailsWithDevices.getDeviceNames());
- newDeviceDetail.setType(ownerDetailsWithDevices.getDeviceTypes());
- newDeviceDetail.setDeviceIdentifier(ownerDetailsWithDevices.getDeviceIdentifiers());
+ newDeviceDetail.setDeviceOwner(ownerWithDeviceByDeviceId.getUserName());
+ newDeviceDetail.setDeviceStatus(ownerWithDeviceByDeviceId.getDeviceStatus());
+ newDeviceDetail.setDeviceName(ownerWithDeviceByDeviceId.getDeviceNames());
+ newDeviceDetail.setType(ownerWithDeviceByDeviceId.getDeviceTypes());
+ newDeviceDetail.setDeviceIdentifier(ownerWithDeviceByDeviceId.getDeviceIdentifiers());
newDevices.add(newDeviceDetail);
statusCounts.put("NEW", statusCounts.get("NEW") + 1);
}
@@ -2080,20 +2131,42 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
statusPercentages.put(entry.getKey(), Double.valueOf(formattedPercentage));
}
- CategorizedSubscriptionResult categorizedSubscriptionResult;
- if (subscribedDevices.isEmpty()) {
- categorizedSubscriptionResult =
- new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices);
+ List requestedDevices = new ArrayList<>();
+ if (StringUtils.isNotBlank(request.getTabActionStatus())) {
+ switch (request.getTabActionStatus()) {
+ case "COMPLETED":
+ requestedDevices = installedDevices;
+ break;
+ case "PENDING":
+ requestedDevices = pendingDevices;
+ break;
+ case "ERROR":
+ requestedDevices = errorDevices;
+ break;
+ case "NEW":
+ requestedDevices = newDevices;
+ break;
+ case "SUBSCRIBED":
+ requestedDevices = subscribedDevices;
+ break;
+ }
+ userSubscriptionDTO.setDevices(new CategorizedSubscriptionResult(requestedDevices, request.getTabActionStatus()));
} else {
- categorizedSubscriptionResult =
- new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices, subscribedDevices);
- }
- userSubscriptionDTO.setDevices(categorizedSubscriptionResult);
- userSubscriptionDTO.setStatusPercentages(statusPercentages);
+ CategorizedSubscriptionResult categorizedSubscriptionResult;
+ if (subscribedDevices.isEmpty()) {
+ categorizedSubscriptionResult =
+ new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices);
+ } else {
+ categorizedSubscriptionResult =
+ new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices,
+ subscribedDevices);
+ }
+ userSubscriptionDTO.setDevices(categorizedSubscriptionResult);
+ userSubscriptionDTO.setStatusPercentages(statusPercentages);
+ }
userSubscriptionsWithDevices.add(userSubscriptionDTO);
}
-
return userSubscriptionsWithDevices;
} catch (ApplicationManagementDAOException e) {
String msg = "Error occurred while getting user subscriptions for the application release UUID: " + uuid;
@@ -2111,7 +2184,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
}
@Override
- public List getRoleSubscriptionsByUUID(String uuid, String subscriptionStatus, int offset, int limit)
+ public List getRoleSubscriptionsByUUID(String uuid, String subscriptionStatus,
+ PaginationRequest request, int offset, int limit)
throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
boolean unsubscribe = subscriptionStatus.equals("unsubscribed");
@@ -2127,8 +2201,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
log.error(msg);
throw new NotFoundException(msg);
}
+ ApplicationDTO applicationDTO = this.applicationDAO.getAppWithRelatedRelease(uuid, tenantId);
int appReleaseId = applicationReleaseDTO.getId();
-
List roleSubscriptionsWithDevices = new ArrayList<>();
List roleSubscriptions =
@@ -2140,7 +2214,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
DeviceManagementProviderService deviceManagementProviderService = HelperUtil.getDeviceManagementProviderService();
for (SubscriptionsDTO roleSubscription : roleSubscriptions) {
- roleName = roleSubscription.getName();
+
+ roleName = StringUtils.isNotBlank(request.getRoleName()) ? request.getRoleName() : roleSubscription.getName();
SubscriptionsDTO roleSubscriptionDTO = new SubscriptionsDTO();
roleSubscriptionDTO.setName(roleSubscription.getName());
@@ -2169,7 +2244,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
for (String user : users) {
OwnerWithDeviceDTO ownerDetailsWithDevices;
try {
- ownerDetailsWithDevices = deviceManagementProviderService.getOwnersWithDeviceIds(user);
+ ownerDetailsWithDevices = deviceManagementProviderService.getOwnersWithDeviceIds(user, applicationDTO.getDeviceTypeId(),
+ request.getOwner(), request.getDeviceName(), request.getDeviceStatus());
} catch (DeviceManagementDAOException e) {
throw new ApplicationManagementException("Error retrieving owner details with devices for user: " + user, e);
}
@@ -2180,13 +2256,20 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
List subscribedDeviceSubscriptions = new ArrayList<>();
if (unsubscribe) {
subscribedDeviceSubscriptions = subscriptionDAO.getSubscriptionDetailsByDeviceIds(
- appReleaseId, !unsubscribe, tenantId, deviceIds);
+ appReleaseId, !unsubscribe, tenantId, deviceIds, request.getActionStatus(), request.getActionType(),
+ request.getActionTriggeredBy(), request.getTabActionStatus());
+ }
+ OwnerWithDeviceDTO ownerWithDeviceByDeviceId =
+ deviceManagementProviderService.getOwnerWithDeviceByDeviceId(deviceId, request.getOwner(), request.getDeviceName(),
+ request.getDeviceStatus());
+ if (ownerWithDeviceByDeviceId == null) {
+ continue;
}
-
List deviceSubscriptions;
try {
deviceSubscriptions = subscriptionDAO.getSubscriptionDetailsByDeviceIds(
- roleSubscription.getAppReleaseId(), unsubscribe, tenantId, deviceIds);
+ roleSubscription.getAppReleaseId(), unsubscribe, tenantId, deviceIds, request.getActionStatus(),
+ request.getActionType(), request.getActionTriggeredBy(), request.getTabActionStatus());
} catch (ApplicationManagementDAOException e) {
throw new ApplicationManagementException("Error retrieving device subscriptions", e);
}
@@ -2196,9 +2279,9 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
if (deviceSubscription.getDeviceId() == deviceId) {
DeviceSubscriptionData deviceDetail = new DeviceSubscriptionData();
deviceDetail.setDeviceId(deviceSubscription.getDeviceId());
- deviceDetail.setDeviceName(ownerDetailsWithDevices.getDeviceNames());
- deviceDetail.setDeviceOwner(ownerDetailsWithDevices.getUserName());
- deviceDetail.setDeviceStatus(ownerDetailsWithDevices.getDeviceStatus());
+ deviceDetail.setDeviceName(ownerWithDeviceByDeviceId.getDeviceNames());
+ deviceDetail.setDeviceOwner(ownerWithDeviceByDeviceId.getUserName());
+ deviceDetail.setDeviceStatus(ownerWithDeviceByDeviceId.getDeviceStatus());
deviceDetail.setActionType(deviceSubscription.getActionTriggeredFrom());
deviceDetail.setStatus(deviceSubscription.getStatus());
deviceDetail.setActionType(deviceSubscription.getActionTriggeredFrom());
@@ -2208,8 +2291,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
deviceDetail.setUnsubscribed(deviceSubscription.isUnsubscribed());
deviceDetail.setUnsubscribedBy(deviceSubscription.getUnsubscribedBy());
deviceDetail.setUnsubscribedTimestamp(deviceSubscription.getUnsubscribedTimestamp());
- deviceDetail.setType(ownerDetailsWithDevices.getDeviceTypes());
- deviceDetail.setDeviceIdentifier(ownerDetailsWithDevices.getDeviceIdentifiers());
+ deviceDetail.setType(ownerWithDeviceByDeviceId.getDeviceTypes());
+ deviceDetail.setDeviceIdentifier(ownerWithDeviceByDeviceId.getDeviceIdentifiers());
status = deviceSubscription.getStatus();
switch (status) {
@@ -2239,16 +2322,16 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
if (subscribedDevice.getDeviceId() == deviceId) {
DeviceSubscriptionData subscribedDeviceDetail = new DeviceSubscriptionData();
subscribedDeviceDetail.setDeviceId(subscribedDevice.getDeviceId());
- subscribedDeviceDetail.setDeviceName(ownerDetailsWithDevices.getDeviceNames());
- subscribedDeviceDetail.setDeviceOwner(ownerDetailsWithDevices.getUserName());
- subscribedDeviceDetail.setDeviceStatus(ownerDetailsWithDevices.getDeviceStatus());
+ subscribedDeviceDetail.setDeviceName(ownerWithDeviceByDeviceId.getDeviceNames());
+ subscribedDeviceDetail.setDeviceOwner(ownerWithDeviceByDeviceId.getUserName());
+ subscribedDeviceDetail.setDeviceStatus(ownerWithDeviceByDeviceId.getDeviceStatus());
subscribedDeviceDetail.setSubId(subscribedDevice.getId());
subscribedDeviceDetail.setActionTriggeredBy(subscribedDevice.getSubscribedBy());
subscribedDeviceDetail.setActionTriggeredTimestamp(subscribedDevice.getSubscribedTimestamp());
subscribedDeviceDetail.setActionType(subscribedDevice.getActionTriggeredFrom());
subscribedDeviceDetail.setStatus(subscribedDevice.getStatus());
- subscribedDeviceDetail.setType(ownerDetailsWithDevices.getDeviceTypes());
- subscribedDeviceDetail.setDeviceIdentifier(ownerDetailsWithDevices.getDeviceIdentifiers());
+ subscribedDeviceDetail.setType(ownerWithDeviceByDeviceId.getDeviceTypes());
+ subscribedDeviceDetail.setDeviceIdentifier(ownerWithDeviceByDeviceId.getDeviceIdentifiers());
subscribedDevices.add(subscribedDeviceDetail);
statusCounts.put("SUBSCRIBED", statusCounts.get("SUBSCRIBED") + 1);
isSubscribedDevice = true;
@@ -2258,11 +2341,11 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
if (!isSubscribedDevice) {
DeviceSubscriptionData newDeviceDetail = new DeviceSubscriptionData();
newDeviceDetail.setDeviceId(deviceId);
- newDeviceDetail.setDeviceName(ownerDetailsWithDevices.getDeviceNames());
- newDeviceDetail.setDeviceOwner(ownerDetailsWithDevices.getUserName());
- newDeviceDetail.setDeviceStatus(ownerDetailsWithDevices.getDeviceStatus());
- newDeviceDetail.setType(ownerDetailsWithDevices.getDeviceTypes());
- newDeviceDetail.setDeviceIdentifier(ownerDetailsWithDevices.getDeviceIdentifiers());
+ newDeviceDetail.setDeviceName(ownerWithDeviceByDeviceId.getDeviceNames());
+ newDeviceDetail.setDeviceOwner(ownerWithDeviceByDeviceId.getUserName());
+ newDeviceDetail.setDeviceStatus(ownerWithDeviceByDeviceId.getDeviceStatus());
+ newDeviceDetail.setType(ownerWithDeviceByDeviceId.getDeviceTypes());
+ newDeviceDetail.setDeviceIdentifier(ownerWithDeviceByDeviceId.getDeviceIdentifiers());
newDevices.add(newDeviceDetail);
statusCounts.put("NEW", statusCounts.get("NEW") + 1);
}
@@ -2279,23 +2362,46 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
statusPercentages.put(entry.getKey(), Double.valueOf(formattedPercentage));
}
- CategorizedSubscriptionResult categorizedSubscriptionResult;
- if (subscribedDevices.isEmpty()) {
- categorizedSubscriptionResult =
- new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices);
+ List requestedDevices = new ArrayList<>();
+ if (StringUtils.isNotBlank(request.getTabActionStatus())) {
+ switch (request.getTabActionStatus()) {
+ case "COMPLETED":
+ requestedDevices = installedDevices;
+ break;
+ case "PENDING":
+ requestedDevices = pendingDevices;
+ break;
+ case "ERROR":
+ requestedDevices = errorDevices;
+ break;
+ case "NEW":
+ requestedDevices = newDevices;
+ break;
+ case "SUBSCRIBED":
+ requestedDevices = subscribedDevices;
+ break;
+ }
+ roleSubscriptionDTO.setDevices(new CategorizedSubscriptionResult(requestedDevices, request.getTabActionStatus()));
+
} else {
- categorizedSubscriptionResult =
- new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices, subscribedDevices);
+ CategorizedSubscriptionResult categorizedSubscriptionResult;
+ if (subscribedDevices.isEmpty()) {
+ categorizedSubscriptionResult =
+ new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices);
+ } else {
+ categorizedSubscriptionResult =
+ new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices,
+ subscribedDevices);
+ }
+ roleSubscriptionDTO.setDevices(categorizedSubscriptionResult);
+ roleSubscriptionDTO.setStatusPercentages(statusPercentages);
+ roleSubscriptionDTO.setDeviceCount(totalDevices);
}
- roleSubscriptionDTO.setDevices(categorizedSubscriptionResult);
- roleSubscriptionDTO.setStatusPercentages(statusPercentages);
- roleSubscriptionDTO.setDeviceCount(totalDevices);
-
roleSubscriptionsWithDevices.add(roleSubscriptionDTO);
}
return roleSubscriptionsWithDevices;
- } catch (ApplicationManagementDAOException e) {
+ } catch (ApplicationManagementDAOException | DeviceManagementDAOException e) {
String msg = "Error occurred in retrieving role subscriptions with devices";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
@@ -2322,7 +2428,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
}
@Override
- public DeviceSubscriptionResponseDTO getDeviceSubscriptionsDetailsByUUID(String uuid, String subscriptionStatus, int offset,
+ public DeviceSubscriptionResponseDTO getDeviceSubscriptionsDetailsByUUID(String uuid, String subscriptionStatus, PaginationRequest request, int offset,
int limit) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
@@ -2337,6 +2443,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
log.error(msg);
throw new NotFoundException(msg);
}
+ ApplicationDTO applicationDTO = this.applicationDAO.getAppWithRelatedRelease(uuid, tenantId);
int appReleaseId = applicationReleaseDTO.getId();
DeviceManagementProviderService deviceManagementProviderService = HelperUtil.getDeviceManagementProviderService();
@@ -2351,7 +2458,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
}
List allDevices =
- deviceManagementProviderService.getDevicesByTenantId(tenantId);
+ deviceManagementProviderService.getDevicesByTenantId(tenantId, applicationDTO.getDeviceTypeId(),
+ request.getOwner(), request.getDeviceStatus());
List deviceIds = allDevices.stream()
.map(DeviceDetailsDTO::getDeviceId)
@@ -2376,9 +2484,11 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
.collect(Collectors.toMap(DeviceDetailsDTO::getDeviceId, Function.identity()));
List allSubscriptionsForUnSubscribed =
- subscriptionDAO.getSubscriptionDetailsByDeviceIds(appReleaseId, !unsubscribe, tenantId, deviceIds);
+ subscriptionDAO.getSubscriptionDetailsByDeviceIds(appReleaseId, !unsubscribe, tenantId, deviceIds, request.getActionStatus(),
+ request.getActionType(), request.getActionTriggeredBy(), request.getTabActionStatus());
List allSubscriptionsForSubscribed =
- subscriptionDAO.getSubscriptionDetailsByDeviceIds(appReleaseId, unsubscribe, tenantId, deviceIds);
+ subscriptionDAO.getSubscriptionDetailsByDeviceIds(appReleaseId, unsubscribe, tenantId, deviceIds, request.getActionStatus(),
+ request.getActionType(), request.getActionTriggeredBy(), request.getTabActionStatus());
Map allSubscriptionForUnSubscribedMap = allSubscriptionsForUnSubscribed.stream()
.collect(Collectors.toMap(DeviceSubscriptionDTO::getDeviceId, Function.identity()));
Map allSubscriptionForSubscribedMap = allSubscriptionsForSubscribed.stream()
@@ -2387,11 +2497,12 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
for (DeviceDetailsDTO device : allDevices) {
Integer deviceId = device.getDeviceId();
OwnerWithDeviceDTO ownerWithDevice =
- deviceManagementProviderService.getOwnerWithDeviceByDeviceId(deviceId);
- if (ownerWithDevice == null) {
+ deviceManagementProviderService.getOwnerWithDeviceByDeviceId(deviceId, request.getOwner(), request.getDeviceName(),
+ request.getDeviceStatus());
+ if (ownerWithDevice == null || (request.getDeviceName() != null && !request.getDeviceName().isEmpty() &&
+ (ownerWithDevice.getDeviceNames() == null || !ownerWithDevice.getDeviceNames().contains(request.getDeviceName())))) {
continue;
}
-
if (deviceSubscriptionMap.containsKey(deviceId)) {
DeviceSubscriptionDTO subscription = deviceSubscriptionMap.get(deviceId);
DeviceSubscriptionData deviceDetail = new DeviceSubscriptionData();
@@ -2480,14 +2591,35 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
statusPercentages.put(entry.getKey(), Double.valueOf(formattedPercentage));
}
- CategorizedSubscriptionResult categorizedSubscriptionResult;
- if (subscribedDevices.isEmpty()) {
- categorizedSubscriptionResult =
- new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices);
+ List requestedDevices = new ArrayList<>();
+ if (StringUtils.isNotBlank(request.getTabActionStatus())) {
+ switch (request.getTabActionStatus()) {
+ case "COMPLETED":
+ requestedDevices = installedDevices;
+ break;
+ case "PENDING":
+ requestedDevices = pendingDevices;
+ break;
+ case "ERROR":
+ requestedDevices = errorDevices;
+ break;
+ case "NEW":
+ requestedDevices = newDevices;
+ break;
+ case "SUBSCRIBED":
+ requestedDevices = subscribedDevices;
+ break;
+ }
} else {
- categorizedSubscriptionResult =
- new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices, subscribedDevices);
+ requestedDevices.addAll(installedDevices);
+ requestedDevices.addAll(pendingDevices);
+ requestedDevices.addAll(errorDevices);
+ requestedDevices.addAll(newDevices);
+ requestedDevices.addAll(subscribedDevices);
}
+
+ CategorizedSubscriptionResult categorizedSubscriptionResult =
+ new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices, subscribedDevices);
DeviceSubscriptionResponseDTO deviceSubscriptionResponse =
new DeviceSubscriptionResponseDTO(totalDevices, statusPercentages, categorizedSubscriptionResult);
@@ -2509,8 +2641,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
}
@Override
- public DeviceSubscriptionResponseDTO getAllSubscriptionDetailsByUUID(String uuid, String subscriptionStatus, int offset, int limit)
- throws ApplicationManagementException {
+ public DeviceSubscriptionResponseDTO getAllSubscriptionDetailsByUUID(String uuid, String subscriptionStatus, PaginationRequest request,
+ int offset, int limit) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
boolean unsubscribe = subscriptionStatus.equals("unsubscribed");
@@ -2523,10 +2655,12 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
log.error(msg);
throw new NotFoundException(msg);
}
+ ApplicationDTO applicationDTO = this.applicationDAO.getAppWithRelatedRelease(uuid, tenantId);
int appReleaseId = applicationReleaseDTO.getId();
List allSubscriptions =
- subscriptionDAO.getAllSubscriptionsDetails(appReleaseId, unsubscribe, tenantId, offset, limit);
+ subscriptionDAO.getAllSubscriptionsDetails(appReleaseId, unsubscribe, tenantId, request.getActionStatus(),
+ request.getActionType(), request.getActionTriggeredBy(), offset, limit);
// empty response for no subscriptions
if (allSubscriptions.isEmpty()) {
@@ -2552,16 +2686,18 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
statusCounts.put("NEW", 0);
List allDevices =
- deviceManagementProviderService.getDevicesByTenantId(tenantId);
+ deviceManagementProviderService.getDevicesByTenantId(tenantId, applicationDTO.getDeviceTypeId(), request.getOwner(),
+ request.getDeviceStatus());
for (DeviceDetailsDTO device : allDevices) {
Integer deviceId = device.getDeviceId();
OwnerWithDeviceDTO ownerWithDevice =
- deviceManagementProviderService.getOwnerWithDeviceByDeviceId(deviceId);
- if (ownerWithDevice == null) {
+ deviceManagementProviderService.getOwnerWithDeviceByDeviceId(deviceId, request.getOwner(), request.getDeviceName(),
+ request.getDeviceStatus());
+ if (ownerWithDevice == null || (request.getDeviceName() != null && !request.getDeviceName().isEmpty() &&
+ (ownerWithDevice.getDeviceNames() == null || !ownerWithDevice.getDeviceNames().contains(request.getDeviceName())))) {
continue;
}
-
if (allSubscriptionMap.containsKey(deviceId)) {
DeviceSubscriptionDTO subscription = allSubscriptionMap.get(deviceId);
DeviceSubscriptionData deviceDetail = new DeviceSubscriptionData();
@@ -2620,6 +2756,29 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
statusPercentages.put(entry.getKey(), Double.valueOf(formattedPercentage));
}
+ List requestedDevices = new ArrayList<>();
+ if (StringUtils.isNotBlank(request.getTabActionStatus())) {
+ switch (request.getTabActionStatus()) {
+ case "COMPLETED":
+ requestedDevices = installedDevices;
+ break;
+ case "PENDING":
+ requestedDevices = pendingDevices;
+ break;
+ case "ERROR":
+ requestedDevices = errorDevices;
+ break;
+ case "NEW":
+ requestedDevices = newDevices;
+ break;
+ }
+ } else {
+ requestedDevices.addAll(installedDevices);
+ requestedDevices.addAll(pendingDevices);
+ requestedDevices.addAll(errorDevices);
+ requestedDevices.addAll(newDevices);
+ }
+
CategorizedSubscriptionResult categorizedSubscriptionResult =
new CategorizedSubscriptionResult(installedDevices, pendingDevices, errorDevices, newDevices);
DeviceSubscriptionResponseDTO result =
@@ -2642,7 +2801,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
}
@Override
- public List getSubscriptionOperationsByUUIDAndDeviceID(int deviceId, String uuid, int offset, int limit)
+ public List getSubscriptionOperationsByUUIDAndDeviceID(int deviceId, String uuid)
throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
if (uuid == null || uuid.isEmpty()) {
@@ -2661,7 +2820,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
DeviceManagementProviderService deviceManagementProviderService = HelperUtil.getDeviceManagementProviderService();
List deviceSubscriptions =
- subscriptionDAO.getSubscriptionOperationsByAppReleaseIDAndDeviceID(appReleaseId, deviceId, tenantId, offset, limit);
+ subscriptionDAO.getSubscriptionOperationsByAppReleaseIDAndDeviceID(appReleaseId, deviceId, tenantId);
for (DeviceOperationDTO deviceSubscription : deviceSubscriptions) {
Integer operationId = deviceSubscription.getOperationId();
if (operationId != null) {
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/internal/ApplicationManagementServiceComponent.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/internal/ApplicationManagementServiceComponent.java
index 625d95130b..cc042e6ecb 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/internal/ApplicationManagementServiceComponent.java
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/internal/ApplicationManagementServiceComponent.java
@@ -26,7 +26,6 @@ import io.entgra.device.mgt.core.application.mgt.common.services.ReviewManager;
import io.entgra.device.mgt.core.application.mgt.common.services.SPApplicationManager;
import io.entgra.device.mgt.core.application.mgt.common.services.SubscriptionManager;
import io.entgra.device.mgt.core.application.mgt.common.services.VPPApplicationManager;
-import io.entgra.device.mgt.core.application.mgt.common.services.*;
import io.entgra.device.mgt.core.application.mgt.core.config.ConfigurationManager;
import io.entgra.device.mgt.core.application.mgt.core.dao.common.ApplicationManagementDAOFactory;
import io.entgra.device.mgt.core.application.mgt.core.impl.AppmDataHandlerImpl;
@@ -35,11 +34,15 @@ import io.entgra.device.mgt.core.application.mgt.core.lifecycle.LifecycleStateMa
import io.entgra.device.mgt.core.application.mgt.core.task.ScheduledAppSubscriptionTaskManager;
import io.entgra.device.mgt.core.application.mgt.core.util.ApplicationManagementUtil;
import io.entgra.device.mgt.core.device.mgt.core.service.DeviceManagementProviderService;
+import io.entgra.device.mgt.core.tenant.mgt.common.spi.TenantManagerAdminService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.osgi.framework.BundleContext;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.*;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
import org.wso2.carbon.ndatasource.core.DataSourceService;
import org.wso2.carbon.ntask.core.service.TaskService;
import org.wso2.carbon.user.core.service.RealmService;
@@ -109,7 +112,7 @@ public class ApplicationManagementServiceComponent {
bundleContext.registerService(FileTransferService.class.getName(), fileTransferService, null);
ScheduledAppSubscriptionTaskManager taskManager = new ScheduledAppSubscriptionTaskManager();
- // todo: taskManager.scheduleCleanupTask();
+ taskManager.scheduleCleanupTask();
log.info("ApplicationManagement core bundle has been successfully initialized");
} catch (Throwable e) {
@@ -200,4 +203,25 @@ public class ApplicationManagementServiceComponent {
}
DataHolder.getInstance().setTaskService(null);
}
+
+ @Reference(
+ name = "io.entgra.device.mgt.core.tenant.manager",
+ service = io.entgra.device.mgt.core.tenant.mgt.common.spi.TenantManagerAdminService.class,
+ cardinality = ReferenceCardinality.MANDATORY,
+ policy = ReferencePolicy.DYNAMIC,
+ unbind = "unsetTenantManagementAdminService")
+ protected void setTenantManagementAdminService(TenantManagerAdminService tenantManagerAdminService) {
+ if (log.isDebugEnabled()) {
+ log.debug("Setting Tenant management admin Service");
+ }
+ DataHolder.getInstance().setTenantManagerAdminService(tenantManagerAdminService);
+ }
+
+ @SuppressWarnings("unused")
+ protected void unsetTenantManagementAdminService(TenantManagerAdminService tenantManagerAdminService) {
+ if (log.isDebugEnabled()) {
+ log.debug("Un setting Tenant management admin service");
+ }
+ DataHolder.getInstance().setTenantManagerAdminService(null);
+ }
}
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/internal/DataHolder.java b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/internal/DataHolder.java
index d9de5fe57f..df1eb4ee02 100644
--- a/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/internal/DataHolder.java
+++ b/components/application-mgt/io.entgra.device.mgt.core.application.mgt.core/src/main/java/io/entgra/device/mgt/core/application/mgt/core/internal/DataHolder.java
@@ -25,9 +25,9 @@ import io.entgra.device.mgt.core.application.mgt.common.services.SPApplicationMa
import io.entgra.device.mgt.core.application.mgt.common.services.ReviewManager;
import io.entgra.device.mgt.core.application.mgt.common.services.SubscriptionManager;
import io.entgra.device.mgt.core.application.mgt.common.services.VPPApplicationManager;
-import io.entgra.device.mgt.core.application.mgt.common.services.*;
import io.entgra.device.mgt.core.application.mgt.core.lifecycle.LifecycleStateManager;
import io.entgra.device.mgt.core.device.mgt.core.service.DeviceManagementProviderService;
+import io.entgra.device.mgt.core.tenant.mgt.common.spi.TenantManagerAdminService;
import org.wso2.carbon.ntask.core.service.TaskService;
import org.wso2.carbon.user.core.service.RealmService;
@@ -58,6 +58,7 @@ public class DataHolder {
private TaskService taskService;
private FileTransferService fileTransferService;
+ private TenantManagerAdminService tenantManagerAdminService;
private static final DataHolder applicationMgtDataHolder = new DataHolder();
@@ -164,4 +165,12 @@ public class DataHolder {
public void setFileTransferService(FileTransferService fileTransferService) {
this.fileTransferService = fileTransferService;
}
+
+ public TenantManagerAdminService getTenantManagerAdminService() {
+ return tenantManagerAdminService;
+ }
+
+ public void setTenantManagerAdminService(TenantManagerAdminService tenantManagerAdminService) {
+ this.tenantManagerAdminService = tenantManagerAdminService;
+ }
}
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/ApplicationManagementUtil.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/ApplicationManagementUtil.java
index f70d94fb76..f9119832ce 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/ApplicationManagementUtil.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/ApplicationManagementUtil.java
@@ -180,6 +180,7 @@ public class ApplicationManagementUtil {
fileDescriptor = FileDownloaderServiceProvider.getFileDownloaderService(artifactLinkUrl).download(artifactLinkUrl);
applicationArtifact.setInstallerName(fileDescriptor.getFullQualifiedName());
applicationArtifact.setInstallerStream(fileDescriptor.getFile());
+ applicationArtifact.setInstallerPath(fileDescriptor.getAbsolutePath());
}
if (iconLink != null) {
@@ -187,6 +188,7 @@ public class ApplicationManagementUtil {
fileDescriptor = FileDownloaderServiceProvider.getFileDownloaderService(iconLinkUrl).download(iconLinkUrl);
applicationArtifact.setIconName(fileDescriptor.getFullQualifiedName());
applicationArtifact.setIconStream(fileDescriptor.getFile());
+ applicationArtifact.setIconPath(fileDescriptor.getAbsolutePath());
}
if (bannerLink != null) {
@@ -194,10 +196,12 @@ public class ApplicationManagementUtil {
fileDescriptor = FileDownloaderServiceProvider.getFileDownloaderService(bannerLinkUrl).download(bannerLinkUrl);
applicationArtifact.setBannerName(fileDescriptor.getFullQualifiedName());
applicationArtifact.setBannerStream(fileDescriptor.getFile());
+ applicationArtifact.setBannerPath(fileDescriptor.getAbsolutePath());
}
if (screenshotLinks != null) {
Map screenshotData = new TreeMap<>();
+ Map screenshotPaths = new TreeMap<>();
// This is to handle cases in which multiple screenshots have the same name
Map screenshotNameCount = new HashMap<>();
URL screenshotLinkUrl;
@@ -208,6 +212,7 @@ public class ApplicationManagementUtil {
screenshotNameCount.put(screenshotName, screenshotNameCount.getOrDefault(screenshotName, 0) + 1);
screenshotName = FileUtil.generateDuplicateFileName(screenshotName, screenshotNameCount.get(screenshotName));
screenshotData.put(screenshotName, fileDescriptor.getFile());
+ screenshotPaths.put(screenshotName, fileDescriptor.getAbsolutePath());
}
applicationArtifact.setScreenshots(screenshotData);
}
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/Constants.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/Constants.java
index 92dfe8e948..81e5bef788 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/Constants.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/Constants.java
@@ -74,6 +74,7 @@ public class Constants {
public static final String IS_USER_ABLE_TO_VIEW_ALL_ROLES = "isUserAbleToViewAllRoles";
public static final String GOOGLE_PLAY_STORE_URL = "https://play.google.com/store/apps/details?id=";
public static final String APPLE_STORE_URL = "https://itunes.apple.com/country/app/app-name/id";
+ public static final String MICROSOFT_STORE_URL = "https://apps.microsoft.com/detail/";
public static final String GOOGLE_PLAY_SYNCED_APP = "GooglePlaySyncedApp";
// Subscription task related constants
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/FileTransferServiceHelperUtil.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/FileTransferServiceHelperUtil.java
index 570998ebef..856faf4944 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/FileTransferServiceHelperUtil.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/FileTransferServiceHelperUtil.java
@@ -23,7 +23,9 @@ import com.google.gson.Gson;
import io.entgra.device.mgt.core.application.mgt.common.ChunkDescriptor;
import io.entgra.device.mgt.core.application.mgt.common.FileDescriptor;
import io.entgra.device.mgt.core.application.mgt.common.FileMetaEntry;
+import io.entgra.device.mgt.core.application.mgt.common.exception.ApplicationStorageManagementException;
import io.entgra.device.mgt.core.application.mgt.core.exception.FileTransferServiceHelperUtilException;
+import io.entgra.device.mgt.core.application.mgt.core.internal.DataHolder;
import io.entgra.device.mgt.core.device.mgt.common.exceptions.NotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -175,6 +177,12 @@ public class FileTransferServiceHelperUtil {
}
String []urlPathSegments = downloadUrl.getPath().split("/");
+
+ FileDescriptor fileDescriptorResolvedFromRelease = resolve(urlPathSegments);
+ if (fileDescriptorResolvedFromRelease != null) {
+ return fileDescriptorResolvedFromRelease;
+ }
+
if (urlPathSegments.length < 2) {
if (log.isDebugEnabled()) {
log.debug("URL patch segments contain less than 2 segments");
@@ -234,4 +242,54 @@ public class FileTransferServiceHelperUtil {
throw new FileTransferServiceHelperUtilException("Error encountered while creating artifact file", e);
}
}
+
+ private static FileDescriptor resolve(String []urlSegments) throws FileTransferServiceHelperUtilException {
+ // check the possibility of url is pointing to a file resides in the default storage path
+ if (urlSegments.length < 4) {
+ if (log.isDebugEnabled()) {
+ log.debug("URL path segments contain less than 4 segments");
+ }
+ return null;
+ }
+
+ int tenantId;
+ try {
+ tenantId = Integer.parseInt(urlSegments[urlSegments.length - 4]);
+ } catch (NumberFormatException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("URL isn't pointing to a file resides in the default storage path");
+ }
+ return null;
+ }
+
+ String fileName = urlSegments[urlSegments.length - 1];
+ String folderName = urlSegments[urlSegments.length - 2];
+ String appHash = urlSegments[urlSegments.length - 3];
+
+ try {
+ InputStream fileStream = DataHolder.getInstance().
+ getApplicationStorageManager().getFileStream(appHash, folderName, fileName, tenantId);
+ if (fileStream == null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Could not found the file " + fileName);
+ }
+ return null;
+ }
+
+ String []fileNameSegments = fileName.split("\\.(?=[^.]+$)");
+ if (fileNameSegments.length < 2) {
+ throw new FileTransferServiceHelperUtilException("Invalid full qualified name encountered :" + fileName);
+ }
+ FileDescriptor fileDescriptor = new FileDescriptor();
+ fileDescriptor.setFile(fileStream);
+ fileDescriptor.setFullQualifiedName(fileName);
+ fileDescriptor.setExtension(fileNameSegments[fileNameSegments.length - 1]);
+ fileDescriptor.setFileName(fileNameSegments[fileNameSegments.length - 2]);
+ fileDescriptor.setAbsolutePath(DataHolder.getInstance().
+ getApplicationStorageManager().getAbsolutePathOfFile(appHash, folderName, fileName, tenantId));
+ return fileDescriptor;
+ } catch (ApplicationStorageManagementException e) {
+ throw new FileTransferServiceHelperUtilException("Error encountered while getting file input stream", e);
+ }
+ }
}
diff --git a/components/application-mgt/pom.xml b/components/application-mgt/pom.xml
index ee7ac9d2cf..6d7cc6ff64 100644
--- a/components/application-mgt/pom.xml
+++ b/components/application-mgt/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.admin.api/pom.xml b/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.admin.api/pom.xml
index 9c42ce05e4..25ecdcbe7e 100644
--- a/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.admin.api/pom.xml
+++ b/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.admin.api/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
cea-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.common/pom.xml b/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.common/pom.xml
index 7b71b33d16..c5466dc7f0 100644
--- a/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.common/pom.xml
+++ b/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.common/pom.xml
@@ -23,7 +23,7 @@
io.entgra.device.mgt.core
cea-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.core/pom.xml b/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.core/pom.xml
index 75bb66bc4a..14d499185b 100644
--- a/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.core/pom.xml
+++ b/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.core/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
cea-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.enforce/pom.xml b/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.enforce/pom.xml
index 2f863ece6b..a79256a668 100644
--- a/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.enforce/pom.xml
+++ b/components/cea-mgt/io.entgra.device.mgt.core.cea.mgt.enforce/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
cea-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/cea-mgt/pom.xml b/components/cea-mgt/pom.xml
index 1018889057..136bb3c064 100644
--- a/components/cea-mgt/pom.xml
+++ b/components/cea-mgt/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.api/pom.xml b/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.api/pom.xml
index bbfe553d01..b90b59da0f 100644
--- a/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.api/pom.xml
+++ b/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.api/pom.xml
@@ -22,7 +22,7 @@
certificate-mgt
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.cert.admin.api/pom.xml b/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.cert.admin.api/pom.xml
index e4309a6b4d..2245b8ff97 100644
--- a/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.cert.admin.api/pom.xml
+++ b/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.cert.admin.api/pom.xml
@@ -22,7 +22,7 @@
certificate-mgt
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.core/pom.xml b/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.core/pom.xml
index dffe4d0f44..81bf0a8650 100644
--- a/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.core/pom.xml
+++ b/components/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.core/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
certificate-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/certificate-mgt/pom.xml b/components/certificate-mgt/pom.xml
index 67357f9142..f2e8c1610c 100644
--- a/components/certificate-mgt/pom.xml
+++ b/components/certificate-mgt/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.defaultrole.manager/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.defaultrole.manager/pom.xml
index 7cf49e4b6a..4b8ca7f4f0 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.defaultrole.manager/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.defaultrole.manager/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.api/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.api/pom.xml
index e30a037757..0975938a13 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.api/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.api/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/pom.xml
index 11d58b34a4..de84f1ddfe 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql
index bd56e1ce0f..c581442e42 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql
@@ -329,7 +329,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED
DEVICE_ID INT NOT NULL,
ENROLMENT_ID INT NOT NULL,
POLICY_ID INT NOT NULL,
- POLICY_CONTENT BLOB NULL,
+ POLICY_CONTENT TEXT NULL,
TENANT_ID INT NOT NULL,
APPLIED TINYINT NULL,
CREATED_TIME TIMESTAMP NULL,
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/src/test/resources/sql/h2.sql b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/src/test/resources/sql/h2.sql
index a842fdf2ab..f998695f58 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/src/test/resources/sql/h2.sql
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization/src/test/resources/sql/h2.sql
@@ -336,7 +336,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED (
DEVICE_ID INT NOT NULL ,
ENROLMENT_ID INT(11) NOT NULL,
POLICY_ID INT NOT NULL ,
- POLICY_CONTENT BLOB NULL ,
+ POLICY_CONTENT TEXT NULL ,
TENANT_ID INT NOT NULL,
APPLIED TINYINT(1) NULL ,
CREATED_TIME TIMESTAMP NULL ,
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.type.deployer/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.type.deployer/pom.xml
index e4a721a259..5637218576 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.type.deployer/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.type.deployer/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.logger/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.logger/pom.xml
index 1c70f5b190..75b6a35f6d 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.logger/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.logger/pom.xml
@@ -21,7 +21,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.pull.notification/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.pull.notification/pom.xml
index c9b5efdb84..9f09be37c4 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.pull.notification/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.pull.notification/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/pom.xml
index fa73a0846d..99da81006e 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
@@ -108,6 +108,46 @@
org.wso2.carbon.analytics-common
org.wso2.carbon.event.output.adapter.core
+
+ org.wso2.orbit.com.google.http-client
+ google-http-client
+
+
+ org.wso2.orbit.com.google.auth-library-oauth2-http
+ google-auth-library-oauth2-http
+
+
+ org.wso2.orbit.io.opencensus
+ opencensus
+
+
+ io.opencensus
+ opencensus-api
+
+
+ io.opencensus
+ opencensus-contrib-http-util
+
+
+ org.wso2.orbit.io.grpc
+ grpc-context
+
+
+ com.google.http-client
+ google-http-client-gson
+
+
+ com.google.guava
+ failureaccess
+
+
+ com.google.guava
+ guava
+
+
+ org.wso2.carbon
+ org.wso2.carbon.utils
+
@@ -135,15 +175,30 @@
io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm.*
- com.google.gson;version="[2.9,3)",
- io.entgra.device.mgt.core.device.mgt.common;version="[5.0,6)",
- io.entgra.device.mgt.core.device.mgt.common.exceptions;version="[5.0,6)",
- io.entgra.device.mgt.core.device.mgt.common.operation.mgt;version="[5.0,6)",
- io.entgra.device.mgt.core.device.mgt.common.push.notification;version="[5.0,6)",
- io.entgra.device.mgt.core.device.mgt.core.service;version="[5.0,6)",
- org.apache.commons.logging;version="[1.2,2)",
- org.osgi.service.*;version="${imp.package.version.osgi.service}"
+ com.google.gson,
+ org.osgi.framework.*;version="${imp.package.version.osgi.framework}",
+ org.osgi.service.*;version="${imp.package.version.osgi.service}",
+ org.wso2.carbon.utils.*,
+ io.entgra.device.mgt.core.device.mgt.common.operation.mgt,
+ io.entgra.device.mgt.core.device.mgt.common.push.notification,
+ org.apache.commons.logging,
+ io.entgra.device.mgt.core.device.mgt.common.*,
+ io.entgra.device.mgt.core.device.mgt.core.service,
+ io.entgra.device.mgt.core.device.mgt.core.config.*,
+ io.entgra.device.mgt.core.device.mgt.core.config.push.notification.*,
+ io.entgra.device.mgt.core.device.mgt.extensions.logger.spi,
+ io.entgra.device.mgt.core.notification.logger.*,
+ com.google.auth.oauth2.*
+
+ google-auth-library-oauth2-http;scope=compile|runtime,
+ google-http-client;scope=compile|runtime,
+ grpc-context;scope=compile|runtime,
+ guava;scope=compile|runtime,
+ opencensus;scope=compile|runtime,
+ failureaccess;scope=compile|runtime
+
+ true
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/src/main/java/io/entgra/device/mgt/core/device/mgt/extensions/push/notification/provider/fcm/FCMBasedPushNotificationProvider.java b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/src/main/java/io/entgra/device/mgt/core/device/mgt/extensions/push/notification/provider/fcm/FCMBasedPushNotificationProvider.java
index 1dbbacd720..2f849a4366 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/src/main/java/io/entgra/device/mgt/core/device/mgt/extensions/push/notification/provider/fcm/FCMBasedPushNotificationProvider.java
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/src/main/java/io/entgra/device/mgt/core/device/mgt/extensions/push/notification/provider/fcm/FCMBasedPushNotificationProvider.java
@@ -32,7 +32,9 @@ public class FCMBasedPushNotificationProvider implements PushNotificationProvide
@Override
public NotificationStrategy getNotificationStrategy(PushNotificationConfig config) {
- return new FCMNotificationStrategy(config);
+ FCMNotificationStrategy fcmNotificationStrategy = new FCMNotificationStrategy(config);
+ fcmNotificationStrategy.init();
+ return fcmNotificationStrategy;
}
}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/src/main/java/io/entgra/device/mgt/core/device/mgt/extensions/push/notification/provider/fcm/FCMNotificationStrategy.java b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/src/main/java/io/entgra/device/mgt/core/device/mgt/extensions/push/notification/provider/fcm/FCMNotificationStrategy.java
index 72da99f53c..91f569b7ee 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/src/main/java/io/entgra/device/mgt/core/device/mgt/extensions/push/notification/provider/fcm/FCMNotificationStrategy.java
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/src/main/java/io/entgra/device/mgt/core/device/mgt/extensions/push/notification/provider/fcm/FCMNotificationStrategy.java
@@ -17,9 +17,7 @@
*/
package io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm;
-import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
-import com.google.gson.JsonPrimitive;
import io.entgra.device.mgt.core.device.mgt.common.Device;
import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceManagementException;
import io.entgra.device.mgt.core.device.mgt.common.push.notification.NotificationContext;
@@ -27,6 +25,7 @@ import io.entgra.device.mgt.core.device.mgt.common.push.notification.Notificatio
import io.entgra.device.mgt.core.device.mgt.common.push.notification.PushNotificationConfig;
import io.entgra.device.mgt.core.device.mgt.common.push.notification.PushNotificationExecutionFailedException;
import io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm.internal.FCMDataHolder;
+import io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm.util.FCMUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -39,14 +38,13 @@ import java.util.List;
public class FCMNotificationStrategy implements NotificationStrategy {
private static final Log log = LogFactory.getLog(FCMNotificationStrategy.class);
-
private static final String NOTIFIER_TYPE_FCM = "FCM";
private static final String FCM_TOKEN = "FCM_TOKEN";
- private static final String FCM_ENDPOINT = "https://fcm.googleapis.com/fcm/send";
private static final String FCM_API_KEY = "fcmAPIKey";
- private static final int TIME_TO_LIVE = 2419199; // 1 second less that 28 days
+ private static final int TIME_TO_LIVE = 2419199; // 1 second less than 28 days
private static final int HTTP_STATUS_CODE_OK = 200;
private final PushNotificationConfig config;
+ private static final String FCM_ENDPOINT_KEY = "FCM_SERVER_ENDPOINT";
public FCMNotificationStrategy(PushNotificationConfig config) {
this.config = config;
@@ -64,12 +62,14 @@ public class FCMNotificationStrategy implements NotificationStrategy {
Device device = FCMDataHolder.getInstance().getDeviceManagementProviderService()
.getDeviceWithTypeProperties(ctx.getDeviceId());
if(device.getProperties() != null && getFCMToken(device.getProperties()) != null) {
- this.sendWakeUpCall(ctx.getOperation().getCode(), device);
+ FCMUtil.getInstance().getDefaultApplication().refresh();
+ sendWakeUpCall(FCMUtil.getInstance().getDefaultApplication().getAccessToken().getTokenValue(),
+ getFCMToken(device.getProperties()));
}
} else {
if (log.isDebugEnabled()) {
log.debug("Not using FCM notifier as notifier type is set to " + config.getType() +
- " in Platform Configurations.");
+ " in Platform Configurations.");
}
}
} catch (DeviceManagementException e) {
@@ -79,71 +79,75 @@ public class FCMNotificationStrategy implements NotificationStrategy {
}
}
- @Override
- public NotificationContext buildContext() {
- return null;
- }
-
- @Override
- public void undeploy() {
- }
+ /**
+ * Send FCM message to the FCM server to initiate the push notification
+ * @param accessToken Access token to authenticate with the FCM server
+ * @param registrationId Registration ID of the device
+ * @throws IOException If an error occurs while sending the request
+ * @throws PushNotificationExecutionFailedException If an error occurs while sending the push notification
+ */
+ private void sendWakeUpCall(String accessToken, String registrationId) throws IOException,
+ PushNotificationExecutionFailedException {
+ HttpURLConnection conn = null;
+
+ String fcmServerEndpoint = FCMUtil.getInstance().getContextMetadataProperties()
+ .getProperty(FCM_ENDPOINT_KEY);
+ if(fcmServerEndpoint == null) {
+ String msg = "Encountered configuration issue. " + FCM_ENDPOINT_KEY + " is not defined";
+ log.error(msg);
+ throw new PushNotificationExecutionFailedException(msg);
+ }
- private void sendWakeUpCall(String message, Device device) throws IOException,
- PushNotificationExecutionFailedException {
- if (device.getProperties() != null) {
- OutputStream os = null;
- byte[] bytes = getFCMRequest(message, getFCMToken(device.getProperties())).getBytes();
-
- HttpURLConnection conn = null;
- try {
- conn = (HttpURLConnection) new URL(FCM_ENDPOINT).openConnection();
- conn.setRequestProperty("Content-Type", "application/json");
- conn.setRequestProperty("Authorization", "key=" + config.getProperty(FCM_API_KEY));
- conn.setRequestMethod("POST");
- conn.setDoOutput(true);
- os = conn.getOutputStream();
+ try {
+ byte[] bytes = getFCMRequest(registrationId).getBytes();
+ URL url = new URL(fcmServerEndpoint);
+ conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestProperty("Content-Type", "application/json");
+ conn.setRequestProperty("Authorization", "Bearer " + accessToken);
+ conn.setRequestMethod("POST");
+ conn.setDoOutput(true);
+
+ try (OutputStream os = conn.getOutputStream()) {
os.write(bytes);
- } finally {
- if (os != null) {
- os.close();
- }
- if (conn != null) {
- conn.disconnect();
- }
}
+
int status = conn.getResponseCode();
- if (log.isDebugEnabled()) {
- log.debug("Result code: " + status + ", Message: " + conn.getResponseMessage());
+ if (status != 200) {
+ log.error("Response Status: " + status + ", Response Message: " + conn.getResponseMessage());
}
- if (status != HTTP_STATUS_CODE_OK) {
- throw new PushNotificationExecutionFailedException("Push notification sending failed with the HTTP " +
- "error code '" + status + "'");
+ } finally {
+ if (conn != null) {
+ conn.disconnect();
}
}
}
- private static String getFCMRequest(String message, String registrationId) {
- JsonObject fcmRequest = new JsonObject();
- fcmRequest.addProperty("delay_while_idle", false);
- fcmRequest.addProperty("time_to_live", TIME_TO_LIVE);
- fcmRequest.addProperty("priority", "high");
-
- //Add message to FCM request
- JsonObject data = new JsonObject();
- if (message != null && !message.isEmpty()) {
- data.addProperty("data", message);
- fcmRequest.add("data", data);
- }
+ /**
+ * Get the FCM request as a JSON string
+ * @param registrationId Registration ID of the device
+ * @return FCM request as a JSON string
+ */
+ private static String getFCMRequest(String registrationId) {
+ JsonObject messageObject = new JsonObject();
+ messageObject.addProperty("token", registrationId);
- //Set device reg-id
- JsonArray regIds = new JsonArray();
- regIds.add(new JsonPrimitive(registrationId));
+ JsonObject fcmRequest = new JsonObject();
+ fcmRequest.add("message", messageObject);
- fcmRequest.add("registration_ids", regIds);
return fcmRequest.toString();
}
+ @Override
+ public NotificationContext buildContext() {
+ return null;
+ }
+
+ @Override
+ public void undeploy() {
+
+ }
+
private static String getFCMToken(List properties) {
String fcmToken = null;
for (Device.Property property : properties) {
@@ -159,5 +163,4 @@ public class FCMNotificationStrategy implements NotificationStrategy {
public PushNotificationConfig getConfig() {
return config;
}
-
}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/src/main/java/io/entgra/device/mgt/core/device/mgt/extensions/push/notification/provider/fcm/util/FCMUtil.java b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/src/main/java/io/entgra/device/mgt/core/device/mgt/extensions/push/notification/provider/fcm/util/FCMUtil.java
new file mode 100644
index 0000000000..0c6c433cc7
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm/src/main/java/io/entgra/device/mgt/core/device/mgt/extensions/push/notification/provider/fcm/util/FCMUtil.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2018 - 2024, 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.extensions.push.notification.provider.fcm.util;
+
+import com.google.auth.oauth2.GoogleCredentials;
+import io.entgra.device.mgt.core.device.mgt.core.config.DeviceConfigurationManager;
+import io.entgra.device.mgt.core.device.mgt.core.config.push.notification.ContextMetadata;
+import io.entgra.device.mgt.core.device.mgt.core.config.push.notification.PushNotificationConfiguration;
+import io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm.FCMNotificationStrategy;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.utils.CarbonUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.Properties;
+
+public class FCMUtil {
+
+ private static final Log log = LogFactory.getLog(FCMUtil.class);
+ private static volatile FCMUtil instance;
+ private static GoogleCredentials defaultApplication;
+ private static final String FCM_SERVICE_ACCOUNT_PATH = CarbonUtils.getCarbonHome() + File.separator +
+ "repository" + File.separator + "resources" + File.separator + "service-account.json";
+ private static final String[] FCM_SCOPES = { "https://www.googleapis.com/auth/firebase.messaging" };
+ private Properties contextMetadataProperties;
+
+ private FCMUtil() {
+ initContextConfigs();
+ initDefaultOAuthApplication();
+ }
+
+ private void initDefaultOAuthApplication() {
+ if (defaultApplication == null) {
+ Path serviceAccountPath = Paths.get(FCM_SERVICE_ACCOUNT_PATH);
+ try {
+ defaultApplication = GoogleCredentials.
+ fromStream(Files.newInputStream(serviceAccountPath)).
+ createScoped(FCM_SCOPES);
+ } catch (IOException e) {
+ String msg = "Fail to initialize default OAuth application for FCM communication";
+ log.error(msg);
+ throw new IllegalStateException(msg, e);
+ }
+ }
+ }
+
+ /**
+ * Initialize the context metadata properties from the cdm-config.xml. This file includes the fcm server URL
+ * to be invoked when sending the wakeup call to the device.
+ */
+ private void initContextConfigs() {
+ PushNotificationConfiguration pushNotificationConfiguration = DeviceConfigurationManager.getInstance().
+ getDeviceManagementConfig().getPushNotificationConfiguration();
+ List contextMetadata = pushNotificationConfiguration.getContextMetadata();
+ Properties properties = new Properties();
+ if (contextMetadata != null) {
+ for (ContextMetadata metadata : contextMetadata) {
+ properties.setProperty(metadata.getKey(), metadata.getValue());
+ }
+ }
+ contextMetadataProperties = properties;
+ }
+
+ /**
+ * Get the instance of FCMUtil. FCMUtil is a singleton class which should not be
+ * instantiating more than once. Instantiating the class requires to read the service account file from
+ * the filesystem and instantiation of the GoogleCredentials object which are costly operations.
+ * @return FCMUtil instance
+ */
+ public static FCMUtil getInstance() {
+ if (instance == null) {
+ synchronized (FCMUtil.class) {
+ if (instance == null) {
+ instance = new FCMUtil();
+ }
+ }
+ }
+ return instance;
+ }
+
+ public GoogleCredentials getDefaultApplication() {
+ return defaultApplication;
+ }
+
+ public Properties getContextMetadataProperties() {
+ return contextMetadataProperties;
+ }
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.http/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.http/pom.xml
index b18034c784..c82088c95e 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.http/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.http/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.mqtt/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.mqtt/pom.xml
index 4d0e7ed9bd..1294956cb4 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.mqtt/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.mqtt/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.xmpp/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.xmpp/pom.xml
index d50775db8b..e08cbaa464 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.xmpp/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.xmpp/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.stateengine/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.stateengine/pom.xml
index 220d1f6808..0fc409a036 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.stateengine/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.stateengine/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.userstore.role.mapper/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.userstore.role.mapper/pom.xml
index 8c9bb0d9e6..7c52a72671 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.userstore.role.mapper/pom.xml
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.userstore.role.mapper/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/pom.xml b/components/device-mgt-extensions/pom.xml
index ae7a1288b3..e669fefc55 100644
--- a/components/device-mgt-extensions/pom.xml
+++ b/components/device-mgt-extensions/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/pom.xml b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/pom.xml
index 8a3349474f..48a0429350 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/pom.xml
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.api/pom.xml
@@ -22,7 +22,7 @@
device-mgt
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
@@ -468,5 +468,10 @@
jaxb-api
provided
+
+ io.entgra.device.mgt.core
+ io.entgra.device.mgt.core.tenant.mgt.common
+ provided
+
\ No newline at end of file
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/api/PolicyManagementService.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/api/PolicyManagementService.java
index 9b550b9b65..3fe2f11770 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/api/PolicyManagementService.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/api/PolicyManagementService.java
@@ -916,6 +916,12 @@ public interface PolicyManagementService {
required = false)
@QueryParam("status")
String status,
+ @ApiParam(
+ name = "deviceType",
+ value = "The device type of the policy that needs filtering.",
+ required = false)
+ @QueryParam("deviceType")
+ String deviceType,
@ApiParam(
name = "If-Modified-Since",
value = "Checks if the requested variant was modified, since the specified date-time. \n" +
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/api/admin/UserManagementAdminService.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/api/admin/UserManagementAdminService.java
index 30cf32a98b..9721fe67bc 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/api/admin/UserManagementAdminService.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/api/admin/UserManagementAdminService.java
@@ -298,8 +298,13 @@ public interface UserManagementAdminService {
name = "tenantDomain",
value = "The domain of the tenant to be deleted.",
required = true)
-
@PathParam("tenantDomain")
- String tenantDomain);
-
+ String tenantDomain,
+ @ApiParam(
+ name = "deleteAppArtifacts",
+ value = "Flag to indicate whether to delete application artifacts.",
+ required = false)
+ @QueryParam("deleteAppArtifacts")
+ @DefaultValue("false")
+ boolean deleteAppArtifacts);
}
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 a2c9696a3f..39ed4f86e3 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
@@ -566,22 +566,49 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
@Path("/type/{deviceType}/id/{deviceId}/rename")
public Response renameDevice(Device device, @PathParam("deviceType") String deviceType,
@PathParam("deviceId") String deviceId) {
+ if (device == null) {
+ String msg = "Required values are not set to rename device";
+ log.error(msg);
+ return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
+ }
+ if (StringUtils.isEmpty(device.getName())) {
+ String msg = "Device name is not set to rename device";
+ log.error(msg);
+ return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
+ }
DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService();
try {
- Device persistedDevice = deviceManagementProviderService.getDevice(new DeviceIdentifier
- (deviceId, deviceType), true);
- persistedDevice.setName(device.getName());
- System.out.println("This is rename device");
- boolean responseOfmodifyEnrollment = deviceManagementProviderService.modifyEnrollment(persistedDevice);
- boolean responseOfDeviceNameChanged = deviceManagementProviderService.sendDeviceNameChangedNotification(
- persistedDevice);
- boolean response = responseOfmodifyEnrollment && responseOfDeviceNameChanged;
-
- return Response.status(Response.Status.CREATED).entity(response).build();
- } catch (DeviceManagementException e) {
- String msg = "Error encountered while updating requested device of type : " + deviceType ;
+ Device updatedDevice = deviceManagementProviderService.updateDeviceName(device, deviceType, deviceId);
+ if (updatedDevice != null) {
+ boolean notificationResponse = deviceManagementProviderService.sendDeviceNameChangedNotification(updatedDevice);
+ if (notificationResponse) {
+ return Response.status(Response.Status.CREATED).entity(updatedDevice).build();
+ } else {
+ String msg = "Device updated successfully, but failed to send notification.";
+ log.warn(msg);
+ return Response.status(Response.Status.CREATED).entity(updatedDevice).header("Warning", msg).build();
+ }
+ } else {
+ String msg = "Device update failed for device of type : " + deviceType;
+ log.error(msg);
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
+ }
+ } catch (BadRequestException e) {
+ String msg = "Bad request: " + e.getMessage();
log.error(msg, e);
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
+ } catch (DeviceNotFoundException e) {
+ String msg = "Device not found: " + e.getMessage();
+ log.error(msg, e);
+ return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
+ } catch (DeviceManagementException e) {
+ String msg = "Error encountered while updating requested device of type : " + deviceType;
+ log.error(msg, e);
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
+ } catch (ConflictException e) {
+ String msg = "Conflict encountered while updating requested device of type : " + deviceType;
+ log.error(msg, e);
+ return Response.status(Response.Status.CONFLICT).entity(msg).build();
}
}
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/PolicyManagementServiceImpl.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/PolicyManagementServiceImpl.java
index fa581862b6..75640d3223 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/PolicyManagementServiceImpl.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/PolicyManagementServiceImpl.java
@@ -499,6 +499,7 @@ public class PolicyManagementServiceImpl implements PolicyManagementService {
@QueryParam("name") String name,
@QueryParam("type") String type,
@QueryParam("status") String status,
+ @QueryParam("deviceType") String deviceType,
@HeaderParam("If-Modified-Since") String ifModifiedSince,
@QueryParam("offset") int offset,
@QueryParam("limit") int limit) {
@@ -516,6 +517,9 @@ public class PolicyManagementServiceImpl implements PolicyManagementService {
if (status != null){
request.setStatus(status);
}
+ if (deviceType != null) {
+ request.setDeviceType(deviceType);
+ }
try {
PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP();
policies = policyAdministratorPoint.getPolicyList(request);
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/admin/UserManagementAdminServiceImpl.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/admin/UserManagementAdminServiceImpl.java
index d4f34d8e4a..91ed3f6d42 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/admin/UserManagementAdminServiceImpl.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/admin/UserManagementAdminServiceImpl.java
@@ -19,6 +19,7 @@ package io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.impl.admin;
import io.entgra.device.mgt.core.application.mgt.common.exception.ApplicationManagementException;
import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceManagementException;
+import io.entgra.device.mgt.core.tenant.mgt.common.exception.TenantMgtException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import io.entgra.device.mgt.core.device.mgt.common.DeviceIdentifier;
@@ -29,9 +30,6 @@ import io.entgra.device.mgt.core.device.mgt.api.jaxrs.util.CredentialManagementR
import io.entgra.device.mgt.core.device.mgt.api.jaxrs.util.DeviceMgtAPIUtils;
import org.wso2.carbon.base.MultitenantConstants;
import org.wso2.carbon.context.CarbonContext;
-import org.wso2.carbon.stratos.common.exception.StratosException;
-import org.wso2.carbon.tenant.mgt.services.TenantMgtAdminService;
-import org.wso2.carbon.user.api.UserStoreException;
import javax.validation.constraints.Size;
import javax.ws.rs.*;
@@ -91,7 +89,7 @@ public class UserManagementAdminServiceImpl implements UserManagementAdminServic
@DELETE
@Path("/domain/{tenantDomain}")
@Override
- public Response deleteTenantByDomain(@PathParam("tenantDomain") String tenantDomain) {
+ public Response deleteTenantByDomain(@PathParam("tenantDomain") String tenantDomain, @QueryParam("deleteAppArtifacts") boolean deleteAppArtifacts) {
try {
int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
if (tenantId != MultitenantConstants.SUPER_TENANT_ID){
@@ -99,15 +97,20 @@ public class UserManagementAdminServiceImpl implements UserManagementAdminServic
log.error(msg);
return Response.status(Response.Status.UNAUTHORIZED).entity(msg).build();
} else {
+ if (deleteAppArtifacts) {
+ DeviceMgtAPIUtils.getApplicationManager().deleteApplicationArtifactsByTenantDomain(tenantDomain);
+ }
DeviceMgtAPIUtils.getApplicationManager().deleteApplicationDataByTenantDomain(tenantDomain);
DeviceMgtAPIUtils.getDeviceManagementService().deleteDeviceDataByTenantDomain(tenantDomain);
- TenantMgtAdminService tenantMgtAdminService = new TenantMgtAdminService();
- tenantMgtAdminService.deleteTenant(tenantDomain);
+ DeviceMgtAPIUtils.getTenantManagerAdminService().deleteTenant(tenantDomain);
String msg = "Tenant Deletion process has been initiated for tenant:" + tenantDomain;
+ if (log.isDebugEnabled()) {
+ log.debug(msg);
+ }
return Response.status(Response.Status.OK).entity(msg).build();
}
- } catch (StratosException | UserStoreException e) {
+ } catch (TenantMgtException e) {
String msg = "Error deleting tenant: " + tenantDomain;
log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
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/util/DeviceMgtAPIUtils.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/util/DeviceMgtAPIUtils.java
index 6a4adacd55..86b6e57ce1 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/util/DeviceMgtAPIUtils.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/util/DeviceMgtAPIUtils.java
@@ -33,6 +33,7 @@ import io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.impl.util.RequestV
import io.entgra.device.mgt.core.device.mgt.common.authorization.GroupAccessAuthorizationService;
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.DeviceStatusManagementService;
import io.entgra.device.mgt.core.device.mgt.core.permission.mgt.PermissionManagerServiceImpl;
+import io.entgra.device.mgt.core.tenant.mgt.common.spi.TenantManagerAdminService;
import org.apache.axis2.AxisFault;
import org.apache.axis2.client.Options;
import org.apache.axis2.java.security.SSLProtocolSocketFactory;
@@ -46,7 +47,6 @@ import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.CarbonConstants;
import org.wso2.carbon.analytics.api.AnalyticsDataAPI;
import org.wso2.carbon.analytics.stream.persistence.stub.EventStreamPersistenceAdminServiceStub;
-import org.wso2.carbon.authenticator.stub.AuthenticationAdminStub;
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.context.CarbonContext;
import org.wso2.carbon.context.PrivilegedCarbonContext;
@@ -167,6 +167,7 @@ public class DeviceMgtAPIUtils {
private static volatile ConsumerRESTAPIServices consumerRESTAPIServices;
private static volatile APIManagementProviderService apiManagementProviderService;
private static volatile APIPublisherService apiPublisher;
+ private static volatile TenantManagerAdminService tenantManagerAdminService;
static {
String keyStorePassword = ServerConfiguration.getInstance().getFirstProperty("Security.KeyStore.Password");
@@ -1304,4 +1305,21 @@ public class DeviceMgtAPIUtils {
}
return isPermitted;
}
+
+ public static TenantManagerAdminService getTenantManagerAdminService(){
+ if(tenantManagerAdminService == null) {
+ synchronized (DeviceMgtAPIUtils.class) {
+ if (tenantManagerAdminService == null) {
+ tenantManagerAdminService = (TenantManagerAdminService) PrivilegedCarbonContext.getThreadLocalCarbonContext().
+ getOSGiService(TenantManagerAdminService.class, null);
+ if (tenantManagerAdminService == null) {
+ String msg = "Tenant Manager Admin Service is null";
+ log.error(msg);
+ throw new IllegalStateException(msg);
+ }
+ }
+ }
+ }
+ return tenantManagerAdminService;
+ }
}
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/pom.xml b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/pom.xml
index 48322618e3..512394b706 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/pom.xml
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/pom.xml
@@ -21,7 +21,7 @@
device-mgt
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/MDMAppConstants.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/MDMAppConstants.java
index 60d9503c97..da1714ede0 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/MDMAppConstants.java
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/MDMAppConstants.java
@@ -58,6 +58,8 @@ public class MDMAppConstants {
}
public static final String INSTALL_ENTERPRISE_APPLICATION = "INSTALL_ENTERPRISE_APPLICATION";
public static final String UNINSTALL_ENTERPRISE_APPLICATION = "UNINSTALL_ENTERPRISE_APPLICATION";
+ public static final String INSTALL_STORE_APPLICATION = "INSTALL_STORE_APPLICATION";
+ public static final String UNINSTALL_STORE_APPLICATION = "UNINSTALL_STORE_APPLICATION";
public static final String INSTALL_WEB_CLIP_APPLICATION = "INSTALL_WEB_CLIP";
public static final String UNINSTALL_WEB_CLIP_APPLICATION = "UNINSTALL_WEB_CLIP";
//App type constants related to window device type
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/PaginationRequest.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/PaginationRequest.java
index 766bf6dc27..513a0a0d62 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/PaginationRequest.java
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/PaginationRequest.java
@@ -37,6 +37,14 @@ public class PaginationRequest {
private Date since;
private String filter;
private String serialNumber;
+ private String groupName;
+ private String roleName;
+ private String userName;
+ private String deviceStatus;
+ private String tabActionStatus;
+ private String actionStatus;
+ private String actionType;
+ private String actionTriggeredBy;
private Map customProperty = new HashMap<>();
private Map property = new HashMap<>();
private List statusList = new ArrayList<>();
@@ -216,4 +224,68 @@ public class PaginationRequest {
+ this.ownership + "' Status '" + this.statusList + "' owner '" + this.owner + "' groupId: " + this.groupId
+ " start index: " + this.startIndex + ", SortColumns: " + this.sortColumn;
}
+
+ public String getDeviceStatus() {
+ return deviceStatus;
+ }
+
+ public void setDeviceStatus(String deviceStatus) {
+ this.deviceStatus = deviceStatus;
+ }
+
+ public String getActionStatus() {
+ return actionStatus;
+ }
+
+ public void setActionStatus(String actionStatus) {
+ this.actionStatus = actionStatus;
+ }
+
+ public String getActionType() {
+ return actionType;
+ }
+
+ public void setActionType(String actionType) {
+ this.actionType = actionType;
+ }
+
+ public String getActionTriggeredBy() {
+ return actionTriggeredBy;
+ }
+
+ public void setActionTriggeredBy(String actionTriggeredBy) {
+ this.actionTriggeredBy = actionTriggeredBy;
+ }
+
+ public String getGroupName() {
+ return groupName;
+ }
+
+ public void setGroupName(String groupName) {
+ this.groupName = groupName;
+ }
+
+ public String getRoleName() {
+ return roleName;
+ }
+
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getTabActionStatus() {
+ return tabActionStatus;
+ }
+
+ public void setTabActionStatus(String tabActionStatus) {
+ this.tabActionStatus = tabActionStatus;
+ }
}
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/PolicyPaginationRequest.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/PolicyPaginationRequest.java
index 8a0a2f3bd4..ddbc3a51a7 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/PolicyPaginationRequest.java
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/PolicyPaginationRequest.java
@@ -24,6 +24,7 @@ public class PolicyPaginationRequest {
private String name;
private String type;
private String status;
+ private String deviceType;
public PolicyPaginationRequest(int start, int rowCount) {
this.startIndex = start;
@@ -70,6 +71,14 @@ public class PolicyPaginationRequest {
this.status = status;
}
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
@Override
public String toString() {
return "Group Name '" + this.name + "' num of rows: " + this.rowCount + " start index: " + this.startIndex;
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/app/mgt/windows/AppStoreApplication.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/app/mgt/windows/AppStoreApplication.java
new file mode 100644
index 0000000000..85a6cbd9a1
--- /dev/null
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/app/mgt/windows/AppStoreApplication.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2018 - 2024, 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.app.mgt.windows;
+
+import com.google.gson.Gson;
+import java.io.Serializable;
+
+public class AppStoreApplication implements Serializable {
+
+ private String type;
+ private String packageIdentifier;
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getPackageIdentifier() {
+ return packageIdentifier;
+ }
+
+ public void setPackageIdentifier(String packageIdentifier) {
+ this.packageIdentifier = packageIdentifier;
+ }
+
+ public String toJSON() {
+ Gson gson = new Gson();
+ return gson.toJson(this);
+ }
+}
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/exceptions/ConflictException.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/exceptions/ConflictException.java
new file mode 100644
index 0000000000..5dec1fc431
--- /dev/null
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.common/src/main/java/io/entgra/device/mgt/core/device/mgt/common/exceptions/ConflictException.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2018 - 2024, 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.exceptions;
+
+public class ConflictException extends Exception {
+
+ private static final long serialVersionUID = -4998775497944307646L;
+
+ public ConflictException(String message) {
+ super(message);
+ }
+
+ public ConflictException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
\ No newline at end of file
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.config.api/pom.xml b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.config.api/pom.xml
index 50c011d7df..b037bf48d9 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.config.api/pom.xml
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.config.api/pom.xml
@@ -22,7 +22,7 @@
device-mgt
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/pom.xml b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/pom.xml
index 1a5a4ab790..8bf838c2fe 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/pom.xml
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
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/common/util/StorageManagementUtil.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/common/util/StorageManagementUtil.java
index 3afff2cc08..7d3f69ee8b 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/common/util/StorageManagementUtil.java
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/common/util/StorageManagementUtil.java
@@ -23,8 +23,15 @@ import io.entgra.device.mgt.core.device.mgt.core.common.exception.StorageManagem
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import java.io.*;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
import java.nio.file.Files;
+import java.nio.file.Paths;
/**
* This is a util class that handles Storage Management related tasks.
@@ -81,13 +88,14 @@ public class StorageManagementUtil {
* @param path Path the file need to be saved in.
*/
public static void saveFile(InputStream inputStream, String path) throws IOException {
- try (OutputStream outStream = new FileOutputStream(new File(path))) {
- byte[] buffer = new byte[inputStream.available()];
- if (inputStream.read(buffer) != -1) {
- outStream.write(buffer);
+ try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(Files.newOutputStream(Paths.get(path)));
+ BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream)) {
+ byte []buffer = new byte[8192];
+ int n;
+ while ((n = bufferedInputStream.read(buffer)) != -1) {
+ bufferedOutputStream.write(buffer, 0, n);
}
- } finally {
- inputStream.close();
+ bufferedOutputStream.flush();
}
}
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/config/push/notification/ContextMetadata.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/config/push/notification/ContextMetadata.java
new file mode 100644
index 0000000000..a5ead67f0a
--- /dev/null
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/config/push/notification/ContextMetadata.java
@@ -0,0 +1,47 @@
+/*
+ * 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.core.config.push.notification;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlValue;
+
+@XmlRootElement(name = "ContextMetadata")
+public class ContextMetadata {
+ private String key;
+ private String value;
+
+ @XmlAttribute(name = "key")
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ @XmlValue
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
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/config/push/notification/PushNotificationConfiguration.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/config/push/notification/PushNotificationConfiguration.java
index 90c6639cb1..0d64e45cdd 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/config/push/notification/PushNotificationConfiguration.java
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/config/push/notification/PushNotificationConfiguration.java
@@ -33,6 +33,7 @@ public class PushNotificationConfiguration {
private int schedulerTaskInitialDelay;
private boolean schedulerTaskEnabled;
private List pushNotificationProviders;
+ private List contextMetadata;
@XmlElement(name = "SchedulerBatchSize", required = true)
public int getSchedulerBatchSize() {
@@ -79,4 +80,14 @@ public class PushNotificationConfiguration {
public void setPushNotificationProviders(List pushNotificationProviders) {
this.pushNotificationProviders = pushNotificationProviders;
}
+
+ @XmlElementWrapper(name = "ProviderContextMetadata")
+ @XmlElement(name = "ContextMetadata", required = true)
+ public List getContextMetadata() {
+ return contextMetadata;
+ }
+
+ public void setContextMetadata(List contextMetadata) {
+ this.contextMetadata = contextMetadata;
+ }
}
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/EnrollmentDAO.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/EnrollmentDAO.java
index 5432cac6fb..f92adc4e4f 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/EnrollmentDAO.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/EnrollmentDAO.java
@@ -100,29 +100,42 @@ public interface EnrollmentDAO {
* Retrieves owners and the list of device IDs related to an owner.
*
* @param owner the owner whose device IDs need to be retrieved
+ * @param allowingDeviceStatuses statuses of devices need to be retrieved
* @param tenantId the ID of the tenant
+ * @param deviceOwner owner of the device
+ * @param deviceName name of the device
+ * @param deviceStatus status of the device
* @return {@link OwnerWithDeviceDTO} which contains a list of devices related to a user
* @throws DeviceManagementDAOException if an error occurs while fetching the data
*/
- OwnerWithDeviceDTO getOwnersWithDevices(String owner, int tenantId) throws DeviceManagementDAOException;
+ OwnerWithDeviceDTO getOwnersWithDevices(String owner, List allowingDeviceStatuses, int tenantId, int deviceTypeId,
+ String deviceOwner, String deviceName, String deviceStatus) throws DeviceManagementDAOException;
/**
* Retrieves a list of device IDs with owners and device status.
*
* @param deviceId the deviceId of the device which user need to be retrieved
* @param tenantId the ID of the tenant
+ * @param deviceOwner owner of the device
+ * @param deviceName name of the device
+ * @param deviceStatus status of the device
* @return {@link OwnerWithDeviceDTO} which contains a list of devices
* @throws DeviceManagementDAOException if an error occurs while fetching the data
*/
- OwnerWithDeviceDTO getOwnerWithDeviceByDeviceId(int deviceId, int tenantId)
+ OwnerWithDeviceDTO getOwnerWithDeviceByDeviceId(int deviceId, int tenantId, String deviceOwner, String deviceName, String deviceStatus)
throws DeviceManagementDAOException;
/**
* Retrieves owners and the list of device IDs with device status.
*
* @param tenantId the ID of the tenant
+ * @param allowingDeviceStatuses the allowed device statuses of devices
+ * @param deviceTypeId the device type id
+ * @param deviceOwner owner of the device
+ * @param deviceStatus status of the device
* @return {@link OwnerWithDeviceDTO} which contains a list of devices related to a user
* @throws DeviceManagementDAOException if an error occurs while fetching the data
*/
- List getDevicesByTenantId(int tenantId) throws DeviceManagementDAOException;
+ List getDevicesByTenantId(int tenantId, List allowingDeviceStatuses, int deviceTypeId, String deviceOwner,
+ String deviceStatus) throws DeviceManagementDAOException;
}
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/GroupDAO.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/GroupDAO.java
index 5071f7a400..c5d2d700cd 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/GroupDAO.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/GroupDAO.java
@@ -473,13 +473,19 @@ public interface GroupDAO {
* Get group details and list of device IDs related to the group.
*
* @param groupName Group name
+ * @param allowingDeviceStatuses the statuses of devices
+ * @param deviceTypeId the device type id
* @param tenantId Tenant ID
+ * @param deviceOwner owner of the device
+ * @param deviceName name of the device
+ * @param deviceStatus status of the device
* @param offset the offset for the data set
* @param limit the limit for the data set
* @return {@link GroupDetailsDTO} which containing group details and a list of device IDs
* @throws GroupManagementDAOException if an error occurs while retrieving the group details and devices
*/
- GroupDetailsDTO getGroupDetailsWithDevices(String groupName, int tenantId, int offset, int limit)
+ GroupDetailsDTO getGroupDetailsWithDevices(String groupName, List allowingDeviceStatuses, int deviceTypeId,
+ int tenantId, String deviceOwner, String deviceName, String deviceStatus, int offset, int limit)
throws GroupManagementDAOException;
}
\ No newline at end of file
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 8704afde51..b9b22d37bc 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
@@ -982,7 +982,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
+ "e.TENANT_ID = ? AND "
+ "LOWER(e.OWNER) = LOWER(?) AND "
+ "e.STATUS IN (",
- ")) e1 ORDER BY e1.DATE_OF_LAST_UPDATE DESC");
+ ")) e1 WHERE d.ID = e1.DEVICE_ID ORDER BY e1.DATE_OF_LAST_UPDATE DESC");
deviceStatuses.stream().map(ignored -> "?").forEach(joiner::add);
String query = joiner.toString();
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 3b7335c412..608a95c03e 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
@@ -563,30 +563,73 @@ public abstract class AbstractEnrollmentDAOImpl implements EnrollmentDAO {
}
@Override
- public OwnerWithDeviceDTO getOwnersWithDevices(String owner, int tenantId)
- throws DeviceManagementDAOException {
+ public OwnerWithDeviceDTO getOwnersWithDevices(String owner, List allowingDeviceStatuses, int tenantId,
+ int deviceTypeId, String deviceOwner, String deviceName,
+ String deviceStatus) throws DeviceManagementDAOException {
Connection conn = null;
OwnerWithDeviceDTO ownerDetails = new OwnerWithDeviceDTO();
List deviceIds = new ArrayList<>();
int deviceCount = 0;
- String sql = "SELECT e.DEVICE_ID, e.OWNER, e.STATUS AS DEVICE_STATUS, d.NAME AS DEVICE_NAME, e.DEVICE_TYPE AS DEVICE_TYPE, e.DEVICE_IDENTIFICATION AS DEVICE_IDENTIFICATION " +
+ StringBuilder deviceFilters = new StringBuilder();
+ for (int i = 0; i < allowingDeviceStatuses.size(); i++) {
+ deviceFilters.append("?");
+ if (i < allowingDeviceStatuses.size() - 1) {
+ deviceFilters.append(",");
+ }
+ }
+
+ StringBuilder sql = new StringBuilder(
+ "SELECT e.DEVICE_ID, " +
+ "e.OWNER, " +
+ "e.STATUS AS DEVICE_STATUS, " +
+ "d.NAME AS DEVICE_NAME, " +
+ "e.DEVICE_TYPE AS DEVICE_TYPE, " +
+ "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 = ?";
+ "WHERE e.OWNER = ? AND e.TENANT_ID = ? AND d.DEVICE_TYPE_ID = ? AND e.STATUS IN (" + deviceFilters + ")");
+
+ if (deviceOwner != null && !deviceOwner.isEmpty()) {
+ sql.append(" AND e.OWNER LIKE ?");
+ }
+ if (deviceName != null && !deviceName.isEmpty()) {
+ sql.append(" AND d.NAME LIKE ?");
+ }
+ if (deviceStatus != null && !deviceStatus.isEmpty()) {
+ sql.append(" AND e.STATUS = ?");
+ }
+
try {
conn = this.getConnection();
- try (PreparedStatement stmt = conn.prepareStatement(sql)) {
- stmt.setString(1, owner);
- stmt.setInt(2, tenantId);
+ try (PreparedStatement stmt = conn.prepareStatement(sql.toString())) {
+ int index = 1;
+ stmt.setString(index++, owner);
+ stmt.setInt(index++, tenantId);
+ stmt.setInt(index++, deviceTypeId);
+ for (String status : allowingDeviceStatuses) {
+ stmt.setString(index++, status);
+ }
+
+ if (deviceOwner != null && !deviceOwner.isEmpty()) {
+ stmt.setString(index++, "%" + deviceOwner + "%");
+ }
+ if (deviceName != null && !deviceName.isEmpty()) {
+ stmt.setString(index++, "%" + deviceName + "%");
+ }
+ if (deviceStatus != null && !deviceStatus.isEmpty()) {
+ stmt.setString(index++, deviceStatus);
+ }
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
if (ownerDetails.getUserName() == null) {
ownerDetails.setUserName(rs.getString("OWNER"));
- ownerDetails.setDeviceStatus(rs.getString("DEVICE_STATUS"));
- ownerDetails.setDeviceNames(rs.getString("DEVICE_NAME"));
}
+ ownerDetails.setDeviceStatus(rs.getString("DEVICE_STATUS"));
+ ownerDetails.setDeviceNames(rs.getString("DEVICE_NAME"));
+ ownerDetails.setDeviceTypes(rs.getString("DEVICE_TYPE"));
+ ownerDetails.setDeviceIdentifiers(rs.getString("DEVICE_IDENTIFICATION"));
deviceIds.add(rs.getInt("DEVICE_ID"));
deviceCount++;
}
@@ -597,34 +640,61 @@ public abstract class AbstractEnrollmentDAOImpl implements EnrollmentDAO {
log.error(msg, e);
throw new DeviceManagementDAOException(msg, e);
}
-
ownerDetails.setDeviceIds(deviceIds);
- ownerDetails.setDeviceTypes("DEVICE_TYPE");
- ownerDetails.setDeviceIdentifiers("DEVICE_IDENTIFICATION");
ownerDetails.setDeviceCount(deviceCount);
return ownerDetails;
}
@Override
- public OwnerWithDeviceDTO getOwnerWithDeviceByDeviceId(int deviceId, int tenantId)
- throws DeviceManagementDAOException {
+ public OwnerWithDeviceDTO getOwnerWithDeviceByDeviceId(int deviceId, int tenantId, String deviceOwner, String deviceName,
+ String deviceStatus) throws DeviceManagementDAOException {
OwnerWithDeviceDTO deviceOwnerWithStatus = new OwnerWithDeviceDTO();
Connection conn = null;
- String sql = "SELECT e.DEVICE_ID, e.OWNER, e.STATUS AS DEVICE_STATUS, d.NAME AS DEVICE_NAME, e.DEVICE_TYPE, e.DEVICE_IDENTIFICATION " +
+ List deviceIds = new ArrayList<>();
+
+ StringBuilder sql = new StringBuilder(
+ "SELECT e.DEVICE_ID, " +
+ "e.OWNER, " +
+ "e.STATUS AS DEVICE_STATUS, " +
+ "d.NAME AS DEVICE_NAME, " +
+ "e.DEVICE_TYPE, " +
+ "e.DEVICE_IDENTIFICATION " +
"FROM DM_ENROLMENT e " +
"JOIN DM_DEVICE d ON e.DEVICE_ID = d.ID " +
- "WHERE e.DEVICE_ID = ? AND e.TENANT_ID = ?";
+ "WHERE e.DEVICE_ID = ? AND e.TENANT_ID = ?");
+
+ if (deviceOwner != null && !deviceOwner.isEmpty()) {
+ sql.append(" AND e.OWNER LIKE ?");
+ }
+ if (deviceName != null && !deviceName.isEmpty()) {
+ sql.append(" AND d.NAME LIKE ?");
+ }
+ if (deviceStatus != null && !deviceStatus.isEmpty()) {
+ sql.append(" AND e.STATUS = ?");
+ }
+
try {
conn = this.getConnection();
- try (PreparedStatement stmt = conn.prepareStatement(sql)) {
- stmt.setInt(1, deviceId);
- stmt.setInt(2, tenantId);
+ try (PreparedStatement stmt = conn.prepareStatement(sql.toString())) {
+ int paramIndex = 1;
+ stmt.setInt(paramIndex++, deviceId);
+ stmt.setInt(paramIndex++, tenantId);
+
+ // Set filter parameters if provided
+ if (deviceOwner != null && !deviceOwner.isEmpty()) {
+ stmt.setString(paramIndex++, "%" + deviceOwner + "%");
+ }
+ if (deviceName != null && !deviceName.isEmpty()) {
+ stmt.setString(paramIndex++, "%" + deviceName + "%");
+ }
+ if (deviceStatus != null && !deviceStatus.isEmpty()) {
+ stmt.setString(paramIndex++, deviceStatus);
+ }
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
deviceOwnerWithStatus.setUserName(rs.getString("OWNER"));
deviceOwnerWithStatus.setDeviceStatus(rs.getString("DEVICE_STATUS"));
- List deviceIds = new ArrayList<>();
deviceIds.add(rs.getInt("DEVICE_ID"));
deviceOwnerWithStatus.setDeviceIds(deviceIds);
deviceOwnerWithStatus.setDeviceNames(rs.getString("DEVICE_NAME"));
@@ -642,18 +712,51 @@ public abstract class AbstractEnrollmentDAOImpl implements EnrollmentDAO {
}
@Override
- public List getDevicesByTenantId(int tenantId)
- throws DeviceManagementDAOException {
+ public List getDevicesByTenantId(int tenantId, List allowingDeviceStatuses, int deviceTypeId,
+ String deviceOwner, String deviceStatus) throws DeviceManagementDAOException {
List devices = new ArrayList<>();
- String sql = "SELECT DEVICE_ID, OWNER, STATUS, DEVICE_TYPE, DEVICE_IDENTIFICATION " +
- "FROM DM_ENROLMENT " +
- "WHERE TENANT_ID = ?";
+ if (allowingDeviceStatuses.isEmpty()) {
+ return devices;
+ }
+
+ StringBuilder deviceFilters = new StringBuilder();
+ for (int i = 0; i < allowingDeviceStatuses.size(); i++) {
+ deviceFilters.append("?");
+ if (i < allowingDeviceStatuses.size() - 1) {
+ deviceFilters.append(",");
+ }
+ }
+
+ 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 = ?");
+
+ if (deviceOwner != null && !deviceOwner.isEmpty()) {
+ sql.append(" AND e.OWNER LIKE ?");
+ }
+ if (deviceStatus != null && !deviceStatus.isEmpty()) {
+ sql.append(" AND e.STATUS = ?");
+ }
+
Connection conn = null;
try {
conn = this.getConnection();
- try (PreparedStatement stmt = conn.prepareStatement(sql)) {
- stmt.setInt(1, tenantId);
+ try (PreparedStatement stmt = conn.prepareStatement(sql.toString())) {
+ int index = 1;
+ stmt.setInt(index++, tenantId);
+ for (String status : allowingDeviceStatuses) {
+ stmt.setString(index++, status);
+ }
+ stmt.setInt(index++, deviceTypeId);
+
+ if (deviceOwner != null && !deviceOwner.isEmpty()) {
+ stmt.setString(index++, "%" + deviceOwner + "%");
+ }
+ if (deviceStatus != null && !deviceStatus.isEmpty()) {
+ stmt.setString(index++, deviceStatus);
+ }
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
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 9232178b36..ab4b888bb1 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
@@ -1441,7 +1441,8 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
}
@Override
- public GroupDetailsDTO getGroupDetailsWithDevices(String groupName, int tenantId, int offset, int limit)
+ public GroupDetailsDTO getGroupDetailsWithDevices(String groupName, List allowedStatuses, int deviceTypeId, int tenantId,
+ String deviceOwner, String deviceName, String deviceStatus, int offset, int limit)
throws GroupManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to get group details and device IDs for group: " + groupName);
@@ -1454,7 +1455,15 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
Map deviceTypes = new HashMap<>();
Map deviceIdentifiers = new HashMap<>();
- String sql =
+ StringBuilder statusPlaceholders = new StringBuilder();
+ for (int i = 0; i < allowedStatuses.size(); i++) {
+ statusPlaceholders.append("?");
+ if (i < allowedStatuses.size() - 1) {
+ statusPlaceholders.append(",");
+ }
+ }
+
+ StringBuilder sql = new StringBuilder(
"SELECT " +
" g.ID AS GROUP_ID, " +
" g.GROUP_NAME, " +
@@ -1473,16 +1482,45 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
"WHERE " +
" g.GROUP_NAME = ? " +
" AND g.TENANT_ID = ? " +
- "LIMIT ? OFFSET ?";
+ " AND d.DEVICE_TYPE_ID = ? " +
+ " AND e.STATUS IN (" + statusPlaceholders + ")");
+
+ if (deviceOwner != null && !deviceOwner.isEmpty()) {
+ sql.append(" AND e.OWNER LIKE ?");
+ }
+ if (deviceName != null && !deviceName.isEmpty()) {
+ sql.append(" AND d.NAME LIKE ?");
+ }
+ if (deviceStatus != null && !deviceStatus.isEmpty()) {
+ sql.append(" AND e.STATUS = ?");
+ }
+
+ sql.append(" LIMIT ? OFFSET ?");
Connection conn = null;
try {
conn = GroupManagementDAOFactory.getConnection();
- try (PreparedStatement stmt = conn.prepareStatement(sql)) {
- stmt.setString(1, groupName);
- stmt.setInt(2, tenantId);
- stmt.setInt(3, limit);
- stmt.setInt(4, offset);
+ try (PreparedStatement stmt = conn.prepareStatement(sql.toString())) {
+ int index = 1;
+ stmt.setString(index++, groupName);
+ stmt.setInt(index++, tenantId);
+ stmt.setInt(index++, deviceTypeId);
+ for (String status : allowedStatuses) {
+ stmt.setString(index++, status);
+ }
+
+ if (deviceOwner != null && !deviceOwner.isEmpty()) {
+ stmt.setString(index++, "%" + deviceOwner + "%");
+ }
+ if (deviceName != null && !deviceName.isEmpty()) {
+ stmt.setString(index++, "%" + deviceName + "%");
+ }
+ if (deviceStatus != null && !deviceStatus.isEmpty()) {
+ stmt.setString(index++, deviceStatus);
+ }
+
+ stmt.setInt(index++, limit);
+ stmt.setInt(index++, offset);
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
@@ -1500,6 +1538,7 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
deviceIdentifiers.put(deviceId, rs.getString("DEVICE_IDENTIFICATION"));
}
}
+ }
groupDetails.setDeviceIds(deviceIds);
groupDetails.setDeviceCount(deviceIds.size());
groupDetails.setDeviceOwners(deviceOwners);
@@ -1508,11 +1547,10 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO {
groupDetails.setDeviceTypes(deviceTypes);
groupDetails.setDeviceIdentifiers(deviceIdentifiers);
return groupDetails;
+ } catch (SQLException e) {
+ String msg = "Error occurred while retrieving group details and device IDs for group: " + groupName;
+ log.error(msg, e);
+ throw new GroupManagementDAOException(msg, e);
}
- } catch (SQLException e) {
- String msg = "Error occurred while retrieving group details and device IDs for group: " + groupName;
- log.error(msg, e);
- throw new GroupManagementDAOException(msg, e);
- }
}
}
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/service/DeviceManagementProviderService.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/DeviceManagementProviderService.java
index f2172a44bb..36595941d1 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/DeviceManagementProviderService.java
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/DeviceManagementProviderService.java
@@ -19,6 +19,7 @@
package io.entgra.device.mgt.core.device.mgt.core.service;
import io.entgra.device.mgt.core.device.mgt.common.app.mgt.Application;
+import io.entgra.device.mgt.core.device.mgt.common.exceptions.ConflictException;
import io.entgra.device.mgt.core.device.mgt.core.dto.DeviceDetailsDTO;
import io.entgra.device.mgt.core.device.mgt.core.dto.OperationDTO;
import io.entgra.device.mgt.core.device.mgt.core.dto.OwnerWithDeviceDTO;
@@ -1073,27 +1074,40 @@ public interface DeviceManagementProviderService {
* Get owner details and device IDs for a given owner and tenant.
*
* @param owner the name of the owner.
+ * @param deviceTypeId the device type id]
+ * @param deviceOwner owner of the device
+ * @param deviceName name of the device
+ * @param deviceStatus status of the device
* @return {@link OwnerWithDeviceDTO} which contains a list of devices related to a user.
* @throws DeviceManagementException if an error occurs while fetching owner details.
*/
- OwnerWithDeviceDTO getOwnersWithDeviceIds(String owner) throws DeviceManagementDAOException;
+ OwnerWithDeviceDTO getOwnersWithDeviceIds(String owner, int deviceTypeId, String deviceOwner, String deviceName, String deviceStatus)
+ throws DeviceManagementDAOException;
/**
* Get owner details and device IDs for a given owner and tenant.
*
* @param deviceId the deviceId of the device.
+ * @param deviceOwner owner of the device
+ * @param deviceName name of the device
+ * @param deviceStatus status of the device
* @return {@link OwnerWithDeviceDTO} which contains a list of devices related to a user.
* @throws DeviceManagementException if an error occurs while fetching owner details.
*/
- OwnerWithDeviceDTO getOwnerWithDeviceByDeviceId(int deviceId) throws DeviceManagementDAOException;
+ OwnerWithDeviceDTO getOwnerWithDeviceByDeviceId(int deviceId, String deviceOwner, String deviceName, String deviceStatus)
+ throws DeviceManagementDAOException;
/**
* Get owner details and device IDs for a given owner and tenant.
* @param tenantId the tenant id which devices need to be retried
+ * @param deviceTypeId the device type id
+ * @param deviceOwner owner of the device
+ * @param deviceStatus status of the device
* @return {@link DeviceDetailsDTO} which contains devices details.
* @throws DeviceManagementException if an error occurs while fetching owner details.
*/
- List getDevicesByTenantId(int tenantId) throws DeviceManagementDAOException;
+ List getDevicesByTenantId(int tenantId, int deviceTypeId, String deviceOwner, String deviceStatus)
+ throws DeviceManagementDAOException;
/**
* Get operation details by operation code.
@@ -1117,4 +1131,17 @@ public interface DeviceManagementProviderService {
*/
PaginationResult getDevicesNotInGroup(PaginationRequest request, boolean requireDeviceInfo)
throws DeviceManagementException;
+
+ /**
+ * This method is to update devices names
+ * @param device {@link Device}
+ * @param deviceType the type of the device.
+ * @param deviceId ID of the device.
+ * @return boolean value of the update status.
+ * @throws DeviceManagementException if any service level or DAO level error occurs.
+ * @throws DeviceManagementException if service level null device error occurs.
+ * @throws ConflictException if service level data conflicts occurs.
+ */
+ Device updateDeviceName(Device device, String deviceType, String deviceId)
+ throws DeviceManagementException, DeviceNotFoundException, ConflictException;
}
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/service/DeviceManagementProviderServiceImpl.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/DeviceManagementProviderServiceImpl.java
index da4a9c01da..6d805363af 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/DeviceManagementProviderServiceImpl.java
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/DeviceManagementProviderServiceImpl.java
@@ -20,6 +20,7 @@ package io.entgra.device.mgt.core.device.mgt.core.service;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
+import io.entgra.device.mgt.core.device.mgt.common.exceptions.ConflictException;
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.DeviceStatusManagementService;
import io.entgra.device.mgt.core.device.mgt.core.dao.TenantDAO;
import io.entgra.device.mgt.core.device.mgt.core.dto.DeviceDetailsDTO;
@@ -3925,6 +3926,10 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
DeviceCacheManagerImpl.getInstance().removeDeviceFromCache(deviceIdentifier, this.getTenantId());
}
+ private void updateDeviceInCache(DeviceIdentifier deviceIdentifier, Device device) {
+ DeviceCacheManagerImpl.getInstance().updateDeviceInCache(deviceIdentifier, device, this.getTenantId());
+ }
+
/***
* This method removes a given list of devices from the cache
* @param deviceList list of DeviceCacheKey objects
@@ -5357,13 +5362,19 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
}
@Override
- public OwnerWithDeviceDTO getOwnersWithDeviceIds(String owner) throws DeviceManagementDAOException {
+ public OwnerWithDeviceDTO getOwnersWithDeviceIds(String owner, int deviceTypeId, String deviceOwner, String deviceName, String deviceStatus)
+ throws DeviceManagementDAOException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
OwnerWithDeviceDTO ownerWithDeviceDTO;
+ List allowingDeviceStatuses = new ArrayList<>();
+ allowingDeviceStatuses.add(EnrolmentInfo.Status.ACTIVE.toString());
+ allowingDeviceStatuses.add(EnrolmentInfo.Status.INACTIVE.toString());
+ allowingDeviceStatuses.add(EnrolmentInfo.Status.UNREACHABLE.toString());
+
try {
DeviceManagementDAOFactory.openConnection();
- ownerWithDeviceDTO = this.enrollmentDAO.getOwnersWithDevices(owner, tenantId);
+ ownerWithDeviceDTO = this.enrollmentDAO.getOwnersWithDevices(owner, allowingDeviceStatuses, tenantId, deviceTypeId, deviceOwner, deviceName, deviceStatus);
if (ownerWithDeviceDTO == null) {
String msg = "No data found for owner: " + owner;
log.error(msg);
@@ -5387,13 +5398,14 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
@Override
- public OwnerWithDeviceDTO getOwnerWithDeviceByDeviceId(int deviceId) throws DeviceManagementDAOException {
+ public OwnerWithDeviceDTO getOwnerWithDeviceByDeviceId(int deviceId, String deviceOwner, String deviceName, String deviceStatus)
+ throws DeviceManagementDAOException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
OwnerWithDeviceDTO deviceOwnerWithStatus;
try {
DeviceManagementDAOFactory.openConnection();
- deviceOwnerWithStatus = enrollmentDAO.getOwnerWithDeviceByDeviceId(deviceId, tenantId);
+ deviceOwnerWithStatus = enrollmentDAO.getOwnerWithDeviceByDeviceId(deviceId, tenantId, deviceOwner, deviceName, deviceStatus);
if (deviceOwnerWithStatus == null) {
throw new DeviceManagementDAOException("No data found for device ID: " + deviceId);
}
@@ -5414,11 +5426,16 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
}
@Override
- public List getDevicesByTenantId(int tenantId) throws DeviceManagementDAOException {
+ public List getDevicesByTenantId(int tenantId, int deviceTypeId, String deviceOwner, String deviceStatus)
+ throws DeviceManagementDAOException {
List devices;
+ List allowingDeviceStatuses = new ArrayList<>();
+ allowingDeviceStatuses.add(EnrolmentInfo.Status.ACTIVE.toString());
+ allowingDeviceStatuses.add(EnrolmentInfo.Status.INACTIVE.toString());
+ allowingDeviceStatuses.add(EnrolmentInfo.Status.UNREACHABLE.toString());
try {
DeviceManagementDAOFactory.openConnection();
- devices = enrollmentDAO.getDevicesByTenantId(tenantId);
+ devices = enrollmentDAO.getDevicesByTenantId(tenantId, allowingDeviceStatuses, deviceTypeId, deviceOwner, deviceStatus);
if (devices == null || devices.isEmpty()) {
String msg = "No devices found for tenant ID: " + tenantId;
log.error(msg);
@@ -5511,4 +5528,52 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
paginationResult.setRecordsTotal(count);
return paginationResult;
}
+
+ @Override
+ public Device updateDeviceName(Device device, String deviceType, String deviceId)
+ throws DeviceManagementException, DeviceNotFoundException, ConflictException {
+ Device persistedDevice = this.getDevice(new DeviceIdentifier(deviceId, deviceType), true);
+ if (persistedDevice == null) {
+ String msg = "Device not found for the given deviceId and deviceType";
+ log.error(msg);
+ throw new DeviceNotFoundException(msg);
+ }
+ if (persistedDevice.getName().equals(device.getName())) {
+ String msg = "Device names are the same.";
+ log.info(msg);
+ throw new ConflictException(msg);
+ }
+ persistedDevice.setName(device.getName());
+ if (log.isDebugEnabled()) {
+ log.debug("Rename Device name of: " + persistedDevice.getId() + " of type '" + persistedDevice.getType() + "'");
+ }
+ DeviceManager deviceManager = this.getDeviceManager(persistedDevice.getType());
+ if (deviceManager == null) {
+ String msg = "Device Manager associated with the device type '" + persistedDevice.getType() + "' is null. " +
+ "Therefore, not attempting method 'modifyEnrolment'";
+ log.error(msg);
+ throw new DeviceManagementException(msg);
+ }
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier(persistedDevice.getDeviceIdentifier(), persistedDevice.getType());
+ try {
+ DeviceManagementDAOFactory.beginTransaction();
+ int tenantId = this.getTenantId();
+ deviceDAO.updateDevice(persistedDevice, tenantId);
+ DeviceManagementDAOFactory.commitTransaction();
+ this.updateDeviceInCache(deviceIdentifier, persistedDevice);
+ return persistedDevice;
+ } catch (DeviceManagementDAOException e) {
+ DeviceManagementDAOFactory.rollbackTransaction();
+ String msg = "Error occurred while renaming the device '" + persistedDevice.getId() + "'";
+ log.error(msg, e);
+ throw new DeviceManagementException(msg, e);
+ } catch (TransactionManagementException e) {
+ DeviceManagementDAOFactory.rollbackTransaction();
+ String msg = "Error occurred while initiating transaction to rename device: " + persistedDevice.getId();
+ log.error(msg, e);
+ throw new DeviceManagementException(msg, e);
+ } finally {
+ DeviceManagementDAOFactory.closeConnection();
+ }
+ }
}
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/service/GroupManagementProviderService.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/GroupManagementProviderService.java
index fac06bfccf..3104cff169 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/GroupManagementProviderService.java
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/GroupManagementProviderService.java
@@ -377,11 +377,16 @@ public interface GroupManagementProviderService {
* Get group details and device IDs for a given group name.
*
* @param groupName the name of the group.
+ * @param deviceTypeId the device type id
+ * @param deviceOwner owner of the device
+ * @param deviceName name of the device
+ * @param deviceStatus status of the device
* @param offset the offset for the data set
* @param limit the limit for the data set
* @return {@link GroupDetailsDTO} which containing group details and a list of device IDs
* @throws GroupManagementException if an error occurs while fetching group details.
*/
- GroupDetailsDTO getGroupDetailsWithDevices(String groupName, int offset, int limit) throws GroupManagementException;
+ GroupDetailsDTO getGroupDetailsWithDevices(String groupName, int deviceTypeId, String deviceOwner, String deviceName, String deviceStatus,
+ int offset, int limit) throws GroupManagementException;
}
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/service/GroupManagementProviderServiceImpl.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/GroupManagementProviderServiceImpl.java
index 62b1ab8579..e34dc1ca61 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/GroupManagementProviderServiceImpl.java
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/service/GroupManagementProviderServiceImpl.java
@@ -17,6 +17,7 @@
*/
package io.entgra.device.mgt.core.device.mgt.core.service;
+
import io.entgra.device.mgt.core.device.mgt.common.Device;
import io.entgra.device.mgt.core.device.mgt.common.DeviceIdentifier;
import io.entgra.device.mgt.core.device.mgt.common.DeviceManagementConstants;
@@ -25,13 +26,12 @@ 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.exceptions.TransactionManagementException;
-import io.entgra.device.mgt.core.device.mgt.common.group.mgt.*;
-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;
import io.entgra.device.mgt.core.device.mgt.core.operation.mgt.OperationMgtConstants;
import io.entgra.device.mgt.core.device.mgt.core.util.DeviceManagerUtil;
+import io.entgra.device.mgt.core.device.mgt.common.EnrolmentInfo;
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;
@@ -59,7 +59,14 @@ import org.wso2.carbon.user.api.UserStoreException;
import org.wso2.carbon.user.api.UserStoreManager;
import java.sql.SQLException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
@@ -1689,17 +1696,22 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid
}
@Override
- public GroupDetailsDTO getGroupDetailsWithDevices(String groupName, int offset, int limit)
- throws GroupManagementException {
+ public GroupDetailsDTO getGroupDetailsWithDevices(String groupName, int deviceTypeId, String deviceOwner, String deviceName, String deviceStatus,
+ int offset, int limit) throws GroupManagementException {
if (log.isDebugEnabled()) {
log.debug("Retrieving group details and device IDs for group: " + groupName);
}
int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
GroupDetailsDTO groupDetailsWithDevices;
+ List allowingDeviceStatuses = new ArrayList<>();
+ allowingDeviceStatuses.add(EnrolmentInfo.Status.ACTIVE.toString());
+ allowingDeviceStatuses.add(EnrolmentInfo.Status.INACTIVE.toString());
+ allowingDeviceStatuses.add(EnrolmentInfo.Status.UNREACHABLE.toString());
try {
GroupManagementDAOFactory.openConnection();
- groupDetailsWithDevices = this.groupDAO.getGroupDetailsWithDevices(groupName, tenantId, offset, limit);
+ groupDetailsWithDevices = this.groupDAO.getGroupDetailsWithDevices(groupName, allowingDeviceStatuses,
+ deviceTypeId, tenantId, deviceOwner, deviceName, deviceStatus, offset, limit);
} catch (GroupManagementDAOException | SQLException e) {
String msg = "Error occurred while retrieving group details and device IDs for group: " + groupName;
log.error(msg, e);
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/util/MDMWindowsOperationUtil.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/util/MDMWindowsOperationUtil.java
index e06092cd97..a4a3680b64 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/util/MDMWindowsOperationUtil.java
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/util/MDMWindowsOperationUtil.java
@@ -25,6 +25,7 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import io.entgra.device.mgt.core.device.mgt.common.MDMAppConstants;
import io.entgra.device.mgt.core.device.mgt.common.app.mgt.App;
+import io.entgra.device.mgt.core.device.mgt.common.app.mgt.windows.AppStoreApplication;
import io.entgra.device.mgt.core.device.mgt.common.app.mgt.windows.EnterpriseApplication;
import io.entgra.device.mgt.core.device.mgt.common.app.mgt.windows.HostedAppxApplication;
import io.entgra.device.mgt.core.device.mgt.common.app.mgt.windows.HostedMSIApplication;
@@ -62,64 +63,26 @@ public class MDMWindowsOperationUtil {
switch (application.getType()) {
case ENTERPRISE:
- operation.setCode(MDMAppConstants.WindowsConstants.INSTALL_ENTERPRISE_APPLICATION);
EnterpriseApplication enterpriseApplication = new EnterpriseApplication();
- if (appType.equalsIgnoreCase(MDMAppConstants.WindowsConstants.APPX)) {
- HostedAppxApplication hostedAppxApplication = new HostedAppxApplication();
- List dependencyPackageList = new ArrayList<>();
- for (int i = 0; i < metaJsonArray.size(); i++) {
- JsonElement metaElement = metaJsonArray.get(i);
- JsonObject metaObject = metaElement.getAsJsonObject();
-
- if (MDMAppConstants.WindowsConstants.APPX_PACKAGE_URI.equals(metaObject.get("key").getAsString())) {
- hostedAppxApplication.setPackageUri(metaObject.get("value").getAsString().trim());
- }
- else if (MDMAppConstants.WindowsConstants.APPX_PACKAGE_FAMILY_NAME.equals(metaObject.get("key").getAsString())) {
- hostedAppxApplication.setPackageFamilyName(metaObject.get("value").getAsString().trim());
- }
- else if (MDMAppConstants.WindowsConstants.APPX_DEPENDENCY_PACKAGE_URL.equals(metaObject.get("key").getAsString())
- && metaObject.has("value")) {
- dependencyPackageList.add(metaObject.get("value").getAsString().trim());
- hostedAppxApplication.setDependencyPackageUri(dependencyPackageList);
- }
- else if (MDMAppConstants.WindowsConstants.APPX_CERTIFICATE_HASH.equals(metaObject.get("key").getAsString())
- && metaObject.has("value")) {
- hostedAppxApplication.setCertificateHash(metaObject.get("value").getAsString().trim());
- }
- else if (MDMAppConstants.WindowsConstants.APPX_ENCODED_CERT_CONTENT.equals(metaObject.get("key").getAsString())
- && metaObject.has("value")) {
- hostedAppxApplication.setEncodedCertificate(metaObject.get("value").getAsString().trim());
- }
- }
- enterpriseApplication.setHostedAppxApplication(hostedAppxApplication);
-
- } else if (appType.equalsIgnoreCase(MDMAppConstants.WindowsConstants.MSI)) {
- HostedMSIApplication hostedMSIApplication = new HostedMSIApplication();
- for (int i = 0; i < metaJsonArray.size(); i++) {
- JsonElement metaElement = metaJsonArray.get(i);
- JsonObject metaObject = metaElement.getAsJsonObject();
- if (MDMAppConstants.WindowsConstants.MSI_PRODUCT_ID.equals(metaObject.get("key").getAsString())) {
- hostedMSIApplication.setProductId(metaObject.get("value").getAsString().trim());
- }
- else if (MDMAppConstants.WindowsConstants.MSI_CONTENT_URI.equals(metaObject.get("key").getAsString())) {
- hostedMSIApplication.setContentUrl(metaObject.get("value").getAsString().trim());
- }
- else if (MDMAppConstants.WindowsConstants.MSI_FILE_HASH.equals(metaObject.get("key").getAsString())) {
- hostedMSIApplication.setFileHash(metaObject.get("value").getAsString().trim());
- }
- }
- enterpriseApplication.setHostedMSIApplication(hostedMSIApplication);
- }
+ createEnterpriseAppPayload(appType, metaJsonArray, enterpriseApplication);
+ operation.setCode(MDMAppConstants.WindowsConstants.INSTALL_ENTERPRISE_APPLICATION);
operation.setPayLoad(enterpriseApplication.toJSON());
break;
+ case PUBLIC:
+ AppStoreApplication appStoreApplication = new AppStoreApplication();
+ appStoreApplication.setType(application.getType().toString());
+ appStoreApplication.setPackageIdentifier(application.getIdentifier());
+ operation.setCode(MDMAppConstants.WindowsConstants.INSTALL_STORE_APPLICATION);
+ operation.setPayLoad(appStoreApplication.toJSON());
+ break;
case WEB_CLIP:
- operation.setCode(MDMAppConstants.WindowsConstants.INSTALL_WEB_CLIP_APPLICATION);
WebClipApplication webClipApplication = new WebClipApplication();
webClipApplication.setUrl(application.getLocation());
webClipApplication.setName(application.getName());
webClipApplication.setIcon(application.getIconImage());
webClipApplication.setProperties(application.getProperties());
webClipApplication.setType(application.getType().toString());
+ operation.setCode(MDMAppConstants.WindowsConstants.INSTALL_WEB_CLIP_APPLICATION);
operation.setPayLoad(webClipApplication.toJSON());
break;
default:
@@ -148,64 +111,26 @@ public class MDMWindowsOperationUtil {
switch (application.getType()) {
case ENTERPRISE:
- operation.setCode(MDMAppConstants.WindowsConstants.UNINSTALL_ENTERPRISE_APPLICATION);
EnterpriseApplication enterpriseApplication = new EnterpriseApplication();
- if (appType.equalsIgnoreCase(MDMAppConstants.WindowsConstants.APPX)) {
- HostedAppxApplication hostedAppxApplication = new HostedAppxApplication();
- List dependencyPackageList = new ArrayList<>();
- for (int i = 0; i < metaJsonArray.size(); i++) {
- JsonElement metaElement = metaJsonArray.get(i);
- JsonObject metaObject = metaElement.getAsJsonObject();
-
- if (MDMAppConstants.WindowsConstants.APPX_PACKAGE_URI.equals(metaObject.get("key").getAsString())) {
- hostedAppxApplication.setPackageUri(metaObject.get("value").getAsString().trim());
- }
- else if (MDMAppConstants.WindowsConstants.APPX_PACKAGE_FAMILY_NAME.equals(metaObject.get("key").getAsString())) {
- hostedAppxApplication.setPackageFamilyName(metaObject.get("value").getAsString().trim());
- }
- else if (MDMAppConstants.WindowsConstants.APPX_DEPENDENCY_PACKAGE_URL.equals(metaObject.get("key").getAsString())
- && metaObject.has("value")) {
- dependencyPackageList.add(metaObject.get("value").getAsString().trim());
- hostedAppxApplication.setDependencyPackageUri(dependencyPackageList);
- }
- else if (MDMAppConstants.WindowsConstants.APPX_CERTIFICATE_HASH.equals(metaObject.get("key").getAsString())
- && metaObject.has("value")) {
- hostedAppxApplication.setCertificateHash(metaObject.get("value").getAsString().trim());
- }
- else if (MDMAppConstants.WindowsConstants.APPX_ENCODED_CERT_CONTENT.equals(metaObject.get("key").getAsString())
- && metaObject.has("value")) {
- hostedAppxApplication.setEncodedCertificate(metaObject.get("value").getAsString().trim());
- }
- }
- enterpriseApplication.setHostedAppxApplication(hostedAppxApplication);
-
- } else if (appType.equalsIgnoreCase(MDMAppConstants.WindowsConstants.MSI)) {
- HostedMSIApplication hostedMSIApplication = new HostedMSIApplication();
- for (int i = 0; i < metaJsonArray.size(); i++) {
- JsonElement metaElement = metaJsonArray.get(i);
- JsonObject metaObject = metaElement.getAsJsonObject();
- if (MDMAppConstants.WindowsConstants.MSI_PRODUCT_ID.equals(metaObject.get("key").getAsString())) {
- hostedMSIApplication.setProductId(metaObject.get("value").getAsString().trim());
- }
- else if (MDMAppConstants.WindowsConstants.MSI_CONTENT_URI.equals(metaObject.get("key").getAsString())) {
- hostedMSIApplication.setContentUrl(metaObject.get("value").getAsString().trim());
- }
- else if (MDMAppConstants.WindowsConstants.MSI_FILE_HASH.equals(metaObject.get("key").getAsString())) {
- hostedMSIApplication.setFileHash(metaObject.get("value").getAsString().trim());
- }
- }
- enterpriseApplication.setHostedMSIApplication(hostedMSIApplication);
- }
+ createEnterpriseAppPayload(appType, metaJsonArray, enterpriseApplication);
+ operation.setCode(MDMAppConstants.WindowsConstants.UNINSTALL_ENTERPRISE_APPLICATION);
operation.setPayLoad(enterpriseApplication.toJSON());
break;
+ case PUBLIC:
+ AppStoreApplication appStoreApplication = new AppStoreApplication();
+ appStoreApplication.setType(application.getType().toString());
+ appStoreApplication.setPackageIdentifier(application.getIdentifier());
+ operation.setCode(MDMAppConstants.WindowsConstants.UNINSTALL_STORE_APPLICATION);
+ operation.setPayLoad(appStoreApplication.toJSON());
+ break;
case WEB_CLIP:
- operation.setCode(MDMAppConstants.WindowsConstants.UNINSTALL_WEB_CLIP_APPLICATION);
WebClipApplication webClipApplication = new WebClipApplication();
webClipApplication.setUrl(application.getLocation());
webClipApplication.setName(application.getName());
webClipApplication.setIcon(application.getIconImage());
webClipApplication.setProperties(application.getProperties());
webClipApplication.setType(application.getType().toString());
+ operation.setCode(MDMAppConstants.WindowsConstants.UNINSTALL_WEB_CLIP_APPLICATION);
operation.setPayLoad(webClipApplication.toJSON());
default:
String msg = "Application type " + application.getType() + " is not supported";
@@ -216,6 +141,67 @@ public class MDMWindowsOperationUtil {
return operation;
}
+ /**
+ * Helper method to create enterprise APPX and MSI app payloads for both install and uninstall operations
+ * @param appType contains whether the app type is APPX or MSI
+ * @param metaJsonArray JSON array containing metadata of APPX and MSI apps
+ * @param enterpriseApplication {@link EnterpriseApplication} contains operation payload content that will be sent to the device
+ */
+ private static void createEnterpriseAppPayload(String appType, JsonArray metaJsonArray, EnterpriseApplication enterpriseApplication) {
+
+ JsonElement metaElement;
+ JsonObject metaObject;
+ if (MDMAppConstants.WindowsConstants.APPX.equalsIgnoreCase(appType)) {
+ HostedAppxApplication hostedAppxApplication = new HostedAppxApplication();
+ List dependencyPackageList = new ArrayList<>();
+
+ for (int i = 0; i < metaJsonArray.size(); i++) {
+ metaElement = metaJsonArray.get(i);
+ metaObject = metaElement.getAsJsonObject();
+
+ if (MDMAppConstants.WindowsConstants.APPX_PACKAGE_URI.equals(metaObject.get("key").getAsString())) {
+ hostedAppxApplication.setPackageUri(metaObject.get("value").getAsString().trim());
+ }
+ else if (MDMAppConstants.WindowsConstants.APPX_PACKAGE_FAMILY_NAME.equals(metaObject.get("key").getAsString())) {
+ hostedAppxApplication.setPackageFamilyName(metaObject.get("value").getAsString().trim());
+ }
+ else if (MDMAppConstants.WindowsConstants.APPX_DEPENDENCY_PACKAGE_URL.equals(metaObject.get("key").getAsString())
+ && metaObject.has("value")) {
+ dependencyPackageList.add(metaObject.get("value").getAsString().trim());
+ hostedAppxApplication.setDependencyPackageUri(dependencyPackageList);
+ }
+ else if (MDMAppConstants.WindowsConstants.APPX_CERTIFICATE_HASH.equals(metaObject.get("key").getAsString())
+ && metaObject.has("value")) {
+ hostedAppxApplication.setCertificateHash(metaObject.get("value").getAsString().trim());
+ }
+ else if (MDMAppConstants.WindowsConstants.APPX_ENCODED_CERT_CONTENT.equals(metaObject.get("key").getAsString())
+ && metaObject.has("value")) {
+ hostedAppxApplication.setEncodedCertificate(metaObject.get("value").getAsString().trim());
+ }
+ }
+ enterpriseApplication.setHostedAppxApplication(hostedAppxApplication);
+
+ } else if (MDMAppConstants.WindowsConstants.MSI.equalsIgnoreCase(appType)) {
+ HostedMSIApplication hostedMSIApplication = new HostedMSIApplication();
+
+ for (int i = 0; i < metaJsonArray.size(); i++) {
+ metaElement = metaJsonArray.get(i);
+ metaObject = metaElement.getAsJsonObject();
+
+ if (MDMAppConstants.WindowsConstants.MSI_PRODUCT_ID.equals(metaObject.get("key").getAsString())) {
+ hostedMSIApplication.setProductId(metaObject.get("value").getAsString().trim());
+ }
+ else if (MDMAppConstants.WindowsConstants.MSI_CONTENT_URI.equals(metaObject.get("key").getAsString())) {
+ hostedMSIApplication.setContentUrl(metaObject.get("value").getAsString().trim());
+ }
+ else if (MDMAppConstants.WindowsConstants.MSI_FILE_HASH.equals(metaObject.get("key").getAsString())) {
+ hostedMSIApplication.setFileHash(metaObject.get("value").getAsString().trim());
+ }
+ }
+ enterpriseApplication.setHostedMSIApplication(hostedMSIApplication);
+ }
+ }
+
/**
* Method to get the installer file extension type for windows type apps(either appx or msi)
*
@@ -223,8 +209,7 @@ public class MDMWindowsOperationUtil {
* @return string extension of the windows app types(either appx or msi)
*/
public static String windowsAppType(String installerName) {
- String extension = installerName.substring(installerName.lastIndexOf(".") + 1);
- return extension;
+ return installerName.substring(installerName.lastIndexOf(".") + 1);
}
/**
@@ -234,8 +219,7 @@ public class MDMWindowsOperationUtil {
* @return the metaData Json String as Json Array
*/
public static JsonArray jsonStringToArray(String metaData) {
- JsonArray metaJsonArray = new JsonParser().parse(metaData).getAsJsonArray();
- return metaJsonArray;
+ return new JsonParser().parse(metaData).getAsJsonArray();
}
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/test/resources/config/operation/mdm-ui-config.xml b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/test/resources/config/operation/mdm-ui-config.xml
index 27ee95b690..0b04668453 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/test/resources/config/operation/mdm-ui-config.xml
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/test/resources/config/operation/mdm-ui-config.xml
@@ -384,6 +384,7 @@
win:ops:device-info
win:ops:security-info
win:ops:firewall-info
+ win:ops:os-updates-info
admin:tenant:view
dm:admin:devices:usage:view
and:ops:clear-app
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/test/resources/sql/h2.sql b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/test/resources/sql/h2.sql
index 92d95fb8fc..68ccfce349 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/test/resources/sql/h2.sql
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/test/resources/sql/h2.sql
@@ -338,7 +338,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED (
DEVICE_ID INT NOT NULL ,
ENROLMENT_ID INT NOT NULL,
POLICY_ID INT NOT NULL ,
- POLICY_CONTENT BLOB NULL ,
+ POLICY_CONTENT TEXT NULL ,
TENANT_ID INT NOT NULL,
APPLIED TINYINT NULL ,
CREATED_TIME TIMESTAMP NULL ,
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions/pom.xml b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions/pom.xml
index 85b1d3fb46..905e068bf4 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions/pom.xml
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions/pom.xml
@@ -22,7 +22,7 @@
device-mgt
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions/src/test/resources/sql-files/h2.sql b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions/src/test/resources/sql-files/h2.sql
index 2d6cea544e..24953ff026 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions/src/test/resources/sql-files/h2.sql
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions/src/test/resources/sql-files/h2.sql
@@ -242,7 +242,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED (
DEVICE_ID INT NOT NULL ,
ENROLMENT_ID INT NOT NULL,
POLICY_ID INT NOT NULL ,
- POLICY_CONTENT BLOB NULL ,
+ POLICY_CONTENT TEXT NULL ,
TENANT_ID INT NOT NULL,
APPLIED TINYINT NULL ,
CREATED_TIME TIMESTAMP NULL ,
diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.url.printer/pom.xml b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.url.printer/pom.xml
index 3a65ebc0c2..9667615287 100644
--- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.url.printer/pom.xml
+++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.url.printer/pom.xml
@@ -23,7 +23,7 @@
device-mgt
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/pom.xml b/components/device-mgt/pom.xml
index 76131de15b..3ba03e9be0 100644
--- a/components/device-mgt/pom.xml
+++ b/components/device-mgt/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/heartbeat-management/io.entgra.device.mgt.core.server.bootup.heartbeat.beacon/pom.xml b/components/heartbeat-management/io.entgra.device.mgt.core.server.bootup.heartbeat.beacon/pom.xml
index fc092a0a18..78d623205d 100644
--- a/components/heartbeat-management/io.entgra.device.mgt.core.server.bootup.heartbeat.beacon/pom.xml
+++ b/components/heartbeat-management/io.entgra.device.mgt.core.server.bootup.heartbeat.beacon/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
heartbeat-management
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/heartbeat-management/pom.xml b/components/heartbeat-management/pom.xml
index e21c822120..4d9c218b14 100644
--- a/components/heartbeat-management/pom.xml
+++ b/components/heartbeat-management/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/identity-extensions/io.entgra.device.mgt.core.device.mgt.oauth.extensions/pom.xml b/components/identity-extensions/io.entgra.device.mgt.core.device.mgt.oauth.extensions/pom.xml
index 16d5b64210..ca5fd4117e 100644
--- a/components/identity-extensions/io.entgra.device.mgt.core.device.mgt.oauth.extensions/pom.xml
+++ b/components/identity-extensions/io.entgra.device.mgt.core.device.mgt.oauth.extensions/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
identity-extensions
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/identity-extensions/io.entgra.device.mgt.core.identity.jwt.client.extension/pom.xml b/components/identity-extensions/io.entgra.device.mgt.core.identity.jwt.client.extension/pom.xml
index 17342edce2..09a06abae7 100644
--- a/components/identity-extensions/io.entgra.device.mgt.core.identity.jwt.client.extension/pom.xml
+++ b/components/identity-extensions/io.entgra.device.mgt.core.identity.jwt.client.extension/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
identity-extensions
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/identity-extensions/pom.xml b/components/identity-extensions/pom.xml
index 5626b8bcce..d2c17054ef 100644
--- a/components/identity-extensions/pom.xml
+++ b/components/identity-extensions/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/logger/io.entgra.device.mgt.core.notification.logger/pom.xml b/components/logger/io.entgra.device.mgt.core.notification.logger/pom.xml
index 854f5c2d1f..d06352516a 100644
--- a/components/logger/io.entgra.device.mgt.core.notification.logger/pom.xml
+++ b/components/logger/io.entgra.device.mgt.core.notification.logger/pom.xml
@@ -23,7 +23,7 @@
io.entgra.device.mgt.core
logger
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
io.entgra.device.mgt.core.notification.logger
diff --git a/components/logger/pom.xml b/components/logger/pom.xml
index 4d1043d64a..ba6e93577f 100644
--- a/components/logger/pom.xml
+++ b/components/logger/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/operation-template-mgt/io.entgra.device.mgt.core.operation.template/pom.xml b/components/operation-template-mgt/io.entgra.device.mgt.core.operation.template/pom.xml
index f44e1acd45..0b868f404f 100644
--- a/components/operation-template-mgt/io.entgra.device.mgt.core.operation.template/pom.xml
+++ b/components/operation-template-mgt/io.entgra.device.mgt.core.operation.template/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
operation-template-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/operation-template-mgt/io.entgra.device.mgt.core.operation.template/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql b/components/operation-template-mgt/io.entgra.device.mgt.core.operation.template/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql
index 4e0d108447..9b63adddad 100644
--- a/components/operation-template-mgt/io.entgra.device.mgt.core.operation.template/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql
+++ b/components/operation-template-mgt/io.entgra.device.mgt.core.operation.template/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql
@@ -300,7 +300,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED (
DEVICE_ID INT NOT NULL ,
ENROLMENT_ID INT NOT NULL,
POLICY_ID INT NOT NULL ,
- POLICY_CONTENT BLOB NULL ,
+ POLICY_CONTENT TEXT NULL ,
TENANT_ID INT NOT NULL,
APPLIED TINYINT NULL ,
CREATED_TIME TIMESTAMP NULL ,
diff --git a/components/operation-template-mgt/pom.xml b/components/operation-template-mgt/pom.xml
index dc97e13ce3..b5f609af3c 100644
--- a/components/operation-template-mgt/pom.xml
+++ b/components/operation-template-mgt/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.decision.point/pom.xml b/components/policy-mgt/io.entgra.device.mgt.core.policy.decision.point/pom.xml
index 541bc3d87a..b6fd2c7d73 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.decision.point/pom.xml
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.decision.point/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
policy-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.information.point/pom.xml b/components/policy-mgt/io.entgra.device.mgt.core.policy.information.point/pom.xml
index 27914bbb7e..4cacc6226b 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.information.point/pom.xml
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.information.point/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
policy-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.common/pom.xml b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.common/pom.xml
index 7918a1cf64..dcb24cc3c9 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.common/pom.xml
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.common/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
policy-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/pom.xml b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/pom.xml
index 5f98c2e822..dfe2d81083 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/pom.xml
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
policy-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
@@ -209,6 +209,10 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.policy.mgt.common
+
+ com.google.code.gson
+ gson
+
io.entgra.device.mgt.core
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/AbstractPolicyDAOImpl.java b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/AbstractPolicyDAOImpl.java
index 71960551ef..92b1040d31 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/AbstractPolicyDAOImpl.java
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/AbstractPolicyDAOImpl.java
@@ -18,11 +18,13 @@
package io.entgra.device.mgt.core.policy.mgt.core.dao.impl.policy;
+import com.google.gson.Gson;
import io.entgra.device.mgt.core.device.mgt.common.Device;
import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.CorrectiveAction;
import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.DeviceGroupWrapper;
import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.Policy;
import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.PolicyCriterion;
+import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.Profile;
import io.entgra.device.mgt.core.policy.mgt.common.Criterion;
import io.entgra.device.mgt.core.policy.mgt.core.dao.PolicyDAO;
import io.entgra.device.mgt.core.policy.mgt.core.dao.PolicyManagementDAOFactory;
@@ -37,14 +39,24 @@ import org.wso2.carbon.context.PrivilegedCarbonContext;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
-import java.sql.*;
-import java.util.*;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
/**
* Abstract implementation of PolicyDAO which holds generic SQL queries.
*/
public abstract class AbstractPolicyDAOImpl implements PolicyDAO {
+ private static final Gson gson = new Gson();
private static final Log log = LogFactory.getLog(AbstractPolicyDAOImpl.class);
@Override
@@ -1178,13 +1190,13 @@ public abstract class AbstractPolicyDAOImpl implements PolicyDAO {
stmt = conn.prepareStatement(query);
stmt.setInt(1, deviceId);
stmt.setInt(2, policy.getId());
- stmt.setBytes(3, PolicyManagerUtil.getBytes(policy));
+ stmt.setString(3, PolicyManagerUtil.convertToJson(policy));
stmt.setTimestamp(4, currentTimestamp);
stmt.setTimestamp(5, currentTimestamp);
stmt.setInt(6, tenantId);
stmt.setInt(7, enrolmentId);
stmt.executeUpdate();
- } catch (SQLException | IOException e) {
+ } catch (SQLException e) {
throw new PolicyManagerDAOException("Error occurred while adding the evaluated feature list to device", e);
} finally {
PolicyManagementDAOUtil.cleanupResources(stmt, null);
@@ -1231,7 +1243,7 @@ public abstract class AbstractPolicyDAOImpl implements PolicyDAO {
"APPLIED = ? WHERE DEVICE_ID = ? AND TENANT_ID = ? AND ENROLMENT_ID = ?";
stmt = conn.prepareStatement(query);
stmt.setInt(1, policy.getId());
- stmt.setBytes(2, PolicyManagerUtil.getBytes(policy));
+ stmt.setString(2, PolicyManagerUtil.convertToJson(policy));
stmt.setTimestamp(3, currentTimestamp);
stmt.setBoolean(4, false);
stmt.setInt(5, deviceId);
@@ -1239,7 +1251,7 @@ public abstract class AbstractPolicyDAOImpl implements PolicyDAO {
stmt.setInt(7, enrolmentId);
stmt.executeUpdate();
- } catch (SQLException | IOException e) {
+ } catch (SQLException e) {
throw new PolicyManagerDAOException("Error occurred while updating the evaluated feature list " +
"to device", e);
} finally {
@@ -1690,39 +1702,12 @@ public abstract class AbstractPolicyDAOImpl implements PolicyDAO {
resultSet = stmt.executeQuery();
while (resultSet.next()) {
- ByteArrayInputStream bais = null;
- ObjectInputStream ois = null;
- byte[] contentBytes;
-
- try {
- contentBytes = resultSet.getBytes("POLICY_CONTENT");
- bais = new ByteArrayInputStream(contentBytes);
- ois = new ObjectInputStream(bais);
- policy = (Policy) ois.readObject();
- } finally {
- if (bais != null) {
- try {
- bais.close();
- } catch (IOException e) {
- log.warn("Error occurred while closing ByteArrayOutputStream", e);
- }
- }
- if (ois != null) {
- try {
- ois.close();
- } catch (IOException e) {
- log.warn("Error occurred while closing ObjectOutputStream", e);
- }
- }
- }
+ String contentString = resultSet.getString("POLICY_CONTENT");
+ policy = gson.fromJson(contentString, Policy.class);
}
} catch (SQLException e) {
throw new PolicyManagerDAOException("Error occurred while getting the applied policy", e);
- } catch (IOException e) {
- throw new PolicyManagerDAOException("Unable to read the byte stream for content", e);
- } catch (ClassNotFoundException e) {
- throw new PolicyManagerDAOException("Class not found while converting the object", e);
} finally {
PolicyManagementDAOUtil.cleanupResources(stmt, resultSet);
}
@@ -1835,4 +1820,66 @@ public abstract class AbstractPolicyDAOImpl implements PolicyDAO {
}
return policies;
}
+
+ /**
+ * Extracts a list of Policy objects with associated Profile objects from the given ResultSet
+ *
+ * @param resultSet The ResultSet containing the policy and profile data
+ * @param tenantId The tenant ID
+ * @return A list of Policy objects populated with data from the ResultSet
+ * @throws SQLException If an SQL error occurs while processing the ResultSet
+ */
+ protected List extractPolicyListWithProfileFromDbResult(ResultSet resultSet, int tenantId) throws SQLException {
+ List policies = new ArrayList<>();
+ while (resultSet.next()) {
+ Policy policy = createPolicyFromResultSet(resultSet, tenantId);
+ Profile profile = createProfileFromResultSet(resultSet, tenantId);
+ policy.setProfile(profile);
+ policies.add(policy);
+ }
+ return policies;
+ }
+
+ /**
+ * Creates a Policy object from the current row in the given ResultSet
+ *
+ * @param resultSet The ResultSet containing the policy data
+ * @param tenantId The tenant ID
+ * @return A Policy object populated with data from the ResultSet
+ * @throws SQLException If an SQL error occurs while processing the ResultSet
+ */
+ private Policy createPolicyFromResultSet(ResultSet resultSet, int tenantId) throws SQLException {
+ Policy policy = new Policy();
+ policy.setId(resultSet.getInt("ID"));
+ policy.setProfileId(resultSet.getInt("PROFILE_ID"));
+ policy.setPolicyName(resultSet.getString("NAME"));
+ policy.setTenantId(tenantId);
+ policy.setPriorityId(resultSet.getInt("PRIORITY"));
+ policy.setCompliance(resultSet.getString("COMPLIANCE"));
+ policy.setOwnershipType(resultSet.getString("OWNERSHIP_TYPE"));
+ policy.setUpdated(PolicyManagerUtil.convertIntToBoolean(resultSet.getInt("UPDATED")));
+ policy.setActive(PolicyManagerUtil.convertIntToBoolean(resultSet.getInt("ACTIVE")));
+ policy.setDescription(resultSet.getString("DESCRIPTION"));
+ policy.setPolicyType(resultSet.getString("POLICY_TYPE"));
+ policy.setPolicyPayloadVersion(resultSet.getString("PAYLOAD_VERSION"));
+ return policy;
+ }
+
+ /**
+ * Creates a Profile object from the current row in the given ResultSet
+ *
+ * @param resultSet The ResultSet containing the profile data
+ * @param tenantId The tenant ID
+ * @return A Profile object populated with data from the ResultSet
+ * @throws SQLException If an SQL error occurs while processing the ResultSet
+ */
+ private Profile createProfileFromResultSet(ResultSet resultSet, int tenantId) throws SQLException {
+ Profile profile = new Profile();
+ profile.setProfileId(resultSet.getInt("PROFILE_ID"));
+ profile.setProfileName(resultSet.getString("PROFILE_NAME"));
+ profile.setTenantId(tenantId);
+ profile.setDeviceType(resultSet.getString("DEVICE_TYPE"));
+ return profile;
+ }
+
}
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/GenericPolicyDAOImpl.java b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/GenericPolicyDAOImpl.java
index 2e7b3aa87f..772bdbd31d 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/GenericPolicyDAOImpl.java
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/GenericPolicyDAOImpl.java
@@ -48,24 +48,27 @@ public class GenericPolicyDAOImpl extends AbstractPolicyDAOImpl {
String name = request.getName();
String type = request.getType();
String status = request.getStatus();
+ String deviceType = request.getDeviceType();
int statusValue = 0;
boolean isPolicyNameProvided = false;
boolean isPolicyTypeProvided = false;
boolean isPolicyStatusProvided = false;
+ boolean isDeviceTypeProvided = false;
try {
conn = this.getConnection();
String query = "SELECT * " +
- "FROM DM_POLICY " +
- "WHERE TENANT_ID = ? ";
+ "FROM DM_POLICY P " +
+ "LEFT JOIN DM_PROFILE PR ON P.PROFILE_ID = PR.ID " +
+ "WHERE P.TENANT_ID = ? ";
if (name != null && !name.isEmpty()) {
- query += "AND NAME LIKE ? " ;
+ query += "AND P.NAME LIKE ? " ;
isPolicyNameProvided = true;
}
if (type != null && !type.isEmpty()) {
- query += "AND POLICY_TYPE = ? " ;
+ query += "AND P.POLICY_TYPE = ? " ;
isPolicyTypeProvided = true;
}
@@ -73,11 +76,16 @@ public class GenericPolicyDAOImpl extends AbstractPolicyDAOImpl {
if (status.equals("ACTIVE")) {
statusValue = 1;
}
- query += "AND ACTIVE = ? " ;
+ query += "AND P.ACTIVE = ? " ;
isPolicyStatusProvided = true;
}
- query += "ORDER BY ID LIMIT ?,?";
+ if (deviceType != null && !deviceType.isEmpty()) {
+ query += "AND PR.DEVICE_TYPE = ? ";
+ isDeviceTypeProvided = true;
+ }
+
+ query += "ORDER BY P.ID LIMIT ?,?";
try (PreparedStatement stmt = conn.prepareStatement(query)) {
int paramIdx = 1;
@@ -91,10 +99,13 @@ public class GenericPolicyDAOImpl extends AbstractPolicyDAOImpl {
if (isPolicyStatusProvided) {
stmt.setInt(paramIdx++, statusValue);
}
+ if (isDeviceTypeProvided) {
+ stmt.setString(paramIdx++, deviceType);
+ }
stmt.setInt(paramIdx++, request.getStartIndex());
stmt.setInt(paramIdx++, request.getRowCount());
try (ResultSet resultSet = stmt.executeQuery()) {
- return this.extractPolicyListFromDbResult(resultSet, tenantId);
+ return this.extractPolicyListWithProfileFromDbResult(resultSet, tenantId);
}
}
} catch (SQLException e) {
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/OraclePolicyDAOImpl.java b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/OraclePolicyDAOImpl.java
index 19642f162e..bbc6d1a57a 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/OraclePolicyDAOImpl.java
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/OraclePolicyDAOImpl.java
@@ -47,24 +47,27 @@ public class OraclePolicyDAOImpl extends AbstractPolicyDAOImpl {
String name = request.getName();
String type = request.getType();
String status = request.getStatus();
+ String deviceType = request.getDeviceType();
int statusValue = 0;
boolean isPolicyNameProvided = false;
boolean isPolicyTypeProvided = false;
boolean isPolicyStatusProvided = false;
+ boolean isDeviceTypeProvided = false;
try {
conn = this.getConnection();
String query = "SELECT * " +
- "FROM DM_POLICY " +
- "WHERE TENANT_ID = ? ";
+ "FROM DM_POLICY P " +
+ "LEFT JOIN DM_PROFILE PR ON P.PROFILE_ID = PR.ID " +
+ "WHERE P.TENANT_ID = ? ";
if (name != null && !name.isEmpty()) {
- query += "AND NAME LIKE ? " ;
+ query += "AND P.NAME LIKE ? " ;
isPolicyNameProvided = true;
}
if (type != null && !type.isEmpty()) {
- query += "AND POLICY_TYPE = ? " ;
+ query += "AND P.POLICY_TYPE = ? " ;
isPolicyTypeProvided = true;
}
@@ -72,11 +75,16 @@ public class OraclePolicyDAOImpl extends AbstractPolicyDAOImpl {
if (status.equals("ACTIVE")) {
statusValue = 1;
}
- query += "AND ACTIVE = ? " ;
+ query += "AND P.ACTIVE = ? " ;
isPolicyStatusProvided = true;
}
- query += "ORDER BY ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
+ if (deviceType != null && !deviceType.isEmpty()) {
+ query += "AND PR.DEVICE_TYPE = ? ";
+ isDeviceTypeProvided = true;
+ }
+
+ query += "ORDER BY P.ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
try (PreparedStatement stmt = conn.prepareStatement(query)) {
int paramIdx = 1;
@@ -90,10 +98,13 @@ public class OraclePolicyDAOImpl extends AbstractPolicyDAOImpl {
if (isPolicyStatusProvided) {
stmt.setInt(paramIdx++, statusValue);
}
+ if (isDeviceTypeProvided) {
+ stmt.setString(paramIdx++, deviceType);
+ }
stmt.setInt(paramIdx++, request.getStartIndex());
stmt.setInt(paramIdx++, request.getRowCount());
try (ResultSet resultSet = stmt.executeQuery()) {
- return this.extractPolicyListFromDbResult(resultSet, tenantId);
+ return this.extractPolicyListWithProfileFromDbResult(resultSet, tenantId);
}
}
} catch (SQLException e) {
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/PostgreSQLPolicyDAOImpl.java b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/PostgreSQLPolicyDAOImpl.java
index 26b211e6e2..01baefd69a 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/PostgreSQLPolicyDAOImpl.java
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/PostgreSQLPolicyDAOImpl.java
@@ -47,24 +47,27 @@ public class PostgreSQLPolicyDAOImpl extends AbstractPolicyDAOImpl {
String name = request.getName();
String type = request.getType();
String status = request.getStatus();
+ String deviceType = request.getDeviceType();
int statusValue = 0;
boolean isPolicyNameProvided = false;
boolean isPolicyTypeProvided = false;
boolean isPolicyStatusProvided = false;
+ boolean isDeviceTypeProvided = false;
try {
conn = this.getConnection();
String query = "SELECT * " +
- "FROM DM_POLICY " +
- "WHERE TENANT_ID = ? ";
+ "FROM DM_POLICY P " +
+ "LEFT JOIN DM_PROFILE PR ON P.PROFILE_ID = PR.ID " +
+ "WHERE P.TENANT_ID = ? ";
if (name != null && !name.isEmpty()) {
- query += "AND NAME LIKE ? " ;
+ query += "AND P.NAME LIKE ? " ;
isPolicyNameProvided = true;
}
if (type != null && !type.isEmpty()) {
- query += "AND POLICY_TYPE = ? " ;
+ query += "AND P.POLICY_TYPE = ? " ;
isPolicyTypeProvided = true;
}
@@ -72,11 +75,16 @@ public class PostgreSQLPolicyDAOImpl extends AbstractPolicyDAOImpl {
if (status.equals("ACTIVE")) {
statusValue = 1;
}
- query += "AND ACTIVE = ? " ;
+ query += "AND P.ACTIVE = ? " ;
isPolicyStatusProvided = true;
}
- query += "ORDER BY ID LIMIT ? OFFSET ?";
+ if (deviceType != null && !deviceType.isEmpty()) {
+ query += "AND PR.DEVICE_TYPE = ?";
+ isDeviceTypeProvided = true;
+ }
+
+ query += "ORDER BY P.ID LIMIT ? OFFSET ?";
try (PreparedStatement stmt = conn.prepareStatement(query)) {
int paramIdx = 1;
@@ -90,10 +98,13 @@ public class PostgreSQLPolicyDAOImpl extends AbstractPolicyDAOImpl {
if (isPolicyStatusProvided) {
stmt.setInt(paramIdx++, statusValue);
}
+ if (isDeviceTypeProvided) {
+ stmt.setString(paramIdx++, deviceType);
+ }
stmt.setInt(paramIdx++, request.getStartIndex());
stmt.setInt(paramIdx++, request.getRowCount());
try (ResultSet resultSet = stmt.executeQuery()) {
- return this.extractPolicyListFromDbResult(resultSet, tenantId);
+ return this.extractPolicyListWithProfileFromDbResult(resultSet, tenantId);
}
}
} catch (SQLException e) {
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/SQLServerPolicyDAOImpl.java b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/SQLServerPolicyDAOImpl.java
index 6e4df5cb15..5f59491ca5 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/SQLServerPolicyDAOImpl.java
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/dao/impl/policy/SQLServerPolicyDAOImpl.java
@@ -47,24 +47,27 @@ public class SQLServerPolicyDAOImpl extends AbstractPolicyDAOImpl {
String name = request.getName();
String type = request.getType();
String status = request.getStatus();
+ String deviceType = request.getDeviceType();
int statusValue = 0;
boolean isPolicyNameProvided = false;
boolean isPolicyTypeProvided = false;
boolean isPolicyStatusProvided = false;
+ boolean isDeviceTypeProvided = false;
try {
conn = this.getConnection();
String query = "SELECT * " +
- "FROM DM_POLICY " +
- "WHERE TENANT_ID = ? ";
+ "FROM DM_POLICY P " +
+ "LEFT JOIN DM_PROFILE PR ON P.PROFILE_ID = PR.ID " +
+ "WHERE P.TENANT_ID = ? ";
if (name != null && !name.isEmpty()) {
- query += "AND NAME LIKE ? " ;
+ query += "AND P.NAME LIKE ? " ;
isPolicyNameProvided = true;
}
if (type != null && !type.isEmpty()) {
- query += "AND POLICY_TYPE = ? " ;
+ query += "AND P.POLICY_TYPE = ? " ;
isPolicyTypeProvided = true;
}
@@ -72,11 +75,16 @@ public class SQLServerPolicyDAOImpl extends AbstractPolicyDAOImpl {
if (status.equals("ACTIVE")) {
statusValue = 1;
}
- query += "AND ACTIVE = ? " ;
+ query += "AND P.ACTIVE = ? " ;
isPolicyStatusProvided = true;
}
- query += "ORDER BY ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
+ if (deviceType != null && !deviceType.isEmpty()) {
+ query += "AND PR.DEVICE_TYPE = ?";
+ isDeviceTypeProvided = true;
+ }
+
+ query += "ORDER BY P.ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
try (PreparedStatement stmt = conn.prepareStatement(query)) {
int paramIdx = 1;
@@ -90,10 +98,13 @@ public class SQLServerPolicyDAOImpl extends AbstractPolicyDAOImpl {
if (isPolicyStatusProvided) {
stmt.setInt(paramIdx++, statusValue);
}
+ if (isDeviceTypeProvided) {
+ stmt.setString(paramIdx++, deviceType);
+ }
stmt.setInt(paramIdx++, request.getStartIndex());
stmt.setInt(paramIdx++, request.getRowCount());
try (ResultSet resultSet = stmt.executeQuery()) {
- return this.extractPolicyListFromDbResult(resultSet, tenantId);
+ return this.extractPolicyListWithProfileFromDbResult(resultSet, tenantId);
}
}
} catch (SQLException e) {
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/mgt/impl/PolicyManagerImpl.java b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/mgt/impl/PolicyManagerImpl.java
index 63eb01b200..38d9a7f007 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/mgt/impl/PolicyManagerImpl.java
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/mgt/impl/PolicyManagerImpl.java
@@ -1530,6 +1530,8 @@ public class PolicyManagerImpl implements PolicyManager {
for (Policy policy : policyList) {
policy.setRoles(policyDAO.getPolicyAppliedRoles(policy.getId()));
policy.setUsers(policyDAO.getPolicyAppliedUsers(policy.getId()));
+ policy.setProfile(profileDAO.getProfile(policy.getId()));
+
List deviceGroupWrappers = policyDAO.getDeviceGroupsOfPolicy(policy.getId());
if (!deviceGroupWrappers.isEmpty()) {
deviceGroupWrappers = this.getDeviceGroupNames(deviceGroupWrappers);
@@ -1549,6 +1551,10 @@ public class PolicyManagerImpl implements PolicyManager {
String msg = "Error occurred while getting device groups.";
log.error(msg, e);
throw new PolicyManagementException(msg, e);
+ } catch (ProfileManagerDAOException e) {
+ String msg = "Error occurred while getting profiles.";
+ log.error(msg, e);
+ throw new PolicyManagementException(msg, e);
} finally {
PolicyManagementDAOFactory.closeConnection();
}
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/util/PolicyManagerUtil.java b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/util/PolicyManagerUtil.java
index 6d7b220f45..1b900e03d9 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/util/PolicyManagerUtil.java
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/main/java/io/entgra/device/mgt/core/policy/mgt/core/util/PolicyManagerUtil.java
@@ -59,7 +59,7 @@ import java.io.ObjectOutputStream;
import java.util.*;
public class PolicyManagerUtil {
-
+ private static final Gson gson = new Gson();
public static final String GENERAL_CONFIG_RESOURCE_PATH = "general";
public static final String MONITORING_FREQUENCY = "notifierFrequency";
private static final Log log = LogFactory.getLog(PolicyManagerUtil.class);
@@ -352,6 +352,15 @@ public class PolicyManagerUtil {
return data;
}
+ /**
+ * Using for converting policy objects into Json strings
+ * @param obj
+ * @return
+ */
+ public static String convertToJson(Object obj) {
+ return gson.toJson(obj);
+ }
+
public static boolean convertIntToBoolean(int x) {
return x == 1;
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql
index 00971ca5d8..57d0c487cc 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql
@@ -376,7 +376,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED (
DEVICE_ID INT NOT NULL ,
ENROLMENT_ID INT NOT NULL,
POLICY_ID INT NOT NULL ,
- POLICY_CONTENT BLOB NULL ,
+ POLICY_CONTENT TEXT NULL ,
TENANT_ID INT NOT NULL,
APPLIED TINYINT NULL ,
CREATED_TIME TIMESTAMP NULL ,
diff --git a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/test/resources/sql/CreateMySqlTestDB.sql b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/test/resources/sql/CreateMySqlTestDB.sql
index be7bf40b7d..feab172d0e 100644
--- a/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/test/resources/sql/CreateMySqlTestDB.sql
+++ b/components/policy-mgt/io.entgra.device.mgt.core.policy.mgt.core/src/test/resources/sql/CreateMySqlTestDB.sql
@@ -161,7 +161,7 @@ CREATE TABLE IF NOT EXISTS `WSO2CDM`.`DM_DEVICE_POLICY_APPLIED` (
`ID` INT(11) NOT NULL AUTO_INCREMENT,
`DEVICE_ID` INT(11) NOT NULL,
`POLICY_ID` INT(11) NOT NULL,
- `POLICY_CONTENT` BLOB NULL DEFAULT NULL,
+ `POLICY_CONTENT` TEXT NULL DEFAULT NULL,
`APPLIED` TINYINT(1) NULL DEFAULT NULL,
`CREATED_TIME` TIMESTAMP NULL DEFAULT NULL,
`UPDATED_TIME` TIMESTAMP NULL DEFAULT NULL,
diff --git a/components/policy-mgt/pom.xml b/components/policy-mgt/pom.xml
index 4e32dfc9dc..9a71cf5e02 100644
--- a/components/policy-mgt/pom.xml
+++ b/components/policy-mgt/pom.xml
@@ -23,7 +23,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt/pom.xml b/components/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt/pom.xml
index 409511f1dd..e5b1f62ab0 100644
--- a/components/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt/pom.xml
+++ b/components/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt/pom.xml
@@ -20,7 +20,7 @@
io.entgra.device.mgt.core
subtype-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql b/components/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql
index 92151968d3..2d30cda428 100644
--- a/components/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql
+++ b/components/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql
@@ -301,7 +301,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED (
DEVICE_ID INT NOT NULL ,
ENROLMENT_ID INT NOT NULL,
POLICY_ID INT NOT NULL ,
- POLICY_CONTENT BLOB NULL ,
+ POLICY_CONTENT TEXT NULL ,
TENANT_ID INT NOT NULL,
APPLIED TINYINT NULL ,
CREATED_TIME TIMESTAMP NULL ,
diff --git a/components/subtype-mgt/pom.xml b/components/subtype-mgt/pom.xml
index 85fb31d80d..93d932ffd5 100644
--- a/components/subtype-mgt/pom.xml
+++ b/components/subtype-mgt/pom.xml
@@ -20,7 +20,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/task-mgt/pom.xml b/components/task-mgt/pom.xml
index efd3eea629..4dcddb3f4d 100755
--- a/components/task-mgt/pom.xml
+++ b/components/task-mgt/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/task-mgt/task-manager/io.entgra.device.mgt.core.task.mgt.common/pom.xml b/components/task-mgt/task-manager/io.entgra.device.mgt.core.task.mgt.common/pom.xml
index f81099336e..55e5bfe514 100755
--- a/components/task-mgt/task-manager/io.entgra.device.mgt.core.task.mgt.common/pom.xml
+++ b/components/task-mgt/task-manager/io.entgra.device.mgt.core.task.mgt.common/pom.xml
@@ -20,7 +20,7 @@
task-manager
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/task-mgt/task-manager/io.entgra.device.mgt.core.task.mgt.core/pom.xml b/components/task-mgt/task-manager/io.entgra.device.mgt.core.task.mgt.core/pom.xml
index 4cb496a2fd..4453fe56b0 100755
--- a/components/task-mgt/task-manager/io.entgra.device.mgt.core.task.mgt.core/pom.xml
+++ b/components/task-mgt/task-manager/io.entgra.device.mgt.core.task.mgt.core/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
task-manager
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/task-mgt/task-manager/pom.xml b/components/task-mgt/task-manager/pom.xml
index b7b2a2b024..74669ea7ff 100755
--- a/components/task-mgt/task-manager/pom.xml
+++ b/components/task-mgt/task-manager/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
task-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/task-mgt/task-watcher/io.entgra.device.mgt.core.task.mgt.watcher/pom.xml b/components/task-mgt/task-watcher/io.entgra.device.mgt.core.task.mgt.watcher/pom.xml
index c7daa12312..c6b067fe7e 100755
--- a/components/task-mgt/task-watcher/io.entgra.device.mgt.core.task.mgt.watcher/pom.xml
+++ b/components/task-mgt/task-watcher/io.entgra.device.mgt.core.task.mgt.watcher/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
task-watcher
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/task-mgt/task-watcher/pom.xml b/components/task-mgt/task-watcher/pom.xml
index 0522067f1c..80868f4069 100755
--- a/components/task-mgt/task-watcher/pom.xml
+++ b/components/task-mgt/task-watcher/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
task-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.common/pom.xml b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.common/pom.xml
index 17ddbd418d..84ead4c004 100644
--- a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.common/pom.xml
+++ b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.common/pom.xml
@@ -20,7 +20,7 @@
tenant-mgt
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.common/src/main/java/io/entgra/device/mgt/core/tenant/mgt/common/spi/TenantManagerAdminService.java b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.common/src/main/java/io/entgra/device/mgt/core/tenant/mgt/common/spi/TenantManagerAdminService.java
new file mode 100644
index 0000000000..0b93e7ca5b
--- /dev/null
+++ b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.common/src/main/java/io/entgra/device/mgt/core/tenant/mgt/common/spi/TenantManagerAdminService.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2018 - 2024, 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.tenant.mgt.common.spi;
+
+import io.entgra.device.mgt.core.tenant.mgt.common.exception.TenantMgtException;
+
+public interface TenantManagerAdminService {
+
+ void deleteTenant(String tenantDomain) throws TenantMgtException;
+ int getTenantId(String tenantDomain) throws TenantMgtException;
+}
diff --git a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/pom.xml b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/pom.xml
index 1a0c3553a1..2a6ee17e3e 100644
--- a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/pom.xml
+++ b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/pom.xml
@@ -20,7 +20,7 @@
tenant-mgt
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
@@ -74,6 +74,7 @@
org.wso2.carbon.stratos.common.beans;version="[4.9,5)",
org.wso2.carbon.stratos.common.exception;version="[4.9,5)",
org.wso2.carbon.stratos.common.listeners;version="[4.9,5)",
+ org.wso2.carbon.tenant.mgt.services,
org.wso2.carbon.user.api;version="[1.0,2)",
org.wso2.carbon.user.core.service;version="[4.8,5)"
diff --git a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/TenantManager.java b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/TenantManager.java
index ac3ee406f9..ea26974300 100644
--- a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/TenantManager.java
+++ b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/TenantManager.java
@@ -57,4 +57,5 @@ public interface TenantManager {
* @throws TenantMgtException Throws when deleting Tenant related device data
*/
void deleteTenantDeviceData(int tenantId) throws TenantMgtException;
+
}
diff --git a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/impl/TenantManagerAdminServiceImpl.java b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/impl/TenantManagerAdminServiceImpl.java
new file mode 100644
index 0000000000..b96535da25
--- /dev/null
+++ b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/impl/TenantManagerAdminServiceImpl.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2018 - 2024, 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.tenant.mgt.core.impl;
+
+import io.entgra.device.mgt.core.tenant.mgt.common.exception.TenantMgtException;
+import io.entgra.device.mgt.core.tenant.mgt.common.spi.TenantManagerAdminService;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.stratos.common.exception.StratosException;
+import org.wso2.carbon.tenant.mgt.services.TenantMgtAdminService;
+import org.wso2.carbon.user.api.UserStoreException;
+
+
+public class TenantManagerAdminServiceImpl implements TenantManagerAdminService {
+
+ private static final Log log = LogFactory.getLog(TenantManagerAdminServiceImpl.class);
+
+ private static final TenantMgtAdminService tenantMgtAdminService = new TenantMgtAdminService();
+
+ @Override
+ public void deleteTenant(String tenantDomain) throws TenantMgtException {
+ try {
+ tenantMgtAdminService.deleteTenant(tenantDomain);
+ } catch (StratosException | UserStoreException e) {
+ String msg = "Error occurred while deleting tenant of domain: " + tenantDomain;
+ log.error(msg, e);
+ throw new TenantMgtException(msg, e);
+ }
+ }
+
+ @Override
+ public int getTenantId(String tenantDomain) throws TenantMgtException {
+ try {
+ return tenantMgtAdminService.getTenant(tenantDomain).getTenantId();
+ } catch (Exception e){
+ String msg = "Error occurred while getting tenant ID of domain: " + tenantDomain;
+ log.error(msg, e);
+ throw new TenantMgtException(msg, e);
+ }
+ }
+}
diff --git a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/internal/TenantMgtServiceComponent.java b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/internal/TenantMgtServiceComponent.java
index b7aac786a4..9bb4f9067c 100644
--- a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/internal/TenantMgtServiceComponent.java
+++ b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/internal/TenantMgtServiceComponent.java
@@ -22,8 +22,10 @@ import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.WhiteLabelManage
import io.entgra.device.mgt.core.device.mgt.core.metadata.mgt.WhiteLabelManagementServiceImpl;
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.DeviceStatusManagementService;
import io.entgra.device.mgt.core.device.mgt.core.metadata.mgt.DeviceStatusManagementServiceImpl;
+import io.entgra.device.mgt.core.tenant.mgt.common.spi.TenantManagerAdminService;
import io.entgra.device.mgt.core.tenant.mgt.common.spi.TenantManagerService;
import io.entgra.device.mgt.core.tenant.mgt.core.TenantManager;
+import io.entgra.device.mgt.core.tenant.mgt.core.impl.TenantManagerAdminServiceImpl;
import io.entgra.device.mgt.core.tenant.mgt.core.impl.TenantManagerImpl;
import io.entgra.device.mgt.core.tenant.mgt.core.impl.TenantManagerServiceImpl;
import io.entgra.device.mgt.core.tenant.mgt.core.listener.DeviceMgtTenantListener;
@@ -48,11 +50,14 @@ public class TenantMgtServiceComponent {
try {
TenantManagerService tenantManagerService = new TenantManagerServiceImpl();
componentContext.getBundleContext().
- registerService(TenantManagerServiceImpl.class.getName(), tenantManagerService, null);
+ registerService(TenantManagerService.class.getName(), tenantManagerService, null);
+ TenantManagerAdminService tenantManagerAdminService = new TenantManagerAdminServiceImpl();
+ componentContext.getBundleContext().
+ registerService(TenantManagerAdminService.class.getName(), tenantManagerAdminService, null);
TenantManager tenantManager = new TenantManagerImpl();
TenantMgtDataHolder.getInstance().setTenantManager(tenantManager);
WhiteLabelManagementService whiteLabelManagementService = new WhiteLabelManagementServiceImpl();
- componentContext.getBundleContext().registerService(WhiteLabelManagementServiceImpl.class.getName(),
+ componentContext.getBundleContext().registerService(WhiteLabelManagementService.class.getName(),
whiteLabelManagementService, null);
TenantMgtDataHolder.getInstance().setWhiteLabelManagementService(whiteLabelManagementService);
DeviceStatusManagementService deviceStatusManagementService = new DeviceStatusManagementServiceImpl();
diff --git a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/listener/DeviceMgtTenantListener.java b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/listener/DeviceMgtTenantListener.java
index b6f117f9fa..f73477ff17 100644
--- a/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/listener/DeviceMgtTenantListener.java
+++ b/components/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.core/src/main/java/io/entgra/device/mgt/core/tenant/mgt/core/listener/DeviceMgtTenantListener.java
@@ -88,13 +88,5 @@ public class DeviceMgtTenantListener implements TenantMgtListener {
@Override
public void onPreDelete(int i) throws StratosException {
// Any work to be performed before a tenant is deleted
- TenantManager tenantManager = TenantMgtDataHolder.getInstance().getTenantManager();
- try{
- tenantManager.deleteTenantDeviceData(i);
- tenantManager.deleteTenantApplicationData(i);
- } catch (TenantMgtException e) {
- String msg = "Error occurred while deleting tenant data";
- log.error(msg, e);
- }
}
}
diff --git a/components/tenant-mgt/pom.xml b/components/tenant-mgt/pom.xml
index b99f174c7a..9809326b59 100644
--- a/components/tenant-mgt/pom.xml
+++ b/components/tenant-mgt/pom.xml
@@ -20,7 +20,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/transport-mgt/email-sender/io.entgra.device.mgt.core.transport.mgt.email.sender.core/pom.xml b/components/transport-mgt/email-sender/io.entgra.device.mgt.core.transport.mgt.email.sender.core/pom.xml
index 91b1607f27..5183f5c51c 100644
--- a/components/transport-mgt/email-sender/io.entgra.device.mgt.core.transport.mgt.email.sender.core/pom.xml
+++ b/components/transport-mgt/email-sender/io.entgra.device.mgt.core.transport.mgt.email.sender.core/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
email-sender
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/transport-mgt/email-sender/pom.xml b/components/transport-mgt/email-sender/pom.xml
index e23368ad07..d10ab48e1d 100644
--- a/components/transport-mgt/email-sender/pom.xml
+++ b/components/transport-mgt/email-sender/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
transport-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/transport-mgt/pom.xml b/components/transport-mgt/pom.xml
index 21e45095f2..e29e8c3274 100644
--- a/components/transport-mgt/pom.xml
+++ b/components/transport-mgt/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.api/pom.xml b/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.api/pom.xml
index e803ff0b8c..f6951a522d 100644
--- a/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.api/pom.xml
+++ b/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.api/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
sms-handler
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.common/pom.xml b/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.common/pom.xml
index a7765a4767..728144a829 100644
--- a/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.common/pom.xml
+++ b/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.common/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
sms-handler
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.core/pom.xml b/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.core/pom.xml
index f5ba545fae..715e2d890d 100644
--- a/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.core/pom.xml
+++ b/components/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.core/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
sms-handler
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/transport-mgt/sms-handler/pom.xml b/components/transport-mgt/sms-handler/pom.xml
index c98060e315..681392afd7 100644
--- a/components/transport-mgt/sms-handler/pom.xml
+++ b/components/transport-mgt/sms-handler/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
transport-mgt
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/ui-request-interceptor/io.entgra.device.mgt.core.ui.request.interceptor/pom.xml b/components/ui-request-interceptor/io.entgra.device.mgt.core.ui.request.interceptor/pom.xml
index be87bafb04..525a9ba35b 100644
--- a/components/ui-request-interceptor/io.entgra.device.mgt.core.ui.request.interceptor/pom.xml
+++ b/components/ui-request-interceptor/io.entgra.device.mgt.core.ui.request.interceptor/pom.xml
@@ -21,7 +21,7 @@
ui-request-interceptor
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
4.0.0
diff --git a/components/ui-request-interceptor/pom.xml b/components/ui-request-interceptor/pom.xml
index 5c5a6a94d7..802f76f4bc 100644
--- a/components/ui-request-interceptor/pom.xml
+++ b/components/ui-request-interceptor/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/components/webapp-authenticator-framework/io.entgra.device.mgt.core.webapp.authenticator.framework/pom.xml b/components/webapp-authenticator-framework/io.entgra.device.mgt.core.webapp.authenticator.framework/pom.xml
index a30735c3dd..4d7c87271d 100644
--- a/components/webapp-authenticator-framework/io.entgra.device.mgt.core.webapp.authenticator.framework/pom.xml
+++ b/components/webapp-authenticator-framework/io.entgra.device.mgt.core.webapp.authenticator.framework/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
webapp-authenticator-framework
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/components/webapp-authenticator-framework/pom.xml b/components/webapp-authenticator-framework/pom.xml
index 8b0d6f627f..4ba7dca291 100644
--- a/components/webapp-authenticator-framework/pom.xml
+++ b/components/webapp-authenticator-framework/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.api.feature/pom.xml b/features/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.api.feature/pom.xml
index 0d318113f8..8cea3b9b89 100644
--- a/features/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.api.feature/pom.xml
+++ b/features/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.api.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
grafana-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.server.feature/pom.xml b/features/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.server.feature/pom.xml
index 934abff9d0..e79958d80e 100644
--- a/features/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.server.feature/pom.xml
+++ b/features/analytics-mgt/grafana-mgt/io.entgra.device.mgt.core.analytics.mgt.grafana.proxy.server.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
grafana-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/analytics-mgt/grafana-mgt/pom.xml b/features/analytics-mgt/grafana-mgt/pom.xml
index edc2e90404..c1295a1fc9 100644
--- a/features/analytics-mgt/grafana-mgt/pom.xml
+++ b/features/analytics-mgt/grafana-mgt/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
analytics-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/analytics-mgt/pom.xml b/features/analytics-mgt/pom.xml
index a0506a21f9..99c71ee31d 100644
--- a/features/analytics-mgt/pom.xml
+++ b/features/analytics-mgt/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.analytics.extension.feature/pom.xml b/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.analytics.extension.feature/pom.xml
index c84899be20..065e0c3df1 100644
--- a/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.analytics.extension.feature/pom.xml
+++ b/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.analytics.extension.feature/pom.xml
@@ -20,7 +20,7 @@
io.entgra.device.mgt.core
apimgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension.feature/pom.xml b/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension.feature/pom.xml
index 027d4b5596..c10e7b6e33 100644
--- a/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension.feature/pom.xml
+++ b/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension.feature/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
apimgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api.feature/pom.xml b/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api.feature/pom.xml
index 41808f5783..b2b4679369 100644
--- a/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api.feature/pom.xml
+++ b/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
apimgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension.feature/pom.xml b/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension.feature/pom.xml
index e845c2b512..5001f30788 100644
--- a/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension.feature/pom.xml
+++ b/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.keymgt.extension.feature/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
apimgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.webapp.publisher.feature/pom.xml b/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.webapp.publisher.feature/pom.xml
index fa3dbdb70d..7be7e583c7 100644
--- a/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.webapp.publisher.feature/pom.xml
+++ b/features/apimgt-extensions/io.entgra.device.mgt.core.apimgt.webapp.publisher.feature/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
apimgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/apimgt-extensions/pom.xml b/features/apimgt-extensions/pom.xml
index 72c4e31fca..08abd72977 100644
--- a/features/apimgt-extensions/pom.xml
+++ b/features/apimgt-extensions/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/application-mgt/io.entgra.device.mgt.core.application.mgt.server.feature/pom.xml b/features/application-mgt/io.entgra.device.mgt.core.application.mgt.server.feature/pom.xml
index f6854ab813..df58e62610 100644
--- a/features/application-mgt/io.entgra.device.mgt.core.application.mgt.server.feature/pom.xml
+++ b/features/application-mgt/io.entgra.device.mgt.core.application.mgt.server.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
application-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/application-mgt/pom.xml b/features/application-mgt/pom.xml
index c3c0fb268a..7cb9b51ab0 100644
--- a/features/application-mgt/pom.xml
+++ b/features/application-mgt/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/cea-mgt-feature/io.entgra.device.mgt.core.cea.mgt.admin.api.feature/pom.xml b/features/cea-mgt-feature/io.entgra.device.mgt.core.cea.mgt.admin.api.feature/pom.xml
index 3fe28dedd8..71711748f1 100644
--- a/features/cea-mgt-feature/io.entgra.device.mgt.core.cea.mgt.admin.api.feature/pom.xml
+++ b/features/cea-mgt-feature/io.entgra.device.mgt.core.cea.mgt.admin.api.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
cea-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/cea-mgt-feature/io.entgra.device.mgt.core.cea.mgt.server.feature/pom.xml b/features/cea-mgt-feature/io.entgra.device.mgt.core.cea.mgt.server.feature/pom.xml
index ac629006af..c27fc3727a 100644
--- a/features/cea-mgt-feature/io.entgra.device.mgt.core.cea.mgt.server.feature/pom.xml
+++ b/features/cea-mgt-feature/io.entgra.device.mgt.core.cea.mgt.server.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
cea-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/cea-mgt-feature/pom.xml b/features/cea-mgt-feature/pom.xml
index 6c247959bd..e653594725 100644
--- a/features/cea-mgt-feature/pom.xml
+++ b/features/cea-mgt-feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.api.feature/pom.xml b/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.api.feature/pom.xml
index 7ddc2da403..3177f65bef 100644
--- a/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.api.feature/pom.xml
+++ b/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.api.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
certificate-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.cert.admin.api.feature/pom.xml b/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.cert.admin.api.feature/pom.xml
index cbee30beaf..26ae0a20a6 100644
--- a/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.cert.admin.api.feature/pom.xml
+++ b/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.cert.admin.api.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
certificate-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.server.feature/pom.xml b/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.server.feature/pom.xml
index b487f6c331..f60ca9af9e 100644
--- a/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.server.feature/pom.xml
+++ b/features/certificate-mgt/io.entgra.device.mgt.core.certificate.mgt.server.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
certificate-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/certificate-mgt/pom.xml b/features/certificate-mgt/pom.xml
index 4f31a7d13f..5f8089334a 100644
--- a/features/certificate-mgt/pom.xml
+++ b/features/certificate-mgt/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.defaultrole.manager.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.defaultrole.manager.feature/pom.xml
index fdf7222acd..24d4f2f933 100644
--- a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.defaultrole.manager.feature/pom.xml
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.defaultrole.manager.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.api.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.api.feature/pom.xml
index 644192d911..b49fb03251 100644
--- a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.api.feature/pom.xml
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.api.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
4.0.0
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.feature/pom.xml
index ce8f238c49..6ed98297b5 100644
--- a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.feature/pom.xml
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.organization.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.type.deployer.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.type.deployer.feature/pom.xml
index c339dfe238..08d0d0bd83 100644
--- a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.type.deployer.feature/pom.xml
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.device.type.deployer.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.logger.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.logger.feature/pom.xml
index 2f06c15dd0..183c2d85cd 100644
--- a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.logger.feature/pom.xml
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.logger.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm.feature/pom.xml
index 1de7b28acf..b79f1a86cd 100644
--- a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm.feature/pom.xml
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.http.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.http.feature/pom.xml
index 55dca850fe..faa1b27680 100644
--- a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.http.feature/pom.xml
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.http.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml
index e28f4cf536..7bfc870a01 100644
--- a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml
index 0842acdd38..517826db29 100644
--- a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.stateengine.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.stateengine.feature/pom.xml
index f9b2707b19..facdaf5434 100644
--- a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.stateengine.feature/pom.xml
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.stateengine.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.userstore.role.mapper/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.userstore.role.mapper/pom.xml
index c3680bc49c..bb40a31aa9 100644
--- a/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.userstore.role.mapper/pom.xml
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.core.device.mgt.extensions.userstore.role.mapper/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-extensions-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt-extensions/pom.xml b/features/device-mgt-extensions/pom.xml
index 82655f48e0..0f9ec82b6c 100644
--- a/features/device-mgt-extensions/pom.xml
+++ b/features/device-mgt-extensions/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.api.feature/pom.xml b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.api.feature/pom.xml
index 64291d67cd..e8fd104636 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.api.feature/pom.xml
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.api.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/pom.xml b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/pom.xml
index 90ed1e6d6b..e66bdb27a9 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/pom.xml
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/conf/mdm-ui-config.xml b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/conf/mdm-ui-config.xml
index 32dc388789..da4191cff2 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/conf/mdm-ui-config.xml
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/conf/mdm-ui-config.xml
@@ -387,6 +387,10 @@
win:ops:device-info
win:ops:security-info
win:ops:firewall-info
+ win:ops:os-updates-info
+ win:microsoft-store:search
+ win:updates:read
+ win:update:modify
admin:tenant:view
dm:admin:devices:usage:view
and:ops:clear-app
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/conf_templates/templates/repository/conf/cdm-config.xml.j2 b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/conf_templates/templates/repository/conf/cdm-config.xml.j2
index 59e026f679..2d5f7639f8 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/conf_templates/templates/repository/conf/cdm-config.xml.j2
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/conf_templates/templates/repository/conf/cdm-config.xml.j2
@@ -48,6 +48,11 @@
{% endfor %}
{% endif %}
+ {% if device_mgt_conf.push_notification_conf.fcm_server_endpoint is defined %}
+
+ {{device_mgt_conf.push_notification_conf.fcm_server_endpoint}}
+
+ {% endif %}
{% if device_mgt_conf.pull_notification_conf is defined %}
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql
index af229599c6..27713437c9 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql
@@ -304,7 +304,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED (
DEVICE_ID INT NOT NULL ,
ENROLMENT_ID INT NOT NULL,
POLICY_ID INT NOT NULL ,
- POLICY_CONTENT BLOB NULL ,
+ POLICY_CONTENT TEXT NULL ,
TENANT_ID INT NOT NULL,
APPLIED TINYINT NULL ,
CREATED_TIME TIMESTAMP NULL ,
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql
index dc05a39464..f6f3232e13 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql
@@ -369,7 +369,7 @@ IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[D
DEVICE_ID INTEGER NOT NULL ,
ENROLMENT_ID INTEGER NOT NULL,
POLICY_ID INTEGER NOT NULL ,
- POLICY_CONTENT VARBINARY(MAX) NULL ,
+ POLICY_CONTENT TEXT NULL ,
TENANT_ID INTEGER NOT NULL,
APPLIED BIT NULL ,
CREATED_TIME DATETIME2 NULL ,
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql
index cd28fb74f1..4390f6a40d 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql
@@ -355,7 +355,7 @@ CREATE TABLE IF NOT EXISTS DM_USER_POLICY (
DEVICE_ID INT NOT NULL ,
ENROLMENT_ID INT(11) NOT NULL,
POLICY_ID INT NOT NULL ,
- POLICY_CONTENT BLOB NULL ,
+ POLICY_CONTENT TEXT NULL ,
TENANT_ID INT NOT NULL,
APPLIED TINYINT(1) NULL ,
CREATED_TIME TIMESTAMP NULL ,
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql
index e500c55046..d5a442c69e 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql
@@ -509,7 +509,7 @@ CREATE TABLE DM_DEVICE_POLICY_APPLIED (
DEVICE_ID NUMBER(10) NOT NULL ,
ENROLMENT_ID NUMBER(10) NOT NULL,
POLICY_ID NUMBER(10) NOT NULL ,
- POLICY_CONTENT BLOB NULL ,
+ POLICY_CONTENT TEXT NULL ,
TENANT_ID NUMBER(10) NOT NULL,
APPLIED NUMBER(1) DEFAULT 0,
CREATED_TIME TIMESTAMP(0) NULL ,
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql
index c0368f5826..354925efe5 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql
@@ -365,7 +365,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED (
DEVICE_ID INTEGER NOT NULL ,
ENROLMENT_ID INTEGER NOT NULL,
POLICY_ID INTEGER NOT NULL ,
- POLICY_CONTENT BYTEA NULL ,
+ POLICY_CONTENT TEXT NULL ,
TENANT_ID INTEGER NOT NULL,
APPLIED SMALLINT NULL ,
CREATED_TIME TIMESTAMP(0) NULL ,
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions.feature/pom.xml b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions.feature/pom.xml
index 6d4e64f2ac..e525deec41 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions.feature/pom.xml
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.extensions.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.feature/pom.xml b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.feature/pom.xml
index a30ca70414..c463d38ae2 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.feature/pom.xml
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.server.feature/pom.xml b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.server.feature/pom.xml
index aec31e88c1..41e1f569e6 100644
--- a/features/device-mgt/io.entgra.device.mgt.core.device.mgt.server.feature/pom.xml
+++ b/features/device-mgt/io.entgra.device.mgt.core.device.mgt.server.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
device-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt/pom.xml b/features/device-mgt/pom.xml
index 7c1aa08dac..09fda00739 100644
--- a/features/device-mgt/pom.xml
+++ b/features/device-mgt/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/heartbeat-management/io.entgra.device.mgt.core.server.heart.beat.feature/pom.xml b/features/heartbeat-management/io.entgra.device.mgt.core.server.heart.beat.feature/pom.xml
index 85b805e873..3bbad04e46 100644
--- a/features/heartbeat-management/io.entgra.device.mgt.core.server.heart.beat.feature/pom.xml
+++ b/features/heartbeat-management/io.entgra.device.mgt.core.server.heart.beat.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
heart-beat-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/heartbeat-management/pom.xml b/features/heartbeat-management/pom.xml
index 91c7122eeb..03b81d7a05 100644
--- a/features/heartbeat-management/pom.xml
+++ b/features/heartbeat-management/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/jwt-client/io.entgra.device.mgt.core.identity.jwt.client.extension.feature/pom.xml b/features/jwt-client/io.entgra.device.mgt.core.identity.jwt.client.extension.feature/pom.xml
index 38e3474ae8..9bc0751cb7 100644
--- a/features/jwt-client/io.entgra.device.mgt.core.identity.jwt.client.extension.feature/pom.xml
+++ b/features/jwt-client/io.entgra.device.mgt.core.identity.jwt.client.extension.feature/pom.xml
@@ -23,7 +23,7 @@
io.entgra.device.mgt.core
jwt-client-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/jwt-client/pom.xml b/features/jwt-client/pom.xml
index 30d07d1744..88d8c01e51 100644
--- a/features/jwt-client/pom.xml
+++ b/features/jwt-client/pom.xml
@@ -23,7 +23,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/logger/io.entgra.device.mgt.core.notification.logger.feature/pom.xml b/features/logger/io.entgra.device.mgt.core.notification.logger.feature/pom.xml
index f3cd205702..ea7731e54d 100644
--- a/features/logger/io.entgra.device.mgt.core.notification.logger.feature/pom.xml
+++ b/features/logger/io.entgra.device.mgt.core.notification.logger.feature/pom.xml
@@ -23,7 +23,7 @@
io.entgra.device.mgt.core
logger-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/logger/pom.xml b/features/logger/pom.xml
index 87d1e7b273..30bc3656a2 100644
--- a/features/logger/pom.xml
+++ b/features/logger/pom.xml
@@ -23,7 +23,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.core.operation.template.feature/pom.xml b/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.core.operation.template.feature/pom.xml
index 7f76bb69bb..b47182333f 100644
--- a/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.core.operation.template.feature/pom.xml
+++ b/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.core.operation.template.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
operation-template-mgt-plugin-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/operation-template-mgt-plugin-feature/pom.xml b/features/operation-template-mgt-plugin-feature/pom.xml
index 0da144fc89..b051642b15 100644
--- a/features/operation-template-mgt-plugin-feature/pom.xml
+++ b/features/operation-template-mgt-plugin-feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/policy-mgt/io.entgra.device.mgt.core.policy.mgt.server.feature/pom.xml b/features/policy-mgt/io.entgra.device.mgt.core.policy.mgt.server.feature/pom.xml
index 52aee12d13..64ba1d3453 100644
--- a/features/policy-mgt/io.entgra.device.mgt.core.policy.mgt.server.feature/pom.xml
+++ b/features/policy-mgt/io.entgra.device.mgt.core.policy.mgt.server.feature/pom.xml
@@ -23,7 +23,7 @@
io.entgra.device.mgt.core
policy-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/policy-mgt/pom.xml b/features/policy-mgt/pom.xml
index 61786428cb..86e3bdd7a0 100644
--- a/features/policy-mgt/pom.xml
+++ b/features/policy-mgt/pom.xml
@@ -23,7 +23,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt.feature/pom.xml b/features/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt.feature/pom.xml
index be9f32da5e..7f62b79a5b 100644
--- a/features/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt.feature/pom.xml
+++ b/features/subtype-mgt/io.entgra.device.mgt.core.subtype.mgt.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../../pom.xml
diff --git a/features/subtype-mgt/pom.xml b/features/subtype-mgt/pom.xml
index 7d5247fa69..3f2761de13 100644
--- a/features/subtype-mgt/pom.xml
+++ b/features/subtype-mgt/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/task-mgt/io.entgra.device.mgt.core.task.mgt.feature/pom.xml b/features/task-mgt/io.entgra.device.mgt.core.task.mgt.feature/pom.xml
index 88aa995b66..ccd88dafab 100755
--- a/features/task-mgt/io.entgra.device.mgt.core.task.mgt.feature/pom.xml
+++ b/features/task-mgt/io.entgra.device.mgt.core.task.mgt.feature/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../../pom.xml
diff --git a/features/task-mgt/pom.xml b/features/task-mgt/pom.xml
index c0e3e5a94a..79421326e8 100755
--- a/features/task-mgt/pom.xml
+++ b/features/task-mgt/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.server.feature/pom.xml b/features/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.server.feature/pom.xml
index a5a639fc55..072143efae 100644
--- a/features/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.server.feature/pom.xml
+++ b/features/tenant-mgt/io.entgra.device.mgt.core.tenant.mgt.server.feature/pom.xml
@@ -20,7 +20,7 @@
tenant-mgt-feature
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/tenant-mgt/pom.xml b/features/tenant-mgt/pom.xml
index 30a21a4f4e..9f31cdf3bb 100644
--- a/features/tenant-mgt/pom.xml
+++ b/features/tenant-mgt/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/transport-mgt/email-sender/io.entgra.device.mgt.core.email.sender.feature/pom.xml b/features/transport-mgt/email-sender/io.entgra.device.mgt.core.email.sender.feature/pom.xml
index f7329756f5..3005bbddb6 100644
--- a/features/transport-mgt/email-sender/io.entgra.device.mgt.core.email.sender.feature/pom.xml
+++ b/features/transport-mgt/email-sender/io.entgra.device.mgt.core.email.sender.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
email-sender-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/transport-mgt/email-sender/pom.xml b/features/transport-mgt/email-sender/pom.xml
index c091bc1622..0d940809f1 100644
--- a/features/transport-mgt/email-sender/pom.xml
+++ b/features/transport-mgt/email-sender/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
transport-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/transport-mgt/pom.xml b/features/transport-mgt/pom.xml
index fc36c9c5c1..e214bf2074 100644
--- a/features/transport-mgt/pom.xml
+++ b/features/transport-mgt/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.api.feature/pom.xml b/features/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.api.feature/pom.xml
index 3f255c77ca..cd18d91382 100644
--- a/features/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.api.feature/pom.xml
+++ b/features/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.api.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
sms-handler-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.server.feature/pom.xml b/features/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.server.feature/pom.xml
index 9069e788f0..da9fca2cf3 100644
--- a/features/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.server.feature/pom.xml
+++ b/features/transport-mgt/sms-handler/io.entgra.device.mgt.core.transport.mgt.sms.handler.server.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
sms-handler-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/transport-mgt/sms-handler/pom.xml b/features/transport-mgt/sms-handler/pom.xml
index 8da131ed0e..8c6c403359 100644
--- a/features/transport-mgt/sms-handler/pom.xml
+++ b/features/transport-mgt/sms-handler/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
transport-mgt-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/ui-request-interceptor/io.entgra.device.mgt.core.ui.request.interceptor.feature/pom.xml b/features/ui-request-interceptor/io.entgra.device.mgt.core.ui.request.interceptor.feature/pom.xml
index 84f61d3c9b..2ac85ad511 100644
--- a/features/ui-request-interceptor/io.entgra.device.mgt.core.ui.request.interceptor.feature/pom.xml
+++ b/features/ui-request-interceptor/io.entgra.device.mgt.core.ui.request.interceptor.feature/pom.xml
@@ -21,7 +21,7 @@
ui-request-interceptor-feature
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
4.0.0
diff --git a/features/ui-request-interceptor/pom.xml b/features/ui-request-interceptor/pom.xml
index 984702a61f..16fc3fa962 100644
--- a/features/ui-request-interceptor/pom.xml
+++ b/features/ui-request-interceptor/pom.xml
@@ -21,7 +21,7 @@
io.entgra.device.mgt.core.parent
io.entgra.device.mgt.core
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/features/webapp-authenticator-framework/io.entgra.device.mgt.core.webapp.authenticator.framework.server.feature/pom.xml b/features/webapp-authenticator-framework/io.entgra.device.mgt.core.webapp.authenticator.framework.server.feature/pom.xml
index dca00b5170..f73dc3fc2b 100644
--- a/features/webapp-authenticator-framework/io.entgra.device.mgt.core.webapp.authenticator.framework.server.feature/pom.xml
+++ b/features/webapp-authenticator-framework/io.entgra.device.mgt.core.webapp.authenticator.framework.server.feature/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
webapp-authenticator-framework-feature
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../pom.xml
diff --git a/features/webapp-authenticator-framework/pom.xml b/features/webapp-authenticator-framework/pom.xml
index d3defc8bd2..335d3366de 100644
--- a/features/webapp-authenticator-framework/pom.xml
+++ b/features/webapp-authenticator-framework/pom.xml
@@ -22,7 +22,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
../../pom.xml
diff --git a/pom.xml b/pom.xml
index c4968cc901..40cdc9e87f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
io.entgra.device.mgt.core
io.entgra.device.mgt.core.parent
pom
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
WSO2 Carbon - Device Management - Parent
https://entgra.io
WSO2 Connected Device Manager Components
@@ -1833,6 +1833,51 @@
mockito-inline
${mokito.version}
+
+ com.google.auth
+ google-auth-library-oauth2-http
+ ${com.google.auth.library.auth2.http.version}
+
+
+ org.wso2.orbit.com.google.http-client
+ google-http-client
+ ${com.google.http.client.version}
+
+
+ org.wso2.orbit.com.google.auth-library-oauth2-http
+ google-auth-library-oauth2-http
+ ${com.google.auth.library.wso2.auth2.http.version}
+
+
+ org.wso2.orbit.io.opencensus
+ opencensus
+ ${io.opencensus.version}
+
+
+ io.opencensus
+ opencensus-api
+ ${io.opencensus.api.version}
+
+
+ io.opencensus
+ opencensus-contrib-http-util
+ ${io.opencensus.contrib.http.util.version}
+
+
+ org.wso2.orbit.io.grpc
+ grpc-context
+ ${io.grpc.context.version}
+
+
+ com.google.http-client
+ google-http-client-gson
+ ${com.google.http.client.gson.version}
+
+
+ com.google.guava
+ failureaccess
+ ${com.google.failureaccess.version}
+
org.mockito
mockito-core
@@ -2089,7 +2134,7 @@
1.2.11-wso2v25
- 5.1.1-SNAPSHOT
+ 5.2.1-SNAPSHOT
4.9.2
@@ -2250,6 +2295,16 @@
2.1.214.wso2v1
1.1.3
+ 1.20.0.wso2v1
+ 1.20.0
+ 1.41.2.wso2v2
+ 1.0.1
+ 1.43.3
+ 1.27.2.wso2v1
+ 0.30.0.wso2v1
+ 0.30.0
+ 0.30.0
+
1.11.2
2.3.1.wso2v1
2.4