Remove ECOMP in headers
[clamp.git] / src / main / java / org / onap / clamp / clds / client / req / policy / OperationalPolicyReq.java
index db84a12..8d96dfc 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP CLAMP
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
  *                             reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * limitations under the License.
  * ============LICENSE_END============================================
  * ===================================================================
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * 
  */
 
 package org.onap.clamp.clds.client.req.policy;
 
 import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFLogger.Level;
 import com.att.eelf.configuration.EELFManager;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
@@ -39,17 +36,12 @@ import java.util.Map;
 
 import javax.ws.rs.BadRequestException;
 
-import org.onap.clamp.clds.model.prop.Global;
-import org.onap.clamp.clds.model.prop.ModelProperties;
-import org.onap.clamp.clds.model.prop.PolicyChain;
-import org.onap.clamp.clds.model.prop.PolicyItem;
-import org.onap.clamp.clds.model.prop.Tca;
-import org.onap.clamp.clds.model.refprop.RefProp;
+import org.onap.clamp.clds.config.ClampProperties;
+import org.onap.clamp.clds.model.properties.Global;
+import org.onap.clamp.clds.model.properties.ModelProperties;
+import org.onap.clamp.clds.model.properties.PolicyChain;
+import org.onap.clamp.clds.model.properties.PolicyItem;
 import org.onap.policy.api.AttributeType;
-import org.onap.policy.sdc.Resource;
-import org.onap.policy.sdc.ResourceType;
-import org.onap.policy.sdc.Service;
-import org.onap.policy.controlloop.policy.OperationsAccumulateParams;
 import org.onap.policy.controlloop.policy.Policy;
 import org.onap.policy.controlloop.policy.PolicyResult;
 import org.onap.policy.controlloop.policy.Target;
@@ -58,15 +50,18 @@ import org.onap.policy.controlloop.policy.builder.BuilderException;
 import org.onap.policy.controlloop.policy.builder.ControlLoopPolicyBuilder;
 import org.onap.policy.controlloop.policy.builder.Message;
 import org.onap.policy.controlloop.policy.builder.Results;
+import org.onap.policy.sdc.Resource;
+import org.onap.policy.sdc.ResourceType;
+import org.onap.policy.sdc.Service;
 
 /**
  * Construct an Operational Policy request given CLDS objects.
  */
 public class OperationalPolicyReq {
-    protected static final EELFLogger logger        = EELFManager.getInstance().getLogger(OperationalPolicyReq.class);
-    protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
 
-    private OperationalPolicyReq() {
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(OperationalPolicyReq.class);
+
+    protected OperationalPolicyReq() {
     }
 
     /**
@@ -74,40 +69,22 @@ public class OperationalPolicyReq {
      *
      * @param refProp
      * @param prop
+     * @param modelElementId
+     * @param policyChain
      * @return
      * @throws BuilderException
      * @throws UnsupportedEncodingException
      */
-    public static Map<AttributeType, Map<String, String>> formatAttributes(RefProp refProp, ModelProperties prop,
-            String modelElementId, PolicyChain policyChain) throws BuilderException, UnsupportedEncodingException {
+    public static Map<AttributeType, Map<String, String>> formatAttributes(ClampProperties refProp,
+            ModelProperties prop, String modelElementId, PolicyChain policyChain)
+            throws BuilderException, UnsupportedEncodingException {
         Global global = prop.getGlobal();
         prop.setCurrentModelElementId(modelElementId);
         prop.setPolicyUniqueId(policyChain.getPolicyId());
-        String templateName = "";
-        String operationTopic = "";
-        String notificationTopic = "";
-        String controller = "";
-        Tca tca = prop.getType(Tca.class);
-        if (tca != null && tca.isFound()) {
-            if (!global.getActionSet().equalsIgnoreCase("enbRecipe")) {
-                throw new BadRequestException(
-                        "Operation Policy validation problem: action set is not selected properly.");
-            }
-            templateName = refProp.getStringValue("op.eNodeB.templateName", global.getService());
-            operationTopic = refProp.getStringValue("op.eNodeB.operationTopic", global.getService());
-            notificationTopic = refProp.getStringValue("op.eNodeB.notificationTopic", global.getService());
-            controller = refProp.getStringValue("op.eNodeB.controller", global.getService());
-        } else {
-            if (!global.getActionSet().equalsIgnoreCase("vnfRecipe")) {
-                throw new BadRequestException(
-                        "Operation Policy validation problem: Action set is not selected properly.");
-            }
-            templateName = refProp.getStringValue("op.templateName", global.getService());
-            operationTopic = refProp.getStringValue("op.operationTopic", global.getService());
-            notificationTopic = refProp.getStringValue("op.notificationTopic", global.getService());
-            controller = refProp.getStringValue("op.controller", global.getService());
-        }
-
+        String templateName = refProp.getStringValue("op.templateName", global.getService());
+        String operationTopic = refProp.getStringValue("op.operationTopic", global.getService());
+        String notificationTopic = refProp.getStringValue("op.notificationTopic", global.getService());
+        String controller = refProp.getStringValue("op.controller", global.getService());
         String recipeTopic = refProp.getStringValue("op.recipeTopic", global.getService());
         // ruleAttributes
         logger.info("templateName=" + templateName);
@@ -137,8 +114,7 @@ public class OperationalPolicyReq {
         } else {
             logger.info("operationTopic=" + operationTopic);
             // format yaml
-            String yaml = (tca != null && tca.isFound()) ? formateNodeBYaml(refProp, prop, modelElementId, policyChain)
-                    : formatYaml(refProp, prop, modelElementId, policyChain);
+            String yaml = formatYaml(refProp, prop, modelElementId, policyChain);
             ruleAttributes.put("OperationTopic", operationTopic);
             ruleAttributes.put("ControlLoopYaml", yaml);
         }
@@ -152,15 +128,17 @@ public class OperationalPolicyReq {
     }
 
     /**
-     * Format Operational Policy yaml.
-     *
+     * Format Operational OpenLoop Policy yaml.
+     * 
      * @param refProp
      * @param prop
+     * @param modelElementId
+     * @param policyChain
      * @return
      * @throws BuilderException
      * @throws UnsupportedEncodingException
      */
-    public static String formatYaml(RefProp refProp, ModelProperties prop, String modelElementId,
+    protected static String formatOpenLoopYaml(ClampProperties refProp, ModelProperties prop, String modelElementId,
             PolicyChain policyChain) throws BuilderException, UnsupportedEncodingException {
         // get property objects
         Global global = prop.getGlobal();
@@ -169,38 +147,10 @@ public class OperationalPolicyReq {
         // convert values to SDC objects
         Service service = new Service(global.getService());
         Resource[] vfResources = convertToResource(global.getResourceVf(), ResourceType.VF);
-        Resource[] vfcResources = convertToResource(global.getResourceVfc(), ResourceType.VFC);
         // create builder
         ControlLoopPolicyBuilder builder = ControlLoopPolicyBuilder.Factory.buildControlLoop(prop.getControlName(),
                 policyChain.getTimeout(), service, vfResources);
-        builder.addResource(vfcResources);
-        // process each policy
-        Map<String, Policy> policyObjMap = new HashMap<>();
-        List<PolicyItem> policyItemList = orderParentFirst(policyChain.getPolicyItems());
-        for (PolicyItem policyItem : policyItemList) {
-            String policyName = policyItem.getRecipe() + " Policy";
-            Target target = new Target();
-            target.setType(TargetType.VM);
-            target.setResourceID(policyItem.getTargetResourceId());
-            Policy policyObj;
-            if (policyItemList.indexOf(policyItem) == 0) {
-                String policyDescription = policyItem.getRecipe()
-                        + " Policy - the trigger (no parent) policy - created by CLDS";
-                policyObj = builder.setTriggerPolicy(policyName, policyDescription,
-                        refProp.getStringValue("op.policy.appc"), target, policyItem.getRecipe(), null,
-                        policyItem.getMaxRetries(), policyItem.getRetryTimeLimit());
-            } else {
-                Policy parentPolicyObj = policyObjMap.get(policyItem.getParentPolicy());
-                String policyDescription = policyItem.getRecipe() + " Policy - triggered conditionally by "
-                        + parentPolicyObj.getName() + " - created by CLDS";
-                policyObj = builder.setPolicyForPolicyResult(policyName, policyDescription,
-                        refProp.getStringValue("op.policy.appc"), target, policyItem.getRecipe(), null,
-                        policyItem.getMaxRetries(), policyItem.getRetryTimeLimit(), parentPolicyObj.getId(),
-                        convertToPolicyResult(policyItem.getParentPolicyConditions()));
-                logger.info("policyObj.id=" + policyObj.getId() + "; parentPolicyObj.id=" + parentPolicyObj.getId());
-            }
-            policyObjMap.put(policyItem.getId(), policyObj);
-        }
+        // builder.setTriggerPolicy(refProp.getStringValue("op.openloop.policy"));
         // Build the specification
         Results results = builder.buildSpecification();
         validate(results);
@@ -212,11 +162,13 @@ public class OperationalPolicyReq {
      *
      * @param refProp
      * @param prop
+     * @param modelElementId
+     * @param policyChain
      * @return
      * @throws BuilderException
      * @throws UnsupportedEncodingException
      */
-    public static String formateNodeBYaml(RefProp refProp, ModelProperties prop, String modelElementId,
+    protected static String formatYaml(ClampProperties refProp, ModelProperties prop, String modelElementId,
             PolicyChain policyChain) throws BuilderException, UnsupportedEncodingException {
         // get property objects
         Global global = prop.getGlobal();
@@ -232,48 +184,38 @@ public class OperationalPolicyReq {
         builder.addResource(vfcResources);
         // process each policy
         Map<String, Policy> policyObjMap = new HashMap<>();
-        List<PolicyItem> policyItemList = addAOTSActorRecipe(refProp, global.getService(),
-                policyChain.getPolicyItems());
-        Policy lastPolicyObj = new Policy();
+        List<PolicyItem> policyItemList = orderParentFirst(policyChain.getPolicyItems());
         for (PolicyItem policyItem : policyItemList) {
+            String policyName = policyItem.getRecipe() + " Policy";
             Target target = new Target();
             target.setType(TargetType.VM);
             target.setResourceID(policyItem.getTargetResourceId());
-            String policyName = policyItem.getRecipe() + " Policy";
             Policy policyObj;
             if (policyItemList.indexOf(policyItem) == 0) {
-                // To set up time window payload for trigger policy
-                Map<String, String> payloadMap = new HashMap<>();
-                payloadMap.put("timeWindow", refProp.getStringValue("op.eNodeB.timeWindow"));
                 String policyDescription = policyItem.getRecipe()
                         + " Policy - the trigger (no parent) policy - created by CLDS";
-                policyObj = builder.setTriggerPolicy(policyName, policyDescription, policyItem.getActor(), target,
-                        policyItem.getRecipe(), payloadMap, policyItem.getMaxRetries(), policyItem.getRetryTimeLimit());
+                policyObj = builder.setTriggerPolicy(policyName, policyDescription,
+                        refProp.getStringValue("op.policy.appc"), target, policyItem.getRecipe(), null,
+                        policyItem.getMaxRetries(), policyItem.getRetryTimeLimit());
             } else {
                 Policy parentPolicyObj = policyObjMap.get(policyItem.getParentPolicy());
                 String policyDescription = policyItem.getRecipe() + " Policy - triggered conditionally by "
                         + parentPolicyObj.getName() + " - created by CLDS";
-                policyObj = builder.setPolicyForPolicyResult(policyName, policyDescription, policyItem.getActor(),
-                        target, policyItem.getRecipe(), null, policyItem.getMaxRetries(),
-                        policyItem.getRetryTimeLimit(), parentPolicyObj.getId(),
+                policyObj = builder.setPolicyForPolicyResult(policyName, policyDescription,
+                        refProp.getStringValue("op.policy.appc"), target, policyItem.getRecipe(), null,
+                        policyItem.getMaxRetries(), policyItem.getRetryTimeLimit(), parentPolicyObj.getId(),
                         convertToPolicyResult(policyItem.getParentPolicyConditions()));
-                lastPolicyObj = policyObj;
                 logger.info("policyObj.id=" + policyObj.getId() + "; parentPolicyObj.id=" + parentPolicyObj.getId());
             }
             policyObjMap.put(policyItem.getId(), policyObj);
         }
-        // To set up operations accumulate params
-        OperationsAccumulateParams operationsAccumulateParams = new OperationsAccumulateParams();
-        operationsAccumulateParams.setLimit(Integer.valueOf(refProp.getStringValue("op.eNodeB.limit")));
-        operationsAccumulateParams.setPeriod(refProp.getStringValue("op.eNodeB.period"));
-        builder.addOperationsAccumulateParams(lastPolicyObj.getId(), operationsAccumulateParams);
         // Build the specification
         Results results = builder.buildSpecification();
         validate(results);
         return URLEncoder.encode(results.getSpecification(), "UTF-8");
     }
 
-    private static void validate (Results results) {
+    private static void validate(Results results) {
         if (results.isValid()) {
             logger.info("results.getSpecification()=" + results.getSpecification());
         } else {
@@ -288,46 +230,6 @@ public class OperationalPolicyReq {
         }
     }
 
-    /**
-     * Adding AOTS actor and other recipe for yaml
-     *
-     * @param inOrigList
-     * @return
-     */
-    private static List<PolicyItem> addAOTSActorRecipe(RefProp refProp, String service, List<PolicyItem> inOrigList) {
-        List<PolicyItem> outList = new ArrayList<>();
-        try {
-            PolicyItem policyItem = inOrigList.get(0);
-            ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("op.eNodeB.recipe", service);
-            Iterator<JsonNode> itr = rootNode.get("eNodeBRecipes").elements();
-            while (itr.hasNext()) {
-                PolicyItem policyItemObj = (PolicyItem) policyItem.clone();
-                JsonNode recipeNode = itr.next();
-                policyItemObj.setId(recipeNode.path("Recipe").asText());
-                policyItemObj.setActor(recipeNode.path("Actor").asText());
-                policyItemObj.setRecipe(recipeNode.path("Recipe").asText());
-                policyItemObj.setParentPolicy(recipeNode.path("ParentPolicy").asText());
-                if (!recipeNode.path("Retry").asText().isEmpty()) {
-                    policyItemObj.setMaxRetries(Integer.parseInt(recipeNode.path("Retry").asText()));
-                }
-                if (!recipeNode.path("TimeLimit").asText().isEmpty()) {
-                    policyItemObj.setRetryTimeLimit(Integer.parseInt(recipeNode.path("TimeLimit").asText()));
-                }
-                if (!recipeNode.path("PPConditions").asText().isEmpty()) {
-                    List<String> parentPolicyConditions = new ArrayList<>();
-                    for (String ppCondition : recipeNode.path("PPConditions").asText().split(",")) {
-                        parentPolicyConditions.add(ppCondition);
-                    }
-                    policyItemObj.setParentPolicyConditions(parentPolicyConditions);
-                }
-                outList.add(policyItemObj);
-            }
-        } catch (Exception e) {
-            logger.log(Level.ERROR, "Error", e);
-        }
-        return outList;
-    }
-
     /**
      * Order list of PolicyItems so that parents come before any of their
      * children