diff options
Diffstat (limited to 'POLICY-SDK-APP')
4 files changed, 1056 insertions, 1070 deletions
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateBRMSParamController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateBRMSParamController.java index b49f1fc35..8c14048c4 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateBRMSParamController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateBRMSParamController.java @@ -4,13 +4,14 @@ * ================================================================================ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd. + * Modifications Copyright (C) 2019 Bell Canada * ================================================================================ * 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. @@ -24,20 +25,24 @@ package org.onap.policy.controller; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.bind.JAXBElement; +import org.apache.commons.collections.CollectionUtils; import org.json.JSONObject; import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; @@ -50,6 +55,7 @@ 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 org.springframework.web.bind.annotation.RequestMethod; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; @@ -57,7 +63,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType; -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.AttributeAssignmentExpressionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType; @@ -70,6 +75,7 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; @Controller @RequestMapping("/") public class CreateBRMSParamController extends RestrictedBaseController { + private static final Logger policyLogger = FlexLogger.getLogger(CreateBRMSParamController.class); private static CommonClassDao commonClassDao; @@ -83,13 +89,14 @@ public class CreateBRMSParamController extends RestrictedBaseController { } @Autowired - private CreateBRMSParamController(CommonClassDao commonClassDao){ + private CreateBRMSParamController(CommonClassDao commonClassDao) { CreateBRMSParamController.commonClassDao = commonClassDao; } - public CreateBRMSParamController(){ + public CreateBRMSParamController() { // Empty constructor } + protected PolicyRestAdapter policyAdapter = null; private HashMap<String, String> dynamicLayoutMap; @@ -98,9 +105,9 @@ public class CreateBRMSParamController extends RestrictedBaseController { private static String string = "String"; - @RequestMapping(value={"/policyController/getBRMSTemplateData.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public void getBRMSParamPolicyRuleData(HttpServletRequest request, HttpServletResponse response){ - try{ + @RequestMapping(value = {"/policyController/getBRMSTemplateData.htm"}, method = { RequestMethod.POST}) + public void getBRMSParamPolicyRuleData(HttpServletRequest request, HttpServletResponse response) { + try { dynamicLayoutMap = new HashMap<>(); ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); @@ -115,22 +122,22 @@ public class CreateBRMSParamController extends RestrictedBaseController { String responseString = mapper.writeValueAsString(dynamicLayoutMap); JSONObject j = new JSONObject("{policyData: " + responseString + "}"); out.write(j.toString()); - }catch(Exception e){ - policyLogger.error("Exception Occured while getting BRMS Rule data" , e); + } catch (Exception e) { + policyLogger.error("Exception Occured while getting BRMS Rule data", e); } } - protected String findRule(String ruleTemplate) { + private String findRule(String ruleTemplate) { List<Object> datas = commonClassDao.getDataById(BRMSParamTemplate.class, "ruleName", ruleTemplate); - if(datas != null && !datas.isEmpty()){ - BRMSParamTemplate bRMSParamTemplate = (BRMSParamTemplate) datas.get(0); + if(CollectionUtils.isNotEmpty(datas)){ + BRMSParamTemplate bRMSParamTemplate = (BRMSParamTemplate) datas.get(0); return bRMSParamTemplate.getRule(); } return null; } - protected void generateUI(String rule) { - if (rule==null){ + private void generateUI(String rule) { + if (rule == null) { return; } try { @@ -142,11 +149,44 @@ public class CreateBRMSParamController extends RestrictedBaseController { } private void processRule(String rule) { - StringBuilder params = new StringBuilder(""); - Boolean flag = false; - Boolean comment = false; + StringBuilder params = getParamsBuilderFromRule(rule); + params = new StringBuilder( + params.toString().replace("declare Params", "").replace("end", "").replaceAll("\\s+", "")); + String[] components = params.toString().split(":"); + String caption = ""; + for (int i = 0; i < components.length; i++) { + String type; + if (i == 0) { + caption = components[i]; + } + if ("".equals(caption)) { + break; + } + String nextComponent; + try { + nextComponent = components[i + 1]; + } catch (Exception e) { + policyLogger.info("Error when procesing rule: " + e); + nextComponent = components[i]; + } + if (nextComponent.startsWith(string)) { + type = "String"; + createField(caption, type); + caption = nextComponent.replace(string, ""); + } else if (nextComponent.startsWith("int")) { + type = "int"; + createField(caption, type); + caption = nextComponent.replace("int", ""); + } + } + } + + private StringBuilder getParamsBuilderFromRule(final String rule) { + StringBuilder params = new StringBuilder(); + boolean flag = false; + boolean comment = false; String[] lines = rule.split("\n"); - for(String line : lines){ + for (String line : lines) { if (line.isEmpty() || line.startsWith("//")) { continue; } @@ -184,34 +224,7 @@ public class CreateBRMSParamController extends RestrictedBaseController { break; } } - params = new StringBuilder(params.toString().replace("declare Params", "").replace("end", "").replaceAll("\\s+", "")); - String[] components = params.toString().split(":"); - String caption = ""; - for (int i = 0; i < components.length; i++) { - String type; - if (i == 0) { - caption = components[i]; - } - if("".equals(caption)){ - break; - } - String nextComponent = ""; - try { - nextComponent = components[i + 1]; - } catch (Exception e) { - policyLogger.info("Just for Logging"+e); - nextComponent = components[i]; - } - if (nextComponent.startsWith(string)) { - type = "String"; - createField(caption, type); - caption = nextComponent.replace(string, ""); - } else if (nextComponent.startsWith("int")) { - type = "int"; - createField(caption, type); - caption = nextComponent.replace("int", ""); - } - } + return params; } private String splitMultiLineStartComment(String line) { @@ -241,28 +254,38 @@ public class CreateBRMSParamController extends RestrictedBaseController { policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); // policy name value is the policy name without any prefix and // Extensions. - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("BRMS_Param_") + 11); + String policyNameValue = policyAdapter.getPolicyName() + .substring(policyAdapter.getPolicyName().indexOf("BRMS_Param_") + 11); if (policyLogger.isDebugEnabled()) { - policyLogger.debug("Prepopulating form data for BRMS RAW Policy selected:" + policyAdapter.getPolicyName()); + policyLogger + .debug("Prepopulating form data for BRMS RAW Policy selected:" + policyAdapter.getPolicyName()); } policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ + String description; + try { description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - policyLogger.info("Just for Logging"+e); + } catch (Exception e) { + policyLogger.info("Error getting description: " + e); description = policy.getDescription(); } policyAdapter.setPolicyDescription(description); setDataAdapterFromAdviceExpressions(policy, policyAdapter); - paramUIGenerate(policyAdapter, entity); + + // Generate Param UI + try { + paramUIGenerate(policyAdapter, entity); + } catch (Exception e) { + policyLogger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getMessage() + e); + } + // Get the target data under policy. policyAdapter.setDynamicLayoutMap(dynamicLayoutMap); - if(policyAdapter.getDynamicLayoutMap().size() > 0){ - LinkedHashMap<String,String> drlRule = new LinkedHashMap<>(); - for(Object keyValue: policyAdapter.getDynamicLayoutMap().keySet()){ - drlRule.put(keyValue.toString(), policyAdapter.getDynamicLayoutMap().get(keyValue)); - } + if (policyAdapter.getDynamicLayoutMap().size() > 0) { + LinkedHashMap<String, String> drlRule = policyAdapter.getDynamicLayoutMap() + .keySet().stream() + .collect(Collectors + .toMap(String::toString, keyValue -> policyAdapter.getDynamicLayoutMap().get(keyValue), + (a, b) -> b, LinkedHashMap::new)); policyAdapter.setRuleData(drlRule); } TargetType target = policy.getTarget(); @@ -272,28 +295,30 @@ public class CreateBRMSParamController extends RestrictedBaseController { } } - private void setDataAdapterFromAdviceExpressions(PolicyType policy, PolicyRestAdapter policyAdapter){ + private void setDataAdapterFromAdviceExpressions(PolicyType policy, PolicyRestAdapter policyAdapter) { ArrayList<Object> attributeList = new ArrayList<>(); // Set Attributes. - AdviceExpressionsType expressionTypes = ((RuleType)policy.getCombinerParametersOrRuleCombinerParametersOrVariableDefinition().get(0)).getAdviceExpressions(); - for( AdviceExpressionType adviceExpression: expressionTypes.getAdviceExpression()){ - for(AttributeAssignmentExpressionType attributeAssignment: adviceExpression.getAttributeAssignmentExpression()){ - if(attributeAssignment.getAttributeId().startsWith("key:")){ + AdviceExpressionsType expressionTypes = ((RuleType) policy + .getCombinerParametersOrRuleCombinerParametersOrVariableDefinition().get(0)).getAdviceExpressions(); + for (AdviceExpressionType adviceExpression : expressionTypes.getAdviceExpression()) { + for (AttributeAssignmentExpressionType attributeAssignment : adviceExpression + .getAttributeAssignmentExpression()) { + if (attributeAssignment.getAttributeId().startsWith("key:")) { Map<String, String> attribute = new HashMap<>(); String key = attributeAssignment.getAttributeId().replace("key:", ""); attribute.put("key", key); @SuppressWarnings("unchecked") - JAXBElement<AttributeValueType> attributevalue = (JAXBElement<AttributeValueType>) attributeAssignment.getExpression(); - String value = (String) attributevalue.getValue().getContent().get(0); + JAXBElement<AttributeValueType> attributeValue = (JAXBElement<AttributeValueType>) attributeAssignment + .getExpression(); + String value = (String) attributeValue.getValue().getContent().get(0); attribute.put("value", value); attributeList.add(attribute); - }else if(attributeAssignment.getAttributeId().startsWith("dependencies:")){ - ArrayList<String> dependencies = new ArrayList<>(Arrays.asList(attributeAssignment.getAttributeId().replace("dependencies:", "").split(","))); - if(dependencies.contains("")){ - dependencies.remove(""); - } + } else if (attributeAssignment.getAttributeId().startsWith("dependencies:")) { + ArrayList<String> dependencies = new ArrayList<>( + Arrays.asList(attributeAssignment.getAttributeId().replace("dependencies:", "").split(","))); + dependencies.remove(""); policyAdapter.setBrmsDependency(dependencies); - }else if(attributeAssignment.getAttributeId().startsWith("controller:")){ + } else if (attributeAssignment.getAttributeId().startsWith("controller:")) { policyAdapter.setBrmsController(attributeAssignment.getAttributeId().replace("controller:", "")); } } @@ -301,38 +326,23 @@ public class CreateBRMSParamController extends RestrictedBaseController { } } - private void setDataToAdapterFromTarget(TargetType target, PolicyRestAdapter policyAdapter){ + private void setDataToAdapterFromTarget(TargetType target, PolicyRestAdapter policyAdapter) { // Under target we have AnyOFType List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList == null) { return; } - - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList == null) { - continue; - } - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - setDataToAdapterFromMatchList(matchList, policyAdapter); - } - } - } + anyOfList.stream().map(AnyOfType::getAllOf) + .filter(Objects::nonNull) + .flatMap(Collection::stream) + .forEach(allOf -> setDataToAdapterFromMatchList(allOf.getMatch(), policyAdapter)); } - private void setDataToAdapterFromMatchList(List<MatchType> matchList, PolicyRestAdapter policyAdapter){ - Iterator<MatchType> iterMatch = matchList.iterator(); - while (iterMatch.hasNext()) { - MatchType match = iterMatch.next(); + private void setDataToAdapterFromMatchList(List<MatchType> matchList, PolicyRestAdapter policyAdapter) { + if (matchList == null) { + return; + } + for (final MatchType match : matchList) { // // Under the match we have attribute value and // attributeDesignator. So,finally down to the actual attribute. @@ -341,17 +351,16 @@ public class CreateBRMSParamController extends RestrictedBaseController { String value = (String) attributeValue.getContent().get(0); AttributeDesignatorType designator = match.getAttributeDesignator(); String attributeId = designator.getAttributeId(); - - if ("RiskType".equals(attributeId)){ + if ("RiskType".equals(attributeId)) { policyAdapter.setRiskType(value); } - if ("RiskLevel".equals(attributeId)){ + if ("RiskLevel".equals(attributeId)) { policyAdapter.setRiskLevel(value); } - if ("guard".equals(attributeId)){ + if ("guard".equals(attributeId)) { policyAdapter.setGuard(value); } - if ("TTLDate".equals(attributeId) && !value.contains("NA")){ + if ("TTLDate".equals(attributeId) && !value.contains("NA")) { PolicyController controller = new PolicyController(); String newDate = controller.convertDate(value); policyAdapter.setTtlDate(newDate); @@ -360,109 +369,103 @@ public class CreateBRMSParamController extends RestrictedBaseController { } // This method generates the UI from rule configuration - public void paramUIGenerate(PolicyRestAdapter policyAdapter, PolicyEntity entity) { + private void paramUIGenerate(PolicyRestAdapter policyAdapter, PolicyEntity entity) { String data = entity.getConfigurationData().getConfigBody(); - if(data == null){ + if (data == null) { return; } - - try { - StringBuilder params = new StringBuilder(""); - Boolean flag = false; - Boolean comment = false; - for (String line : data.split("\n")) { - if (line.isEmpty() || line.startsWith("//")) { - continue; - } - if(line.contains(brmsTemplateVlaue)){ - String value = line.substring(line.indexOf("<$%"),line.indexOf("%$>")); - value = value.replace(brmsTemplateVlaue, ""); - policyAdapter.setRuleName(value); - } - if(line.contains("<%$Values=")) { - String value = line.substring(line.indexOf("<%$"), line.indexOf("$%>")); - value = value.replaceAll("<%\\$Values=", ""); - for( String keyValue : value.split(":\\|:")) { - String[] pair = keyValue.split(":-:"); - if (pair != null && pair.length > 0) { - dynamicLayoutMap.put(pair[0], (pair.length > 1) ? pair[1] : ""); - } - } - return; - } - if (line.startsWith("/*")) { - comment = true; - continue; - } - if ((line.contains("//"))&&(!(line.contains("http://") || line.contains("https://")))){ - line = splitSingleLineComment(line); - } - if (line.contains("/*")) { - comment = true; - if (line.contains("*/")) { - comment = false; - line = processMultiLineFullComment(line); - } else { - line = splitMultiLineStartComment(line); - } - } + StringBuilder params = new StringBuilder(); + boolean flag = false; + boolean comment = false; + for (String line : data.split("\n")) { + if (line.isEmpty() || line.startsWith("//")) { + continue; + } + if (line.contains(brmsTemplateVlaue)) { + String value = line.substring(line.indexOf("<$%"), line.indexOf("%$>")); + value = value.replace(brmsTemplateVlaue, ""); + policyAdapter.setRuleName(value); + } + if (line.contains("<%$Values=")) { + String value = line.substring(line.indexOf("<%$"), line.indexOf("$%>")); + value = value.replaceAll("<%\\$Values=", ""); + Arrays.stream(value.split(":\\|:")).map(keyValue -> keyValue.split(":-:")) + .filter(pair -> pair.length > 0) + .forEach(pair -> dynamicLayoutMap.put(pair[0], (pair.length > 1) ? pair[1] : "")); + return; + } + if (line.startsWith("/*")) { + comment = true; + continue; + } + if ((line.contains("//")) && (!(line.contains("http://") || line.contains("https://")))) { + line = splitSingleLineComment(line); + } + if (line.contains("/*")) { + comment = true; if (line.contains("*/")) { comment = false; - line = processEndComment(line); - } - if (comment) { - continue; - } - if (flag) { - params.append(line); - } - if (line.contains("rule") && line.contains(".Params\"")) { - params.append(line); - flag = true; - } - if (line.contains("end") && flag) { - break; + line = processMultiLineFullComment(line); + } else { + line = splitMultiLineStartComment(line); } } - params = new StringBuilder(params.substring(params.indexOf(".Params\"")+ 11)); - params = new StringBuilder(params.toString().replaceAll("\\s+", "").replace("salience1000whenthenParamsparams=newParams();","") - .replace("insert(params);end", "") - .replace("params.set", "")); - String[] components = params.toString().split("\\);"); - if(components!= null && components.length > 0){ - for (int i = 0; i < components.length; i++) { - String value; - components[i] = components[i]+")"; - String caption = components[i].substring(0, - components[i].indexOf('(')); - caption = caption.substring(0, 1).toLowerCase() + caption.substring(1); - if (components[i].contains("(\"")) { - value = components[i] - .substring(components[i].indexOf("(\""), - components[i].indexOf("\")")) - .replace("(\"", "").replace("\")", ""); - } else { - value = components[i] - .substring(components[i].indexOf('('), - components[i].indexOf(')')) - .replace("(", "").replace(")", ""); - } - dynamicLayoutMap.put(caption, value); + if (line.contains("*/")) { + comment = false; + line = processEndComment(line); + } + if (comment) { + continue; + } + if (flag) { + params.append(line); + } + if (line.contains("rule") && line.contains(".Params\"")) { + params.append(line); + flag = true; + } + if (line.contains("end") && flag) { + break; + } + } + params = new StringBuilder(params.substring(params.indexOf(".Params\"") + 11)); + params = new StringBuilder(params.toString().replaceAll("\\s+", "") + .replace("salience1000whenthenParamsparams=newParams();", "") + .replace("insert(params);end", "") + .replace("params.set", "")); + updateCaptionToDynamicLayoutMap(params); + } + private void updateCaptionToDynamicLayoutMap(final StringBuilder params) { + String[] components = params.toString().split("\\);"); + if(components.length > 0){ + for (int i = 0; i < components.length; i++) { + String value; + components[i] = components[i] + ")"; + String caption = components[i].substring(0, + components[i].indexOf('(')); + caption = caption.substring(0, 1).toLowerCase() + caption.substring(1); + if (components[i].contains("(\"")) { + value = components[i] + .substring(components[i].indexOf("(\""), + components[i].indexOf("\")")) + .replace("(\"", "").replace("\")", ""); + } else { + value = components[i] + .substring(components[i].indexOf('('), + components[i].indexOf(')')) + .replace("(", "").replace(")", ""); } + dynamicLayoutMap.put(caption, value); } - } catch (Exception e) { - policyLogger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getMessage() + e); } - - } private String processEndComment(String line) { try { line = splitMultiLineEndComment(line); } catch (Exception e) { - policyLogger.info("Just for Logging"+e); + policyLogger.info("Just for Logging" + e); line = ""; } return line; @@ -471,9 +474,9 @@ public class CreateBRMSParamController extends RestrictedBaseController { private String processMultiLineFullComment(String line) { try { line = splitMultiLineStartComment(line) - + splitMultiLineEndComment(line); + + splitMultiLineEndComment(line); } catch (Exception e) { - policyLogger.info("Just for Logging"+e); + policyLogger.info("Just for Logging" + e); line = splitMultiLineStartComment(line); } return line; @@ -481,30 +484,33 @@ public class CreateBRMSParamController extends RestrictedBaseController { // set View Rule @SuppressWarnings("unchecked") - @RequestMapping(value={"/policyController/ViewBRMSParamPolicyRule.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public void setViewRule(HttpServletRequest request, HttpServletResponse response){ + @RequestMapping(value = {"/policyController/ViewBRMSParamPolicyRule.htm"}, method = { RequestMethod.POST}) + public void setViewRule(HttpServletRequest request, HttpServletResponse response) { try { ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); JsonNode root = mapper.readTree(request.getReader()); - PolicyRestAdapter policyData = mapper.readValue(root.get(PolicyController.getPolicydata()).get("policy").toString(), PolicyRestAdapter.class); - policyData.setDomainDir(root.get(PolicyController.getPolicydata()).get("model").get("name").toString().replace("\"", "")); - if(root.get(PolicyController.getPolicydata()).get("model").get("type").toString().replace("\"", "").equals(PolicyController.getFile())){ + PolicyRestAdapter policyData = mapper + .readValue(root.get(PolicyController.getPolicydata()).get("policy").toString(), + PolicyRestAdapter.class); + policyData.setDomainDir( + root.get(PolicyController.getPolicydata()).get("model").get("name").toString().replace("\"", "")); + if (root.get(PolicyController.getPolicydata()).get("model").get("type").toString().replace("\"", "") + .equals(PolicyController.getFile())) { policyData.setEditPolicy(true); } - String body; - body = findRule((String) policyData.getRuleName()) + "\n"; - StringBuilder generatedMetadata = new StringBuilder(); - generatedMetadata.append("/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI purpose. \n\t " + - brmsTemplateVlaue + policyData.getRuleName() + "%$> \n */ \n"); + String body = findRule(policyData.getRuleName()) + "\n"; + StringBuilder generatedMetadata = new StringBuilder().append( + "/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI purpose. \n\t ") + .append(brmsTemplateVlaue).append(policyData.getRuleName()).append("%$> \n */ \n"); - if(policyData.getDynamicLayoutMap().size() > 0){ + if (policyData.getDynamicLayoutMap().size() > 0) { generatedMetadata.append("/* <%$Values="); for (Entry<?, ?> entry : policyData.getRuleData().entrySet()) { String uiKey = (String) entry.getKey(); - if(!"templateName".equals(uiKey)) { - generatedMetadata.append(uiKey+":-:"+entry.getValue()+":|:"); + if (!"templateName".equals(uiKey)) { + generatedMetadata.append(uiKey).append(":-:").append(entry.getValue()).append(":|:"); } } generatedMetadata.append("$%> \n*/ \n"); @@ -512,26 +518,27 @@ public class CreateBRMSParamController extends RestrictedBaseController { policyLogger.info("Metadata generated with :" + generatedMetadata.toString()); body = generatedMetadata.toString() + body; // Expand the body. - Map<String,String> copyMap=new HashMap<>(); - copyMap.putAll((Map<? extends String, ? extends String>) policyData.getRuleData()); - copyMap.put("policyName", policyData.getDomainDir().replace("\\", ".") +".Config_BRMS_Param_" + policyData.getPolicyName()); + Map<String, String> copyMap = new HashMap<>( + (Map<? extends String, ? extends String>) policyData.getRuleData()); + copyMap.put("policyName", + policyData.getDomainDir().replace("\\", ".") + ".Config_BRMS_Param_" + policyData.getPolicyName()); copyMap.put("policyScope", policyData.getDomainDir().replace("\\", ".")); copyMap.put("policyVersion", "1"); //Finding all the keys in the Map data-structure. - Set<String> keySet= copyMap.keySet(); + Set<String> keySet = copyMap.keySet(); Iterator<String> iterator = keySet.iterator(); Pattern p; Matcher m; - while(iterator.hasNext()) { + while (iterator.hasNext()) { //Converting the first character of the key into a lower case. - String input= iterator.next(); - String output = Character.toLowerCase(input.charAt(0)) + - (input.length() > 1 ? input.substring(1) : ""); + String input = iterator.next(); + String output = Character.toLowerCase(input.charAt(0)) + + (input.length() > 1 ? input.substring(1) : ""); //Searching for a pattern in the String using the key. - p=Pattern.compile("\\$\\{"+output+"\\}"); - m=p.matcher(body); + p = Pattern.compile("\\$\\{" + output + "\\}"); + m = p.matcher(body); //Replacing the value with the inputs provided by the user in the editor. - body=m.replaceAll(copyMap.get(input)); + body = m.replaceAll(copyMap.get(input)); } response.setCharacterEncoding("UTF-8"); response.setContentType("application / json"); diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateBRMSRawController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateBRMSRawController.java index 3ab4f4f16..93ca28190 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateBRMSRawController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateBRMSRawController.java @@ -3,13 +3,14 @@ * ONAP Policy Engine * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019 Bell Canada * ================================================================================ * 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. @@ -20,14 +21,14 @@ package org.onap.policy.controller; - import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import javax.xml.bind.JAXBElement; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType; @@ -37,122 +38,133 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeAssignmentExpressionType; 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.MatchType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; 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.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; import org.onap.policy.rest.adapter.PolicyRestAdapter; import org.onap.policy.rest.jpa.PolicyEntity; -public class CreateBRMSRawController{ - - private static final Logger logger = FlexLogger.getLogger(CreateBRMSRawController.class); - - protected PolicyRestAdapter policyAdapter = null; - private ArrayList<Object> attributeList; - - - @SuppressWarnings("unchecked") - public void prePopulateBRMSRawPolicyData(PolicyRestAdapter policyAdapter, PolicyEntity entity) { - attributeList = new ArrayList<>(); - if (policyAdapter.getPolicyData() instanceof PolicyType) { - PolicyType policy = (PolicyType) policyAdapter.getPolicyData(); - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - // policy name value is the policy name without any prefix and - // Extensions. - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("BRMS_Raw_") + 9); - if (logger.isDebugEnabled()) { - logger.debug("Prepopulating form data for BRMS RAW Policy selected:" + policyAdapter.getPolicyName()); - } - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - logger.info("Not able to see the createdby in description. So, add generic description", e); - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - // Set Attributes. - AdviceExpressionsType expressionTypes = ((RuleType)policy.getCombinerParametersOrRuleCombinerParametersOrVariableDefinition().get(0)).getAdviceExpressions(); - for( AdviceExpressionType adviceExpression: expressionTypes.getAdviceExpression()){ - for(AttributeAssignmentExpressionType attributeAssignment: adviceExpression.getAttributeAssignmentExpression()){ - if(attributeAssignment.getAttributeId().startsWith("key:")){ - Map<String, String> attribute = new HashMap<>(); - String key = attributeAssignment.getAttributeId().replace("key:", ""); - attribute.put("key", key); - JAXBElement<AttributeValueType> attributevalue = (JAXBElement<AttributeValueType>) attributeAssignment.getExpression(); - String value = (String) attributevalue.getValue().getContent().get(0); - attribute.put("value", value); - attributeList.add(attribute); - }else if(attributeAssignment.getAttributeId().startsWith("dependencies:")){ - ArrayList<String> dependencies = new ArrayList<>(Arrays.asList(attributeAssignment.getAttributeId().replace("dependencies:", "").split(","))); - if(dependencies.contains("")){ - dependencies.remove(""); +public class CreateBRMSRawController { + + private static final Logger logger = FlexLogger.getLogger(CreateBRMSRawController.class); + + protected PolicyRestAdapter policyAdapter = null; + + @SuppressWarnings("unchecked") + public void prePopulateBRMSRawPolicyData(PolicyRestAdapter policyAdapter, PolicyEntity entity) { + + if (policyAdapter.getPolicyData() instanceof PolicyType) { + PolicyType policy = (PolicyType) policyAdapter.getPolicyData(); + policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); + + // Set PolicyAdapter name value + setPolicyAdapterNameValue(policyAdapter); + + // Set PolicyAdapter description. + setPolicyAdapterDescription(policyAdapter, policy); + + // Set PolicyAdapter attributes. + setPolicyAdapterAttributes(policyAdapter, policy); + + // Set PolicyAdapter configBodyData + policyAdapter.setConfigBodyData(entity.getConfigurationData().getConfigBody()); + + // Get the target data under policy. + TargetType target = policy.getTarget(); + if (target == null) { + return; + } + // Under target we have AnyOFType + List<AnyOfType> anyOfList = target.getAnyOf(); + if (anyOfList == null) { + return; + } + + // Set PolicyAdapter riskType, riskLevel, guard, ttlDate from match attributes + setPolicyAdapterMatchAttributes(policyAdapter, policy.getTarget().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(); + 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); } - policyAdapter.setBrmsDependency(dependencies); - }else if(attributeAssignment.getAttributeId().startsWith("controller:")){ - policyAdapter.setBrmsController(attributeAssignment.getAttributeId().replace("controller:", "")); - } - } - policyAdapter.setAttributes(attributeList); - } - // Get the target data under policy. - policyAdapter.setConfigBodyData(entity.getConfigurationData().getConfigBody()); - TargetType target = policy.getTarget(); - if (target != null) { - // Under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - Iterator<MatchType> iterMatch = matchList.iterator(); - while (iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // 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(); - - if ("RiskType".equals(attributeId)){ - policyAdapter.setRiskType(value); - } - if ("RiskLevel".equals(attributeId)){ - policyAdapter.setRiskLevel(value); - } - if ("guard".equals(attributeId)){ - policyAdapter.setGuard(value); - } - if ("TTLDate".equals(attributeId) && !value.contains("NA")){ - PolicyController controller = new PolicyController(); - String newDate = controller.convertDate(value); - policyAdapter.setTtlDate(newDate); - } - } - } - } - } - } - } - } - } - } + })); + } + + private void setPolicyAdapterNameValue(final PolicyRestAdapter policyAdapter) { + // policy name value is the policy name without any prefix and extensions. + String policyNameValue = policyAdapter.getPolicyName() + .substring(policyAdapter.getPolicyName().indexOf("BRMS_Raw_") + 9); + if (logger.isDebugEnabled()) { + logger.debug("Prepopulating form data for BRMS RAW Policy selected:" + policyAdapter.getPolicyName()); + } + policyAdapter.setPolicyName(policyNameValue); + } + + private void setPolicyAdapterDescription(final PolicyRestAdapter policyAdapter, final PolicyType policy) { + String description; + try { + description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); + } catch (Exception e) { + logger.info("Not able to see the createdby in description. So, add generic description", e); + description = policy.getDescription(); + } + policyAdapter.setPolicyDescription(description); + } + private void setPolicyAdapterAttributes(final PolicyRestAdapter policyAdapter, final PolicyType policy) { + ArrayList<Object> attributeList = new ArrayList<>(); + AdviceExpressionsType expressionTypes = ((RuleType) policy + .getCombinerParametersOrRuleCombinerParametersOrVariableDefinition().get(0)).getAdviceExpressions(); + for (AdviceExpressionType adviceExpression : expressionTypes.getAdviceExpression()) { + for (AttributeAssignmentExpressionType attributeAssignment : adviceExpression + .getAttributeAssignmentExpression()) { + if (attributeAssignment.getAttributeId().startsWith("key:")) { + Map<String, String> attribute = new HashMap<>(); + String key = attributeAssignment.getAttributeId().replace("key:", ""); + attribute.put("key", key); + JAXBElement<AttributeValueType> attributeValue = (JAXBElement<AttributeValueType>) attributeAssignment + .getExpression(); + String value = (String) attributeValue.getValue().getContent().get(0); + attribute.put("value", value); + attributeList.add(attribute); + } else if (attributeAssignment.getAttributeId().startsWith("dependencies:")) { + ArrayList<String> dependencies = new ArrayList<>(Arrays + .asList(attributeAssignment.getAttributeId().replace("dependencies:", "").split(","))); + dependencies.remove(""); + policyAdapter.setBrmsDependency(dependencies); + } else if (attributeAssignment.getAttributeId().startsWith("controller:")) { + policyAdapter + .setBrmsController(attributeAssignment.getAttributeId().replace("controller:", "")); + } + } + policyAdapter.setAttributes(attributeList); + } + } } diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java index d942939d1..4c3249311 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java @@ -3,13 +3,14 @@ * ONAP Policy Engine * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019 Bell Canada * ================================================================================ * 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. @@ -20,15 +21,17 @@ package org.onap.policy.controller; - import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; -import java.util.Iterator; +import java.util.Arrays; +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 org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; import org.onap.policy.rest.adapter.ClosedLoopFaultBody; @@ -54,602 +57,573 @@ 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.MatchType; 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{ - - private static final Logger policyLogger = FlexLogger.getLogger(CreateClosedLoopFaultController.class); - - protected PolicyRestAdapter policyAdapter = null; - - - private static CommonClassDao commonclassdao; - - @Autowired - private CreateClosedLoopFaultController(CommonClassDao commonclassdao){ - CreateClosedLoopFaultController.commonclassdao = commonclassdao; - } - - public CreateClosedLoopFaultController(){ - // Empty constructor - } - - 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); - - ArrayList<Object> trapSignatureDatas = new ArrayList<>(); - if(trapDatas.getTrap1() != null){ - trapSignatureDatas.add(trapDatas); - } - ArrayList<Object> faultSignatureDatas = new ArrayList<>(); - if(faultDatas.getTrap1() != null){ - faultSignatureDatas.add(faultDatas); - } - - StringBuilder resultBody = new StringBuilder(); - if(!policyJsonData.getConnecttriggerSignatures().isEmpty()){ - resultBody.append("("); - for(int i = policyJsonData.getConnecttriggerSignatures().size()-1; i>=0 ; i--){ - String connectBody = connectTriggerSignature(i, policyJsonData.getConnecttriggerSignatures(), trapSignatureDatas.get(0)); - resultBody.append(connectBody); - } - resultBody.append(resultBody + ")"); - }else{ - if(!trapSignatureDatas.isEmpty()){ - resultBody.append(callTrap("nill", trapSignatureDatas.get(0))); - } - } - ClosedLoopSignatures triggerSignatures = new ClosedLoopSignatures(); - triggerSignatures.setSignatures(resultBody.toString()); - if(policyData.getClearTimeOut() != null){ - triggerSignatures.setTimeWindow(Integer.parseInt(policyData.getClearTimeOut())); - triggerSignatures.setTrapMaxAge(Integer.parseInt(policyData.getTrapMaxAge())); - ClosedLoopFaultTriggerUISignatures uiTriggerSignatures = new ClosedLoopFaultTriggerUISignatures(); - if(!trapSignatureDatas.isEmpty()){ - uiTriggerSignatures.setSignatures(getUITriggerSignature("Trap", trapSignatureDatas.get(0))); - if(!policyJsonData.getConnecttriggerSignatures().isEmpty()){ - uiTriggerSignatures.setConnectSignatures(getUIConnectTraps(policyJsonData.getConnecttriggerSignatures())); - } - } - jsonBody.setTriggerSignaturesUsedForUI(uiTriggerSignatures); - jsonBody.setTriggerTimeWindowUsedForUI(Integer.parseInt(policyData.getClearTimeOut())); - jsonBody.setTrapMaxAge(Integer.parseInt(policyData.getTrapMaxAge())); - } - - jsonBody.setTriggerSignatures(triggerSignatures); - StringBuilder faultBody = new StringBuilder(); - if(!policyJsonData.getConnectVerificationSignatures().isEmpty()){ - faultBody.append("("); - for(int i = policyJsonData.getConnectVerificationSignatures().size()-1; i>=0 ; i--){ - String connectBody = connectTriggerSignature(i, policyJsonData.getConnectVerificationSignatures(), faultSignatureDatas.get(0)); - faultBody.append(connectBody); - } - faultBody.append(")"); - }else{ - if(!faultSignatureDatas.isEmpty()){ - faultBody.append(callTrap("nill", faultSignatureDatas.get(0))); - } - } - ClosedLoopSignatures faultSignatures = new ClosedLoopSignatures(); - faultSignatures.setSignatures(faultBody.toString()); - if(policyData.getVerificationclearTimeOut() != null){ - faultSignatures.setTimeWindow(Integer.parseInt(policyData.getVerificationclearTimeOut())); - ClosedLoopFaultTriggerUISignatures uifaultSignatures = new ClosedLoopFaultTriggerUISignatures(); - if(!faultSignatureDatas.isEmpty()){ - uifaultSignatures.setSignatures(getUITriggerSignature("Fault", faultSignatureDatas.get(0))); - if(!policyJsonData.getConnectVerificationSignatures().isEmpty()){ - 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); - - }catch(Exception e){ - policyLogger.error("Exception Occured while setting data to Adapter" , e); - } - return policyData; - } - - - @SuppressWarnings("unchecked") - private String connectTriggerSignature(int index, List<Object> triggerSignatures, Object object) { - StringBuilder resultBody = new StringBuilder(); - Map<String, String> connectTraps = (Map<String, String>) triggerSignatures.get(index); - try{ - String notBox = ""; - if(connectTraps.keySet().contains("notBox")){ - notBox = connectTraps.get("notBox"); - } - resultBody.append("(" + notBox); - }catch(NullPointerException e){ - policyLogger.info("General error" , e); - resultBody.append("("); - } - String connectTrap1 = connectTraps.get("connectTrap1"); - if(connectTrap1.startsWith("Trap") || connectTrap1.startsWith("Fault")){ - String trapBody = callTrap(connectTrap1, object); - if(trapBody!=null){ - resultBody.append(trapBody); - } - }else if(connectTrap1.startsWith("C")){ - for(int i=0; i<= triggerSignatures.size(); i++){ - Map<String,String> triggerSignature = (Map<String, String>) triggerSignatures.get(i); - if(triggerSignature.get("id").equals(connectTrap1)){ - resultBody.append("("); - String connectBody = connectTriggerSignature(i, triggerSignatures, object); - resultBody.append(connectBody + ")"); - }else{ - i++; - } - } - } - try{ - String trapCount1 = connectTraps.get("trapCount1"); - resultBody.append(", Time = " + trapCount1 + ")"); - }catch(NullPointerException e){ - policyLogger.info("General error" , e); - } - try{ - String operatorBox = connectTraps.get("operatorBox"); - resultBody.append(operatorBox +"("); - }catch (NullPointerException e){ - policyLogger.info("General error" , e); - } - try{ - String connectTrap2 = connectTraps.get("connectTrap2"); - if(connectTrap2.startsWith("Trap") || connectTrap2.startsWith("Fault")){ - String trapBody = callTrap(connectTrap2, object); - if(trapBody!=null){ - resultBody.append(trapBody); - } - }else if(connectTrap2.startsWith("C")){ - for(int i=0; i<= triggerSignatures.size(); i++){ - Map<String,String> triggerSignature = (Map<String, String>) triggerSignatures.get(i); - if(triggerSignature.get("id").equals(connectTrap2)){ - resultBody.append("("); - String connectBody = connectTriggerSignature(i, triggerSignatures, object); - resultBody.append(connectBody + ")"); - }else{ - i++; - } - } - } - }catch(NullPointerException e){ - policyLogger.info("General error" , e); - } - try{ - String trapCount2 = connectTraps.get("trapCount2"); - resultBody.append(", Time = " + trapCount2 + ")"); - }catch(NullPointerException e){ - policyLogger.info("General error" , e); - } - return resultBody.toString(); - } - - - private String callTrap(String trap, Object object) { - String signatureBody = ""; - ClosedLoopFaultTrapDatas trapDatas = (ClosedLoopFaultTrapDatas) object; - List<Object> attributeList = new ArrayList<>(); - // Read the Trap - if(! "nill".equals(trap)){ - try{ - if(trap.startsWith("Trap")){ - if("Trap1".equals(trap)){ - attributeList = trapDatas.getTrap1(); - }else if("Trap2".equals(trap)){ - attributeList = trapDatas.getTrap2(); - }else if("Trap3".equals(trap)){ - attributeList = trapDatas.getTrap3(); - }else if("Trap4".equals(trap)){ - attributeList = trapDatas.getTrap4(); - }else if("Trap5".equals(trap)){ - attributeList = trapDatas.getTrap5(); - }else if("Trap6".equals(trap)){ - attributeList = trapDatas.getTrap6(); - } - }else{ - if(trap.startsWith("Fault")){ - if("Fault1".equals(trap)){ - attributeList = trapDatas.getTrap1(); - }else if("Fault2".equals(trap)){ - attributeList = trapDatas.getTrap2(); - }else if("Fault3".equals(trap)){ - attributeList = trapDatas.getTrap3(); - }else if("Fault4".equals(trap)){ - attributeList = trapDatas.getTrap4(); - }else if("Fault5".equals(trap)){ - attributeList = trapDatas.getTrap5(); - }else if("Fault6".equals(trap)){ - attributeList = trapDatas.getTrap6(); - } - } - } - } catch(Exception e){ - policyLogger.warn("Error during callTrap" , e); - return "(" + trap + ")"; - } - }else{ - if(trapDatas.getTrap1()!=null){ - attributeList = trapDatas.getTrap1(); - }else{ - return ""; - } - } - signatureBody = signatureBody + "(" + readAttributes(attributeList, attributeList.size()-1) + ")"; - return signatureBody; - } - - @SuppressWarnings("unchecked") - private String readAttributes(List<Object> object, int index) { - String attributes = ""; - Map<String, String> trapSignatures = (Map<String, String>) object.get(index); - // Read the Elements. - Object notBox = ""; - if(trapSignatures.keySet().contains("notBox")){ - notBox = trapSignatures.get("notBox"); - } - if(notBox!=null){ - attributes = attributes + notBox.toString(); - } - Object trapName1 = trapSignatures.get("trigger1"); - if(trapName1!=null){ - String attrib = trapName1.toString(); - if(attrib.startsWith("A")){ - try{ - int iy = Integer.parseInt(attrib.substring(1))-1; - attributes = attributes + "(" + readAttributes(object, iy) + ")"; - }catch(NumberFormatException e){ - try { - attrib = getVarbindOID(attrib); - attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8")+ ")"; - } catch (UnsupportedEncodingException e1) { - policyLogger.error("Caused Exception while Encoding Varbind Dictionary Values",e1); - } - } - }else{ - try { - attrib = getVarbindOID(attrib); - attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8")+ ")"; - } catch (UnsupportedEncodingException e) { - policyLogger.error("Caused Exception while Encoding Varbind Dictionary Values",e); - } - } - }else{ - return ""; - } - Object comboBox = trapSignatures.get("operatorBox"); - if(comboBox!=null){ - attributes = attributes + comboBox.toString(); - }else{ - return attributes; - } - Object trapName2 = trapSignatures.get("trigger2"); - if(trapName2!=null){ - String attrib = trapName2.toString(); - if(attrib.startsWith("A")){ - try{ - int iy = Integer.parseInt(attrib.substring(1))-1; - attributes = attributes + "(" + readAttributes(object, iy) + ")"; - }catch(NumberFormatException e){ - try { - attrib = getVarbindOID(attrib); - attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8") + ")"; - } catch (UnsupportedEncodingException e1) { - policyLogger.error("Caused Exception while Encoding Varbind Dictionary Values",e1); - } - } - }else{ - try { - attrib = getVarbindOID(attrib); - attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8") + ")"; - } catch (UnsupportedEncodingException e) { - policyLogger.error("Caused Exception while Encoding Varbind Dictionary Values",e); - } - } - } - return attributes; - } - - private String getVarbindOID(String attrib) { - VarbindDictionary varbindId = null; - try{ - 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 - @SuppressWarnings({ "unchecked", "rawtypes" }) - private String getUIConnectTraps(List<Object> connectTrapSignatures) { - StringBuilder resultBody = new StringBuilder(); - String connectMainBody = ""; - for(int j = 0; j < connectTrapSignatures.size(); j++){ - Map<String, String> connectTraps = (Map<String, String>)connectTrapSignatures.get(j); - String connectBody = ""; - Object object = connectTraps; - if(object instanceof LinkedHashMap<?, ?>){ - String notBox = ""; - String connectTrap1 = ""; - String trapCount1 = ""; - String operatorBox = ""; - String connectTrap2 = ""; - String trapCount2 = ""; - if(((LinkedHashMap) object).keySet().contains("notBox")){ - notBox = ((LinkedHashMap) object).get("notBox").toString(); - } - if(((LinkedHashMap) object).get("connectTrap1") != null){ - connectTrap1 = ((LinkedHashMap) object).get("connectTrap1").toString(); - } - if(((LinkedHashMap) object).get("trapCount1") != null){ - trapCount1 = ((LinkedHashMap) object).get("trapCount1").toString(); - } - if(((LinkedHashMap) object).get("operatorBox") != null){ - operatorBox = ((LinkedHashMap) object).get("operatorBox").toString(); - } - if(((LinkedHashMap) object).get("connectTrap2") != null){ - connectTrap2 = ((LinkedHashMap) object).get("connectTrap2").toString(); - } - if(((LinkedHashMap) object).get("trapCount2") != null){ - trapCount2 = ((LinkedHashMap) object).get("trapCount2").toString(); - } - connectBody = notBox + "@!" + connectTrap1 + "@!" + trapCount1 + "@!" + operatorBox + "@!" + connectTrap2 + "@!" + trapCount2 + "#!?!"; - } - resultBody.append(connectBody); - } - connectMainBody = connectMainBody + resultBody; - return connectMainBody; - } - - - - // get Trigger signature from JSON body - @SuppressWarnings({ "rawtypes", "unchecked" }) - private String getUITriggerSignature(String trap, Object object2) { - StringBuilder triggerBody = new StringBuilder(); - ClosedLoopFaultTrapDatas trapDatas = (ClosedLoopFaultTrapDatas) object2; - ArrayList<Object> attributeList = new ArrayList<>(); - // Read the Trap - if(trap.startsWith("Trap")){ - if(trapDatas.getTrap1()!= null){ - attributeList.add(trapDatas.getTrap1()); - } - if(trapDatas.getTrap2()!= null){ - attributeList.add(trapDatas.getTrap2()); - } - if(trapDatas.getTrap3()!= null){ - attributeList.add(trapDatas.getTrap3()); - } - if(trapDatas.getTrap4()!= null){ - attributeList.add(trapDatas.getTrap4()); - } - if(trapDatas.getTrap5()!= null){ - attributeList.add(trapDatas.getTrap5()); - } - if(trapDatas.getTrap6()!= null){ - attributeList.add(trapDatas.getTrap6()); - } - }else{ - if(trap.startsWith("Fault")){ - if(trapDatas.getTrap1()!= null){ - attributeList.add(trapDatas.getTrap1()); - } - if(trapDatas.getTrap2()!= null){ - attributeList.add(trapDatas.getTrap2()); - } - if(trapDatas.getTrap3()!= null){ - attributeList.add(trapDatas.getTrap3()); - } - if(trapDatas.getTrap4()!= null){ - attributeList.add(trapDatas.getTrap4()); - } - if(trapDatas.getTrap5()!= null){ - attributeList.add(trapDatas.getTrap5()); - } - if(trapDatas.getTrap6()!= null){ - attributeList.add(trapDatas.getTrap6()); - } - } - } - - for(int j = 0; j < attributeList.size(); j++){ - StringBuilder signatureBody = new StringBuilder(); - ArrayList<Object> connectTraps = (ArrayList<Object>) attributeList.get(j); - for(int i =0 ; i < connectTraps.size(); i++){ - String connectBody = ""; - Object object = connectTraps.get(i); - if(object instanceof LinkedHashMap<?, ?>){ - String notBox = ""; - String trigger1 = ""; - String operatorBox = ""; - String trigger2 = ""; - if(((LinkedHashMap) object).keySet().contains("notBox")){ - notBox = ((LinkedHashMap) object).get("notBox").toString(); - } - if(((LinkedHashMap) object).get("trigger1") != null){ - trigger1 = ((LinkedHashMap) object).get("trigger1").toString(); - } - if(((LinkedHashMap) object).get("operatorBox") != null){ - operatorBox = ((LinkedHashMap) object).get("operatorBox").toString(); - } - if(((LinkedHashMap) object).get("trigger2") != null){ - trigger2 = ((LinkedHashMap) object).get("trigger2").toString(); - } - connectBody = notBox + "@!" + trigger1 + "@!" + operatorBox + "@!" + trigger2 + "#!"; - } - signatureBody.append(connectBody); - } - triggerBody.append(signatureBody + "?!"); - } - - return triggerBody.toString(); - } - - public void prePopulateClosedLoopFaultPolicyData(PolicyRestAdapter policyAdapter, PolicyEntity entity) { - if (policyAdapter.getPolicyData() instanceof PolicyType) { - Object policyData = policyAdapter.getPolicyData(); - PolicyType policy = (PolicyType) policyData; - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - 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); - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - // Get the target data under policy. - TargetType target = policy.getTarget(); - if (target != null) { - // Under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - Iterator<MatchType> iterMatch = matchList.iterator(); - while (iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // 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); - } - if ("RiskType".equals(attributeId)){ - policyAdapter.setRiskType(value); - } - if ("RiskLevel".equals(attributeId)){ - policyAdapter.setRiskLevel(value); - } - if ("guard".equals(attributeId)){ - policyAdapter.setGuard(value); - } - if ("TTLDate".equals(attributeId) && !value.contains("NA")){ - PolicyController controller = new PolicyController(); - String newDate = controller.convertDate(value); - policyAdapter.setTtlDate(newDate); - } - } - } - } - } - } - } - } - readClosedLoopJSONFile(policyAdapter, entity); - } - - } - - private String readClosedLoopJSONFile(PolicyRestAdapter policyAdapter, PolicyEntity entity) { - ObjectMapper mapper = new ObjectMapper(); - try { - ClosedLoopFaultBody closedLoopBody = mapper.readValue(entity.getConfigurationData().getConfigBody(), ClosedLoopFaultBody.class); - if("ACTIVE".equalsIgnoreCase(closedLoopBody.getClosedLoopPolicyStatus())){ - closedLoopBody.setClosedLoopPolicyStatus("Active"); - }else{ - closedLoopBody.setClosedLoopPolicyStatus("InActive"); - } - policyAdapter.setJsonBodyData(closedLoopBody); - if(closedLoopBody.getTrapMaxAge() != null){ - policyAdapter.setTrapMaxAge(closedLoopBody.getTrapMaxAge().toString()); - } - if(closedLoopBody.getTriggerTimeWindowUsedForUI() != null){ - policyAdapter.setClearTimeOut(closedLoopBody.getTriggerTimeWindowUsedForUI().toString()); - } - if(closedLoopBody.getVerificationTimeWindowUsedForUI() != null){ - policyAdapter.setVerificationclearTimeOut(closedLoopBody.getVerificationTimeWindowUsedForUI().toString()); - } - - } catch (Exception e) { - policyLogger.error("Exception Occured"+e); - } - - return null; - } - +public class CreateClosedLoopFaultController extends RestrictedBaseController { + + private static final Logger policyLogger = FlexLogger.getLogger(CreateClosedLoopFaultController.class); + private static final String FAULT = "Fault"; + private static final String TRAP = "Trap"; + private static final String NOT_BOX = "notBox"; + private static final String OPERATOR_BOX = "operatorBox"; + private static final String CONNECT_TRAP_1 = "connectTrap1"; + private static final String TRAP_COUNT_1 = "trapCount1"; + 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; + + private static CommonClassDao commonclassdao; + + @Autowired + private CreateClosedLoopFaultController(CommonClassDao commonclassdao) { + CreateClosedLoopFaultController.commonclassdao = commonclassdao; + } + + public CreateClosedLoopFaultController() { + // Empty constructor + } + + 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); + + // Build trapSignatureDatas list from faultData + List<Object> trapSignatureDatas = new ArrayList<>(); + if (trapDatas.getTrap1() != null) { + trapSignatureDatas.add(trapDatas); + } + // Extract resultBody and set jsonBody with trap ClosedLoopSignatures + String resultBody = getResultBody(policyJsonData, trapSignatureDatas); + ClosedLoopSignatures triggerSignatures = new ClosedLoopSignatures(); + triggerSignatures.setSignatures(resultBody); + if (policyData.getClearTimeOut() != null) { + triggerSignatures.setTimeWindow(Integer.parseInt(policyData.getClearTimeOut())); + triggerSignatures.setTrapMaxAge(Integer.parseInt(policyData.getTrapMaxAge())); + ClosedLoopFaultTriggerUISignatures uiTriggerSignatures = new ClosedLoopFaultTriggerUISignatures(); + if (!trapSignatureDatas.isEmpty()) { + uiTriggerSignatures.setSignatures(getUITriggerSignature(TRAP, trapSignatureDatas.get(0))); + if (!policyJsonData.getConnecttriggerSignatures().isEmpty()) { + uiTriggerSignatures + .setConnectSignatures(getUIConnectTraps(policyJsonData.getConnecttriggerSignatures())); + } + } + jsonBody.setTriggerSignaturesUsedForUI(uiTriggerSignatures); + jsonBody.setTriggerTimeWindowUsedForUI(Integer.parseInt(policyData.getClearTimeOut())); + jsonBody.setTrapMaxAge(Integer.parseInt(policyData.getTrapMaxAge())); + } + + jsonBody.setTriggerSignatures(triggerSignatures); + + // Build faultSignatureData list from faultData + List<Object> faultSignatureDatas = new ArrayList<>(); + if (faultDatas.getTrap1() != null) { + faultSignatureDatas.add(faultDatas); + } + // Extract faultBody and set jsonBody with fault ClosedLoopSignatures + String faultBody = getFaultBody(policyJsonData, faultSignatureDatas); + ClosedLoopSignatures faultSignatures = new ClosedLoopSignatures(); + faultSignatures.setSignatures(faultBody); + if (policyData.getVerificationclearTimeOut() != null) { + faultSignatures.setTimeWindow(Integer.parseInt(policyData.getVerificationclearTimeOut())); + ClosedLoopFaultTriggerUISignatures uifaultSignatures = new ClosedLoopFaultTriggerUISignatures(); + if (!faultSignatureDatas.isEmpty()) { + uifaultSignatures.setSignatures(getUITriggerSignature(FAULT, faultSignatureDatas.get(0))); + if (!policyJsonData.getConnectVerificationSignatures().isEmpty()) { + 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); + + } catch (Exception e) { + policyLogger.error("Exception Occured while setting data to Adapter", e); + } + return policyData; + } + + // TODO: Can getResultBody() and getFaultBody() be merged? + 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); + resultBody.append(resultBody).append(")"); + } else { + if (!trapSignatureDatas.isEmpty()) { + resultBody.append(callTrap("nill", trapSignatureDatas.get(0))); + } + } + return resultBody.toString(); + } + + 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); + faultBody.append(")"); + } else { + if (!faultSignatureDatas.isEmpty()) { + faultBody.append(callTrap("nill", faultSignatureDatas.get(0))); + } + } + return faultBody.toString(); + } + + @SuppressWarnings("unchecked") + private String connectTriggerSignature(int index, List<Object> triggerSignatures, Object object) { + StringBuilder resultBody = new StringBuilder(); + Map<String, String> connectTraps = (Map<String, String>) triggerSignatures.get(index); + try { + String notBox = ""; + if (connectTraps.keySet().contains(NOT_BOX)) { + notBox = connectTraps.get(NOT_BOX); + } + resultBody.append("(").append(notBox); + } catch (NullPointerException e) { + policyLogger.info("General error", e); + resultBody.append("("); + } + + try { + // Append connectTrap1 body to resultBody + appendTrapToResultBody(triggerSignatures, object, resultBody, connectTraps, CONNECT_TRAP_1); + + // Update trap1 count to resultBody + String trapCount1 = connectTraps.get(TRAP_COUNT_1); + resultBody.append(", Time = ").append(trapCount1).append(")"); + + // Append connectTrap2 body to resultBody + appendTrapToResultBody(triggerSignatures, object, resultBody, connectTraps, CONNECT_TRAP_2); + + // Update operatorBox to resultBody + String operatorBox = connectTraps.get(OPERATOR_BOX); + resultBody.append(operatorBox).append("("); + + // Update trap2 count to resultBody + String trapCount2 = connectTraps.get(TRAP_COUNT_2); + resultBody.append(", Time = ").append(trapCount2).append(")"); + } catch (NullPointerException e) { + policyLogger.info("General error", e); + } + return resultBody.toString(); + } + + private void appendTrapToResultBody(List<Object> triggerSignatures, Object object, StringBuilder resultBody, + Map<String, String> connectTraps, String connectTrapName) { + String connectTrap = connectTraps.get(connectTrapName); + if (connectTrap.startsWith(TRAP) || connectTrap.startsWith(FAULT)) { + String trapBody = callTrap(connectTrap, object); + resultBody.append(trapBody); + } else if (connectTrap.startsWith("C")) { + for (int i = 0; i <= triggerSignatures.size(); i++) { + Map<String, String> triggerSignature = (Map<String, String>) triggerSignatures.get(i); + if (triggerSignature.get("id").equals(connectTrap)) { + resultBody.append("("); + String connectBody = connectTriggerSignature(i, triggerSignatures, object); + resultBody.append(connectBody).append(")"); + } else { // FIXME: Is this a bug and can it be removed? + i++; + } + } + } + } + + private String callTrap(String trap, Object object) { + String signatureBody = ""; + ClosedLoopFaultTrapDatas trapDatas = (ClosedLoopFaultTrapDatas) object; + List<Object> attributeList = new ArrayList<>(); + // Read the Trap + if (!"nill".equals(trap)) { + List<String> trapTypes = new ArrayList<>(); + if (trap.startsWith(TRAP)) { + trapTypes = Arrays.asList("Trap1", "Trap2", "Trap3", "Trap4", "Trap5", "Trap6"); + } else if (trap.startsWith(FAULT)) { + trapTypes = Arrays.asList("Fault1", "Fault2", "Fault3", "Fault4", "Fault5", "Fault6"); + } + try { + if (trapTypes.get(0).equals(trap)) { + attributeList = trapDatas.getTrap1(); + } else if (trapTypes.get(1).equals(trap)) { + attributeList = trapDatas.getTrap2(); + } else if (trapTypes.get(2).equals(trap)) { + attributeList = trapDatas.getTrap3(); + } else if (trapTypes.get(3).equals(trap)) { + attributeList = trapDatas.getTrap4(); + } else if (trapTypes.get(4).equals(trap)) { + attributeList = trapDatas.getTrap5(); + } else if (trapTypes.get(5).equals(trap)) { + attributeList = trapDatas.getTrap6(); + } + } catch (Exception e) { + policyLogger.warn("Error during callTrap", e); + return "(" + trap + ")"; + } + } else { + if (trapDatas.getTrap1() == null) { + return ""; + } + attributeList = trapDatas.getTrap1(); + } + signatureBody = signatureBody + "(" + readAttributes(attributeList, attributeList.size() - 1) + ")"; + return signatureBody; + } + + @SuppressWarnings("unchecked") + private String readAttributes(List<Object> object, int index) { + String attributes = ""; + Map<String, String> trapSignatures = (Map<String, String>) object.get(index); + // Read the Elements. + Object notBox = ""; + if (trapSignatures.keySet().contains(NOT_BOX)) { + notBox = trapSignatures.get(NOT_BOX); + } + if (notBox != null) { + attributes = attributes + notBox.toString(); + } + + // Get Attributes for trap1 name + Object trapName1 = trapSignatures.get(TRIGGER_1); + if (trapName1 == null) { + return ""; + } + attributes = getTrapAttributesString(object, attributes, trapName1); + + Object comboBox = trapSignatures.get(OPERATOR_BOX); + if (comboBox != null) { + attributes = attributes + comboBox.toString(); + } else { + return attributes; + } + + // Get Attributes for trap1 name + Object trapName2 = trapSignatures.get(TRIGGER_2); + if (trapName2 != null) { + attributes = getTrapAttributesString(object, attributes, trapName2); + } + return attributes; + } + + private String getTrapAttributesString(List<Object> objectList, String attributesStr, Object trapName) { + String trap1Attrib = trapName.toString(); + if (trap1Attrib.startsWith("A")) { + try { + int iy = Integer.parseInt(trap1Attrib.substring(1)) - 1; + attributesStr = attributesStr + "(" + readAttributes(objectList, iy) + ")"; + } catch (NumberFormatException e) { + try { + trap1Attrib = getVarbindOID(trap1Attrib); + attributesStr = attributesStr + "(" + URLEncoder.encode(trap1Attrib, ENC_UTF_8) + ")"; + } 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) + ")"; + } catch (UnsupportedEncodingException e) { + policyLogger.error("Caused Exception while Encoding Varbind Dictionary Values", e); + } + } + return attributesStr; + } + + private String getVarbindOID(String attrib) { + VarbindDictionary varbindId; + try { + 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 + @SuppressWarnings({"unchecked", "rawtypes"}) + private String getUIConnectTraps(List<Object> connectTrapSignatures) { + StringBuilder resultBody = new StringBuilder(); + String connectMainBody = ""; + for (Object connectTrapSignature : connectTrapSignatures) { + Map<String, String> connectTraps = (Map<String, String>) connectTrapSignature; + String connectBody = ""; + if (connectTraps instanceof LinkedHashMap<?, ?>) { + String notBox = ""; + String connectTrap1 = ""; + String trapCount1 = ""; + String operatorBox = ""; + String connectTrap2 = ""; + String trapCount2 = ""; + if (((LinkedHashMap) connectTraps).keySet().contains(NOT_BOX)) { + notBox = ((LinkedHashMap) connectTraps).get(NOT_BOX).toString(); + } + if (((LinkedHashMap) connectTraps).get(CONNECT_TRAP_1) != null) { + connectTrap1 = ((LinkedHashMap) connectTraps).get(CONNECT_TRAP_1).toString(); + } + if (((LinkedHashMap) connectTraps).get(TRAP_COUNT_1) != null) { + trapCount1 = ((LinkedHashMap) connectTraps).get(TRAP_COUNT_1).toString(); + } + if (((LinkedHashMap) connectTraps).get(OPERATOR_BOX) != null) { + operatorBox = ((LinkedHashMap) connectTraps).get(OPERATOR_BOX).toString(); + } + if (((LinkedHashMap) connectTraps).get(CONNECT_TRAP_2) != null) { + connectTrap2 = ((LinkedHashMap) connectTraps).get(CONNECT_TRAP_2).toString(); + } + if (((LinkedHashMap) connectTraps).get(TRAP_COUNT_2) != null) { + trapCount2 = ((LinkedHashMap) connectTraps).get(TRAP_COUNT_2).toString(); + } + connectBody = + notBox + "@!" + connectTrap1 + "@!" + trapCount1 + "@!" + operatorBox + "@!" + connectTrap2 + "@!" + + trapCount2 + "#!?!"; + } + resultBody.append(connectBody); + } + connectMainBody = connectMainBody + resultBody; + return connectMainBody; + } + + // get Trigger signature from JSON body + private String getUITriggerSignature(String trap, Object object2) { + ClosedLoopFaultTrapDatas trapDatas = (ClosedLoopFaultTrapDatas) object2; + List<Object> attributeList = new ArrayList<>(); + // Read the Trap + if (trap.startsWith(TRAP) || trap.startsWith(FAULT)) { + if (trapDatas.getTrap1() != null) { + attributeList.add(trapDatas.getTrap1()); + } + if (trapDatas.getTrap2() != null) { + attributeList.add(trapDatas.getTrap2()); + } + if (trapDatas.getTrap3() != null) { + attributeList.add(trapDatas.getTrap3()); + } + if (trapDatas.getTrap4() != null) { + attributeList.add(trapDatas.getTrap4()); + } + if (trapDatas.getTrap5() != null) { + attributeList.add(trapDatas.getTrap5()); + } + if (trapDatas.getTrap6() != null) { + attributeList.add(trapDatas.getTrap6()); + } + } + return getTriggerBody(attributeList); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + private String getTriggerBody(final List<Object> attributeList) { + StringBuilder triggerBody = new StringBuilder(); + for (Object o : attributeList) { + StringBuilder signatureBody = new StringBuilder(); + List<Object> connectTraps = (ArrayList<Object>) o; + for (Object connectTrap : connectTraps) { + String connectBody = ""; + if (connectTrap instanceof LinkedHashMap<?, ?>) { + String notBox = ""; + String trigger1 = ""; + String operatorBox = ""; + String trigger2 = ""; + if (((LinkedHashMap) connectTrap).keySet().contains(NOT_BOX)) { + notBox = ((LinkedHashMap) connectTrap).get(NOT_BOX).toString(); + } + if (((LinkedHashMap) connectTrap).get(TRIGGER_1) != null) { + trigger1 = ((LinkedHashMap) connectTrap).get(TRIGGER_1).toString(); + } + if (((LinkedHashMap) connectTrap).get(OPERATOR_BOX) != null) { + operatorBox = ((LinkedHashMap) connectTrap).get(OPERATOR_BOX).toString(); + } + if (((LinkedHashMap) connectTrap).get(TRIGGER_2) != null) { + trigger2 = ((LinkedHashMap) connectTrap).get(TRIGGER_2).toString(); + } + connectBody = notBox + "@!" + trigger1 + "@!" + operatorBox + "@!" + trigger2 + "#!"; + } + signatureBody.append(connectBody); + } + triggerBody.append(signatureBody).append("?!"); + } + return triggerBody.toString(); + } + + 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); + + // Get the target data under policy. + TargetType target = policy.getTarget(); + if (target == null) { + return; + } + + // Under target we have AnyOFType + List<AnyOfType> anyOfList = target.getAnyOf(); + if (anyOfList == null) { + return; + } + + // Set PolicyAdapter OnapNameField, riskType, riskLevel, guard, ttlDate from match attributes + setPolicyAdapterMatchAttributes(policyAdapter, anyOfList); + } + } + + 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); + } + })); + } + + private void setPolicyAdapterPolicyNameAndDescription(PolicyRestAdapter policyAdapter, PolicyType policy) { + policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); + 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); + description = policy.getDescription(); + } + policyAdapter.setPolicyDescription(description); + } + + private void setClosedLoopJSONFile(PolicyRestAdapter policyAdapter, PolicyEntity entity) { + ObjectMapper mapper = new ObjectMapper(); + try { + ClosedLoopFaultBody closedLoopBody = mapper + .readValue(entity.getConfigurationData().getConfigBody(), ClosedLoopFaultBody.class); + if ("ACTIVE".equalsIgnoreCase(closedLoopBody.getClosedLoopPolicyStatus())) { + closedLoopBody.setClosedLoopPolicyStatus("Active"); + } else { + closedLoopBody.setClosedLoopPolicyStatus("InActive"); + } + policyAdapter.setJsonBodyData(closedLoopBody); + if (closedLoopBody.getTrapMaxAge() != null) { + policyAdapter.setTrapMaxAge(closedLoopBody.getTrapMaxAge().toString()); + } + if (closedLoopBody.getTriggerTimeWindowUsedForUI() != null) { + policyAdapter.setClearTimeOut(closedLoopBody.getTriggerTimeWindowUsedForUI().toString()); + } + if (closedLoopBody.getVerificationTimeWindowUsedForUI() != null) { + policyAdapter + .setVerificationclearTimeOut(closedLoopBody.getVerificationTimeWindowUsedForUI().toString()); + } + } catch (Exception e) { + policyLogger.error("Exception Occured" + e); + } + } } -class ClosedLoopGridJSONData{ - - private String clearTimeOut; - private String trapMaxAge; - private String verificationclearTimeOut; - 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; - } -}
\ No newline at end of file +class ClosedLoopGridJSONData { + + private String clearTimeOut; + private String trapMaxAge; + private String verificationclearTimeOut; + 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; + } +} diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopPMController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopPMController.java index 392adf039..d2b04e024 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopPMController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopPMController.java @@ -3,13 +3,14 @@ * ONAP Policy Engine * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019 Bell Canada * ================================================================================ * 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. @@ -20,12 +21,11 @@ package org.onap.policy.controller; - import java.io.IOException; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; +import java.util.Objects; import javax.json.JsonArray; import javax.json.JsonObject; @@ -42,152 +42,145 @@ 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.MatchType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; -public class CreateClosedLoopPMController{ - - private static final Logger LOGGER = FlexLogger.getLogger(CreateClosedLoopPMController.class); - - protected PolicyRestAdapter policyAdapter = null; - - public void prePopulateClosedLoopPMPolicyData(PolicyRestAdapter policyAdapter, PolicyEntity entity) { - if (policyAdapter.getPolicyData() instanceof PolicyType) { - Object policyData = policyAdapter.getPolicyData(); - PolicyType policy = (PolicyType) policyData; - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("PM_") +3); - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - LOGGER.info("General error" , e); - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - // Get the target data under policy. - TargetType target = policy.getTarget(); - if (target != null) { - // Under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - Iterator<MatchType> iterMatch = matchList.iterator(); - while (matchList.size()>1 && iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // 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); - } - if ("RiskType".equals(attributeId)){ - policyAdapter.setRiskType(value); - } - if ("RiskLevel".equals(attributeId)){ - policyAdapter.setRiskLevel(value); - } - if ("guard".equals(attributeId)){ - policyAdapter.setGuard(value); - } - if ("TTLDate".equals(attributeId) && !value.contains("NA")){ - PolicyController controller = new PolicyController(); - String newDate = controller.convertDate(value); - policyAdapter.setTtlDate(newDate); - } - if ("ServiceType".equals(attributeId)){ - LinkedHashMap<String, String> serviceTypePolicyName1 = new LinkedHashMap<>(); - String key = "serviceTypePolicyName"; - serviceTypePolicyName1.put(key, value); - policyAdapter.setServiceTypePolicyName(serviceTypePolicyName1); - LinkedHashMap<String, String> vertica = new LinkedHashMap<>(); - vertica.put("verticaMetrics", getVertica(value)); - policyAdapter.setVerticaMetrics(vertica); - LinkedHashMap<String, String> desc = new LinkedHashMap<>(); - desc.put("policyDescription", getDescription(value)); - policyAdapter.setDescription(desc); - LinkedHashMap<String, Object> attributes = new LinkedHashMap<>(); - attributes.put("attributes", getAttributes(value)); - policyAdapter.setAttributeFields(attributes); - } - } - } - } - } - } - } - } - readClosedLoopJSONFile(policyAdapter, entity); - } - } - - protected void readClosedLoopJSONFile(PolicyRestAdapter policyAdapter, PolicyEntity entity) { - ObjectMapper mapper = new ObjectMapper(); - try { - ClosedLoopPMBody closedLoopBody = mapper.readValue(entity.getConfigurationData().getConfigBody(), ClosedLoopPMBody.class); - policyAdapter.setJsonBodyData(closedLoopBody); - } catch (IOException e) { - LOGGER.error("Exception Occured"+e); - } - } - - //get vertica metrics data from the table - private String getVertica(String policyName){ - String verticas = null; - JsonArray data = PolicyManagerServlet.getPolicyNames(); - for(int i=0 ; i< data.size(); i++){ - if(policyName.equals(data.getJsonObject(i).getJsonString("serviceTypePolicyName").getString())){ - verticas = data.getJsonObject(i).getJsonString("verticaMetrics").getString(); - return verticas; - } - } - return verticas; - } - - //get policy description from the table - private String getDescription(String policyName){ - String description = null; - JsonArray data = PolicyManagerServlet.getPolicyNames(); - for(int i=0 ; i< data.size(); i++){ - if(policyName.equals(data.getJsonObject(i).getJsonString("serviceTypePolicyName").getString())){ - description = data.getJsonObject(i).getJsonString("policyDescription").getString(); - return description; - } - } - return description; - } - - //get Attributes - private JsonObject getAttributes(String policyName){ - JsonObject attributes = null; - JsonArray data = PolicyManagerServlet.getPolicyNames(); - for(int i=0 ; i< data.size(); i++){ - if(policyName.equals(data.getJsonObject(i).getJsonString("serviceTypePolicyName").getString())){ - attributes = data.getJsonObject(i).getJsonObject("attributes"); - return attributes; - } - } - return attributes; - } +public class CreateClosedLoopPMController { + + private static final Logger LOGGER = FlexLogger.getLogger(CreateClosedLoopPMController.class); + private static final String KEY_SERVICE_TYPE_POLICY_NAME = "serviceTypePolicyName"; + + protected PolicyRestAdapter policyAdapter = null; + + public void prePopulateClosedLoopPMPolicyData(PolicyRestAdapter policyAdapter, PolicyEntity entity) { + if (policyAdapter.getPolicyData() instanceof PolicyType) { + Object policyData = policyAdapter.getPolicyData(); + PolicyType policy = (PolicyType) policyData; + + // Set oldPolicyFileName to PolicyAdapter + policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); + + // Set policyNameValue and description to PolicyAdapter + setPolicyAdapterNameValueAndDescription(policyAdapter, policy); + + // Set PolicyAdapter JsonBodyData + setClosedLoopJSONFile(policyAdapter, entity); + + // Get the target data under policy. + TargetType target = policy.getTarget(); + if (target == null) { + return; + } + // Under target we have AnyOFType + List<AnyOfType> anyOfList = target.getAnyOf(); + if (anyOfList == null) { + return; + } + // Set PolicyAdapter OnapNameField, riskType, riskLevel, guard, ttlDate, ServiceType from match attributes + setPolicyAdapterMatchAttributes(policyAdapter, anyOfList); + } + } + + private void setPolicyAdapterNameValueAndDescription(PolicyRestAdapter policyAdapter, PolicyType policy) { + String policyNameValue = policyAdapter.getPolicyName() + .substring(policyAdapter.getPolicyName().indexOf("PM_") + 3); + policyAdapter.setPolicyName(policyNameValue); + String description; + try { + description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); + } catch (Exception e) { + LOGGER.info("General error", e); + description = policy.getDescription(); + } + policyAdapter.setPolicyDescription(description); + } + + private void setClosedLoopJSONFile(PolicyRestAdapter policyAdapter, PolicyEntity entity) { + ObjectMapper mapper = new ObjectMapper(); + try { + ClosedLoopPMBody closedLoopBody = mapper + .readValue(entity.getConfigurationData().getConfigBody(), ClosedLoopPMBody.class); + policyAdapter.setJsonBodyData(closedLoopBody); + } catch (IOException e) { + LOGGER.error("Exception Occured" + e); + } + } + + private void setPolicyAdapterMatchAttributes(final PolicyRestAdapter policyAdapter, + final 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) + .forEach(matchList -> matchList.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); + } 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); + } else if ("ServiceType".equals(attributeId)) { + LinkedHashMap<String, String> serviceTypePolicyName1 = new LinkedHashMap<>(); + serviceTypePolicyName1.put(KEY_SERVICE_TYPE_POLICY_NAME, value); + policyAdapter.setServiceTypePolicyName(serviceTypePolicyName1); + LinkedHashMap<String, String> vertica = new LinkedHashMap<>(); + vertica.put("verticaMetrics", getVertica(value)); + policyAdapter.setVerticaMetrics(vertica); + LinkedHashMap<String, String> desc = new LinkedHashMap<>(); + desc.put("policyDescription", getDescription(value)); + policyAdapter.setDescription(desc); + LinkedHashMap<String, Object> attributes = new LinkedHashMap<>(); + attributes.put("attributes", getAttributes(value)); + policyAdapter.setAttributeFields(attributes); + } + }))); + } + + //get vertica metrics data from the table + private String getVertica(String policyName) { + JsonArray data = PolicyManagerServlet.getPolicyNames(); + for (int i = 0; i < data.size(); i++) { + if (policyName.equals(data.getJsonObject(i).getJsonString(KEY_SERVICE_TYPE_POLICY_NAME).getString())) { + return data.getJsonObject(i).getJsonString("verticaMetrics").getString(); + } + } + return null; + } + + //get policy description from the table + private String getDescription(String policyName) { + JsonArray data = PolicyManagerServlet.getPolicyNames(); + for (int i = 0; i < data.size(); i++) { + if (policyName.equals(data.getJsonObject(i).getJsonString(KEY_SERVICE_TYPE_POLICY_NAME).getString())) { + return data.getJsonObject(i).getJsonString("policyDescription").getString(); + } + } + return null; + } + //get Attributes + private JsonObject getAttributes(String policyName) { + JsonArray data = PolicyManagerServlet.getPolicyNames(); + for (int i = 0; i < data.size(); i++) { + if (policyName.equals(data.getJsonObject(i).getJsonString(KEY_SERVICE_TYPE_POLICY_NAME).getString())) { + return data.getJsonObject(i).getJsonObject("attributes"); + } + } + return null; + } } |