diff options
Diffstat (limited to 'controlloop')
8 files changed, 194 insertions, 180 deletions
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java index 7d42f8f76..298513619 100644 --- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java +++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java @@ -399,9 +399,8 @@ public class ControlLoopEventManager implements LockCallback, Serializable { * * @return a ControlLoopOperationManager * @throws ControlLoopException if an error occurs - * @throws AaiException if an error occurs retrieving information from A&AI */ - public ControlLoopOperationManager processControlLoop() throws ControlLoopException, AaiException { + public ControlLoopOperationManager processControlLoop() throws ControlLoopException { validateFinalControlLoop(); // // Is there a current operation? diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java index 006899efe..cac1b8ee3 100644 --- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java +++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java @@ -98,33 +98,39 @@ public class ControlLoopOperationManager implements Serializable { * @param policy the policy * @param em the event manager * @throws ControlLoopException if an error occurs - * @throws AaiException if an error occurs retrieving information from A&AI */ public ControlLoopOperationManager(ControlLoopEvent onset, Policy policy, ControlLoopEventManager em) - throws ControlLoopException, AaiException { + throws ControlLoopException { + this.onset = onset; this.policy = policy; this.guardApprovalStatus = "NONE"; this.eventManager = em; this.targetEntity = getTarget(policy); - // - // Let's make a sanity check - // - switch (policy.getActor()) { - case "APPC": - initAppc(onset, policy); - break; - case "SO": - break; - case "SDNR": - break; - case "VFC": - break; - case "SDNC": - break; - default: - throw new ControlLoopException("ControlLoopEventManager: policy has an unknown actor."); + try { + + // + // Let's make a sanity check + // + switch (policy.getActor()) { + case "APPC": + initAppc(onset, policy); + break; + case "SO": + break; + case "SDNR": + break; + case "VFC": + break; + case "SDNC": + break; + default: + throw new ControlLoopException("ControlLoopEventManager: policy has an unknown actor."); + } + + } catch (AaiException e) { + throw new ControlLoopException(e.getMessage(), e); } } @@ -210,9 +216,8 @@ public class ControlLoopOperationManager implements Serializable { * @param policy the policy * @return the target * @throws ControlLoopException if an error occurs - * @throws AaiException if an error occurs retrieving information from A&AI */ - public String getTarget(Policy policy) throws ControlLoopException, AaiException { + public String getTarget(Policy policy) throws ControlLoopException { if (policy.getTarget() == null) { throw new ControlLoopException("The target is null"); } @@ -235,7 +240,7 @@ public class ControlLoopOperationManager implements Serializable { } - private String getVfModuleTarget() throws AaiException, ControlLoopException { + private String getVfModuleTarget() throws ControlLoopException { VirtualControlLoopEvent virtualOnsetEvent = (VirtualControlLoopEvent) this.onset; if (this.onset.getTarget().equalsIgnoreCase(VSERVER_VSERVER_NAME)) { return virtualOnsetEvent.getAai().get(VSERVER_VSERVER_NAME); @@ -253,17 +258,22 @@ public class ControlLoopOperationManager implements Serializable { * If the vnf-name was retrieved from the onset then the vnf-id must be obtained from the event * manager's A&AI GET query */ - String vnfId; - if (Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty(AAI_CUSTOM_QUERY))) { - vnfId = this.eventManager.getCqResponse((VirtualControlLoopEvent) onset).getDefaultGenericVnf() - .getVnfId(); - } else { - vnfId = this.eventManager.getVnfResponse().getVnfId(); - } - if (vnfId == null) { - throw new AaiException("No vnf-id found"); + try { + String vnfId; + if (Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty(AAI_CUSTOM_QUERY))) { + vnfId = this.eventManager.getCqResponse((VirtualControlLoopEvent) onset).getDefaultGenericVnf() + .getVnfId(); + } else { + vnfId = this.eventManager.getVnfResponse().getVnfId(); + } + if (vnfId == null) { + throw new AaiException("No vnf-id found"); + } + return vnfId; + + } catch (AaiException e) { + throw new ControlLoopException(e.getMessage(), e); } - return vnfId; } throw new ControlLoopException("Target does not match target type"); } @@ -274,10 +284,9 @@ public class ControlLoopOperationManager implements Serializable { * @param onset the onset event * @return the operation request * @throws ControlLoopException if an error occurs - * @throws AaiException if error occurs */ public Object startOperation(/* VirtualControlLoopEvent */ControlLoopEvent onset) - throws ControlLoopException, AaiException { + throws ControlLoopException { verifyOperatonCanRun(); // @@ -293,19 +302,24 @@ public class ControlLoopOperationManager implements Serializable { // // Now determine which actor we need to construct a request for // - switch (policy.getActor()) { - case "APPC": - return startAppcOperation(onset, operation); - case "SO": - return startSoOperation(onset, operation); - case "VFC": - return startVfcOperation(onset, operation); - case "SDNR": - return startSdnrOperation(onset, operation); - case "SDNC": - return startSdncOperation(onset, operation); - default: - throw new ControlLoopException("invalid actor " + policy.getActor() + " on policy"); + try { + switch (policy.getActor()) { + case "APPC": + return startAppcOperation(onset, operation); + case "SO": + return startSoOperation(onset, operation); + case "VFC": + return startVfcOperation(onset, operation); + case "SDNR": + return startSdnrOperation(onset, operation); + case "SDNC": + return startSdncOperation(onset, operation); + default: + throw new ControlLoopException("invalid actor " + policy.getActor() + " on policy"); + } + + } catch (AaiException e) { + throw new ControlLoopException(e.getMessage(), e); } } diff --git a/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/server/restful/RestControlLoopManager.java b/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/server/restful/RestControlLoopManager.java index 22e0451e3..4b62e489a 100644 --- a/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/server/restful/RestControlLoopManager.java +++ b/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/server/restful/RestControlLoopManager.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,7 +41,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.onap.policy.aai.AaiManager; -import org.onap.policy.aai.util.AaiException; import org.onap.policy.controlloop.ControlLoopException; import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager; import org.onap.policy.controlloop.params.ControlLoopParams; diff --git a/controlloop/common/feature-controlloop-trans/src/main/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetrics.java b/controlloop/common/feature-controlloop-trans/src/main/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetrics.java index a7c8f11df..3cc02446a 100644 --- a/controlloop/common/feature-controlloop-trans/src/main/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetrics.java +++ b/controlloop/common/feature-controlloop-trans/src/main/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetrics.java @@ -31,11 +31,6 @@ import org.onap.policy.drools.system.PolicyController; public interface ControlLoopMetrics { /** - * Singleton manager object. - */ - ControlLoopMetrics manager = new CacheBasedControlLoopMetricsManager(); - - /** * Gets all transaction identifiers being monitored. * * @return transaction id list diff --git a/controlloop/common/feature-controlloop-trans/src/main/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetricsFeature.java b/controlloop/common/feature-controlloop-trans/src/main/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetricsFeature.java index b4057dfae..26627eb1c 100644 --- a/controlloop/common/feature-controlloop-trans/src/main/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetricsFeature.java +++ b/controlloop/common/feature-controlloop-trans/src/main/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetricsFeature.java @@ -70,7 +70,7 @@ public class ControlLoopMetricsFeature implements PolicyControllerFeatureApi { @Override public boolean beforeDeliver(PolicyController controller, CommInfrastructure protocol, String topic, Object event) { if (event instanceof VirtualControlLoopNotification) { - ControlLoopMetrics.manager.transactionEvent(controller, (VirtualControlLoopNotification) event); + ControlLoopMetricsManager.getManager().transactionEvent(controller, (VirtualControlLoopNotification) event); } /* do not take ownership */ diff --git a/controlloop/common/feature-controlloop-trans/src/main/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetricsManager.java b/controlloop/common/feature-controlloop-trans/src/main/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetricsManager.java new file mode 100644 index 000000000..c4ae11bdf --- /dev/null +++ b/controlloop/common/feature-controlloop-trans/src/main/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetricsManager.java @@ -0,0 +1,39 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.drools.apps.controlloop.feature.trans; + +import lombok.Getter; + +/** + * Control Loop Metrics Tracker. + */ +public class ControlLoopMetricsManager { + + /** + * Singleton manager object. + */ + @Getter + private static final ControlLoopMetrics manager = new CacheBasedControlLoopMetricsManager(); + + private ControlLoopMetricsManager() { + // do nothing + } +} diff --git a/controlloop/common/feature-controlloop-trans/src/test/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetricsFeatureTest.java b/controlloop/common/feature-controlloop-trans/src/test/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetricsFeatureTest.java index abc5db8e6..bbbcc132f 100644 --- a/controlloop/common/feature-controlloop-trans/src/test/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetricsFeatureTest.java +++ b/controlloop/common/feature-controlloop-trans/src/test/java/org/onap/policy/drools/apps/controlloop/feature/trans/ControlLoopMetricsFeatureTest.java @@ -66,9 +66,9 @@ public class ControlLoopMetricsFeatureTest { @Test public void cacheDefaults() { - assertEquals(3, ControlLoopMetrics.manager.getCacheSize()); - assertEquals(2, ControlLoopMetrics.manager.getTransactionTimeout()); - assertEquals(0, ControlLoopMetrics.manager.getCacheOccupancy()); + assertEquals(3, ControlLoopMetricsManager.getManager().getCacheSize()); + assertEquals(2, ControlLoopMetricsManager.getManager().getTransactionTimeout()); + assertEquals(0, ControlLoopMetricsManager.getManager().getCacheOccupancy()); } @Test @@ -82,7 +82,7 @@ public class ControlLoopMetricsFeatureTest { notification.setRequestId(requestId); feature.beforeDeliver(testController, CommInfrastructure.DMAAP, POLICY_CL_MGT, notification); - assertNull(ControlLoopMetrics.manager.getTransaction(requestId)); + assertNull(ControlLoopMetricsManager.getManager().getTransaction(requestId)); this.cacheDefaults(); } @@ -95,14 +95,15 @@ public class ControlLoopMetricsFeatureTest { notification.setNotification(ControlLoopNotificationType.ACTIVE); feature.beforeDeliver(testController, CommInfrastructure.DMAAP, POLICY_CL_MGT, notification); - assertNotNull(ControlLoopMetrics.manager.getTransaction(requestId)); - assertTrue(ControlLoopMetrics.manager.getTransaction(requestId).getFrom().contains(testController.getName())); - assertNotNull(ControlLoopMetrics.manager.getTransaction(requestId).getNotificationTime()); - assertTrue(ControlLoopMetrics.manager.getCacheOccupancy() == 1); + assertNotNull(ControlLoopMetricsManager.getManager().getTransaction(requestId)); + assertTrue(ControlLoopMetricsManager.getManager().getTransaction(requestId).getFrom() + .contains(testController.getName())); + assertNotNull(ControlLoopMetricsManager.getManager().getTransaction(requestId).getNotificationTime()); + assertTrue(ControlLoopMetricsManager.getManager().getCacheOccupancy() == 1); /* wait for the entries to expire */ - await().atMost(ControlLoopMetrics.manager.getTransactionTimeout() + 1, TimeUnit.SECONDS) - .until(() -> ControlLoopMetrics.manager.getTransaction(requestId) == null); + await().atMost(ControlLoopMetricsManager.getManager().getTransactionTimeout() + 1, TimeUnit.SECONDS) + .until(() -> ControlLoopMetricsManager.getManager().getTransaction(requestId) == null); this.cacheDefaults(); } @@ -113,56 +114,61 @@ public class ControlLoopMetricsFeatureTest { new ControlLoopMetricsFeature().beforeDeliver(testController, CommInfrastructure.DMAAP, POLICY_CL_MGT, notification); - assertNotNull(ControlLoopMetrics.manager.getTransaction(notification.getRequestId())); + assertNotNull(ControlLoopMetricsManager.getManager().getTransaction(notification.getRequestId())); - ControlLoopMetrics.manager.resetCache(ControlLoopMetrics.manager.getCacheSize(), - ControlLoopMetrics.manager.getTransactionTimeout()); - assertNull(ControlLoopMetrics.manager.getTransaction(notification.getRequestId())); + ControlLoopMetricsManager.getManager().resetCache(ControlLoopMetricsManager.getManager().getCacheSize(), + ControlLoopMetricsManager.getManager().getTransactionTimeout()); + assertNull(ControlLoopMetricsManager.getManager().getTransaction(notification.getRequestId())); this.cacheDefaults(); } @Test public void removeTransaction() { VirtualControlLoopNotification notification = this.generateNotification(); - assertNull(ControlLoopMetrics.manager.getTransaction(notification.getRequestId())); - ControlLoopMetrics.manager.removeTransaction(notification.getRequestId()); + assertNull(ControlLoopMetricsManager.getManager().getTransaction(notification.getRequestId())); + ControlLoopMetricsManager.getManager().removeTransaction(notification.getRequestId()); - ControlLoopMetrics.manager.transactionEvent(testController, notification); - assertNotNull(ControlLoopMetrics.manager.getTransaction(notification.getRequestId())); - ControlLoopMetrics.manager.removeTransaction(notification.getRequestId()); - assertNull(ControlLoopMetrics.manager.getTransaction(notification.getRequestId())); + ControlLoopMetricsManager.getManager().transactionEvent(testController, notification); + assertNotNull(ControlLoopMetricsManager.getManager().getTransaction(notification.getRequestId())); + ControlLoopMetricsManager.getManager().removeTransaction(notification.getRequestId()); + assertNull(ControlLoopMetricsManager.getManager().getTransaction(notification.getRequestId())); } @Test public void eviction() throws InterruptedException { ControlLoopMetricsFeature feature = new ControlLoopMetricsFeature(); - for (int i = 0; i < ControlLoopMetrics.manager.getCacheSize(); i++) { + for (int i = 0; i < ControlLoopMetricsManager.getManager().getCacheSize(); i++) { VirtualControlLoopNotification notification = generateNotification(); feature.beforeDeliver(testController, CommInfrastructure.DMAAP, POLICY_CL_MGT, notification); - assertNotNull(ControlLoopMetrics.manager.getTransaction(notification.getRequestId())); + assertNotNull(ControlLoopMetricsManager.getManager().getTransaction(notification.getRequestId())); } - assertEquals(ControlLoopMetrics.manager.getCacheOccupancy(), ControlLoopMetrics.manager.getCacheOccupancy()); + assertEquals(ControlLoopMetricsManager.getManager().getCacheOccupancy(), + ControlLoopMetricsManager.getManager().getCacheOccupancy()); VirtualControlLoopNotification overflowNotification = generateNotification(); feature.beforeDeliver(testController, CommInfrastructure.DMAAP, POLICY_CL_MGT, overflowNotification); - assertEquals(ControlLoopMetrics.manager.getCacheOccupancy(), ControlLoopMetrics.manager.getCacheOccupancy()); - assertNotNull(ControlLoopMetrics.manager.getTransaction(overflowNotification.getRequestId())); - assertTrue(ControlLoopMetrics.manager.getTransactionIds().size() == ControlLoopMetrics.manager.getCacheSize()); - assertTrue(ControlLoopMetrics.manager.getCacheOccupancy() == ControlLoopMetrics.manager.getCacheSize()); - assertFalse(ControlLoopMetrics.manager.getTransactionIds().isEmpty()); - assertFalse(ControlLoopMetrics.manager.getTransactions().isEmpty()); + assertEquals(ControlLoopMetricsManager.getManager().getCacheOccupancy(), + ControlLoopMetricsManager.getManager().getCacheOccupancy()); + assertNotNull(ControlLoopMetricsManager.getManager().getTransaction(overflowNotification.getRequestId())); + assertTrue(ControlLoopMetricsManager.getManager().getTransactionIds().size() == ControlLoopMetricsManager + .getManager().getCacheSize()); + assertTrue(ControlLoopMetricsManager.getManager().getCacheOccupancy() == ControlLoopMetricsManager.getManager() + .getCacheSize()); + assertFalse(ControlLoopMetricsManager.getManager().getTransactionIds().isEmpty()); + assertFalse(ControlLoopMetricsManager.getManager().getTransactions().isEmpty()); /* wait for the entries to expire */ - await().atMost(ControlLoopMetrics.manager.getTransactionTimeout() + 1, TimeUnit.SECONDS) - .until(() -> ControlLoopMetrics.manager.getTransactions().isEmpty()); - - ControlLoopMetrics.manager.refresh(); - assertTrue(ControlLoopMetrics.manager.getTransactionIds().size() == ControlLoopMetrics.manager - .getCacheOccupancy()); - assertFalse(ControlLoopMetrics.manager.getCacheOccupancy() == ControlLoopMetrics.manager.getCacheSize()); - assertTrue(ControlLoopMetrics.manager.getTransactionIds().isEmpty()); - assertTrue(ControlLoopMetrics.manager.getTransactions().isEmpty()); + await().atMost(ControlLoopMetricsManager.getManager().getTransactionTimeout() + 1, TimeUnit.SECONDS) + .until(() -> ControlLoopMetricsManager.getManager().getTransactions().isEmpty()); + + ControlLoopMetricsManager.getManager().refresh(); + assertTrue(ControlLoopMetricsManager.getManager().getTransactionIds().size() == ControlLoopMetricsManager + .getManager().getCacheOccupancy()); + assertFalse(ControlLoopMetricsManager.getManager().getCacheOccupancy() == ControlLoopMetricsManager.getManager() + .getCacheSize()); + assertTrue(ControlLoopMetricsManager.getManager().getTransactionIds().isEmpty()); + assertTrue(ControlLoopMetricsManager.getManager().getTransactions().isEmpty()); this.cacheDefaults(); } diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardYamlToXacml.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardYamlToXacml.java index a64abcad4..057c3f116 100644 --- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardYamlToXacml.java +++ b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardYamlToXacml.java @@ -2,14 +2,14 @@ * ============LICENSE_START======================================================= * guard * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017, 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,9 +25,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - +import java.util.function.Consumer; import org.onap.policy.controlloop.policy.guard.Constraint; import org.onap.policy.controlloop.policy.guard.ControlLoopGuard; import org.onap.policy.controlloop.policy.guard.GuardPolicy; @@ -44,7 +42,7 @@ public class PolicyGuardYamlToXacml { /** * Convert from Yaml to Xacml. - * + * * @param yamlFile the Yaml file * @param xacmlTemplate the Xacml template * @param xacmlPolicyOutput the Xacml output @@ -78,7 +76,7 @@ public class PolicyGuardYamlToXacml { /** * Generate a Xacml guard. - * + * * @param xacmlTemplateContent the Xacml template content * @param matchParameters the paremeters to use * @param constraint the constraint to use @@ -86,29 +84,9 @@ public class PolicyGuardYamlToXacml { */ private static String generateXacmlGuard(String xacmlTemplateContent, MatchParameters matchParameters, Constraint constraint) { - Pattern pattern = Pattern.compile("\\$\\{clname\\}"); - Matcher matcher = pattern.matcher(xacmlTemplateContent); - if (isNullOrEmpty(matchParameters.getControlLoopName())) { - matchParameters.setControlLoopName(".*"); - } - xacmlTemplateContent = matcher.replaceAll(matchParameters.getControlLoopName()); - pattern = Pattern.compile("\\$\\{actor\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - if (isNullOrEmpty(matchParameters.getActor())) { - matchParameters.setActor(".*"); - } - xacmlTemplateContent = matcher.replaceAll(matchParameters.getActor()); + xacmlTemplateContent = doCommonReplacements(xacmlTemplateContent, matchParameters, constraint); - pattern = Pattern.compile("\\$\\{recipe\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - if (isNullOrEmpty(matchParameters.getRecipe())) { - matchParameters.setRecipe(".*"); - } - xacmlTemplateContent = matcher.replaceAll(matchParameters.getRecipe()); - - pattern = Pattern.compile("\\$\\{targets\\}"); - matcher = pattern.matcher(xacmlTemplateContent); String targetsRegex = ""; if (isNullOrEmptyList(matchParameters.getTargets())) { targetsRegex = ".*"; @@ -125,33 +103,47 @@ public class PolicyGuardYamlToXacml { } targetsRegex = targetsRegexSb.toString(); } - xacmlTemplateContent = matcher.replaceAll(targetsRegex); + xacmlTemplateContent = xacmlTemplateContent.replace("${targets}", targetsRegex); + + xacmlTemplateContent = xacmlTemplateContent.replace("${limit}", + constraint.getFreq_limit_per_target().toString()); + + xacmlTemplateContent = xacmlTemplateContent.replace("${twValue}", constraint.getTime_window().get("value")); - pattern = Pattern.compile("\\$\\{limit\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - xacmlTemplateContent = matcher.replaceAll(constraint.getFreq_limit_per_target().toString()); + xacmlTemplateContent = xacmlTemplateContent.replace("${twUnits}", constraint.getTime_window().get("units")); - pattern = Pattern.compile("\\$\\{twValue\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - xacmlTemplateContent = matcher.replaceAll(constraint.getTime_window().get("value")); + logger.debug(xacmlTemplateContent); - pattern = Pattern.compile("\\$\\{twUnits\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - xacmlTemplateContent = matcher.replaceAll(constraint.getTime_window().get("units")); + return xacmlTemplateContent; + } + private static String doCommonReplacements(String xacmlTemplateContent, MatchParameters matchParameters, + Constraint constraint) { - pattern = Pattern.compile("\\$\\{guardActiveStart\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - xacmlTemplateContent = matcher.replaceAll(constraint.getActive_time_range().get("start")); + replaceNullOrEmpty(matchParameters.getControlLoopName(), matchParameters::setControlLoopName, ".*"); + xacmlTemplateContent = xacmlTemplateContent.replace("${clname}", matchParameters.getControlLoopName()); - pattern = Pattern.compile("\\$\\{guardActiveEnd\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - xacmlTemplateContent = matcher.replaceAll(constraint.getActive_time_range().get("end")); - logger.debug(xacmlTemplateContent); + replaceNullOrEmpty(matchParameters.getActor(), matchParameters::setActor, ".*"); + xacmlTemplateContent = xacmlTemplateContent.replace("${actor}", matchParameters.getActor()); + + replaceNullOrEmpty(matchParameters.getRecipe(), matchParameters::setRecipe, ".*"); + xacmlTemplateContent = xacmlTemplateContent.replace("${recipe}", matchParameters.getRecipe()); + + xacmlTemplateContent = xacmlTemplateContent.replace("${guardActiveStart}", + constraint.getActive_time_range().get("start")); + + xacmlTemplateContent = xacmlTemplateContent.replace("${guardActiveEnd}", + constraint.getActive_time_range().get("end")); return xacmlTemplateContent; } + private static void replaceNullOrEmpty(String text, Consumer<String> replacer, String newValue) { + if (isNullOrEmpty(text)) { + replacer.accept(newValue); + } + } + public static boolean isNullOrEmpty(String string) { return string == null || string.trim().isEmpty(); } @@ -162,7 +154,7 @@ public class PolicyGuardYamlToXacml { /** * Convert from Yaml to Xacml blacklist. - * + * * @param yamlFile the Yaml file * @param xacmlTemplate the Xacml template * @param xacmlPolicyOutput the Xacml output @@ -185,6 +177,8 @@ public class PolicyGuardYamlToXacml { String xacmlPolicyContent = generateXacmlGuardBlacklist(xacmlTemplateContent, guardPolicy.getMatch_parameters(), constraint); + logger.debug("{}", xacmlPolicyContent); + Files.write(Paths.get(xacmlPolicyOutput), xacmlPolicyContent.getBytes()); } catch (IOException e) { @@ -194,49 +188,17 @@ public class PolicyGuardYamlToXacml { private static String generateXacmlGuardBlacklist(String xacmlTemplateContent, MatchParameters matchParameters, Constraint constraint) { - Pattern pattern = Pattern.compile("\\$\\{clname\\}"); - Matcher matcher = pattern.matcher(xacmlTemplateContent); - if (isNullOrEmpty(matchParameters.getControlLoopName())) { - matchParameters.setControlLoopName(".*"); - } - xacmlTemplateContent = matcher.replaceAll(matchParameters.getControlLoopName()); - pattern = Pattern.compile("\\$\\{actor\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - if (isNullOrEmpty(matchParameters.getActor())) { - matchParameters.setActor(".*"); - } - xacmlTemplateContent = matcher.replaceAll(matchParameters.getActor()); - - pattern = Pattern.compile("\\$\\{recipe\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - if (isNullOrEmpty(matchParameters.getRecipe())) { - matchParameters.setRecipe(".*"); - } - xacmlTemplateContent = matcher.replaceAll(matchParameters.getRecipe()); - - pattern = Pattern.compile("\\$\\{guardActiveStart\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - xacmlTemplateContent = matcher.replaceAll(constraint.getActive_time_range().get("start")); - - pattern = Pattern.compile("\\$\\{guardActiveEnd\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - xacmlTemplateContent = matcher.replaceAll(constraint.getActive_time_range().get("end")); - logger.debug(xacmlTemplateContent); + String result = doCommonReplacements(xacmlTemplateContent, matchParameters, constraint); for (String target : constraint.getBlacklist()) { - pattern = Pattern.compile("\\$\\{blackListElement\\}"); - matcher = pattern.matcher(xacmlTemplateContent); - xacmlTemplateContent = - matcher.replaceAll("<AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">" + target - + "</AttributeValue>" + "\n\t\t\t\t\t\t\\$\\{blackListElement\\}\n"); + result = result.replace("${blackListElement}", + "<AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">" + target + + "</AttributeValue>" + "\n\t\t\t\t\t\t\\${blackListElement}\n"); } - pattern = Pattern.compile("\t\t\t\t\t\t\\$\\{blackListElement\\}\n"); - matcher = pattern.matcher(xacmlTemplateContent); - xacmlTemplateContent = matcher.replaceAll(""); - + result = result.replace("\t\t\t\t\t\t\\${blackListElement}\n", ""); - return xacmlTemplateContent; + return result; } } |