Unit/SONAR/Checkstyle in ONAP-REST
[policy/engine.git] / POLICY-SDK-APP / src / main / java / org / onap / policy / controller / CreateClosedLoopFaultController.java
index 4c32493..58765de 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017, 2019 AT&T Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2019 Bell Canada
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
 
 package org.onap.policy.controller;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.ArrayList;
@@ -29,9 +33,15 @@ import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-
 import java.util.Objects;
 import java.util.stream.IntStream;
+import lombok.Getter;
+import lombok.Setter;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType;
+
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.rest.adapter.ClosedLoopFaultBody;
@@ -40,26 +50,14 @@ import org.onap.policy.rest.adapter.ClosedLoopFaultTriggerUISignatures;
 import org.onap.policy.rest.adapter.ClosedLoopSignatures;
 import org.onap.policy.rest.adapter.PolicyRestAdapter;
 import org.onap.policy.rest.dao.CommonClassDao;
-import org.onap.policy.rest.jpa.OnapName;
 import org.onap.policy.rest.jpa.PolicyEntity;
 import org.onap.policy.rest.jpa.VarbindDictionary;
+import org.onap.policy.utils.PolicyUtils;
 import org.onap.portalsdk.core.controller.RestrictedBaseController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectWriter;
-
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType;
-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.PolicyType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType;
-
 @Controller
 @RequestMapping("/")
 public class CreateClosedLoopFaultController extends RestrictedBaseController {
@@ -74,7 +72,6 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
     private static final String CONNECT_TRAP_2 = "connectTrap2";
     private static final String TRAP_COUNT_2 = "trapCount2";
     private static final String TRIGGER_1 = "trigger1";
-    private static final String ENC_UTF_8 = "UTF-8";
     private static final String TRIGGER_2 = "trigger2";
 
     protected PolicyRestAdapter policyAdapter = null;
@@ -90,19 +87,25 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
         // Empty constructor
     }
 
+    /**
+     * setDataToPolicyRestAdapter.
+     *
+     * @param policyData PolicyRestAdapter
+     * @param root JsonNode
+     * @return PolicyRestAdapter
+     */
     public PolicyRestAdapter setDataToPolicyRestAdapter(PolicyRestAdapter policyData, JsonNode root) {
         try {
             ObjectMapper mapper = new ObjectMapper();
             mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-            ClosedLoopFaultTrapDatas trapDatas = mapper
-                .readValue(root.get("trapData").toString(), ClosedLoopFaultTrapDatas.class);
-            ClosedLoopFaultTrapDatas faultDatas = mapper
-                .readValue(root.get("faultData").toString(), ClosedLoopFaultTrapDatas.class);
-            ClosedLoopGridJSONData policyJsonData = mapper
-                .readValue(root.get("policyData").get("policy").toString(), ClosedLoopGridJSONData.class);
-            ClosedLoopFaultBody jsonBody = mapper
-                .readValue(root.get("policyData").get("policy").get("jsonBodyData").toString(),
-                    ClosedLoopFaultBody.class);
+            final ClosedLoopFaultTrapDatas trapDatas =
+                    mapper.readValue(root.get("trapData").toString(), ClosedLoopFaultTrapDatas.class);
+            final ClosedLoopFaultTrapDatas faultDatas =
+                    mapper.readValue(root.get("faultData").toString(), ClosedLoopFaultTrapDatas.class);
+            final ClosedLoopGridJsonData policyJsonData =
+                    mapper.readValue(root.get("policyData").get("policy").toString(), ClosedLoopGridJsonData.class);
+            final ClosedLoopFaultBody jsonBody = mapper.readValue(
+                    root.get("policyData").get("policy").get("jsonBodyData").toString(), ClosedLoopFaultBody.class);
 
             // Build trapSignatureDatas list from faultData
             List<Object> trapSignatureDatas = new ArrayList<>();
@@ -118,10 +121,10 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
                 triggerSignatures.setTrapMaxAge(Integer.parseInt(policyData.getTrapMaxAge()));
                 ClosedLoopFaultTriggerUISignatures uiTriggerSignatures = new ClosedLoopFaultTriggerUISignatures();
                 if (!trapSignatureDatas.isEmpty()) {
-                    uiTriggerSignatures.setSignatures(getUITriggerSignature(TRAP, trapSignatureDatas.get(0)));
+                    uiTriggerSignatures.setSignatures(getUiTriggerSignature(TRAP, trapSignatureDatas.get(0)));
                     if (!policyJsonData.getConnecttriggerSignatures().isEmpty()) {
                         uiTriggerSignatures
-                            .setConnectSignatures(getUIConnectTraps(policyJsonData.getConnecttriggerSignatures()));
+                                .setConnectSignatures(getUiConnectTraps(policyJsonData.getConnecttriggerSignatures()));
                     }
                 }
                 jsonBody.setTriggerSignaturesUsedForUI(uiTriggerSignatures);
@@ -144,19 +147,17 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
                 faultSignatures.setTimeWindow(Integer.parseInt(policyData.getVerificationclearTimeOut()));
                 ClosedLoopFaultTriggerUISignatures uifaultSignatures = new ClosedLoopFaultTriggerUISignatures();
                 if (!faultSignatureDatas.isEmpty()) {
-                    uifaultSignatures.setSignatures(getUITriggerSignature(FAULT, faultSignatureDatas.get(0)));
+                    uifaultSignatures.setSignatures(getUiTriggerSignature(FAULT, faultSignatureDatas.get(0)));
                     if (!policyJsonData.getConnectVerificationSignatures().isEmpty()) {
-                        uifaultSignatures
-                            .setConnectSignatures(getUIConnectTraps(policyJsonData.getConnectVerificationSignatures()));
+                        uifaultSignatures.setConnectSignatures(
+                                getUiConnectTraps(policyJsonData.getConnectVerificationSignatures()));
                     }
                 }
                 jsonBody.setVerificationSignaturesUsedForUI(uifaultSignatures);
                 jsonBody.setVerificationTimeWindowUsedForUI(Integer.parseInt(policyData.getVerificationclearTimeOut()));
             }
             jsonBody.setVerificationSignatures(faultSignatures);
-            ObjectWriter om = new ObjectMapper().writer();
-            String json = om.writeValueAsString(jsonBody);
-            policyData.setJsonBody(json);
+            policyData.setJsonBody(new ObjectMapper().writer().writeValueAsString(jsonBody));
 
         } catch (Exception e) {
             policyLogger.error("Exception Occured while setting data to Adapter", e);
@@ -165,13 +166,14 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
     }
 
     // TODO: Can getResultBody() and getFaultBody() be merged?
-    private String getResultBody(final ClosedLoopGridJSONData policyJsonData, final List<Object> trapSignatureDatas) {
+    private String getResultBody(final ClosedLoopGridJsonData policyJsonData, final List<Object> trapSignatureDatas) {
         StringBuilder resultBody = new StringBuilder();
         if (!policyJsonData.getConnecttriggerSignatures().isEmpty()) {
             resultBody.append("(");
             IntStream.range(0, policyJsonData.getConnecttriggerSignatures().size())
-                .mapToObj(i -> connectTriggerSignature(i, policyJsonData.getConnecttriggerSignatures(),
-                    trapSignatureDatas.get(0))).forEach(resultBody::append);
+                    .mapToObj(i -> connectTriggerSignature(i, policyJsonData.getConnecttriggerSignatures(),
+                            trapSignatureDatas.get(0)))
+                    .forEach(resultBody::append);
             resultBody.append(resultBody).append(")");
         } else {
             if (!trapSignatureDatas.isEmpty()) {
@@ -181,13 +183,14 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
         return resultBody.toString();
     }
 
-    private String getFaultBody(final ClosedLoopGridJSONData policyJsonData, final List<Object> faultSignatureDatas) {
+    private String getFaultBody(final ClosedLoopGridJsonData policyJsonData, final List<Object> faultSignatureDatas) {
         StringBuilder faultBody = new StringBuilder();
         if (!policyJsonData.getConnectVerificationSignatures().isEmpty()) {
             faultBody.append("(");
             IntStream.range(0, policyJsonData.getConnectVerificationSignatures().size())
-                .mapToObj(i -> connectTriggerSignature(i, policyJsonData.getConnectVerificationSignatures(),
-                    faultSignatureDatas.get(0))).forEach(faultBody::append);
+                    .mapToObj(i -> connectTriggerSignature(i, policyJsonData.getConnectVerificationSignatures(),
+                            faultSignatureDatas.get(0)))
+                    .forEach(faultBody::append);
             faultBody.append(")");
         } else {
             if (!faultSignatureDatas.isEmpty()) {
@@ -237,7 +240,7 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
     }
 
     private void appendTrapToResultBody(List<Object> triggerSignatures, Object object, StringBuilder resultBody,
-        Map<String, String> connectTraps, String connectTrapName) {
+            Map<String, String> connectTraps, String connectTrapName) {
         String connectTrap = connectTraps.get(connectTrapName);
         if (connectTrap.startsWith(TRAP) || connectTrap.startsWith(FAULT)) {
             String trapBody = callTrap(connectTrap, object);
@@ -339,16 +342,18 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
                 attributesStr = attributesStr + "(" + readAttributes(objectList, iy) + ")";
             } catch (NumberFormatException e) {
                 try {
-                    trap1Attrib = getVarbindOID(trap1Attrib);
-                    attributesStr = attributesStr + "(" + URLEncoder.encode(trap1Attrib, ENC_UTF_8) + ")";
+                    trap1Attrib = getVarbindOid(trap1Attrib);
+                    attributesStr = attributesStr + "(" + URLEncoder.encode(trap1Attrib,
+                            PolicyUtils.CHARACTER_ENCODING) + ")";
                 } catch (UnsupportedEncodingException e1) {
                     policyLogger.error("Caused Exception while Encoding Varbind Dictionary Values", e1);
                 }
             }
         } else {
             try {
-                trap1Attrib = getVarbindOID(trap1Attrib);
-                attributesStr = attributesStr + "(" + URLEncoder.encode(trap1Attrib, ENC_UTF_8) + ")";
+                trap1Attrib = getVarbindOid(trap1Attrib);
+                attributesStr = attributesStr + "(" + URLEncoder.encode(trap1Attrib,
+                        PolicyUtils.CHARACTER_ENCODING) + ")";
             } catch (UnsupportedEncodingException e) {
                 policyLogger.error("Caused Exception while Encoding Varbind Dictionary Values", e);
             }
@@ -356,21 +361,21 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
         return attributesStr;
     }
 
-    private String getVarbindOID(String attrib) {
+    private String getVarbindOid(String attrib) {
         VarbindDictionary varbindId;
         try {
-            varbindId = (VarbindDictionary) commonclassdao
-                .getEntityItem(VarbindDictionary.class, "varbindName", attrib);
-            return varbindId.getVarbindOID();
+            varbindId =
+                    (VarbindDictionary) commonclassdao.getEntityItem(VarbindDictionary.class, "varbindName", attrib);
+            return varbindId.getVarbindOid();
         } catch (Exception e) {
             policyLogger.error("Error during retrieving varbindName " + attrib, e);
             return attrib;
         }
     }
 
-    //connect traps data set to JSON Body as String
+    // connect traps data set to JSON Body as String
     @SuppressWarnings({"unchecked", "rawtypes"})
-    private String getUIConnectTraps(List<Object> connectTrapSignatures) {
+    private String getUiConnectTraps(List<Object> connectTrapSignatures) {
         StringBuilder resultBody = new StringBuilder();
         String connectMainBody = "";
         for (Object connectTrapSignature : connectTrapSignatures) {
@@ -401,9 +406,8 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
                 if (((LinkedHashMap) connectTraps).get(TRAP_COUNT_2) != null) {
                     trapCount2 = ((LinkedHashMap) connectTraps).get(TRAP_COUNT_2).toString();
                 }
-                connectBody =
-                    notBox + "@!" + connectTrap1 + "@!" + trapCount1 + "@!" + operatorBox + "@!" + connectTrap2 + "@!"
-                        + trapCount2 + "#!?!";
+                connectBody = notBox + "@!" + connectTrap1 + "@!" + trapCount1 + "@!" + operatorBox + "@!"
+                        + connectTrap2 + "@!" + trapCount2 + "#!?!";
             }
             resultBody.append(connectBody);
         }
@@ -412,7 +416,7 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
     }
 
     // get Trigger signature from JSON body
-    private String getUITriggerSignature(String trap, Object object2) {
+    private String getUiTriggerSignature(String trap, Object object2) {
         ClosedLoopFaultTrapDatas trapDatas = (ClosedLoopFaultTrapDatas) object2;
         List<Object> attributeList = new ArrayList<>();
         // Read the Trap
@@ -473,89 +477,69 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
         return triggerBody.toString();
     }
 
+    /**
+     * prePopulateClosedLoopFaultPolicyData.
+     *
+     * @param policyAdapter PolicyRestAdapter
+     * @param entity PolicyEntity
+     */
     public void prePopulateClosedLoopFaultPolicyData(PolicyRestAdapter policyAdapter, PolicyEntity entity) {
-        if (policyAdapter.getPolicyData() instanceof PolicyType) {
-            PolicyType policy = (PolicyType) policyAdapter.getPolicyData();
-
-            // Set PolicyAdapter policyName, description
-            setPolicyAdapterPolicyNameAndDescription(policyAdapter, policy);
-
-            // Set PolicyAdapter JsonBodyData, timeout settings
-            setClosedLoopJSONFile(policyAdapter, entity);
+        if (! (policyAdapter.getPolicyData() instanceof PolicyType)) {
+            return;
+        }
+        PolicyType policy = (PolicyType) policyAdapter.getPolicyData();
 
-            // Get the target data under policy.
-            TargetType target = policy.getTarget();
-            if (target == null) {
-                return;
-            }
+        // Set PolicyAdapter policyName, description
+        setPolicyAdapterPolicyNameAndDescription(policyAdapter, policy);
 
-            // Under target we have AnyOFType
-            List<AnyOfType> anyOfList = target.getAnyOf();
-            if (anyOfList == null) {
-                return;
-            }
+        // Set PolicyAdapter JsonBodyData, timeout settings
+        setClosedLoopJsonFile(policyAdapter, entity);
 
-            // Set PolicyAdapter OnapNameField, riskType, riskLevel, guard, ttlDate from match attributes
-            setPolicyAdapterMatchAttributes(policyAdapter, anyOfList);
+        // Get the target data under policy.
+        TargetType target = policy.getTarget();
+        if (target == null) {
+            return;
         }
+
+        // Set PolicyAdapter OnapNameField, riskType, riskLevel, guard, ttlDate from match attributes
+        setPolicyAdapterMatchAttributes(policyAdapter, target.getAnyOf());
     }
 
     private void setPolicyAdapterMatchAttributes(PolicyRestAdapter policyAdapter, List<AnyOfType> anyOfList) {
         anyOfList.stream()
-            //Extract nonNull list of AllOfType objs from each AnyOfType obj
-            .map(AnyOfType::getAllOf).filter(Objects::nonNull)
-            .forEach(allOfList ->
-                //Extract nonNull list of MatchType objs from each AllOFType obj
-                allOfList.stream().map(AllOfType::getMatch).filter(Objects::nonNull)
-                    .flatMap(Collection::stream)
-                    .forEach(match -> {
-                        // Under the match we have attribute value and
-                        // attributeDesignator. So,finally down to the actual attribute.
-                        AttributeValueType attributeValue = match.getAttributeValue();
-                        String value = (String) attributeValue.getContent().get(0);
-                        AttributeDesignatorType designator = match.getAttributeDesignator();
-                        String attributeId = designator.getAttributeId();
-                        // First match in the target is OnapName, so set that value.
-                        if ("ONAPName".equals(attributeId)) {
-                            policyAdapter.setOnapName(value);
-                            OnapName onapName = new OnapName();
-                            onapName.setOnapName(value);
-                            policyAdapter.setOnapNameField(onapName);
-                        } else if ("RiskType".equals(attributeId)) {
-                            policyAdapter.setRiskType(value);
-                        } else if ("RiskLevel".equals(attributeId)) {
-                            policyAdapter.setRiskLevel(value);
-                        } else if ("guard".equals(attributeId)) {
-                            policyAdapter.setGuard(value);
-                        } else if ("TTLDate".equals(attributeId) && !value.contains("NA")) {
-                            PolicyController controller = new PolicyController();
-                            String newDate = controller.convertDate(value);
-                            policyAdapter.setTtlDate(newDate);
-                        }
-                    }));
+                // Extract nonNull list of AllOfType objs from each AnyOfType obj
+                .map(AnyOfType::getAllOf).filter(Objects::nonNull).forEach(allOfList ->
+                // Extract nonNull list of MatchType objs from each AllOFType obj
+                allOfList.stream().map(AllOfType::getMatch).filter(Objects::nonNull).flatMap(Collection::stream)
+                        .forEach(match -> {
+                            // Under the match we have attribute value and
+                            // attributeDesignator. So,finally down to the actual attribute.
+                            policyAdapter.setupUsingAttribute(match.getAttributeDesignator().getAttributeId(),
+                                    (String) match.getAttributeValue().getContent().get(0));
+                        }));
     }
 
     private void setPolicyAdapterPolicyNameAndDescription(PolicyRestAdapter policyAdapter, PolicyType policy) {
         policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName());
-        String policyNameValue = policyAdapter.getPolicyName()
-            .substring(policyAdapter.getPolicyName().indexOf("Fault_") + 6);
+        String policyNameValue =
+                policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("Fault_") + 6);
         policyAdapter.setPolicyName(policyNameValue);
         String description;
         try {
             description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:"));
         } catch (Exception e) {
             policyLogger.error(
-                "Error during collecting the description tag info for createClosedLoopFault " + policyNameValue, e);
+                    "Error during collecting the description tag info for createClosedLoopFault " + policyNameValue, e);
             description = policy.getDescription();
         }
         policyAdapter.setPolicyDescription(description);
     }
 
-    private void setClosedLoopJSONFile(PolicyRestAdapter policyAdapter, PolicyEntity entity) {
-        ObjectMapper mapper = new ObjectMapper();
+    private void setClosedLoopJsonFile(PolicyRestAdapter policyAdapter, PolicyEntity entity) {
         try {
-            ClosedLoopFaultBody closedLoopBody = mapper
-                .readValue(entity.getConfigurationData().getConfigBody(), ClosedLoopFaultBody.class);
+            ClosedLoopFaultBody closedLoopBody =
+                    new ObjectMapper().readValue(entity.getConfigurationData().getConfigBody(),
+                            ClosedLoopFaultBody.class);
             if ("ACTIVE".equalsIgnoreCase(closedLoopBody.getClosedLoopPolicyStatus())) {
                 closedLoopBody.setClosedLoopPolicyStatus("Active");
             } else {
@@ -570,7 +554,7 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
             }
             if (closedLoopBody.getVerificationTimeWindowUsedForUI() != null) {
                 policyAdapter
-                    .setVerificationclearTimeOut(closedLoopBody.getVerificationTimeWindowUsedForUI().toString());
+                        .setVerificationclearTimeOut(closedLoopBody.getVerificationTimeWindowUsedForUI().toString());
             }
         } catch (Exception e) {
             policyLogger.error("Exception Occured" + e);
@@ -578,7 +562,10 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController {
     }
 }
 
-class ClosedLoopGridJSONData {
+
+@Getter
+@Setter
+class ClosedLoopGridJsonData {
 
     private String clearTimeOut;
     private String trapMaxAge;
@@ -586,44 +573,4 @@ class ClosedLoopGridJSONData {
     private List<Object> connecttriggerSignatures;
     private List<Object> connectVerificationSignatures;
 
-    public String getClearTimeOut() {
-        return clearTimeOut;
-    }
-
-    public void setClearTimeOut(String clearTimeOut) {
-        this.clearTimeOut = clearTimeOut;
-    }
-
-    public String getTrapMaxAge() {
-        return trapMaxAge;
-    }
-
-    public void setTrapMaxAge(String trapMaxAge) {
-        this.trapMaxAge = trapMaxAge;
-    }
-
-    public String getVerificationclearTimeOut() {
-        return verificationclearTimeOut;
-    }
-
-    public void setVerificationclearTimeOut(String verificationclearTimeOut) {
-        this.verificationclearTimeOut = verificationclearTimeOut;
-    }
-
-
-    public List<Object> getConnecttriggerSignatures() {
-        return connecttriggerSignatures;
-    }
-
-    public void setConnecttriggerSignatures(List<Object> connecttriggerSignatures) {
-        this.connecttriggerSignatures = connecttriggerSignatures;
-    }
-
-    public List<Object> getConnectVerificationSignatures() {
-        return connectVerificationSignatures;
-    }
-
-    public void setConnectVerificationSignatures(List<Object> connectVerificationSignatures) {
-        this.connectVerificationSignatures = connectVerificationSignatures;
-    }
 }