From 870ff031bb44156cb1ee53d6672596e30aba8824 Mon Sep 17 00:00:00 2001 From: abhishekdesilva Date: Mon, 13 Aug 2018 11:15:06 +0530 Subject: [PATCH] Checking for pending operations before adding an operation --- .../operation/mgt/OperationManagerImpl.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java index d45fb2dead..a3f06b59eb 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java @@ -174,6 +174,35 @@ public class OperationManagerImpl implements OperationManager { OperationManagementDAOFactory.beginTransaction(); org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation operationDto = OperationDAOUtil.convertOperation(operation); + int enrolmentId; + boolean hasExistingTaskOperation; + List pendingDeviceList = new ArrayList<>(); + String operationCode = operationDto.getCode(); + + for (DeviceIdentifier deviceId : authorizedDeviceList) { + Device device = getDevice(deviceId); + enrolmentId = device.getEnrolmentInfo().getId(); + hasExistingTaskOperation = operationDAO.updateTaskOperation(enrolmentId, operationCode); + if (hasExistingTaskOperation) { + pendingDeviceList.add(deviceId); + } + + } + + if(pendingDeviceList.size()>0){ + if (authorizedDeviceList.size() == pendingDeviceList.size()) { + log.info("All the devices contain a pending operation for the Operation Code: "+operationCode); + Activity activity = new Activity(); + //Send the operation statuses only for admin triggered operations + String deviceType = validDeviceIds.get(0).getType(); + activity.setActivityStatus(this.getActivityStatus(deviceValidationResult, deviceAuthorizationResult, + deviceType)); + return activity; + }else{ + authorizedDeviceList.removeAll(pendingDeviceList); + } + } + int operationId = this.lookupOperationDAO(operation).addOperation(operationDto); boolean isScheduledOperation = this.isTaskScheduledOperation(operation); boolean isNotRepeated = false; @@ -188,8 +217,6 @@ public class OperationManagerImpl implements OperationManager { isScheduled = notificationStrategy.getConfig().isScheduled(); } - boolean hasExistingTaskOperation; - int enrolmentId; List devices = new ArrayList<>(); if (org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Control.NO_REPEAT == operationDto. getControl()) { @@ -197,7 +224,6 @@ public class OperationManagerImpl implements OperationManager { } //TODO have to create a sql to load device details from deviceDAO using single query. - String operationCode = operationDto.getCode(); for (DeviceIdentifier deviceId : authorizedDeviceList) { Device device = getDevice(deviceId); devices.add(device);