Loading src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java +22 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import eu.teraflow.policy.context.model.Device; import eu.teraflow.policy.context.model.EndPointId; import eu.teraflow.policy.context.model.Service; import eu.teraflow.policy.context.model.ServiceId; import eu.teraflow.policy.model.PolicyRuleService; import io.smallrye.mutiny.Uni; import java.util.ArrayList; import java.util.List; Loading Loading @@ -163,4 +164,25 @@ public class PolicyRuleConditionValidator { .ifNull() .continueWith(false); } public Uni<Boolean> isPolicyRuleServiceValid(String updatedPolicyRuleId, ServiceId serviceId) { return contextService .getPolicyRule(updatedPolicyRuleId) .onItem() .ifNotNull() .transform( policyRule -> { var policyRuleService = (PolicyRuleService) policyRule.getPolicyRuleType().getPolicyRuleType(); if (policyRuleService.getServiceId().getId().equals(serviceId.getId())) { return true; } return false; }) .onItem() .ifNull() .continueWith(false) .onFailure() .recoverWithItem(false); } } src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +85 −35 Original line number Diff line number Diff line Loading @@ -170,19 +170,39 @@ public class PolicyServiceImpl implements PolicyService { final var deviceIds = policyRuleService.getDeviceIds(); final var isServiceValid = policyRuleConditionValidator.isServiceIdValid(serviceId, deviceIds); isServiceValid .subscribe() .with( id -> { LOGGER.info("OK 1"); var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService); contextService.setPolicyRule(new PolicyRule(policyRuleTypeService)); }); return isServiceValid .onItem() .transform( isService -> { if (!isService) { var policyRuleState = new PolicyRuleState( PolicyRuleStateEnum.POLICY_FAILED, String.format(INVALID_MESSAGE, serviceId)); policyRuleService.getPolicyRuleBasic().setPolicyRuleState(policyRuleState); var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService); contextService .setPolicyRule(new PolicyRule(policyRuleTypeService)) .subscribe() .with( tmp -> LOGGER.infof( "AddPolicyService id: " + INVALID_MESSAGE, policyRuleBasic.getPolicyRuleId())); return policyRuleState; } var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService); contextService .setPolicyRule(new PolicyRule(policyRuleTypeService)) .subscribe() .with( tmp -> LOGGER.infof( "AddPolicyService id: " + VALID_MESSAGE, policyRuleBasic.getPolicyRuleId())); return VALIDATED_POLICYRULE_STATE; }); } Loading Loading @@ -210,19 +230,29 @@ public class PolicyServiceImpl implements PolicyService { } final var serviceId = policyRuleService.getServiceId(); final var deviceIds = policyRuleService.getDeviceIds(); final var policyRuleId = policyRuleBasic.getPolicyRuleId(); final var isPolicyRuleServiceValid = policyRuleConditionValidator.isPolicyRuleServiceValid(policyRuleId, serviceId); return policyRuleConditionValidator .isServiceIdValid(serviceId, deviceIds) return isPolicyRuleServiceValid .onItem() .transform( isService -> { if (!isService) { isPolicyRuleService -> { if (!isPolicyRuleService) { return new PolicyRuleState( PolicyRuleStateEnum.POLICY_FAILED, String.format(INVALID_MESSAGE, "Service with id: " + serviceId.getId())); PolicyRuleStateEnum.POLICY_FAILED, String.format(INVALID_MESSAGE, serviceId)); } return UPDATED_POLICYRULE_STATE; var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService); contextService .setPolicyRule(new PolicyRule(policyRuleTypeService)) .subscribe() .with( tmp -> LOGGER.infof( "UpdatePolicyService id: " + VALID_MESSAGE, policyRuleBasic.getPolicyRuleId())); return VALIDATED_POLICYRULE_STATE; }); } Loading Loading @@ -301,25 +331,45 @@ public class PolicyServiceImpl implements PolicyService { public Uni<PolicyRuleState> deletePolicy(String policyRuleId) { LOGGER.infof("Received %s", policyRuleId); PolicyRule policyRule = contextService.getPolicyRule(policyRuleId).await().indefinitely(); final var policyRuleBasic = policyRule.getPolicyRuleType().getPolicyRuleBasic(); List<PolicyRuleCondition> policyRuleConditions = policyRuleBasic.getPolicyRuleConditions(); final var getPolicyRule = contextService.getPolicyRule(policyRuleId); for (PolicyRuleCondition policy : policyRuleConditions) { var empty = monitoringService.deleteKpi(policy.getKpiId()); empty .subscribe() .with(emptyMessage -> LOGGER.infof("Kpi [%s] has been deleted.\n", policyRuleId)); } return getPolicyRule .onItem() .transform( policyRule -> { var policyRuleBasic = policyRule.getPolicyRuleType().getPolicyRuleBasic(); // TODO: Should delete Kpi // List<PolicyRuleCondition> policyRuleConditions = // policyRuleBasic.getPolicyRuleConditions(); // for (PolicyRuleCondition policy : policyRuleConditions) { // var empty = monitoringService.deleteKpi(policy.getKpiId()); // empty // .subscribe() // .with( // emptyMessage -> // LOGGER.infof( // "Kpi of PolicyRule [%s] has been deleted.\n", // policyRuleId)); // } policyRule .getPolicyRuleType() .getPolicyRuleBasic() .setPolicyRuleState(REMOVED_POLICYRULE_STATE); var empty = contextService.removePolicyRule(policyRuleId); empty contextService .setPolicyRule(policyRule) .subscribe() .with(emptyMessage -> LOGGER.infof("Policy [%s] has been removed.\n", policyRuleId)); .with( tmp -> LOGGER.infof( "DeletePolicy with id: " + VALID_MESSAGE, policyRuleBasic.getPolicyRuleId())); setPolicyRuleToContext(policyRule, REMOVED_POLICYRULE_STATE); return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState()); return policyRuleBasic.getPolicyRuleState(); }); } private void monitorKpi(List<AlarmDescriptor> alarmDescriptorList) { Loading src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -175,8 +175,8 @@ class PolicyServiceTest { .subscribe() .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); assertThat(message.get(5, TimeUnit.SECONDS)) .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); // TODO: Fix Test assertThat(message.get(5, TimeUnit.SECONDS)).isEqualTo("POLICY_FAILED"); } @Test Loading Loading
src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java +22 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import eu.teraflow.policy.context.model.Device; import eu.teraflow.policy.context.model.EndPointId; import eu.teraflow.policy.context.model.Service; import eu.teraflow.policy.context.model.ServiceId; import eu.teraflow.policy.model.PolicyRuleService; import io.smallrye.mutiny.Uni; import java.util.ArrayList; import java.util.List; Loading Loading @@ -163,4 +164,25 @@ public class PolicyRuleConditionValidator { .ifNull() .continueWith(false); } public Uni<Boolean> isPolicyRuleServiceValid(String updatedPolicyRuleId, ServiceId serviceId) { return contextService .getPolicyRule(updatedPolicyRuleId) .onItem() .ifNotNull() .transform( policyRule -> { var policyRuleService = (PolicyRuleService) policyRule.getPolicyRuleType().getPolicyRuleType(); if (policyRuleService.getServiceId().getId().equals(serviceId.getId())) { return true; } return false; }) .onItem() .ifNull() .continueWith(false) .onFailure() .recoverWithItem(false); } }
src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +85 −35 Original line number Diff line number Diff line Loading @@ -170,19 +170,39 @@ public class PolicyServiceImpl implements PolicyService { final var deviceIds = policyRuleService.getDeviceIds(); final var isServiceValid = policyRuleConditionValidator.isServiceIdValid(serviceId, deviceIds); isServiceValid .subscribe() .with( id -> { LOGGER.info("OK 1"); var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService); contextService.setPolicyRule(new PolicyRule(policyRuleTypeService)); }); return isServiceValid .onItem() .transform( isService -> { if (!isService) { var policyRuleState = new PolicyRuleState( PolicyRuleStateEnum.POLICY_FAILED, String.format(INVALID_MESSAGE, serviceId)); policyRuleService.getPolicyRuleBasic().setPolicyRuleState(policyRuleState); var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService); contextService .setPolicyRule(new PolicyRule(policyRuleTypeService)) .subscribe() .with( tmp -> LOGGER.infof( "AddPolicyService id: " + INVALID_MESSAGE, policyRuleBasic.getPolicyRuleId())); return policyRuleState; } var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService); contextService .setPolicyRule(new PolicyRule(policyRuleTypeService)) .subscribe() .with( tmp -> LOGGER.infof( "AddPolicyService id: " + VALID_MESSAGE, policyRuleBasic.getPolicyRuleId())); return VALIDATED_POLICYRULE_STATE; }); } Loading Loading @@ -210,19 +230,29 @@ public class PolicyServiceImpl implements PolicyService { } final var serviceId = policyRuleService.getServiceId(); final var deviceIds = policyRuleService.getDeviceIds(); final var policyRuleId = policyRuleBasic.getPolicyRuleId(); final var isPolicyRuleServiceValid = policyRuleConditionValidator.isPolicyRuleServiceValid(policyRuleId, serviceId); return policyRuleConditionValidator .isServiceIdValid(serviceId, deviceIds) return isPolicyRuleServiceValid .onItem() .transform( isService -> { if (!isService) { isPolicyRuleService -> { if (!isPolicyRuleService) { return new PolicyRuleState( PolicyRuleStateEnum.POLICY_FAILED, String.format(INVALID_MESSAGE, "Service with id: " + serviceId.getId())); PolicyRuleStateEnum.POLICY_FAILED, String.format(INVALID_MESSAGE, serviceId)); } return UPDATED_POLICYRULE_STATE; var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService); contextService .setPolicyRule(new PolicyRule(policyRuleTypeService)) .subscribe() .with( tmp -> LOGGER.infof( "UpdatePolicyService id: " + VALID_MESSAGE, policyRuleBasic.getPolicyRuleId())); return VALIDATED_POLICYRULE_STATE; }); } Loading Loading @@ -301,25 +331,45 @@ public class PolicyServiceImpl implements PolicyService { public Uni<PolicyRuleState> deletePolicy(String policyRuleId) { LOGGER.infof("Received %s", policyRuleId); PolicyRule policyRule = contextService.getPolicyRule(policyRuleId).await().indefinitely(); final var policyRuleBasic = policyRule.getPolicyRuleType().getPolicyRuleBasic(); List<PolicyRuleCondition> policyRuleConditions = policyRuleBasic.getPolicyRuleConditions(); final var getPolicyRule = contextService.getPolicyRule(policyRuleId); for (PolicyRuleCondition policy : policyRuleConditions) { var empty = monitoringService.deleteKpi(policy.getKpiId()); empty .subscribe() .with(emptyMessage -> LOGGER.infof("Kpi [%s] has been deleted.\n", policyRuleId)); } return getPolicyRule .onItem() .transform( policyRule -> { var policyRuleBasic = policyRule.getPolicyRuleType().getPolicyRuleBasic(); // TODO: Should delete Kpi // List<PolicyRuleCondition> policyRuleConditions = // policyRuleBasic.getPolicyRuleConditions(); // for (PolicyRuleCondition policy : policyRuleConditions) { // var empty = monitoringService.deleteKpi(policy.getKpiId()); // empty // .subscribe() // .with( // emptyMessage -> // LOGGER.infof( // "Kpi of PolicyRule [%s] has been deleted.\n", // policyRuleId)); // } policyRule .getPolicyRuleType() .getPolicyRuleBasic() .setPolicyRuleState(REMOVED_POLICYRULE_STATE); var empty = contextService.removePolicyRule(policyRuleId); empty contextService .setPolicyRule(policyRule) .subscribe() .with(emptyMessage -> LOGGER.infof("Policy [%s] has been removed.\n", policyRuleId)); .with( tmp -> LOGGER.infof( "DeletePolicy with id: " + VALID_MESSAGE, policyRuleBasic.getPolicyRuleId())); setPolicyRuleToContext(policyRule, REMOVED_POLICYRULE_STATE); return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState()); return policyRuleBasic.getPolicyRuleState(); }); } private void monitorKpi(List<AlarmDescriptor> alarmDescriptorList) { Loading
src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -175,8 +175,8 @@ class PolicyServiceTest { .subscribe() .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); assertThat(message.get(5, TimeUnit.SECONDS)) .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); // TODO: Fix Test assertThat(message.get(5, TimeUnit.SECONDS)).isEqualTo("POLICY_FAILED"); } @Test Loading