diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ReviewManager.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ReviewManager.java index 409bfe289aa..306b424494b 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ReviewManager.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ReviewManager.java @@ -84,5 +84,5 @@ public interface ReviewManager { * @return {@link Review}updated review * @throws ReviewManagementException Exceptions of the review management */ - Rating getRating(String appReleaseUuuid) throws ReviewManagementException; + Rating getRating(String appReleaseUuuid) throws ReviewManagementException, ApplicationManagementException; } \ No newline at end of file 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 48dff00135f..1a21c601832 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 @@ -39,6 +39,9 @@ public interface SubscriptionManager { ApplicationInstallResponse installApplicationForDevices(String applicationUUID, List deviceList) throws ApplicationManagementException; + ApplicationInstallResponse addBulkApInstallation(String applicationUUID, List subscriberList, + String subType) throws ApplicationManagementException; + /** * To install an application to given list of users. * @param applicationUUID ID of the application to install diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java index 5d6106a1131..8c0a41ac6f4 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java @@ -49,6 +49,7 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.TreeMap; +import java.util.stream.IntStream; /** * This class is the default implementation for the Managing the reviews. @@ -467,26 +468,29 @@ public class ReviewManagerImpl implements ReviewManager { } } - @Override public Rating getRating(String appReleaseUuuid) throws ReviewManagementException { + @Override public Rating getRating(String appReleaseUuuid) throws ReviewManagementException, ApplicationManagementException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); try { ConnectionManagerUtil.openDBConnection(); Rating rating = this.applicationReleaseDAO.getRating(appReleaseUuuid, tenantId); if (rating == null) { - throw new ReviewManagementException( + throw new NotFoundException( "Couldn't find rating for application release UUID: " + appReleaseUuuid + ". Please check the existence of the application release"); } List ratingValues = this.reviewDAO.getAllRatingValues(appReleaseUuuid, tenantId); TreeMap ratingVariety = new TreeMap<>(); - for (Integer ratingVal : ratingValues) { + ratingValues.forEach(ratingVal -> { if (ratingVariety.containsKey(ratingVal)) { ratingVariety.replace(ratingVal, ratingVariety.get(ratingVal) + 1); } else { ratingVariety.put(ratingVal, 1); } - } + }); + IntStream.rangeClosed(1, Constants.MAX_RATING).filter(i -> !ratingVariety.containsKey(i)) + .forEach(i -> ratingVariety.put(i, 0)); + rating.setRatingVariety(ratingVariety); return rating; } catch (ApplicationManagementDAOException e) { 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 265d9023a9f..2288f30310c 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 @@ -87,20 +87,26 @@ public class SubscriptionManagerImpl implements SubscriptionManager { this.applicationDAO = ApplicationManagementDAOFactory.getApplicationDAO(); } - @Override - public ApplicationInstallResponse installApplicationForDevices(String applicationUUID, + @Override public ApplicationInstallResponse installApplicationForDevices(String applicationUUID, List deviceIdentifiers) throws ApplicationManagementException { if (log.isDebugEnabled()) { log.debug("Install application which has UUID: " + applicationUUID + " to " + deviceIdentifiers.size() + "devices."); } + if (deviceIdentifiers.isEmpty()){ + String msg = "In order to install application release which has UUID " + applicationUUID + ", you should " + + "provide list of device identifiers. But found an empty list of identifiers."; + log.error(msg); + throw new BadRequestException(msg); + } DeviceManagementProviderService deviceManagementProviderService = HelperUtil .getDeviceManagementProviderService(); ApplicationDTO applicationDTO = getApplicationDTO(applicationUUID); DeviceIDHolder filteredDeviceHolder = filterDeviceIdentifiers(applicationDTO, deviceIdentifiers); - List errorDeviceIdentifierList = filteredDeviceHolder.getErrorDeviceIdList(); + List errorDeviceIdentifiers = filteredDeviceHolder.getErrorDeviceIdList(); List filteredDeviceObjs = new ArrayList<>(); + //getting device objects by using device identifiers for (DeviceIdentifier deviceIdentifier : filteredDeviceHolder.getValidDeviceIDList()) { try { Device device = deviceManagementProviderService.getDevice(deviceIdentifier, false); @@ -108,7 +114,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager { String msg = "Couldn't found an device for device identifier " + deviceIdentifier.getId() + " and device type: " + deviceIdentifier.getType(); log.warn(msg); - errorDeviceIdentifierList.add(deviceIdentifier); + errorDeviceIdentifiers.add(deviceIdentifier); } else { filteredDeviceObjs.add(device); } @@ -116,86 +122,111 @@ public class SubscriptionManagerImpl implements SubscriptionManager { String msg = "Error occurred when getting device data for device identifier " + deviceIdentifier.getId() + " and device type " + deviceIdentifier.getType(); log.warn(msg); - errorDeviceIdentifierList.add(deviceIdentifier); + errorDeviceIdentifiers.add(deviceIdentifier); throw new ApplicationManagementException(msg, e); } } - SubscribingDeviceIdHolder subscribingDeviceIdHolder = getSubscribingDeviceIdHolder(filteredDeviceObjs); - if (subscribingDeviceIdHolder.getCompatibleDevices().isEmpty()){ - ApplicationInstallResponse applicationInstallResponse = new ApplicationInstallResponse(); - applicationInstallResponse.setAlreadyInstalledDevices(subscribingDeviceIdHolder.getInstalledDevices()); - applicationInstallResponse.setErrorDevices(errorDeviceIdentifierList); + if (!ApplicationType.WEB_CLIP.toString().equals(applicationDTO.getType())) { + DeviceType deviceType = APIUtil.getDeviceTypeData(applicationDTO.getDeviceTypeId()); + String deviceTypeName = deviceType.getName(); + ApplicationInstallResponse applicationInstallResponse = installToDevices(deviceTypeName, filteredDeviceObjs, + applicationDTO, SubsciptionType.DEVICE.toString(), null); + applicationInstallResponse.setErrorDevices(errorDeviceIdentifiers); + return applicationInstallResponse; + } else { + //todo improve thos + ApplicationInstallResponse applicationInstallResponse = installToDevices(null, filteredDeviceObjs, + applicationDTO, SubsciptionType.DEVICE.toString(), null); + applicationInstallResponse.setErrorDevices(errorDeviceIdentifiers); return applicationInstallResponse; } - Activity activity = installToDevices(applicationDTO, - new ArrayList<>(subscribingDeviceIdHolder.getCompatibleDevices().keySet()), - deviceIdentifiers.get(0).getType()); - - ApplicationInstallResponse applicationInstallResponse = new ApplicationInstallResponse(); - applicationInstallResponse.setActivity(activity); - applicationInstallResponse.setAlreadyInstalledDevices(subscribingDeviceIdHolder.getInstalledDevices()); - applicationInstallResponse.setErrorDevices(errorDeviceIdentifierList); - - addSubscriptions(applicationDTO.getApplicationReleaseDTOs().get(0).getId(), activity, - subscribingDeviceIdHolder.getCompatibleDevices(), - new ArrayList<>(subscribingDeviceIdHolder.getDeviceSubscriptions().keySet()), null, - SubsciptionType.DEVICE.toString()); - return applicationInstallResponse; } @Override - public ApplicationInstallResponse installApplicationForUsers(String applicationUUID, - List userList) throws ApplicationManagementException { + public ApplicationInstallResponse addBulkApInstallation(String applicationUUID, List subscriberList, + String subType) throws ApplicationManagementException { if (log.isDebugEnabled()) { - log.debug("Install application release which has UUID " + applicationUUID + " to " + userList.size() + log.debug("Install application release which has UUID " + applicationUUID + " to " + subscriberList.size() + " users."); } - //todo check valid user list - throw BadRequest exception - ApplicationDTO applicationDTO = getApplicationDTO(applicationUUID); - DeviceType appDeviceType = APIUtil.getDeviceTypeData(applicationDTO.getDeviceTypeId()); - Map compatibleDevices = new HashMap<>(); - List installedDeviceIdentifiers = new ArrayList<>(); - Map deviceSubscriptions = new HashMap<>(); + try { + if (subscriberList.isEmpty()) { + String msg = "In order to install application release which has UUID " + applicationUUID + ", you shou" + + "ld provide list of subscribers. But found an empty list of users."; + log.error(msg); + throw new BadRequestException(msg); + } + if (SubsciptionType.USER.toString().equals(subType) && !SubsciptionType.ROLE.toString().equals(subType) + && SubsciptionType.GROUP.toString().equals(subType)) { + String msg = "Found invalid subscription type to install application release witch has UUID: " + + applicationUUID + ". Subscription type is " + subType; + log.error(msg); + throw new BadRequestException(msg); + } - for (String user : userList) { - try { - List userDevices = HelperUtil.getDeviceManagementProviderService().getDevicesOfUser(user); - List filteredDevices = new ArrayList<>(); + ApplicationDTO applicationDTO = getApplicationDTO(applicationUUID); + DeviceManagementProviderService deviceManagementProviderService = HelperUtil + .getDeviceManagementProviderService(); + GroupManagementProviderService groupManagementProviderService = HelperUtil + .getGroupManagementProviderService(); + List filteredDevices = new ArrayList<>(); + List subscriberDevices = new ArrayList<>(); + for (String subscriber : subscriberList) { + if (SubsciptionType.USER.toString().equals(subType)) { + subscriberDevices.addAll(deviceManagementProviderService.getDevicesOfUser(subscriber)); + } else if (SubsciptionType.ROLE.toString().equals(subType)) { + subscriberDevices.addAll(deviceManagementProviderService.getAllDevicesOfRole(subscriber)); + } else if (SubsciptionType.GROUP.toString().equals(subType)) { + subscriberDevices.addAll(groupManagementProviderService.getAllDevicesOfGroup(subscriber)); + } + } - //todo improve for web clips - for (Device device : userDevices) { - if (appDeviceType.getName().equals(device.getType())) { + if (!ApplicationType.WEB_CLIP.toString().equals(applicationDTO.getType())) { + DeviceType deviceType = APIUtil.getDeviceTypeData(applicationDTO.getDeviceTypeId()); + String deviceTypeName = deviceType.getName(); + for (Device device : subscriberDevices) { + if (deviceTypeName.equals(device.getType())) { filteredDevices.add(device); } } - - SubscribingDeviceIdHolder subscribingDeviceIdHolder = getSubscribingDeviceIdHolder(filteredDevices); - compatibleDevices.putAll(subscribingDeviceIdHolder.getCompatibleDevices()); - deviceSubscriptions.putAll(subscribingDeviceIdHolder.getDeviceSubscriptions()); - installedDeviceIdentifiers.addAll(subscribingDeviceIdHolder.getInstalledDevices()); - } catch (DeviceManagementException e) { - String msg = "Error occurred when extracting the device list of user[" + user + "]."; - log.error(msg); - throw new ApplicationManagementException(msg, e); + return installToDevices(deviceTypeName, filteredDevices, applicationDTO, subType, subscriberList); + } else { + //todo improve this + return installToDevices(null, subscriberDevices, applicationDTO, subType, subscriberList); } + } catch (DeviceManagementException e) { + String msg = "Error occurred while getting devices of given users or given roles."; + log.error(msg); + throw new ApplicationManagementException(msg, e); + } catch (GroupManagementException e) { + String msg = "Error occurred while getting devices of given groups"; + log.error(msg); + throw new ApplicationManagementException(msg, e); } + } + + private ApplicationInstallResponse installToDevices(String deviceType, List devices, + ApplicationDTO applicationDTO, String subType, List subscribers) + throws ApplicationManagementException { - if (compatibleDevices.keySet().isEmpty()){ + SubscribingDeviceIdHolder subscribingDeviceIdHolder = getSubscribingDeviceIdHolder(devices); + if (subscribingDeviceIdHolder.getCompatibleDevices().isEmpty()) { ApplicationInstallResponse applicationInstallResponse = new ApplicationInstallResponse(); - applicationInstallResponse.setAlreadyInstalledDevices(installedDeviceIdentifiers); + applicationInstallResponse.setAlreadyInstalledDevices(subscribingDeviceIdHolder.getInstalledDevices()); return applicationInstallResponse; } - Activity activity = installToDevices(applicationDTO, new ArrayList<>(compatibleDevices.keySet()), - appDeviceType.getName()); + Activity activity = addAppInstallOperationToDevices(applicationDTO, + new ArrayList<>(subscribingDeviceIdHolder.getCompatibleDevices().keySet()), deviceType); ApplicationInstallResponse applicationInstallResponse = new ApplicationInstallResponse(); applicationInstallResponse.setActivity(activity); - applicationInstallResponse.setAlreadyInstalledDevices(installedDeviceIdentifiers); + applicationInstallResponse.setAlreadyInstalledDevices(subscribingDeviceIdHolder.getInstalledDevices()); - addSubscriptions(applicationDTO.getApplicationReleaseDTOs().get(0).getId(), activity, compatibleDevices, - new ArrayList<>(deviceSubscriptions.keySet()), userList, SubsciptionType.USER.toString()); + addSubscriptions(applicationDTO.getApplicationReleaseDTOs().get(0).getId(), activity, + subscribingDeviceIdHolder.getCompatibleDevices(), + new ArrayList<>(subscribingDeviceIdHolder.getDeviceSubscriptions().keySet()), subscribers, subType); return applicationInstallResponse; } @@ -261,28 +292,34 @@ public class SubscriptionManagerImpl implements SubscriptionManager { private DeviceIDHolder filterDeviceIdentifiers(ApplicationDTO applicationDTO, List deviceIdentifiers) throws ApplicationManagementException { - DeviceType deviceType = null; List errorDeviceIdList = new ArrayList<>(); List validDeviceIDList = new ArrayList<>(); if (!ApplicationType.WEB_CLIP.toString().equals(applicationDTO.getType())) { - deviceType = APIUtil.getDeviceTypeData(applicationDTO.getDeviceTypeId()); - } - - for (DeviceIdentifier deviceIdentifier : deviceIdentifiers) { - if (StringUtils.isEmpty(deviceIdentifier.getId()) || StringUtils.isEmpty(deviceIdentifier.getType())) { - log.warn("Found a device identifier which has either empty identity of the device or empty device " - + "type. Hence ignoring the device identifier. "); - continue; + DeviceType deviceType = APIUtil.getDeviceTypeData(applicationDTO.getDeviceTypeId()); + for (DeviceIdentifier deviceIdentifier : deviceIdentifiers) { + if (StringUtils.isEmpty(deviceIdentifier.getId()) || StringUtils.isEmpty(deviceIdentifier.getType())) { + log.warn("Found a device identifier which has either empty identity of the device or empty device " + + "type. Hence ignoring the device identifier. "); + continue; + } + if (!deviceType.getName().equals(deviceIdentifier.getType())) { + String msg = + "Found a device identifier which is not matched with the application device Type. Application " + + "device type is " + deviceType.getName() + " and the identifier of which has a " + + "different device type is " + deviceIdentifier.getId(); + log.warn(msg); + errorDeviceIdList.add(deviceIdentifier); + } else { + validDeviceIDList.add(deviceIdentifier); + } } - if (!ApplicationType.WEB_CLIP.toString().equals(applicationDTO.getType()) && deviceType != null - && !deviceType.getName().equals(deviceIdentifier.getType())) { - String msg = - "Found a device identifier which is not matched with the application device Type. Application " - + "device type is " + deviceType.getName() + " and the identifier of which has a " - + "different device type is " + deviceIdentifier.getId(); - log.warn(msg); - errorDeviceIdList.add(deviceIdentifier); - } else { + } else { + for (DeviceIdentifier deviceIdentifier : deviceIdentifiers) { + if (StringUtils.isEmpty(deviceIdentifier.getId()) || StringUtils.isEmpty(deviceIdentifier.getType())) { + log.warn("Found a device identifier which has either empty identity of the device or empty device " + + "type. Hence ignoring the device identifier. "); + continue; + } validDeviceIDList.add(deviceIdentifier); } } @@ -318,6 +355,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager { subscriptionDAO.subscribeUserToApplication(tenantId, subscriber, subscribers, applicationReleaseId); } + //todo add for other subscription types + List deviceIds = new ArrayList<>(); List activityStatuses = activity.getActivityStatus(); for (ActivityStatus status : activityStatuses) { @@ -380,6 +419,62 @@ public class SubscriptionManagerImpl implements SubscriptionManager { } + //todo remove below methods + + @Override public ApplicationInstallResponse installApplicationForUsers(String applicationUUID, + List userList) throws ApplicationManagementException { + if (log.isDebugEnabled()) { + log.debug("Install application release which has UUID " + applicationUUID + " to " + userList.size() + + " users."); + } + + //todo check valid user list - throw BadRequest exception + ApplicationDTO applicationDTO = getApplicationDTO(applicationUUID); + DeviceType appDeviceType = APIUtil.getDeviceTypeData(applicationDTO.getDeviceTypeId()); + Map compatibleDevices = new HashMap<>(); + List installedDeviceIdentifiers = new ArrayList<>(); + Map deviceSubscriptions = new HashMap<>(); + + for (String user : userList) { + try { + List userDevices = HelperUtil.getDeviceManagementProviderService().getDevicesOfUser(user); + List filteredDevices = new ArrayList<>(); + + //todo improve for web clips + for (Device device : userDevices) { + if (appDeviceType.getName().equals(device.getType())) { + filteredDevices.add(device); + } + } + + SubscribingDeviceIdHolder subscribingDeviceIdHolder = getSubscribingDeviceIdHolder(filteredDevices); + compatibleDevices.putAll(subscribingDeviceIdHolder.getCompatibleDevices()); + deviceSubscriptions.putAll(subscribingDeviceIdHolder.getDeviceSubscriptions()); + installedDeviceIdentifiers.addAll(subscribingDeviceIdHolder.getInstalledDevices()); + } catch (DeviceManagementException e) { + String msg = "Error occurred when extracting the device list of user[" + user + "]."; + log.error(msg); + throw new ApplicationManagementException(msg, e); + } + } + + if (compatibleDevices.keySet().isEmpty()) { + ApplicationInstallResponse applicationInstallResponse = new ApplicationInstallResponse(); + applicationInstallResponse.setAlreadyInstalledDevices(installedDeviceIdentifiers); + return applicationInstallResponse; + } + Activity activity = addAppInstallOperationToDevices(applicationDTO, new ArrayList<>(compatibleDevices.keySet()), + appDeviceType.getName()); + + ApplicationInstallResponse applicationInstallResponse = new ApplicationInstallResponse(); + applicationInstallResponse.setActivity(activity); + applicationInstallResponse.setAlreadyInstalledDevices(installedDeviceIdentifiers); + + addSubscriptions(applicationDTO.getApplicationReleaseDTOs().get(0).getId(), activity, compatibleDevices, + new ArrayList<>(deviceSubscriptions.keySet()), userList, SubsciptionType.USER.toString()); + return applicationInstallResponse; + } + //todo not implemented below code properly @Override public ApplicationInstallResponseTmp installApplicationForRoles(String applicationUUID, @@ -476,8 +571,8 @@ public class SubscriptionManagerImpl implements SubscriptionManager { return null; } - private Activity installToDevices(ApplicationDTO application, List deviceIdentifierList, - String deviceType) throws ApplicationManagementException { + private Activity addAppInstallOperationToDevices(ApplicationDTO application, + List deviceIdentifierList, String deviceType) throws ApplicationManagementException { DeviceManagementProviderService deviceManagementProviderService = HelperUtil .getDeviceManagementProviderService(); try { diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/Constants.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/Constants.java index 4c705094a51..cbe0692336f 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/Constants.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/Constants.java @@ -65,4 +65,6 @@ public class Constants { public static final String RELEASE_ARTIFACT = "artifact"; public static final int REVIEW_PARENT_ID = -1; + + public static final int MAX_RATING = 5; } 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/ReviewManagementAPI.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/ReviewManagementAPI.java index 2428af42838..1776364de33 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/ReviewManagementAPI.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/ReviewManagementAPI.java @@ -364,6 +364,10 @@ public interface ReviewManagementAPI { message = "OK. \n Successfully retrieved ratings.", response = List.class, responseContainer = "List"), + @ApiResponse( + code = 404, + message = "Not Found. \n No Application release found for application release UUID.", + response = ErrorResponse.class), @ApiResponse( code = 500, message = "Internal Server Error. \n Error occurred while getting ratings", 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 39f23456539..53e84b37699 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 @@ -128,6 +128,48 @@ public interface SubscriptionManagementAPI { @Valid List deviceIdentifiers ); + @POST + @Path("/install/{uuid}/{subType}") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @ApiOperation( + consumes = MediaType.APPLICATION_JSON, + produces = MediaType.APPLICATION_JSON, + httpMethod = "POST", + value = "Install an application for subscription type.", + notes = "This will install an application to a given subscription type and this is bulk app installation.", + tags = "Subscription Management", + extensions = { + @Extension(properties = { + @ExtensionProperty(name = SCOPE, value = "perm:app:subscription:install") + }) + } + ) + @ApiResponses( + value = { + + }) + Response addBulkAppInstalltion( + @ApiParam( + name = "uuid", + value = "The application release UUID", + required = true + ) + @PathParam("uuid") String uuid, + @ApiParam( + name = "subType", + value = "Subscription type of the app installing operation.", + required = true + ) + @PathParam("subType") String subType, + @ApiParam( + name = "subscribers", + value = "Subscriber list of the application release.", + required = true + ) + @Valid List subscribers + ); + @POST @Path("/install/{uuid}/devices") @Produces(MediaType.APPLICATION_JSON) @@ -402,238 +444,4 @@ public interface SubscriptionManagementAPI { ) @Valid List groups ); - - - - - - - - - -// ---------------------------------------------- - - @POST - @Path("/install-application") - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - produces = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Install an application", - notes = "This will install an application to a given list of devices", - tags = "Subscription Management", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = SCOPE, value = "perm:subscription:install") - }) - } - ) - @ApiResponses( - value = { - @ApiResponse( - code = 200, - message = "OK. \n Successfully sent the install application operation.", - response = ApplicationInstallResponseTmp.class - ), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the application is already installed." - ), - @ApiResponse( - code = 404, - message = "Not Found. \n ApplicationDTO cannot be found to install." - ), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n Error occurred while installing the application." - ) - }) - Response installApplication( - @ApiParam( - name = "installationDetails", - value = "The application ID and list of devices/users/roles", - required = true - ) - @Valid InstallationDetails installationDetails); - - @POST - @Path("/enterprise-install-application") - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - produces = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Install an application to the devices belong to an enterprise entity", - notes = "This will install an application to a given list of groups/users/roles", - tags = "Subscription Management", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = SCOPE, value = "perm:subscription:install") - }) - } - ) - @ApiResponses( - value = { - @ApiResponse( - code = 200, - message = "OK. \n Successfully sent the install application operation.", - response = ApplicationInstallResponseTmp.class - ), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the application is already installed." - ), - @ApiResponse( - code = 404, - message = "Not Found. \n ApplicationDTO cannot be found to install." - ), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n Error occurred while installing the application." - ) - }) - Response enterpriseInstallApplication( - @ApiParam( - name = "enterpriseInstallationDetails", - value = "The application ID and list of devices/users/roles", - required = true) - @Valid EnterpriseInstallationDetails enterpriseInstallationDetails); - - @POST - @Path("/uninstall-application") - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - produces = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Uninstall an application", - notes = "This will uninstall an application from given list of devices", - tags = "Subscription Management", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = SCOPE, value = "perm:subscription:uninstall") - }) - } - ) - @ApiResponses( - value = { - @ApiResponse( - code = 200, - message = "OK. \n Successfully uninstalled the application.", - response = ApplicationDTO.class - ), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the application is already uninstalled." - ), - @ApiResponse( - code = 404, - message = "Not Found. \n ApplicationDTO cannot be found to uninstall." - ), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n Error occurred while uninstalling the application." - ) - }) - Response uninstallApplication( - @ApiParam( - name = "installationDetails", - value = "The application ID and list of devices", - required = true) - @Valid InstallationDetails installationDetails); - - @POST - @Path("/enterprise-uninstall-application") - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - produces = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Uninstall an application from the devices belong to an enterprise entity", - notes = "This will uninstall an application from devices belong to given list of groups/users/roles", - tags = "Subscription Management", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = SCOPE, value = "perm:subscription:uninstall") - }) - } - ) - @ApiResponses( - value = { - @ApiResponse( - code = 200, - message = "OK. \n Successfully uninstalled the application.", - response = ApplicationDTO.class - ), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the application is already uninstalled." - ), - @ApiResponse( - code = 404, - message = "Not Found. \n ApplicationDTO cannot be found to uninstall." - ), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n Error occurred while uninstalling the application." - ) - }) - Response enterpriseUninstallApplication( - @ApiParam( - name = "enterpriseInstallationDetails", - value = "The application ID and list of groups/users/roles", - required = true - ) - @Valid EnterpriseInstallationDetails enterpriseInstallationDetails); - - @GET - @Path("/application/{applicationUUID}/device/{deviceId}") - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - produces = MediaType.APPLICATION_JSON, - httpMethod = "GET", - value = "Get an application", - notes = "This will return an application to a given valid token", - tags = "Subscription Management", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = SCOPE, value = "perm:subscription:getApplication") - }) - } - ) - @ApiResponses( - value = { - @ApiResponse( - code = 200, - message = "OK. \n Successfully installed the application.", - response = ApplicationDTO.class - ), - @ApiResponse( - code = 304, - message = "Not Modified. \n " + - "Empty body because the application is already installed." - ), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n Error occurred while fetching the application." - ) - }) - Response getApplication( - @ApiParam( - name = "applicationUUID", - value = "ApplicationDTO ID" - ) - @QueryParam("applicationUUID") String applicationUUID, - @ApiParam( - name = "deviceId", - value = "The device ID" - ) - @QueryParam("deviceId") String deviceId); } 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/ReviewManagementAPIImpl.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/ReviewManagementAPIImpl.java index 8b2d94a0aa3..931de5cd023 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/ReviewManagementAPIImpl.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/ReviewManagementAPIImpl.java @@ -234,8 +234,13 @@ public class ReviewManagementAPIImpl implements ReviewManagementAPI { Rating rating; try { rating = reviewManager.getRating(uuid); - } catch (ReviewManagementException e) { - log.error("Review Management Exception occurs", e); + } catch (NotFoundException e) { + String msg = "Couldn't found an application release for UUID: " + uuid; + log.error(msg, e); + return Response.status(Response.Status.NOT_FOUND).entity(msg).build(); + } catch (ReviewManagementException | ApplicationManagementException e) { + String msg = "Error occured while getting review data for application release UUID: " + uuid; + log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } return Response.status(Response.Status.OK).entity(rating).build(); 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 59ec1bddeef..a009b83fa9f 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 @@ -17,17 +17,13 @@ */ package org.wso2.carbon.device.application.mgt.store.api.services.impl; -import io.swagger.annotations.ApiParam; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.application.mgt.common.ApplicationInstallResponse; -import org.wso2.carbon.device.application.mgt.common.ApplicationInstallResponseTmp; -import org.wso2.carbon.device.application.mgt.common.EnterpriseInstallationDetails; import org.wso2.carbon.device.application.mgt.core.exception.BadRequestException; import org.wso2.carbon.device.application.mgt.core.exception.ForbiddenException; import org.wso2.carbon.device.application.mgt.core.exception.NotFoundException; import org.wso2.carbon.device.application.mgt.store.api.services.SubscriptionManagementAPI; -import org.wso2.carbon.device.application.mgt.common.InstallationDetails; 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.util.APIUtil; @@ -56,12 +52,6 @@ public class SubscriptionManagementAPIImpl implements SubscriptionManagementAPI{ public Response installApplicationForDevices( @PathParam("uuid") String uuid, @Valid List deviceIdentifiers) { - if (deviceIdentifiers.isEmpty()){ - String msg = "In order to install application release which has UUID " + uuid + ", you should provide list " - + "of device identifiers. But found an empty list of identifiers."; - log.error(msg); - return Response.status(Response.Status.BAD_REQUEST).entity(msg).build(); - } try { SubscriptionManager subscriptionManager = APIUtil.getSubscriptionManager(); ApplicationInstallResponse response = subscriptionManager @@ -88,6 +78,41 @@ public class SubscriptionManagementAPIImpl implements SubscriptionManagementAPI{ } } + @Override + @POST + @Path("/install/{uuid}/{subType}") + public Response addBulkAppInstalltion( + @PathParam("uuid") String uuid, + @PathParam("uuid") String subType, + @Valid List subscribers) { + try { + SubscriptionManager subscriptionManager = APIUtil.getSubscriptionManager(); + ApplicationInstallResponse response = subscriptionManager.addBulkApInstallation(uuid, subscribers, subType); + return Response.status(Response.Status.OK).entity(response).build(); + } catch (NotFoundException e) { + String msg = "Couldn't found an application release for UUID: " + uuid + ". Hence, verify the payload"; + log.error(msg); + return Response.status(Response.Status.NOT_FOUND).entity(msg).build(); + } catch (BadRequestException e) { + String msg = "Found invalid payload for installing application which has UUID: " + uuid + + ". Hence verify the payload"; + log.error(msg); + return Response.status(Response.Status.BAD_REQUEST).entity(msg).build(); + } catch (ForbiddenException e) { + String msg = "Application release is not in the installable state. Hence you are not permitted to install " + + "the application."; + log.error(msg); + return Response.status(Response.Status.FORBIDDEN).entity(msg).build(); + } catch (ApplicationManagementException e) { + String msg = "Error occurred while installing the application release which has UUID: " + uuid + + " for user devices"; + log.error(msg); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + //todo remove following unwanted APIs + @Override @POST @Path("/install/{uuid}/users") @@ -182,99 +207,4 @@ public class SubscriptionManagementAPIImpl implements SubscriptionManagementAPI{ } - - - - - - - - @Override - @POST - @Path("/install-application") - public Response installApplication(@ApiParam(name = "installationDetails", value = "ApplicationDTO ID and list of" + - "devices", required = true) @Valid InstallationDetails installationDetails) { - SubscriptionManager subscriptionManager = APIUtil.getSubscriptionManager(); - String applicationUUID = installationDetails.getApplicationUUID(); - - if (applicationUUID.isEmpty() || installationDetails.getDeviceIdentifiers().isEmpty()) { - String msg = "Some or all data in the incoming request is empty. Therefore unable to proceed with the " - + "installation."; - log.error(msg); - return Response.status(Response.Status.BAD_REQUEST).entity(msg).build(); - } - - try { - ApplicationInstallResponse response = subscriptionManager.installApplicationForDevices(applicationUUID, - installationDetails.getDeviceIdentifiers()); - return Response.status(Response.Status.OK).entity(response).build(); - } catch (ApplicationManagementException e) { - return Response.status(Response.Status.INTERNAL_SERVER_ERROR) - .entity("Error occurred while installing the application for devices" + ": " + e.getMessage()) - .build(); - } - } - - @Override - public Response enterpriseInstallApplication(EnterpriseInstallationDetails enterpriseInstallationDetails) { - SubscriptionManager subscriptionManager = APIUtil.getSubscriptionManager(); - String msg; - String applicationUUID = enterpriseInstallationDetails.getApplicationUUID(); - EnterpriseInstallationDetails.EnterpriseEntity enterpriseEntity = enterpriseInstallationDetails.getEntityType(); - List entityValueList = enterpriseInstallationDetails.getEntityValueList(); - ApplicationInstallResponseTmp response = null; - - if (applicationUUID.isEmpty()) { - msg = "ApplicationDTO UUID is empty in the incoming request. Therefore unable to proceed with the " - + "installation."; - log.error(msg); - return Response.status(Response.Status.BAD_REQUEST).entity(msg).build(); - } - - if (enterpriseEntity == null || entityValueList.isEmpty()) { - msg = "Some or all details of the entity is empty in the incoming request. Therefore unable to proceed " - + "with the installation."; - log.error(msg); - return Response.status(Response.Status.BAD_REQUEST).entity(msg).build(); - } - - try { - if (EnterpriseInstallationDetails.EnterpriseEntity.USER.equals(enterpriseEntity)) { -// response = subscriptionManager.installApplicationForUsers(applicationUUID, entityValueList); - } else if (EnterpriseInstallationDetails.EnterpriseEntity.ROLE.equals(enterpriseEntity)) { - response = subscriptionManager.installApplicationForRoles(applicationUUID, entityValueList); - } else if (EnterpriseInstallationDetails.EnterpriseEntity.DEVICE_GROUP.equals(enterpriseEntity)) { - response = subscriptionManager.installApplicationForGroups(applicationUUID, entityValueList); - } else { - msg = "Entity type does not match either USER, ROLE or DEVICE_GROUP. Therefore unable to proceed with " - + "the installation"; - log.error(msg); - return Response.status(Response.Status.BAD_REQUEST).entity(msg).build(); - } - return Response.status(Response.Status.OK).entity(response).build(); - } catch (ApplicationManagementException e) { - return Response.status(Response.Status.INTERNAL_SERVER_ERROR) - .entity("Error occurred while installing the application for devices" + ": " + e.getMessage()) - .build(); - } - } - - @Override - public Response uninstallApplication(@ApiParam(name = "installationDetails", value = "The application ID and list" + - " of devices/users/roles", required = true) @Valid InstallationDetails installationDetails) { - return null; - } - - @Override - public Response enterpriseUninstallApplication( - EnterpriseInstallationDetails enterpriseInstallationDetails) { - return null; - } - - @Override - public Response getApplication(@ApiParam(name = "applicationUUID", value = "ApplicationDTO ID") String - applicationUUID, @ApiParam(name = "deviceId", value = "The device ID") - String deviceId) { - return null; - } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/GroupDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/GroupDAO.java index 2536aa40e27..c00237389cc 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/GroupDAO.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/GroupDAO.java @@ -190,6 +190,8 @@ public interface GroupDAO { List getDevices(int groupId, int startIndex, int rowCount, int tenantId) throws GroupManagementDAOException; + List getAllDevicesOfGroup(String groupName, int tenantId) throws GroupManagementDAOException; + /** * Get all user roles for device group. * diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java index 44b1384c098..dea2912776a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractGroupDAOImpl.java @@ -18,11 +18,13 @@ package org.wso2.carbon.device.mgt.core.dao.impl; +import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.GroupPaginationRequest; import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; import org.wso2.carbon.device.mgt.core.dao.GroupDAO; import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOFactory; +import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil; import org.wso2.carbon.device.mgt.core.dao.util.GroupManagementDAOUtil; import java.sql.Connection; @@ -619,4 +621,53 @@ public abstract class AbstractGroupDAOImpl implements GroupDAO { } } + @Override + public List getAllDevicesOfGroup(String groupName, int tenantId) throws GroupManagementDAOException { + Connection conn; + List devices; + try { + conn = GroupManagementDAOFactory.getConnection(); + String sql = "SELECT " + + "d1.DEVICE_ID, " + + "d1.DESCRIPTION, " + + "d1.NAME AS DEVICE_NAME, " + + "d1.DEVICE_TYPE, " + + "d1.DEVICE_IDENTIFICATION, " + + "e.OWNER, " + + "e.OWNERSHIP, " + + "e.STATUS, " + + "e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, " + + "e.ID AS ENROLMENT_ID " + + "FROM " + + "DM_ENROLMENT e, " + + "(SELECT gd.DEVICE_ID, gd.DESCRIPTION, gd.NAME, gd.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE " + + "FROM " + + "(SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME, d.DEVICE_IDENTIFICATION, d.DEVICE_TYPE_ID " + + "FROM DM_DEVICE d, " + + "(SELECT dgm.DEVICE_ID " + + "FROM DM_DEVICE_GROUP_MAP dgm " + + "WHERE dgm.GROUP_ID = (SELECT ID FROM DM_GROUP WHERE GROUP_NAME = ? )) dgm1 " + + "WHERE d.ID = dgm1.DEVICE_ID AND d.TENANT_ID = ?) gd, DM_DEVICE_TYPE t " + + "WHERE gd.DEVICE_TYPE_ID = t.ID) d1 " + + "WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ?"; + + try (PreparedStatement stmt = conn.prepareStatement(sql)){ + stmt.setString(1, groupName); + stmt.setInt(2, tenantId); + stmt.setInt(3, tenantId); + try (ResultSet rs = stmt.executeQuery() ){ + devices = new ArrayList<>(); + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } + } + } catch (SQLException e) { + throw new GroupManagementDAOException("Error occurred while retrieving information of all registered devices" + + " which belongs to the given group name.", e); + } + return devices; + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderService.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderService.java index 27aa73f3584..731075a07ff 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderService.java @@ -166,6 +166,9 @@ public interface GroupManagementProviderService { */ List getDevices(int groupId, int startIndex, int rowCount) throws GroupManagementException; + List getAllDevicesOfGroup(String groupName) throws GroupManagementException; + + /** * This method is used to retrieve the device count of a given group. * diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceImpl.java index d2e4efdcb0b..df491dc5594 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceImpl.java @@ -619,6 +619,30 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid return devices; } + public List getAllDevicesOfGroup(String groupName) throws GroupManagementException { + + if (log.isDebugEnabled()) { + log.debug("Group devices of group: " + groupName); + } + int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); + List devices; + try { + GroupManagementDAOFactory.openConnection(); + devices = this.groupDAO.getAllDevicesOfGroup(groupName, tenantId); + } catch (GroupManagementDAOException | SQLException e) { + String msg = "Error occurred while getting devices in group."; + log.error(msg, e); + throw new GroupManagementException(msg, e); + } catch (Exception e) { + String msg = "Error occurred in getDevices for group name: " + groupName; + log.error(msg, e); + throw new GroupManagementException(msg, e); + } finally { + GroupManagementDAOFactory.closeConnection(); + } + return devices; + } + /** * {@inheritDoc} */