package org.opennaas.extensions.router.model; /* * #%L * OpenNaaS :: CIM Model * %% * Copyright (C) 2007 - 2014 FundaciĆ³ Privada i2CAT, Internet i InnovaciĆ³ a Catalunya * %% * 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. * #L% */ /** * The central class used for representing the 'If Condition then Action' semantics of a policy rule. A PolicyRule condition, in the most general * sense, is represented as either an ORed set of ANDed conditions (Disjunctive Normal Form, or DNF) or an ANDed set of ORed conditions (Conjunctive * Normal Form, or CNF). Individual conditions may either be negated (NOT C) or unnegated (C). The actions specified by a PolicyRule are to be * performed if and only if the PolicyRule condition (whether it is represented in DNF or CNF) evaluates to TRUE.<br> * <br> * <br> * <br> * The conditions and actions associated with a PolicyRule are modeled, respectively, with subclasses of PolicyCondition and PolicyAction. These * condition and action objects are tied to instances of PolicyRule by the PolicyConditionInPolicyRule and PolicyActionInPolicyRule aggregations.<br> * <br> * <br> * <br> * A PolicyRule may also be associated with one or more policy time periods, indicating the schedule according to which the policy rule is active and * inactive. In this case it is the PolicySetValidityPeriod aggregation that provides this linkage.<br> * <br> * <br> * <br> * The PolicyRule class uses the property ConditionListType, to indicate whether the conditions for the rule are in DNF (disjunctive normal form), CNF * (conjunctive normal form) or, in the case of a rule with no conditions, as an UnconditionalRule. The PolicyConditionInPolicyRule aggregation * contains two additional properties to complete the representation of the Rule's conditional expression. The first of these properties is an integer * to partition the referenced PolicyConditions into one or more groups, and the second is a Boolean to indicate whether a referenced Condition is * negated. An example shows how ConditionListType and these two additional properties provide a unique representation of a set of PolicyConditions in * either DNF or CNF.<br> * <br> * <br> * <br> * Suppose we have a PolicyRule that aggregates five PolicyConditions C1 through C5, with the following values in the properties of the five * PolicyConditionInPolicyRule associations:<br> * <br> * C1: GroupNumber = 1, ConditionNegated = FALSE<br> * <br> * C2: GroupNumber = 1, ConditionNegated = TRUE<br> * <br> * C3: GroupNumber = 1, ConditionNegated = FALSE<br> * <br> * C4: GroupNumber = 2, ConditionNegated = FALSE<br> * <br> * C5: GroupNumber = 2, ConditionNegated = FALSE<br> * <br> * <br> * <br> * If ConditionListType = DNF, then the overall condition for the PolicyRule is:<br> * <br> * (C1 AND (NOT C2) AND C3) OR (C4 AND C5)<br> * <br> * <br> * <br> * On the other hand, if ConditionListType = CNF, then the overall condition for the PolicyRule is:<br> * <br> * (C1 OR (NOT C2) OR C3) AND (C4 OR C5)<br> * <br> * <br> * <br> * In both cases, there is an unambiguous specification of the overall condition that is tested to determine whether to perform the PolicyActions * associated with the PolicyRule.<br> * <br> * <br> * <br> * PolicyRule instances may also be used to aggregate other PolicyRules and/or PolicyGroups. When used in this way to implement nested rules, the * conditions of the aggregating rule apply to the subordinate rules as well. However, any side effects of condition evaluation or the execution of * actions MUST NOT affect the result of the evaluation of other conditions evaluated by the rule engine in the same evaluation pass. That is, an * implementation of a rule engine MAY evaluate all conditions in any order before applying the priority and determining which actions are to be * executed. * * @version 2.20.1 */ /* * @Generated(value="org.dmtf.cim.TranslateCIM", comments="TranslateCIM version 0.9.1", date="2012-11-19T12:22:55+0100") */ public class PolicyRule extends PolicySet { /** * Default constructor */ public PolicyRule() { } /** * The scoping System's CreationClassName. */ private String systemCreationClassName; /** * The scoping System's Name. */ private String systemName; /** * CreationClassName indicates the name of the class or the subclass used in the creation of an instance. When used with the other key properties * of this class, this property allows all instances of this class and its subclasses to be uniquely identified. */ private String creationClassName; /** * A user-friendly name of this PolicyRule. */ private String policyRuleName; /** * Indicates whether the list of PolicyConditions associated with this PolicyRule is in disjunctive normal form (DNF), conjunctive normal form * (CNF), or has no conditions (i.e., is an UnconditionalRule) and is automatically evaluated to "True." The default value is 1 ("DNF"). */ public enum conditionListType_enum { Unconditional_Rule(0), DNF(1), CNF(2); private final int localValue; conditionListType_enum(int enumValue) { this.localValue = enumValue; } } private conditionListType_enum conditionListType = conditionListType_enum.DNF; /** * A free-form string that can be used to provide guidelines on how this PolicyRule should be used. */ private String ruleUsage; /** * PolicyRule.Priority is deprecated and replaced by providing the priority for a rule (and a group) in the context of the aggregating PolicySet * instead of the priority being used for all aggregating PolicySet instances. Thus, the assignment of priority values is much simpler.<br> * <br> * <br> * <br> * A non-negative integer for prioritizing this Policy Rule relative to other Rules. A larger value indicates a higher priority. The default value * is 0. * * @deprecated - Replaced by CIM_PolicySetComponent.Priority */ @Deprecated private int priority = 0; /** * A flag indicating that the evaluation of the Policy Conditions and execution of PolicyActions (if the Conditions evaluate to TRUE) is required. * The evaluation of a PolicyRule MUST be attempted if the Mandatory property value is TRUE. If the Mandatory property is FALSE, then the * evaluation of the Rule is 'best effort' and MAY be ignored. * * @deprecated - Replaced by No Value */ @Deprecated private boolean mandatory; /** * This property gives a policy administrator a way of specifying how the ordering of the PolicyActions associated with this PolicyRule is to be * interpreted. Three values are supported:<br> * <br> * o mandatory(1): Do the actions in the indicated order, or don't do them at all.<br> * <br> * o recommended(2): Do the actions in the indicated order if you can, but if you can't do them in this order, do them in another order if you * can.<br> * <br> * o dontCare(3): Do them -- I don't care about the order.<br> * <br> * The default value is 3 ("DontCare"). */ public enum sequencedActions_enum { Mandatory(1), Recommended(2), Dont_Care(3); private final int localValue; sequencedActions_enum(int enumValue) { this.localValue = enumValue; } } private sequencedActions_enum sequencedActions = sequencedActions_enum.Dont_Care; /** * ExecutionStrategy defines the strategy to be used in executing the sequenced actions aggregated by this PolicyRule. There are three execution * strategies:<br> * <br> * <br> * <br> * Do Until Success - execute actions according to predefined order, until successful execution of a single action.<br> * <br> * Do All - execute ALL actions which are part of the modeled set, according to their predefined order. Continue doing this, even if one or more * of the actions fails.<br> * <br> * Do Until Failure - execute actions according to predefined order, until the first failure in execution of an action instance. */ public enum executionStrategy_enum { Do_Until_Success(1), Do_All(2), Do_Until_Failure(3); private final int localValue; executionStrategy_enum(int enumValue) { this.localValue = enumValue; } } private executionStrategy_enum executionStrategy; public String getSystemCreationClassName() { return systemCreationClassName; } public void setSystemCreationClassName(String systemCreationClassName) { this.systemCreationClassName = systemCreationClassName; } public String getSystemName() { return systemName; } public void setSystemName(String systemName) { this.systemName = systemName; } public String getCreationClassName() { return creationClassName; } public void setCreationClassName(String creationClassName) { this.creationClassName = creationClassName; } public String getPolicyRuleName() { return policyRuleName; } public void setPolicyRuleName(String policyRuleName) { this.policyRuleName = policyRuleName; } public conditionListType_enum getConditionListType() { return conditionListType; } public void setConditionListType(conditionListType_enum conditionListType) { this.conditionListType = conditionListType; } public String getRuleUsage() { return ruleUsage; } public void setRuleUsage(String ruleUsage) { this.ruleUsage = ruleUsage; } @Deprecated public int getPriority() { return priority; } @Deprecated public void setPriority(int priority) { this.priority = priority; } @Deprecated public boolean isMandatory() { return mandatory; } @Deprecated public void setMandatory(boolean mandatory) { this.mandatory = mandatory; } public sequencedActions_enum getSequencedActions() { return sequencedActions; } public void setSequencedActions(sequencedActions_enum sequencedActions) { this.sequencedActions = sequencedActions; } public executionStrategy_enum getExecutionStrategy() { return executionStrategy; } public void setExecutionStrategy(executionStrategy_enum executionStrategy) { this.executionStrategy = executionStrategy; } }