diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/SubscriptionManager.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/SubscriptionManager.java
index 3c8a1d844e..0382d33516 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/SubscriptionManager.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/SubscriptionManager.java
@@ -92,13 +92,14 @@ public interface SubscriptionManager {
* @param subType subscription type. E.g. DEVICE, USER, ROLE, GROUP
{@see {
* @param action subscription action. E.g. INSTALL/UNINSTALL
{@see {
* @param generic type of the method.
+ * @param requiresUpdatingExternal should an external server be updated. Such as Google EMM APIs
* @return {@link ApplicationInstallResponse}
* @throws ApplicationManagementException ApplicationManagementException if error occurs when subscribing to the
* given application
* @link org.wso2.carbon.device.application.mgt.common.SubscriptionType}}
*/
- void performEntAppSubscription(String applicationUUID, List params, String subType, String action)
- throws ApplicationManagementException;
+ void performEntAppSubscription(String applicationUUID, List params, String subType, String action,
+ boolean requiresUpdatingExternal) throws ApplicationManagementException;
/***
* This method used to get the app id ,device ids and pass them to DM service method.
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/SubscriptionManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/SubscriptionManagerImpl.java
index 51409bef70..d5633471c2 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/SubscriptionManagerImpl.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/SubscriptionManagerImpl.java
@@ -319,7 +319,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
}
@Override
- public void performEntAppSubscription(String applicationUUID, List params, String subType, String action)
+ public void performEntAppSubscription(String applicationUUID, List params, String subType, String action,
+ boolean requiresUpdatingExternal)
throws ApplicationManagementException {
if (log.isDebugEnabled()) {
log.debug("Google Ent app Install operation is received to application which has UUID "
@@ -347,7 +348,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
List categories = getApplicationCategories(applicationDTO.getId());
if (!categories.contains("GooglePlaySyncedApp")) {
- String msg = "This is not google play store synced application. Hence can't perform enteprise app "
+ String msg = "This is not google play store synced application. Hence can't perform enterprise app "
+ "installation.";
log.error(msg);
throw new BadRequestException(msg);
@@ -424,12 +425,14 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
});
}
- //Installing the application
- ApplicationPolicyDTO applicationPolicyDTO = new ApplicationPolicyDTO();
- applicationPolicyDTO.setApplicationDTO(applicationDTO);
- applicationPolicyDTO.setDeviceIdentifierList(deviceIdentifiers);
- applicationPolicyDTO.setAction(action);
- installEnrollmentApplications(applicationPolicyDTO);
+ if (requiresUpdatingExternal) {
+ //Installing the application
+ ApplicationPolicyDTO applicationPolicyDTO = new ApplicationPolicyDTO();
+ applicationPolicyDTO.setApplicationDTO(applicationDTO);
+ applicationPolicyDTO.setDeviceIdentifierList(deviceIdentifiers);
+ applicationPolicyDTO.setAction(action.toUpperCase());
+ installEnrollmentApplications(applicationPolicyDTO);
+ }
appSubscribingDeviceIds = devices.stream().map(Device::getId).collect(Collectors.toList());
Map deviceSubscriptions = getDeviceSubscriptions(appSubscribingDeviceIds,
@@ -972,6 +975,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
Properties properties = new Properties();
properties.put(MDMAppConstants.IOSConstants.IS_PREVENT_BACKUP, true);
properties.put(MDMAppConstants.IOSConstants.IS_REMOVE_APP, true);
+ properties.put(MDMAppConstants.IOSConstants.I_TUNES_ID, application.getPackageName());
app.setProperties(properties);
return MDMIOSOperationUtil.createInstallAppOperation(app);
} else if (SubAction.UNINSTALL.toString().equalsIgnoreCase(action)) {
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/SubscriptionManagementAPI.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/SubscriptionManagementAPI.java
index 897154efc3..f885d79c86 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/SubscriptionManagementAPI.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/SubscriptionManagementAPI.java
@@ -229,7 +229,12 @@ public interface SubscriptionManagementAPI {
name = "timestamp",
value = "Timestamp of scheduled ent. install operation"
)
- @QueryParam("timestamp") String timestamp
+ @QueryParam("timestamp") String timestamp,
+ @ApiParam(
+ name = "requiresUpdatingExternal",
+ value = "Should external system such as Google EMM APIs need to be updated."
+ )
+ @QueryParam("requiresUpdatingExternal") boolean requiresUpdatingExternal
);
@POST
@@ -282,7 +287,12 @@ public interface SubscriptionManagementAPI {
name = "timestamp",
value = "Timestamp of scheduled ent app install operation"
)
- @QueryParam("timestamp") String timestamp
+ @QueryParam("timestamp") String timestamp,
+ @ApiParam(
+ name = "requiresUpdatingExternal",
+ value = "Should external system such as Google EMM APIs need to be updated."
+ )
+ @QueryParam("requiresUpdatingExternal") boolean requiresUpdatingExternal
);
@GET
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/SubscriptionManagementAPIImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/SubscriptionManagementAPIImpl.java
index ba83ba655f..56824c17c6 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/SubscriptionManagementAPIImpl.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/SubscriptionManagementAPIImpl.java
@@ -155,12 +155,14 @@ public class SubscriptionManagementAPIImpl implements SubscriptionManagementAPI{
@PathParam("uuid") String uuid,
@PathParam("action") String action,
@Valid List deviceIdentifiers,
- @QueryParam("timestamp") String timestamp) {
+ @QueryParam("timestamp") String timestamp,
+ @QueryParam("requiresUpdatingExternal") boolean requiresUpdatingExternal) {
try {
if (StringUtils.isEmpty(timestamp)) {
SubscriptionManager subscriptionManager = APIUtil.getSubscriptionManager();
subscriptionManager
- .performEntAppSubscription(uuid, deviceIdentifiers, SubscriptionType.DEVICE.toString(), action);
+ .performEntAppSubscription(uuid, deviceIdentifiers, SubscriptionType.DEVICE.toString(),
+ action, requiresUpdatingExternal);
String msg = "Application release which has UUID " + uuid + " is installed to given valid device "
+ "identifiers.";
return Response.status(Response.Status.OK).entity(msg).build();
@@ -200,11 +202,12 @@ public class SubscriptionManagementAPIImpl implements SubscriptionManagementAPI{
@PathParam("subType") String subType,
@PathParam("action") String action,
@Valid List subscribers,
- @QueryParam("timestamp") String timestamp) {
+ @QueryParam("timestamp") String timestamp,
+ @QueryParam("requiresUpdatingExternal") boolean requiresUpdatingExternal) {
try {
if (StringUtils.isEmpty(timestamp)) {
SubscriptionManager subscriptionManager = APIUtil.getSubscriptionManager();
- subscriptionManager.performEntAppSubscription(uuid, subscribers, subType, action);
+ subscriptionManager.performEntAppSubscription(uuid, subscribers, subType, action, requiresUpdatingExternal);
String msg = "Application release which has UUID " + uuid + " is installed to subscriber's valid device"
+ " identifiers.";
return Response.status(Response.Status.OK).entity(msg).build();
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/util/MDMIOSOperationUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/util/MDMIOSOperationUtil.java
index d769cc6e64..13538ccea8 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/util/MDMIOSOperationUtil.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/util/MDMIOSOperationUtil.java
@@ -67,8 +67,8 @@ public class MDMIOSOperationUtil {
appStoreApplication.setPreventBackupOfAppData((Boolean) application.getProperties().
get(MDMAppConstants.IOSConstants.IS_PREVENT_BACKUP));
appStoreApplication.setBundleId(application.getId());
- appStoreApplication.setiTunesStoreID((Integer) application.getProperties().
- get(MDMAppConstants.IOSConstants.I_TUNES_ID));
+ appStoreApplication.setiTunesStoreID(Integer.parseInt(application.getProperties().
+ get(MDMAppConstants.IOSConstants.I_TUNES_ID).toString()));
operation.setCode(MDMAppConstants.IOSConstants.OPCODE_INSTALL_STORE_APPLICATION);
operation.setType(Operation.Type.COMMAND);
operation.setPayLoad(appStoreApplication.toJSON());