Fix policy bundle repeating issue

scopeMapAPILayer
commit c8c18c4f3d

@ -44,6 +44,8 @@ import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementExcept
import org.wso2.carbon.device.mgt.common.policy.mgt.Policy;
import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation;
import org.wso2.carbon.device.mgt.core.operation.mgt.OperationMgtConstants;
import org.wso2.carbon.device.mgt.core.operation.mgt.PolicyOperation;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.policy.mgt.common.PolicyAdministratorPoint;
import org.wso2.carbon.policy.mgt.common.PolicyEvaluationException;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
@ -96,6 +98,7 @@ public class PolicyEnforcementDelegatorImpl implements PolicyEnforcementDelegato
*/
if (devicePolicy == null || devicePolicy.getId() != policy.getId() || updatedPolicyIds.contains
(policy.getId())) {
this.markPreviousPolicyBundlesRepeated(device);
this.addPolicyRevokeOperation(deviceIdentifiers);
this.addPolicyOperation(deviceIdentifiers, policy);
}
@ -202,4 +205,29 @@ public class PolicyEnforcementDelegatorImpl implements PolicyEnforcementDelegato
throw new PolicyDelegationException(msg, e);
}
}
/**
* Update the previous pending policy operation's status as REPEATED
* @param device Device
* @throws PolicyDelegationException throws when getting pending operations
*/
public void markPreviousPolicyBundlesRepeated(Device device) throws PolicyDelegationException {
DeviceManagementProviderService deviceManagerService = PolicyManagementDataHolder.getInstance().
getDeviceManagementService();
try {
List<? extends Operation> operations = deviceManagerService.getPendingOperations(device);
for(Operation operation : operations) {
String operationCode = operation.getCode();
if(PolicyOperation.POLICY_OPERATION_CODE.equals(operationCode) ||
OperationMgtConstants.OperationCodes.POLICY_REVOKE.equals(operationCode)) {
operation.setStatus(Operation.Status.REPEATED);
deviceManagerService.updateOperation(device, operation);
}
}
} catch (OperationManagementException e) {
String msg = "Error occurred while retrieving pending operations of device id "+device.getId();
log.error(msg, e);
throw new PolicyDelegationException(msg, e);
}
}
}

Loading…
Cancel
Save