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 6f207e3f4d..fbfa32a2c8 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 @@ -42,10 +42,10 @@ public interface SubscriptionManager { * To install an application to given list of users. * @param applicationUUID Application ID * @param userList User list - * @return Failed User List which the application was unable to install + * @return Failed Device List which the application was unable to install * @throws ApplicationManagementException Application Management Exception */ - List installApplicationForUsers(String applicationUUID, + List installApplicationForUsers(String applicationUUID, List userList) throws ApplicationManagementException; @@ -53,10 +53,10 @@ public interface SubscriptionManager { * To install an application to given list of users. * @param applicationUUID Application ID * @param roleList Role list - * @return Failed Role List which the application was unable to install + * @return Failed Device List which the application was unable to install * @throws ApplicationManagementException Application Management Exception */ - List installApplicationForRoles(String applicationUUID, + List installApplicationForRoles(String applicationUUID, List roleList) throws ApplicationManagementException; 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 07eedb1980..ed103814b2 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 @@ -19,16 +19,21 @@ package org.wso2.carbon.device.application.mgt.core.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.application.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException; import org.wso2.carbon.device.application.mgt.common.services.SubscriptionManager; import org.wso2.carbon.device.application.mgt.core.dao.common.DAOFactory; +import org.wso2.carbon.device.application.mgt.core.internal.DataHolder; +import org.wso2.carbon.device.mgt.common.Device; +import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * This is the default implementation for the Subscription Manager. @@ -36,13 +41,69 @@ import java.util.List; public class SubscriptionManagerImpl implements SubscriptionManager { private static final Log log = LogFactory.getLog(SubscriptionManagerImpl.class); + final private String ANDROID = "android"; + final private String IOS = "ios"; @Override public List installApplicationForDevices(String applicationUUID, List deviceList) throws ApplicationManagementException { log.info("Install application: " + applicationUUID + " to: " + deviceList.size() + " devices."); + List failedDevices = installApplication(applicationUUID, deviceList); + return failedDevices; + } + + @Override + public List installApplicationForUsers(String applicationUUID, List userList) + throws ApplicationManagementException { + log.info("Install application: " + applicationUUID + " to: " + userList.size() + " users."); + List deviceList = new ArrayList<>(); + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + for (String user : userList) { + try { + List devicesOfUser = DeviceManagementDAOFactory.getDeviceDAO().getDevicesOfUser(user, tenantId); + for (Device device : devicesOfUser) { + deviceList.add(new DeviceIdentifier(device + .getDeviceIdentifier(), device.getType())); + } + } catch (DeviceManagementDAOException e) { + log.error("Error when extracting the device list from user[" + user + "].", e); + } + } + return installApplication(applicationUUID, deviceList); + } + + @Override + public List installApplicationForRoles(String applicationUUID, List roleList) + throws ApplicationManagementException { + log.info("Install application: " + applicationUUID + " to: " + roleList.size() + " roles."); + List deviceList = new ArrayList<>(); + for (String role : roleList) { + try { + List devicesOfRole = DataHolder.getInstance().getDeviceManagementService().getAllDevicesOfRole(role); + for (Device device : devicesOfRole) { + deviceList.add(new DeviceIdentifier(device + .getDeviceIdentifier(), device.getType())); + } + } catch (DeviceManagementException e) { + log.error("Error when extracting the device list from role[" + role + "].", e); + } + } + return installApplication(applicationUUID, deviceList); + } + + @Override + public List uninstallApplication(String applicationUUID, + List deviceList) + throws ApplicationManagementException { + return null; + } + + private List installApplication(String applicationUUID, List deviceList) + throws ApplicationManagementException { List failedDeviceList = new ArrayList<>(deviceList); + List androidDevices = new ArrayList<>(); + List iosDevices = new ArrayList<>(); for (DeviceIdentifier device : deviceList) { org.wso2.carbon.device.mgt.common.DeviceIdentifier deviceIdentifier = new org.wso2.carbon.device.mgt .common.DeviceIdentifier(device.getId(), device.getType()); @@ -52,9 +113,13 @@ public class SubscriptionManagerImpl implements SubscriptionManager { log.error("Device with ID: " + device.getId() + " not found to install the application."); } else { if (log.isDebugEnabled()) { - log.debug("Installing application to : " + device.getId()); + log.debug("Prepare application install to : " + device.getId()); + } + if (device.getType().equals(ANDROID)) { + androidDevices.add(deviceIdentifier); + } else { + iosDevices.add(deviceIdentifier); } - //Todo: generating one time download link for the application and put install operation to device. DAOFactory.getSubscriptionDAO().addDeviceApplicationMapping(device.getId(), applicationUUID, false); failedDeviceList.remove(device); } @@ -64,35 +129,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager { DeviceManagementDAOFactory.closeConnection(); } } + //Todo: generating one time download link for the application and put install operation to devices. return failedDeviceList; } - - @Override - public List installApplicationForUsers(String applicationUUID, List userList) - throws ApplicationManagementException { - log.info("Install application: " + applicationUUID + " to: " + userList.size() + " users."); - for (String user : userList) { - //Todo: implementation - //Todo: get the device list and call installApplicationForDevices - } - return userList; - } - - @Override - public List installApplicationForRoles(String applicationUUID, List roleList) - throws ApplicationManagementException { - log.info("Install application: " + applicationUUID + " to: " + roleList.size() + " users."); - for (String role : roleList) { - //Todo: implementation - //Todo: get the device list and call installApplicationForDevices - } - return roleList; - } - - @Override - public List uninstallApplication(String applicationUUID, - List deviceList) - throws ApplicationManagementException { - return null; - } }