Merge branch 'geofencing-feature' into 'corrective-policy'

Add geofence policy transform

See merge request entgra/carbon-device-mgt!644
corrective-policy
Inosh Perara 4 years ago
commit cc8fa5dfb5

@ -68,6 +68,10 @@ public final class PolicyManagementConstants {
public static final String POLICY_FEATURE_CODE = "POLICY_ACTION"; public static final String POLICY_FEATURE_CODE = "POLICY_ACTION";
public static final String POLICY_ACTIONS = "POLICY_ACTIONS"; public static final String POLICY_ACTIONS = "POLICY_ACTIONS";
public static final String CORRECTIVE_POLICY_FEATURE_CODE = "CORRECTIVE_POLICY"; public static final String CORRECTIVE_POLICY_FEATURE_CODE = "CORRECTIVE_POLICY";
public static final String GEOFENCE_POLICY = "GEOFENCE_POLICY";
public static final String EMAIL_CORRECTIVE_ACTION_TYPE = "EMAIL";
public static final String EMAIL_FEATURE_CODE = "EMAIL_ACTION";
public static final Integer EMAIL_ACTION_ID = 450;
/** /**
Caller would reference the constants using PolicyManagementConstants.DEVICE_CONFIG_XML_NAME, Caller would reference the constants using PolicyManagementConstants.DEVICE_CONFIG_XML_NAME,

@ -37,6 +37,10 @@ package org.wso2.carbon.policy.mgt.core.util;
import com.google.gson.Gson; import com.google.gson.Gson;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document; import org.w3c.dom.Document;
@ -45,12 +49,15 @@ import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException; import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException;
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration; import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfigurationManagementService; import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfigurationManagementService;
import org.wso2.carbon.device.mgt.common.geo.service.GeoLocationBasedServiceException;
import org.wso2.carbon.device.mgt.common.geo.service.GeofenceData;
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.common.policy.mgt.CorrectiveAction; import org.wso2.carbon.device.mgt.common.policy.mgt.CorrectiveAction;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager; import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
import org.wso2.carbon.device.mgt.core.config.policy.PolicyConfiguration; import org.wso2.carbon.device.mgt.core.config.policy.PolicyConfiguration;
import org.wso2.carbon.device.mgt.core.config.tenant.PlatformConfigurationManagementServiceImpl; import org.wso2.carbon.device.mgt.core.config.tenant.PlatformConfigurationManagementServiceImpl;
import org.wso2.carbon.device.mgt.core.geo.service.GeoLocationProviderServiceImpl;
import org.wso2.carbon.device.mgt.core.operation.mgt.PolicyOperation; import org.wso2.carbon.device.mgt.core.operation.mgt.PolicyOperation;
import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation; import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation;
import org.wso2.carbon.device.mgt.common.policy.mgt.Policy; import org.wso2.carbon.device.mgt.common.policy.mgt.Policy;
@ -143,7 +150,7 @@ public class PolicyManagerUtil {
List<ProfileFeature> effectiveFeatures = policy.getProfile().getProfileFeaturesList(); List<ProfileFeature> effectiveFeatures = policy.getProfile().getProfileFeaturesList();
PolicyOperation policyOperation = new PolicyOperation(); PolicyOperation policyOperation = new PolicyOperation();
policyOperation.setEnabled(true); policyOperation.setEnabled(true);
policyOperation.setType(org.wso2.carbon.device.mgt.common.operation.mgt.Operation.Type.POLICY); policyOperation.setType(Operation.Type.POLICY);
policyOperation.setCode(PolicyOperation.POLICY_OPERATION_CODE); policyOperation.setCode(PolicyOperation.POLICY_OPERATION_CODE);
policyOperation.setProfileOperations(createProfileOperations(effectiveFeatures)); policyOperation.setProfileOperations(createProfileOperations(effectiveFeatures));
if (policy.getPolicyType() != null && if (policy.getPolicyType() != null &&
@ -155,6 +162,7 @@ public class PolicyManagerUtil {
} }
if (payloadVersion >= 2.0f) { if (payloadVersion >= 2.0f) {
setMultipleCorrectiveActions(effectiveFeatures, policyOperation, policy); setMultipleCorrectiveActions(effectiveFeatures, policyOperation, policy);
transformGeoFencePolicy(effectiveFeatures, policyOperation, policy);
} else { } else {
setSingleCorrectiveAction(policy, effectiveFeatures); setSingleCorrectiveAction(policy, effectiveFeatures);
} }
@ -163,6 +171,66 @@ public class PolicyManagerUtil {
return policyOperation; return policyOperation;
} }
/**
* Transform geofence policy payload
* @param effectiveFeatures feature list of the policy
* @param policyOperation operation object
* @param policy related policy object
* @throws PolicyTransformException if any error occurs while transforming geo fence policy
*/
private static void transformGeoFencePolicy(List<ProfileFeature> effectiveFeatures,
PolicyOperation policyOperation, Policy policy) throws PolicyTransformException {
String payload = null;
int fenceId = -1;
for (ProfileFeature effectiveFeature : effectiveFeatures) {
if (effectiveFeature.getFeatureCode().equals(PolicyManagementConstants.GEOFENCE_POLICY)) {
payload = effectiveFeature.getContent().toString();
break;
}
}
if (payload != null) {
for (ProfileOperation profileOperation : policyOperation.getProfileOperations()) {
try {
if (profileOperation.getCode().equals(PolicyManagementConstants.GEOFENCE_POLICY)) {
JsonParser jsonParser = new JsonParser();
JsonElement parsedPayload = jsonParser.parse(payload);
JsonObject jsonPayload = parsedPayload.getAsJsonObject();
GeoLocationProviderServiceImpl geoLocationProviderService = new GeoLocationProviderServiceImpl();
if (jsonPayload.get("fenceId") == null) {
String msg = "No valid fence Id found in saved policy payload";
log.error(msg);
throw new PolicyTransformException(msg);
}
fenceId = jsonPayload.get("fenceId").getAsInt();
if (log.isDebugEnabled()) {
log.debug("Retrieving geofence with ID " + fenceId);
}
GeofenceData geofence = geoLocationProviderService.getGeofence(fenceId);
if (geofence != null) {
JsonObject operationPayload = new JsonObject();
operationPayload.addProperty("fenceId", geofence.getId());
operationPayload.addProperty("latitude", geofence.getLatitude());
operationPayload.addProperty("longitude", geofence.getLongitude());
operationPayload.addProperty("radius", geofence.getRadius());
operationPayload.addProperty("name", geofence.getFenceName());
profileOperation.setPayLoad(operationPayload.toString());
}
}
} catch (GeoLocationBasedServiceException e) {
String msg = "Error occurred while retrieving geofence with fence Id " + fenceId
+ " for the policy with Id "+policy.getId();
log.error(msg);
throw new PolicyTransformException(msg);
}
}
} else {
if (log.isDebugEnabled()) {
String msg = "No Geofence feature attached with the policy " + policy.getId();
log.debug(msg);
}
}
}
/** /**
* This method is used for generate single corrective action set for a single policy which is * This method is used for generate single corrective action set for a single policy which is
* bind to the policy payload * bind to the policy payload
@ -236,6 +304,9 @@ public class PolicyManagerUtil {
if (PolicyManagementConstants.POLICY_CORRECTIVE_ACTION_TYPE if (PolicyManagementConstants.POLICY_CORRECTIVE_ACTION_TYPE
.equals(correctiveAction.getActionType())) { .equals(correctiveAction.getActionType())) {
correctivePolicyIdSet.add(correctiveAction.getPolicyId()); correctivePolicyIdSet.add(correctiveAction.getPolicyId());
} else if (PolicyManagementConstants.EMAIL_CORRECTIVE_ACTION_TYPE
.equals(correctiveAction.getActionType())) {
createEmailCorrectiveActions(correctiveProfileOperation);
} }
//Add check for another action type in future implementation //Add check for another action type in future implementation
} }
@ -247,11 +318,11 @@ public class PolicyManagerUtil {
for (Policy correctivePolicy : allCorrectivePolicies) { for (Policy correctivePolicy : allCorrectivePolicies) {
if (policyId == correctivePolicy.getId()) { if (policyId == correctivePolicy.getId()) {
createCorrectiveProfileOperations(correctivePolicy, correctiveProfileOperation); createCorrectiveProfileOperations(correctivePolicy, correctiveProfileOperation);
policyOperation.getProfileOperations().add(correctiveProfileOperation);
break; break;
} }
} }
} }
policyOperation.getProfileOperations().add(correctiveProfileOperation);
} catch (PolicyManagementException e) { } catch (PolicyManagementException e) {
String msg = "Error occurred while retrieving corrective policy for policy " + String msg = "Error occurred while retrieving corrective policy for policy " +
policy.getPolicyName() + " and policy ID " + policy.getId(); policy.getPolicyName() + " and policy ID " + policy.getId();
@ -260,6 +331,24 @@ public class PolicyManagerUtil {
} }
} }
/**
* Transform email type corrective actions
* @param correctiveProfileOperation Email type corrective operation
*/
private static void createEmailCorrectiveActions(ProfileOperation correctiveProfileOperation) {
ProfileOperation profileOperation = new ProfileOperation();
profileOperation.setId(PolicyManagementConstants.EMAIL_ACTION_ID);
profileOperation.setCode(PolicyManagementConstants.EMAIL_FEATURE_CODE);
profileOperation.setEnabled(true);
profileOperation.setStatus(Operation.Status.PENDING);
profileOperation.setType(Operation.Type.PROFILE);
List<ProfileOperation> profileOperations = new ArrayList<>();
profileOperation.setPayLoad(profileOperations);
List<ProfileOperation> payLoad = new ArrayList<>();
payLoad.add(profileOperation);
correctiveProfileOperation.setPayLoad(payLoad);
}
/** /**
* This method is using for generate profile operations list which to be sent to the device. * This method is using for generate profile operations list which to be sent to the device.
* this method is only using multiple corrective actions * this method is only using multiple corrective actions
@ -272,8 +361,8 @@ public class PolicyManagerUtil {
profileOperation.setId(correctivePolicy.getId()); profileOperation.setId(correctivePolicy.getId());
profileOperation.setCode(PolicyManagementConstants.POLICY_FEATURE_CODE); profileOperation.setCode(PolicyManagementConstants.POLICY_FEATURE_CODE);
profileOperation.setEnabled(true); profileOperation.setEnabled(true);
profileOperation.setStatus(org.wso2.carbon.device.mgt.common.operation.mgt.Operation.Status.PENDING); profileOperation.setStatus(Operation.Status.PENDING);
profileOperation.setType(org.wso2.carbon.device.mgt.common.operation.mgt.Operation.Type.PROFILE); profileOperation.setType(Operation.Type.PROFILE);
List<ProfileOperation> profileOperations = createProfileOperations(correctivePolicy List<ProfileOperation> profileOperations = createProfileOperations(correctivePolicy
.getProfile().getProfileFeaturesList()); .getProfile().getProfileFeaturesList());
profileOperation.setPayLoad(profileOperations); profileOperation.setPayLoad(profileOperations);
@ -299,8 +388,8 @@ public class PolicyManagerUtil {
profileOperation.setCode(feature.getFeatureCode()); profileOperation.setCode(feature.getFeatureCode());
profileOperation.setEnabled(true); profileOperation.setEnabled(true);
profileOperation.setId(feature.getId()); profileOperation.setId(feature.getId());
profileOperation.setStatus(org.wso2.carbon.device.mgt.common.operation.mgt.Operation.Status.PENDING); profileOperation.setStatus(Operation.Status.PENDING);
profileOperation.setType(org.wso2.carbon.device.mgt.common.operation.mgt.Operation.Type.PROFILE); profileOperation.setType(Operation.Type.PROFILE);
profileOperation.setPayLoad(feature.getContent()); profileOperation.setPayLoad(feature.getContent());
if (feature.getCorrectiveActions() != null) { if (feature.getCorrectiveActions() != null) {
for (CorrectiveAction correctiveAction : feature.getCorrectiveActions()) { for (CorrectiveAction correctiveAction : feature.getCorrectiveActions()) {
@ -308,12 +397,20 @@ public class PolicyManagerUtil {
if (profileOperation.getReactiveActionIds() == null) { if (profileOperation.getReactiveActionIds() == null) {
profileOperation.setReactiveActionIds(new ArrayList<>()); profileOperation.setReactiveActionIds(new ArrayList<>());
} }
profileOperation.getReactiveActionIds().add(correctiveAction.getPolicyId()); if (correctiveAction.getActionType().equals(PolicyManagementConstants.EMAIL_CORRECTIVE_ACTION_TYPE)) {
profileOperation.getReactiveActionIds().add(PolicyManagementConstants.EMAIL_ACTION_ID);
} else if (correctiveAction.getActionType().equals(PolicyManagementConstants.POLICY_CORRECTIVE_ACTION_TYPE)){
profileOperation.getReactiveActionIds().add(correctiveAction.getPolicyId());
}
} else { } else {
if (profileOperation.getCorrectiveActionIds() == null) { if (profileOperation.getCorrectiveActionIds() == null) {
profileOperation.setCorrectiveActionIds(new ArrayList<>()); profileOperation.setCorrectiveActionIds(new ArrayList<>());
} }
profileOperation.getCorrectiveActionIds().add(correctiveAction.getPolicyId()); if (correctiveAction.getActionType().equals(PolicyManagementConstants.EMAIL_CORRECTIVE_ACTION_TYPE)) {
profileOperation.getCorrectiveActionIds().add(PolicyManagementConstants.EMAIL_ACTION_ID);
} else if (correctiveAction.getActionType().equals(PolicyManagementConstants.POLICY_CORRECTIVE_ACTION_TYPE)){
profileOperation.getCorrectiveActionIds().add(correctiveAction.getPolicyId());
}
} }
} }
} }

Loading…
Cancel
Save