diff options
Diffstat (limited to 'applications/common/src/main')
-rw-r--r-- | applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/ToscaPolicyTranslatorUtils.java | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/ToscaPolicyTranslatorUtils.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/ToscaPolicyTranslatorUtils.java index 796499d4..a5e804e0 100644 --- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/ToscaPolicyTranslatorUtils.java +++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/ToscaPolicyTranslatorUtils.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2021 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. @@ -29,9 +29,11 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.ApplyType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType; +import oasis.names.tc.xacml._3_0.core.schema.wd_17.ConditionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObjectFactory; import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; +import oasis.names.tc.xacml._3_0.core.schema.wd_17.VariableReferenceType; import org.apache.commons.lang3.StringUtils; /** @@ -114,7 +116,7 @@ public final class ToscaPolicyTranslatorUtils { * @param end ISO8601 timestamp * @return ApplyType */ - public static ApplyType generateTimeInRange(String start, String end) { + public static ApplyType generateTimeInRange(String start, String end, boolean useRecurringFunction) { if (StringUtils.isBlank(start) || StringUtils.isBlank(end)) { return null; } @@ -140,7 +142,11 @@ public final class ToscaPolicyTranslatorUtils { ApplyType applyTimeInRange = new ApplyType(); applyTimeInRange.setDescription("return true if current time is in range."); - applyTimeInRange.setFunctionId(XACML3.ID_FUNCTION_TIME_IN_RANGE.stringValue()); + if (useRecurringFunction) { + applyTimeInRange.setFunctionId(XACML3.ID_FUNCTION_TIME_IN_RECURRING_RANGE.stringValue()); + } else { + applyTimeInRange.setFunctionId(XACML3.ID_FUNCTION_TIME_IN_RANGE.stringValue()); + } applyTimeInRange.getExpression().add(factory.createApply(applyOneAndOnly)); applyTimeInRange.getExpression().add(factory.createAttributeValue(valueStart)); applyTimeInRange.getExpression().add(factory.createAttributeValue(valueEnd)); @@ -214,4 +220,24 @@ public final class ToscaPolicyTranslatorUtils { } return target; } + + /** + * For an existing ConditionType, this method adds in a check for a variable. You must specify + * the function that compares the existing ConditionType's expression against the Variable. + * + * @param condition Existing ConditionType to use + * @param variable VariableReferenceType to use + * @param functionId XACML 3.0 identifier for the function + * @return a new ConditionType + */ + public static ConditionType addVariableToCondition(ConditionType condition, VariableReferenceType variable, + Identifier functionId) { + ApplyType applyFunction = new ApplyType(); + applyFunction.setFunctionId(functionId.stringValue()); + applyFunction.getExpression().add(condition.getExpression()); + applyFunction.getExpression().add(factory.createVariableReference(variable)); + ConditionType newCondition = new ConditionType(); + newCondition.setExpression(factory.createApply(applyFunction)); + return newCondition; + } } |