package org.onap.policy.controlloop.compiler;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
import java.io.InputStream;
import java.io.Serializable;
-import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.lang3.StringUtils;
-import org.jgrapht.DirectedGraph;
+import org.jgrapht.Graph;
import org.jgrapht.graph.ClassBasedEdgeFactory;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.DirectedMultigraph;
//
// For this version we can use a directed multigraph, in the future we may not be able to
//
- DirectedGraph<NodeWrapper, LabeledEdge> graph =
+ Graph<NodeWrapper, LabeledEdge> graph =
new DirectedMultigraph<>(new ClassBasedEdgeFactory<NodeWrapper,
LabeledEdge>(LabeledEdge.class));
//
//
// They really shouldn't have any policies attached.
//
- if ((policy.getPolicies() != null || policy.getPolicies().isEmpty()) && callback != null ) {
+ if ((policy.getPolicies() != null || policy.getPolicies().isEmpty()) && callback != null) {
callback.onWarning("Open Loop policy contains policies. The policies will never be invoked.");
}
}
}
private static Map<Policy, PolicyNodeWrapper> addPoliciesAsNodes(ControlLoopPolicy policy,
- DirectedGraph<NodeWrapper, LabeledEdge> graph, TriggerNodeWrapper triggerNode,
+ Graph<NodeWrapper, LabeledEdge> graph, TriggerNodeWrapper triggerNode,
ControlLoopCompilerCallback callback) {
Map<Policy, PolicyNodeWrapper> mapNodes = new HashMap<>();
for (Policy operPolicy : policy.getPolicies()) {
return mapNodes;
}
- private static void addEdge(DirectedGraph<NodeWrapper, LabeledEdge> graph, Map<Policy, PolicyNodeWrapper> mapNodes,
+ private static void addEdge(Graph<NodeWrapper, LabeledEdge> graph, Map<Policy, PolicyNodeWrapper> mapNodes,
String policyId, String connectedPolicy,
FinalResultNodeWrapper finalResultNodeWrapper,
PolicyResult policyResult, NodeWrapper node) throws CompilerException {
}
}
- private static void validateNodesAndEdges(DirectedGraph<NodeWrapper, LabeledEdge> graph,
+ private static void validateNodesAndEdges(Graph<NodeWrapper, LabeledEdge> graph,
ControlLoopCompilerCallback callback) throws CompilerException {
for (NodeWrapper node : graph.vertexSet()) {
if (node instanceof TriggerNodeWrapper) {
}
}
- private static void validateTriggerNodeWrapper(DirectedGraph<NodeWrapper, LabeledEdge> graph,
+ private static void validateTriggerNodeWrapper(Graph<NodeWrapper, LabeledEdge> graph,
NodeWrapper node) throws CompilerException {
if (LOGGER.isDebugEnabled()) {
LOGGER.info("Trigger Node {}", node);
}
- if (graph.inDegreeOf(node) > 0 ) {
+ if (graph.inDegreeOf(node) > 0) {
//
// Really should NEVER get here unless someone messed up the code above.
//
}
}
- private static void validateFinalResultNodeWrapper(DirectedGraph<NodeWrapper, LabeledEdge> graph,
+ private static void validateFinalResultNodeWrapper(Graph<NodeWrapper, LabeledEdge> graph,
NodeWrapper node) throws CompilerException {
if (LOGGER.isDebugEnabled()) {
LOGGER.info("FinalResult Node {}", node);
}
}
- private static void validatePolicyNodeWrapper(DirectedGraph<NodeWrapper, LabeledEdge> graph,
+ private static void validatePolicyNodeWrapper(Graph<NodeWrapper, LabeledEdge> graph,
NodeWrapper node, ControlLoopCompilerCallback callback) throws CompilerException {
if (LOGGER.isDebugEnabled()) {
LOGGER.info("Policy Node {}", node);
if (! isRecipeOk(operPolicy, callback)) {
isOk = false;
}
- if (! isTargetOk(operPolicy, callback) ) {
+ if (! isTargetOk(operPolicy, callback)) {
isOk = false;
}
- if (! arePolicyResultsOk(operPolicy, callback) ) {
+ if (! arePolicyResultsOk(operPolicy, callback)) {
isOk = false;
}
return isOk;
}
private static boolean isActorOk(Policy operPolicy, ControlLoopCompilerCallback callback) {
- boolean isOk = true;
- if (operPolicy.getActor() == null) {
+ if (StringUtils.isBlank(operPolicy.getActor())) {
if (callback != null) {
callback.onError("Policy actor is null");
}
- isOk = false;
- }
- //
- // Construct a list for all valid actors
- //
- ImmutableList<String> actors = ImmutableList.of("APPC", "SDNC", "SDNR", "SO", "VFC");
- //
- if (operPolicy.getActor() != null && (!actors.contains(operPolicy.getActor())) ) {
- if (callback != null) {
- callback.onError("Policy actor is invalid");
- }
- isOk = false;
+ return false;
}
- return isOk;
+ return true;
}
private static boolean isRecipeOk(Policy operPolicy, ControlLoopCompilerCallback callback) {
- boolean isOk = true;
- if (operPolicy.getRecipe() == null) {
+ if (StringUtils.isBlank(operPolicy.getRecipe())) {
if (callback != null) {
callback.onError("Policy recipe is null");
}
- isOk = false;
- }
- //
- // NOTE: We need a way to find the acceptable recipe values (either Enum or a database that has these)
- //
- ImmutableMap<String, List<String>> recipes = new ImmutableMap.Builder<String, List<String>>()
- .put("APPC", ImmutableList.of("Restart", "Rebuild", "Migrate", "ModifyConfig"))
- .put("SDNC", ImmutableList.of("Reroute"))
- .put("SDNR", ImmutableList.of("ModifyConfig"))
- .put("SO", ImmutableList.of("VF Module Create", "VF Module Delete"))
- .put("VFC", ImmutableList.of("Restart"))
- .build();
- //
- if (operPolicy.getRecipe() != null
- && (!recipes.getOrDefault(operPolicy.getActor(),
- Collections.emptyList()).contains(operPolicy.getRecipe()))) {
- if (callback != null) {
- callback.onError("Policy recipe is invalid");
- }
- isOk = false;
+ return false;
}
- return isOk;
+ return true;
}
private static boolean isTargetOk(Policy operPolicy, ControlLoopCompilerCallback callback) {
// Check that policy results are connected to either default final * or another policy
//
boolean isOk = isSuccessPolicyResultOk(operPolicy, callback);
- if (! isFailurePolicyResultOk(operPolicy, callback) ) {
+ if (! isFailurePolicyResultOk(operPolicy, callback)) {
isOk = false;
}
- if (! isFailureRetriesPolicyResultOk(operPolicy, callback) ) {
+ if (! isFailureRetriesPolicyResultOk(operPolicy, callback)) {
isOk = false;
}
- if (! isFailureTimeoutPolicyResultOk(operPolicy, callback) ) {
+ if (! isFailureTimeoutPolicyResultOk(operPolicy, callback)) {
isOk = false;
}
- if (! isFailureExceptionPolicyResultOk(operPolicy, callback) ) {
+ if (! isFailureExceptionPolicyResultOk(operPolicy, callback)) {
isOk = false;
}
- if (! isFailureGuardPolicyResultOk(operPolicy, callback) ) {
+ if (! isFailureGuardPolicyResultOk(operPolicy, callback)) {
isOk = false;
}
return isOk;
}
private static boolean isSuccessPolicyResultOk(Policy operPolicy, ControlLoopCompilerCallback callback) {
- boolean isOk = true;
if (FinalResult.toResult(operPolicy.getSuccess()) != null
&& !operPolicy.getSuccess().equals(FinalResult.FINAL_SUCCESS.toString())) {
if (callback != null) {
callback.onError("Policy success is neither another policy nor FINAL_SUCCESS");
}
- isOk = false;
+ return false;
}
- return isOk;
+ return true;
}
private static boolean isFailurePolicyResultOk(Policy operPolicy, ControlLoopCompilerCallback callback) {
- boolean isOk = true;
if (FinalResult.toResult(operPolicy.getFailure()) != null
&& !operPolicy.getFailure().equals(FinalResult.FINAL_FAILURE.toString())) {
if (callback != null) {
callback.onError("Policy failure is neither another policy nor FINAL_FAILURE");
}
- isOk = false;
+ return false;
}
- return isOk;
+ return true;
}
private static boolean isFailureRetriesPolicyResultOk(Policy operPolicy, ControlLoopCompilerCallback callback) {
- boolean isOk = true;
if (FinalResult.toResult(operPolicy.getFailure_retries()) != null
&& !operPolicy.getFailure_retries().equals(FinalResult.FINAL_FAILURE_RETRIES.toString())) {
if (callback != null) {
callback.onError("Policy failure retries is neither another policy nor FINAL_FAILURE_RETRIES");
}
- isOk = false;
+ return false;
}
- return isOk;
+ return true;
}
private static boolean isFailureTimeoutPolicyResultOk(Policy operPolicy, ControlLoopCompilerCallback callback) {
- boolean isOk = true;
if (FinalResult.toResult(operPolicy.getFailure_timeout()) != null
&& !operPolicy.getFailure_timeout().equals(FinalResult.FINAL_FAILURE_TIMEOUT.toString())) {
if (callback != null) {
callback.onError("Policy failure timeout is neither another policy nor FINAL_FAILURE_TIMEOUT");
}
- isOk = false;
+ return false;
}
- return isOk;
+ return true;
}
private static boolean isFailureExceptionPolicyResultOk(Policy operPolicy, ControlLoopCompilerCallback callback) {
- boolean isOk = true;
if (FinalResult.toResult(operPolicy.getFailure_exception()) != null
&& !operPolicy.getFailure_exception().equals(FinalResult.FINAL_FAILURE_EXCEPTION.toString())) {
if (callback != null) {
callback.onError("Policy failure exception is neither another policy nor FINAL_FAILURE_EXCEPTION");
}
- isOk = false;
+ return false;
}
- return isOk;
+ return true;
}
private static boolean isFailureGuardPolicyResultOk(Policy operPolicy, ControlLoopCompilerCallback callback) {
- boolean isOk = true;
if (FinalResult.toResult(operPolicy.getFailure_guard()) != null
&& !operPolicy.getFailure_guard().equals(FinalResult.FINAL_FAILURE_GUARD.toString())) {
if (callback != null) {
callback.onError("Policy failure guard is neither another policy nor FINAL_FAILURE_GUARD");
}
- isOk = false;
+ return false;
}
- return isOk;
+ return true;
}
private static PolicyNodeWrapper findPolicyNode(Map<Policy, PolicyNodeWrapper> mapNodes, String id) {