diff options
Diffstat (limited to 'POLICY-SDK-APP')
17 files changed, 2948 insertions, 2209 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; + } } diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java index 67a94474f..a8df74add 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java @@ -27,6 +27,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.gson.Gson; @@ -53,7 +54,9 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; +import java.util.TreeSet; import java.util.UUID; +import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import javax.json.Json; @@ -124,7 +127,8 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { private LinkedHashMap<String, MSAttributeObject> classMap = new LinkedHashMap<>(); String referenceAttributes; String attributeString; - Set<String> allManyTrueKeys = new HashSet<>(); + Set<String> allManyTrueKeys = null; + private Map<String, String> sigRules = null; public static final String DATATYPE = "data_types.policy.data."; public static final String PROPERTIES = ".properties."; @@ -136,7 +140,8 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { public static final String REQUIRED = ".required"; public static final String MATCHABLE = ".matchable"; public static final String MANYFALSE = ":MANY-false"; - + private static final Pattern PATTERN = Pattern.compile("[A][0-9]"); + private static final String POLICYJSON = "policyJSON"; @Autowired private CreateDcaeMicroServiceController(CommonClassDao commonClassDao) { @@ -157,12 +162,12 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { String jsonContent = null; try { - LOGGER.info("policyJSON :" + (root.get("policyJSON")).toString()); + LOGGER.info("policyJSON :" + (root.get(POLICYJSON)).toString()); - String tempJson = root.get("policyJSON").toString(); - JSONObject policyJSON = new JSONObject(root.get("policyJSON").toString()); + String tempJson = root.get(POLICYJSON).toString(); + JSONObject policyJSON = new JSONObject(root.get(POLICYJSON).toString()); if (policyJSON != null) { - saveOriginalJsonObject(policyJSON, jsonStringValues); + tempJson = saveOriginalJsonObject(policyJSON, jsonStringValues).toString(); } // ---replace empty value with the value below before calling decodeContent method. String dummyValue = "*empty-value*" + UUID.randomUUID().toString(); @@ -178,9 +183,9 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } // ----Here is the final step to reset the original value back. - if(policyData.getJsonBody() != null && jsonStringValues.size() > 0){ + if (policyData.getJsonBody() != null && jsonStringValues.size() > 0) { String contentBody = policyData.getJsonBody(); - JSONObject contentJson= new JSONObject(contentBody); + JSONObject contentJson = new JSONObject(contentBody); JSONObject content = contentJson.getJSONObject("content"); content = setOriginalJsonObject(content, jsonStringValues); contentJson.put("content", content); @@ -190,52 +195,52 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { return policyData; } - /** - * To save the original JSON string from the root. - * - * @param jsonObj holds the value from the root. - * @param jsonStringValues value get saved. - */ - private void saveOriginalJsonObject(JSONObject jsonObj, Map<String, String> jsonStringValues) { + private JSONObject saveOriginalJsonObject(JSONObject jsonObj, Map<String, String> jsonStringValues) { for (Object key : jsonObj.keySet()) { String keyStr = (String) key; Object keyvalue = jsonObj.get(keyStr); if (keyvalue.toString().contains("{\\\"") || keyvalue.toString().contains("\\\"")) { jsonStringValues.put(keyStr, keyvalue.toString()); + // --- set default value + jsonObj.put(keyStr, "JSON_STRING"); } // for nested objects iteration if required if (keyvalue instanceof JSONObject) { saveOriginalJsonObject((JSONObject) keyvalue, jsonStringValues); + // --- set default value + jsonObj.put(keyStr, "JSON_STRING"); + } + + if (keyvalue instanceof JSONArray) { + for (int i = 0; i < ((JSONArray) keyvalue).length(); i++) { + JSONObject temp = ((JSONArray) keyvalue).getJSONObject(i); + saveOriginalJsonObject(temp, jsonStringValues); + } } } + + return jsonObj; } - /** - * To reset the original JSON string back associated to its key. - * - * @param jsonObj holds the original json. - * @param jsonStringValues value to be reset. - * @return - */ - private JSONObject setOriginalJsonObject(JSONObject jsonObj , Map<String, String> jsonStringValues) { + private JSONObject setOriginalJsonObject(JSONObject jsonObj, Map<String, String> jsonStringValues) { for (Object key : jsonObj.keySet()) { - String keyStr = (String)key; + String keyStr = (String) key; Object keyvalue = jsonObj.get(keyStr); String originalValue = getOriginalValue(keyStr); if (originalValue != null) { jsonObj.put(keyStr, originalValue); } - //for nested objects iteration if required + // for nested objects iteration if required if (keyvalue instanceof JSONObject) { - setOriginalJsonObject((JSONObject)keyvalue, jsonStringValues); + setOriginalJsonObject((JSONObject) keyvalue, jsonStringValues); jsonObj.put(keyStr, originalValue); } if (keyvalue instanceof JSONArray) { - for (int i = 0; i < ((JSONArray)keyvalue).length(); i++) { - JSONObject temp = ((JSONArray)keyvalue).getJSONObject(i); + for (int i = 0; i < ((JSONArray) keyvalue).length(); i++) { + JSONObject temp = ((JSONArray) keyvalue).getJSONObject(i); setOriginalJsonObject(temp, jsonStringValues); } } @@ -248,7 +253,8 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { return (GroupPolicyScopeList) commonClassDao.getEntityItem(GroupPolicyScopeList.class, "name", policyScope); } - private PolicyRestAdapter constructJson(PolicyRestAdapter policyAdapter, String jsonContent, String dummyValue) { + private PolicyRestAdapter constructJson(PolicyRestAdapter policyAdapter, String jsonContent, String dummyValue) + throws IOException { ObjectWriter om = new ObjectMapper().writer(); String json = ""; DCAEMicroServiceObject microServiceObject = new DCAEMicroServiceObject(); @@ -297,7 +303,23 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { microServiceObject.setGuard(policyAdapter.getGuard()); } microServiceObject.setContent(jsonContent); - + String modelName = policyAdapter.getServiceType(); + String versionName = policyAdapter.getVersion(); + List<Object> triggerData = commonClassDao.getDataById(MicroServiceModels.class, "modelName:version", + modelName + ":" + versionName); + MicroServiceModels model = null; + boolean ruleCheck = false; + boolean SymptomRuleCheck = false; + if (!triggerData.isEmpty()) { + model = (MicroServiceModels) triggerData.get(0); + if (model.getRuleFormation() != null) { + microServiceObject.setUiContent(jsonContent); + ruleCheck = true; + if (model.getRuleFormation().contains("@")) { + SymptomRuleCheck = true; + } + } + } try { json = om.writeValueAsString(microServiceObject); } catch (JsonProcessingException e) { @@ -311,10 +333,159 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { StringUtils.replaceEach(cleanJson, new String[] {"\"" + dummyValue + "\""}, new String[] {"\"\""}); LOGGER.info("tempJson: " + tempJson); cleanJson = removeNullAttributes(tempJson); + if (cleanJson.contains("\\")) { + cleanJson = StringUtils.replaceEach(cleanJson, new String[] {"\\"}, new String[] {""}); + } policyAdapter.setJsonBody(cleanJson); + // for Triggers + ObjectMapper mapper = new ObjectMapper(); + JsonNode tempJsonNode = mapper.readTree(cleanJson); + if (ruleCheck) { + // JsonNode tempJsonNode = mapper.readTree(cleanJson); + ObjectNode finalJson = (ObjectNode) tempJsonNode; + JsonNode object = tempJsonNode.get("content"); + String primaryKey1 = model.getRuleFormation(); + String[] primaryKeyForSignatures = primaryKey1.split("@"); + for (String primaryKeyForSignature : primaryKeyForSignatures) { + String primarykeyAlarm = primaryKeyForSignature.substring(0, primaryKeyForSignature.indexOf('.')); + JsonNode triggerSig = object.get(primarykeyAlarm); + sigRules = new HashMap<>(); + String parseKey = primaryKeyForSignature.substring(primaryKeyForSignature.indexOf('.') + 1); + StringBuilder sb = null; + if (triggerSig instanceof ArrayNode) { + for (int i = 0; i < triggerSig.size(); i++) { + sb = new StringBuilder(); + parseData(triggerSig.get(i), parseKey); + sb.append("("); + List<?> keyList = new ArrayList<>(sigRules.keySet()); + for (int j = keyList.size() - 1; j >= 0; j--) { + String key = (String) keyList.get(j); + String jsonNode = sigRules.get(key); + constructRule(sb, jsonNode, sigRules); + } + sb.append(")").toString(); + putRuletoJson(tempJsonNode, i, sb, parseKey, primarykeyAlarm); + sigRules = new HashMap<>(); + } + } else { + sb = new StringBuilder(); + parseData(triggerSig, parseKey); + } + } + policyAdapter.setJsonBody(finalJson.toString()); + } return policyAdapter; } + private JsonNode putRuletoJson(JsonNode tmpJsonNode, int item, StringBuilder sb, String parseKey, + String primaryKey) { + JsonNode tmp = tmpJsonNode; + ObjectNode objectNode = (ObjectNode) tmp; + JsonNode jsonNode = tmpJsonNode.get("content").get(primaryKey).get(item); + JsonNode tempRuleJsonNode = tmpJsonNode.get("content").get(primaryKey).get(item); + String[] tempSt = parseKey.split("\\."); + for (String value : tempSt) { + if (value.contains("[")) { + if (tempRuleJsonNode instanceof ArrayNode) { + JsonNode tempRuleNode = tempRuleJsonNode.get(item); + ((ArrayNode) tempRuleJsonNode).removeAll(); + ((ArrayNode) tempRuleJsonNode).add(tempRuleNode); + objectNode = (ObjectNode) tempRuleJsonNode.get(item); + } + String key = value.substring(0, value.indexOf('[')); + objectNode.remove(key); + objectNode.put(key, sb.toString()); + return tmp; + } else { + jsonNode = jsonNode.get(value); + if (jsonNode instanceof ArrayNode) { + tempRuleJsonNode = jsonNode; + jsonNode = jsonNode.get(item); + } + } + } + return tmp; + } + + public boolean checkPattern(String patternString) { + return PATTERN.matcher(patternString).find(); + } + + /** + * Construct rule. + * + * @param sb the sb + * @param jsonNode the json node + * @param sigRules2 the sig rules 2 + */ + public void constructRule(StringBuilder sb, String jsonNode, Map<String, String> sigRules2) { + int count = 0; + String cleanJsonNode = jsonNode.replace("\"\"", " "); + cleanJsonNode = cleanJsonNode.replaceAll("\"", ""); + cleanJsonNode = cleanJsonNode.replaceAll("\\(", ""); + cleanJsonNode = cleanJsonNode.replaceAll("\\)", ""); + boolean flag = false; + if (cleanJsonNode.contains("OR")) { + sb.append("("); + flag = true; + } + for (String rowValue : cleanJsonNode.split(" ")) { + if (checkPattern(rowValue)) { + String value = sigRules2.get(rowValue); + LOGGER.info(" Value is:" + value); + constructRule(sb, value, sigRules2); + } else { + if ((count == 0) && (!("AND").equals(rowValue)) && (!("OR").equals(rowValue))) { + sb.append("("); + } + count++; + LOGGER.info(" " + rowValue + " "); + sb.append(" " + rowValue + " "); + if (count % 3 == 0) { + sb.append(")"); + count = 0; + } + } + } + if (flag) { + sb.append(")"); + } + } + + /** + * Parses the data. + * + * @param jsonNode the json node + * @param string the string + */ + public void parseData(JsonNode jsonNode, String string) { + if (string.contains(".")) { + String firstIndex = string.substring(0, string.indexOf('.')); + JsonNode signtures = jsonNode.get(firstIndex); + String subIndex = string.substring(firstIndex.length() + 1); + if (signtures instanceof ArrayNode) { + for (int i = 0; i < signtures.size(); i++) { + parseData(signtures.get(i), subIndex); + } + } else { + parseData(signtures, subIndex); + } + } else { + if (string.contains("[")) { + String ruleIndex = string.substring(0, string.indexOf('[')); + String[] keys = string.substring(string.indexOf('[') + 1, string.lastIndexOf(']')).split(","); + String key = "A" + Integer.valueOf(sigRules.size() + 1); + JsonNode node = jsonNode.get(ruleIndex); + StringBuilder sb = new StringBuilder("("); + for (int i = 0; i < keys.length; i++) { + sb.append(node.get(keys[i].trim())); + } + sb.append(")"); + sigRules.put(key, sb.toString()); + } + } + } + public String removeNullAttributes(String cleanJson) { ObjectMapper mapper = new ObjectMapper(); @@ -658,6 +829,8 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { method = {org.springframework.web.bind.annotation.RequestMethod.POST}) public ModelAndView getDCAEMSTemplateData(HttpServletRequest request, HttpServletResponse response) throws IOException { + // TreeSet is used to ensure that individual items appear before their containing collection. + allManyTrueKeys = new TreeSet<>(); ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); JsonNode root = mapper.readTree(request.getReader()); @@ -693,7 +866,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { JSONObject json = new JSONObject(returnModel.getSub_attributes()); getAllKeys(json); allkeys = allManyTrueKeys; - allManyTrueKeys = new HashSet<>(); + allManyTrueKeys = new TreeSet<>(); LOGGER.info("allkeys : " + allkeys); } @@ -704,9 +877,9 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } LOGGER.info("dataOrderInfo : " + dataOrderInfo); - String allManyTrueKeys = ""; + String allMnyTrueKeys = ""; if (allkeys != null) { - allManyTrueKeys = allkeys.toString(); + allMnyTrueKeys = allkeys.toString(); } String jsonModel = createMicroSeriveJson(returnModel, allkeys); @@ -719,6 +892,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { while (iter.hasNext()) { // Convert to array values for MANY-true keys finalJsonObject = convertToArrayElement(jsonObject, iter.next()); + jsonObject = finalJsonObject; } } @@ -735,6 +909,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { LOGGER.info(s); // convert to array element for MANY-true properties finalJsonObject = convertToArrayElement(jsonObj, s.trim()); + jsonObj = finalJsonObject; } if (finalJsonObject != null) { @@ -752,12 +927,12 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { JSONObject j = null; - if ("".equals(allManyTrueKeys)) { + if ("".equals(allMnyTrueKeys)) { j = new JSONObject("{dcaeModelData: " + responseString + ",jsonValue: " + jsonModel + ",dataOrderInfo:" + dataOrderInfo + ",headDefautlsData:" + headDefautlsData + "}"); } else { j = new JSONObject("{dcaeModelData: " + responseString + ",jsonValue: " + jsonModel + ",allManyTrueKeys: " - + allManyTrueKeys + ",dataOrderInfo:" + dataOrderInfo + ",headDefautlsData:" + headDefautlsData + + allMnyTrueKeys + ",dataOrderInfo:" + dataOrderInfo + ",headDefautlsData:" + headDefautlsData + "}"); } list.add(j); @@ -868,11 +1043,11 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } - public static JSONObject convertToArrayElement(JSONObject json, String keyValue) { + public JSONObject convertToArrayElement(JSONObject json, String keyValue) { return convertToArrayElement(json, new HashSet<>(), keyValue); } - private static JSONObject convertToArrayElement(JSONObject json, Set<String> keys, String keyValue) { + private JSONObject convertToArrayElement(JSONObject json, Set<String> keys, String keyValue) { for (String key : json.keySet()) { Object obj = json.get(key); if (key.equals(keyValue.trim())) { @@ -890,15 +1065,20 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { return json; } - if (obj instanceof JSONObject) + if (obj instanceof JSONObject) { convertToArrayElement(json.getJSONObject(key), keyValue); + } + + if (obj instanceof JSONArray) { + convertToArrayElement(json.getJSONArray(key).getJSONObject(0), keyValue); + } } return json; } // call this method to get all MANY-true properties - public static Set<String> getManyTrueProperties(String referAttributes) { + public Set<String> getManyTrueProperties(String referAttributes) { LOGGER.info("referAttributes : " + referAttributes); Set<String> manyTrueProperties = new HashSet<>(); @@ -1125,7 +1305,14 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } } - public static Map<String, String> convert(String str, String split) { + /** + * Convert. + * + * @param str the str + * @param split the split + * @return the map + */ + public Map<String, String> convert(String str, String split) { Map<String, String> map = new HashMap<>(); for (final String entry : str.split(split)) { String[] parts = entry.split("="); @@ -1135,8 +1322,14 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } + /** + * Read file. + * + * @param policyAdapter the policy adapter + * @param entity the entity + */ @SuppressWarnings("unchecked") - private void readFile(PolicyRestAdapter policyAdapter, PolicyEntity entity) { + public void readFile(PolicyRestAdapter policyAdapter, PolicyEntity entity) { String policyScopeName = null; ObjectMapper mapper = new ObjectMapper(); try { @@ -1153,9 +1346,14 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } else { policyAdapter.setServiceType(msBody.getService()); } - if (msBody.getContent() != null) { + // + LinkedHashMap<String, ?> content = (LinkedHashMap<String, ?>) msBody.getUiContent(); + if (content == null) { + content = (LinkedHashMap<String, ?>) msBody.getContent(); + } + if (content != null) { LinkedHashMap<String, Object> data = new LinkedHashMap<>(); - LinkedHashMap<String, ?> map = (LinkedHashMap<String, ?>) msBody.getContent(); + LinkedHashMap<String, ?> map = content; readRecursivlyJSONContent(map, data); policyAdapter.setRuleData(data); } @@ -1167,7 +1365,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } @SuppressWarnings({"rawtypes", "unchecked"}) - public void readRecursivlyJSONContent(LinkedHashMap<String, ?> map, LinkedHashMap<String, Object> data) { + public void readRecursivlyJSONContent(Map<String, ?> map, Map<String, Object> data) { for (Iterator iterator = map.keySet().iterator(); iterator.hasNext();) { Object key = iterator.next(); Object value = map.get(key); @@ -1306,13 +1504,12 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } List<File> fileList = new ArrayList<>(); - MSModelUtils msMLUtils = new MSModelUtils(); + MSModelUtils msMLUtils = new MSModelUtils(commonClassDao); this.directory = "model"; if (zip) { extractFolder(this.newFile); fileList = listModelFiles(this.directory); - } else if (yml == true) { - + } else if (yml) { errorMsg = msMLUtils.parseTosca(this.newFile); if (errorMsg != null) { PrintWriter out = response.getWriter(); @@ -1393,6 +1590,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { j.put("modelDatas", mapper.writeValueAsString(classMap)); j.put("modelType", modelType); j.put("dataOrderInfo", msMLUtils.getDataOrderInfo()); + j.put("ruleFormation", msMLUtils.getJsonRuleFormation()); out.write(j.toString()); } @@ -1524,6 +1722,14 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { return arrayTextList; } + public Map<String, String> getSigRules() { + return sigRules; + } + + public void setSigRules(Map<String, String> sigRules) { + this.sigRules = sigRules; + } + } @@ -1542,6 +1748,7 @@ class DCAEMicroServiceObject { private String riskType; private String riskLevel; private String guard = null; + private Object uiContent; public String getGuard() { return guard; @@ -1658,4 +1865,12 @@ class DCAEMicroServiceObject { this.templateVersion = templateVersion; } + public Object getUiContent() { + return uiContent; + } + + public void setUiContent(Object uiContent) { + this.uiContent = uiContent; + } + } diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateOptimizationController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateOptimizationController.java index e3ce8780b..05fddb50d 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateOptimizationController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateOptimizationController.java @@ -2,14 +2,14 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * 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. @@ -21,6 +21,13 @@ package org.onap.policy.controller; +import com.att.research.xacml.util.XACMLProperties; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; +import com.google.gson.Gson; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; @@ -42,10 +49,15 @@ import java.util.Set; import java.util.UUID; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - +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; import org.apache.commons.compress.utils.IOUtils; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; @@ -59,9 +71,9 @@ import org.onap.policy.common.logging.flexlogger.Logger; import org.onap.policy.rest.XACMLRestProperties; import org.onap.policy.rest.adapter.PolicyRestAdapter; import org.onap.policy.rest.dao.CommonClassDao; +import org.onap.policy.rest.jpa.MicroserviceHeaderdeFaults; import org.onap.policy.rest.jpa.OptimizationModels; import org.onap.policy.rest.jpa.PolicyEntity; -import org.onap.policy.rest.jpa.MicroserviceHeaderdeFaults; import org.onap.policy.rest.util.MSAttributeObject; import org.onap.policy.rest.util.MSModelUtils; import org.onap.policy.rest.util.MSModelUtils.MODEL_TYPE; @@ -71,888 +83,913 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; -import com.att.research.xacml.util.XACMLProperties; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; -import com.google.gson.Gson; - -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 CreateOptimizationController extends RestrictedBaseController { - private static final Logger LOGGER = FlexLogger.getLogger(CreateOptimizationController.class); - private static CommonClassDao commonClassDao; - - public static CommonClassDao getCommonClassDao() { - return commonClassDao; - } - - private OptimizationModels newModel; - private String newFile; - private String directory; - private List<String> modelList = new ArrayList<>(); - private List<String> dirDependencyList = new ArrayList<>(); - private LinkedHashMap<String,MSAttributeObject > classMap = new LinkedHashMap<>(); - String referenceAttributes; - String attributeString; - Set<String> allManyTrueKeys= new HashSet <>(); - - public static final String DATATYPE = "data_types.policy.data."; - public static final String PROPERTIES=".properties."; - public static final String TYPE=".type"; - public static final String STRING="string"; - public static final String INTEGER="integer"; - public static final String LIST="list"; - public static final String DEFAULT=".default"; - public static final String REQUIRED=".required"; - public static final String MATCHABLE=".matchable"; - public static final String MANYFALSE=":MANY-false"; - public static final String MODEL = "model"; - public static final String MANY = "MANY-"; - public static final String UTF8 = "UTF-8"; - public static final String MODELNAME = "modelName"; - public static final String APPLICATIONJSON = "application / json"; - - - @Autowired - private CreateOptimizationController(CommonClassDao commonClassDao){ - setCommonClassDao(commonClassDao); - } - - public static void setCommonClassDao(CommonClassDao commonClassDao) { - CreateOptimizationController.commonClassDao = commonClassDao; - } - - public CreateOptimizationController(){ - // Empty Constructor - } - - protected PolicyRestAdapter policyAdapter = null; - private Map<String, String> attributesListRefMap = new HashMap<>(); - private Map<String, LinkedList<String>> arrayTextList = new HashMap<>(); - CreateDcaeMicroServiceController msController = new CreateDcaeMicroServiceController(); - - public PolicyRestAdapter setDataToPolicyRestAdapter(PolicyRestAdapter policyData, JsonNode root) { - String jsonContent = null; - try{ - LOGGER.info("policyJSON :" + (root.get("policyJSON")).toString()); - - String tempJson = root.get("policyJSON").toString(); - - //---replace empty value with the value below before calling decodeContent method. - String dummyValue = "*empty-value*" + UUID.randomUUID().toString(); - LOGGER.info("dummyValue:" + dummyValue); - tempJson = StringUtils.replaceEach(tempJson, new String[]{"\"\""}, new String[]{"\""+dummyValue+"\""}); - ObjectMapper mapper = new ObjectMapper(); - JsonNode tempJsonNode = mapper.readTree(tempJson); - jsonContent = msController.decodeContent(tempJsonNode).toString(); - constructJson(policyData, jsonContent, dummyValue); - }catch(Exception e){ - LOGGER.error("Error while decoding microservice content", e); - } - - return policyData; - } - - private PolicyRestAdapter constructJson(PolicyRestAdapter policyAdapter, String jsonContent, String dummyValue) { - ObjectWriter om = new ObjectMapper().writer(); - String json=""; - OptimizationObject optimizationObject = setOptimizationObjectValues(policyAdapter); - - optimizationObject.setContent(jsonContent); - - try { - json = om.writeValueAsString(optimizationObject); - } catch (JsonProcessingException e) { - LOGGER.error("Error writing out the object", e); - } - LOGGER.info("input json: " + json); - LOGGER.info("input jsonContent: " + jsonContent); - String cleanJson = msController.cleanUPJson(json); - - //--- reset empty value back after called cleanUPJson method and before calling removeNullAttributes - String tempJson = StringUtils.replaceEach(cleanJson, new String[]{"\""+dummyValue+"\""}, new String[]{"\"\""}); - LOGGER.info("tempJson: " + tempJson); - cleanJson = msController.removeNullAttributes(tempJson); - policyAdapter.setJsonBody(cleanJson); - return policyAdapter; - } - - @RequestMapping(value={"/policyController/getOptimizationTemplateData.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView getOptimizationTemplateData(HttpServletRequest request, HttpServletResponse response) throws IOException{ - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - - String value = root.get("policyData").toString().replaceAll("^\"|\"$", ""); - String servicename = value.toString().split("-v")[0]; - String version = null; - if (value.toString().contains("-v")){ - version = value.toString().split("-v")[1]; - } - - OptimizationModels returnModel = getAttributeObject(servicename, version); - - MicroserviceHeaderdeFaults returnHeaderDefauls = getHeaderDefaultsObject(value); - JSONObject jsonHdDefaultObj = null; - if(returnHeaderDefauls != null){ - jsonHdDefaultObj = new JSONObject(); - jsonHdDefaultObj.put("onapName", returnHeaderDefauls.getOnapName()); - jsonHdDefaultObj.put("guard", returnHeaderDefauls.getGuard()); - jsonHdDefaultObj.put("riskLevel", returnHeaderDefauls.getRiskLevel()); - jsonHdDefaultObj.put("riskType", returnHeaderDefauls.getRiskType()); - jsonHdDefaultObj.put("priority", returnHeaderDefauls.getPriority()); - } - - String headDefautlsData = ""; - if(jsonHdDefaultObj != null){ - headDefautlsData = jsonHdDefaultObj.toString(); - LOGGER.info("returnHeaderDefauls headDefautlsData: " + headDefautlsData); - }else{ - headDefautlsData = "null"; - } - - //Get all keys with "MANY-true" defined in their value from subAttribute - Set<String> allkeys = null; - if(returnModel.getSubattributes() != null && !returnModel.getSubattributes().isEmpty()){ - JSONObject json = new JSONObject(returnModel.getSubattributes()); - getAllKeys(json); - allkeys = allManyTrueKeys; - allManyTrueKeys = new HashSet <>(); - LOGGER.info("allkeys : " + allkeys); - } - - //Get element order info - String dataOrderInfo = returnModel.getDataOrderInfo(); - if(dataOrderInfo != null && !dataOrderInfo.startsWith("\"")){ - dataOrderInfo = "\"" + dataOrderInfo + "\""; - } - - String nameOfTrueKeys = ""; - if(allkeys != null){ - nameOfTrueKeys = allkeys.toString(); - } - - String jsonModel = createOptimizationJson(returnModel); - - JSONObject jsonObject = new JSONObject(jsonModel); - - JSONObject finalJsonObject = null; - if(allkeys != null){ - Iterator<String> iter = allkeys.iterator(); - while(iter.hasNext()){ - //Convert to array values for MANY-true keys - finalJsonObject = CreateDcaeMicroServiceController.convertToArrayElement(jsonObject, iter.next()); - } - } - - if(finalJsonObject != null){ - LOGGER.info(finalJsonObject.toString()); - jsonModel = finalJsonObject.toString(); - } - - //get all properties with "MANY-true" defined in Ref_attributes - Set<String> manyTrueProperties = CreateDcaeMicroServiceController.getManyTrueProperties(returnModel.getRefattributes()); - JSONObject jsonObj = new JSONObject(jsonModel); - for (String s : manyTrueProperties) { - LOGGER.info(s); - //convert to array element for MANY-true properties - finalJsonObject = CreateDcaeMicroServiceController.convertToArrayElement(jsonObj, s.trim()); - } - - if(finalJsonObject != null){ - LOGGER.info(finalJsonObject.toString()); - jsonModel = finalJsonObject.toString(); - } - - response.setCharacterEncoding(UTF8); - response.setContentType(APPLICATIONJSON); - request.setCharacterEncoding(UTF8); - List<Object> list = new ArrayList<>(); - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(returnModel); - JSONObject j = null; - if("".equals(nameOfTrueKeys)){ - j = new JSONObject("{optimizationModelData: " + responseString + ",jsonValue: " + jsonModel + ",dataOrderInfo:" + dataOrderInfo + ",headDefautlsData:" + headDefautlsData +"}"); - }else{ - j = new JSONObject("{optimizationModelData: " + responseString + ",jsonValue: " + jsonModel + ",allManyTrueKeys: " + allManyTrueKeys+",dataOrderInfo:" + dataOrderInfo + ",headDefautlsData:" + headDefautlsData+ "}"); - } - list.add(j); - out.write(list.toString()); - return null; - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - private String createOptimizationJson(OptimizationModels returnModel) { - Map<String, String> attributeMap = new HashMap<>(); - Map<String, String> refAttributeMap = new HashMap<>(); - - String attribute = returnModel.getAttributes(); - if(attribute != null){ - attribute = attribute.trim(); - } - String refAttribute = returnModel.getRefattributes(); - if(refAttribute != null){ - refAttribute = refAttribute.trim(); - } - - String enumAttribute = returnModel.getEnumValues(); - if(enumAttribute != null){ - enumAttribute = enumAttribute.trim(); - } - - if (!StringUtils.isEmpty(attribute)){ - attributeMap = CreateDcaeMicroServiceController.convert(attribute, ","); - } - - if (!StringUtils.isEmpty(refAttribute)){ - refAttributeMap = CreateDcaeMicroServiceController.convert(refAttribute, ","); - } - - Gson gson = new Gson(); - - String subAttributes = returnModel.getSubattributes(); - if(subAttributes != null){ - subAttributes = subAttributes.trim(); - }else{ - subAttributes = ""; - } - - Map gsonObject = (Map) gson.fromJson(subAttributes, Object.class); - - JSONObject object = new JSONObject(); - JSONArray array; - - for (Entry<String, String> keySet : attributeMap.entrySet()){ - array = new JSONArray(); - String value = keySet.getValue(); - if ("true".equalsIgnoreCase(keySet.getValue().split(MANY)[1])){ - array.put(value); - object.put(keySet.getKey().trim(), array); - }else { - object.put(keySet.getKey().trim(), value.trim()); - } - } - - for (Entry<String, String> keySet : refAttributeMap.entrySet()){ - array = new JSONArray(); - String value = keySet.getValue().split(":")[0]; - if (gsonObject.containsKey(value)){ - if ("true".equalsIgnoreCase(keySet.getValue().split(MANY)[1])){ - array.put(recursiveReference(value, gsonObject, enumAttribute)); - object.put(keySet.getKey().trim(), array); - }else { - object.put(keySet.getKey().trim(), recursiveReference(value, gsonObject, enumAttribute)); - } - }else { - if ("true".equalsIgnoreCase(keySet.getValue().split(MANY)[1])){ - array.put(value.trim()); - object.put(keySet.getKey().trim(), array); - }else { - object.put(keySet.getKey().trim(), value.trim()); - } - } - } - - return object.toString(); - } - - @SuppressWarnings("unchecked") - private JSONObject recursiveReference(String name, Map<String,String> subAttributeMap, String enumAttribute) { - JSONObject object = new JSONObject(); - Map<String, String> map; - Object returnClass = subAttributeMap.get(name); - map = (Map<String, String>) returnClass; - JSONArray array; - - for( Entry<String, String> m:map.entrySet()){ - String[] splitValue = m.getValue().split(":"); - array = new JSONArray(); - if (subAttributeMap.containsKey(splitValue[0])){ - if ("true".equalsIgnoreCase(m.getValue().split(MANY)[1])){ - array.put(recursiveReference(splitValue[0], subAttributeMap, enumAttribute)); - object.put(m.getKey().trim(), array); - }else { - object.put(m.getKey().trim(), recursiveReference(splitValue[0], subAttributeMap, enumAttribute)); - } - } else{ - if ("true".equalsIgnoreCase(m.getValue().split(MANY)[1])){ - array.put(splitValue[0].trim()); - object.put(m.getKey().trim(), array); - }else { - object.put(m.getKey().trim(), splitValue[0].trim()); - } - } - } - - return object; - } - - //call this method to start the recursive - private Set<String> getAllKeys(JSONObject json) { - return getAllKeys(json, new HashSet<>()); - } - - private Set<String> getAllKeys(JSONArray arr) { - return getAllKeys(arr, new HashSet<>()); - } - - private Set<String> getAllKeys(JSONArray arr, Set<String> keys) { - for (int i = 0; i < arr.length(); i++) { - Object obj = arr.get(i); - if (obj instanceof JSONObject) keys.addAll(getAllKeys(arr.getJSONObject(i))); - if (obj instanceof JSONArray) keys.addAll(getAllKeys(arr.getJSONArray(i))); - } - - return keys; - } - + private static final Logger LOGGER = FlexLogger.getLogger(CreateOptimizationController.class); + private static CommonClassDao commonClassDao; + + public static CommonClassDao getCommonClassDao() { + return commonClassDao; + } + + private OptimizationModels newModel; + private String newFile; + private String directory; + private List<String> modelList = new ArrayList<>(); + private List<String> dirDependencyList = new ArrayList<>(); + private LinkedHashMap<String, MSAttributeObject> classMap = new LinkedHashMap<>(); + String referenceAttributes; + String attributeString; + Set<String> allManyTrueKeys = new HashSet<>(); + + public static final String DATATYPE = "data_types.policy.data."; + public static final String PROPERTIES = ".properties."; + public static final String TYPE = ".type"; + public static final String STRING = "string"; + public static final String INTEGER = "integer"; + public static final String LIST = "list"; + public static final String DEFAULT = ".default"; + public static final String REQUIRED = ".required"; + public static final String MATCHABLE = ".matchable"; + public static final String MANYFALSE = ":MANY-false"; + public static final String MODEL = "model"; + public static final String MANY = "MANY-"; + public static final String UTF8 = "UTF-8"; + public static final String MODELNAME = "modelName"; + public static final String APPLICATIONJSON = "application / json"; + + + @Autowired + private CreateOptimizationController(CommonClassDao commonClassDao) { + setCommonClassDao(commonClassDao); + } + + public static void setCommonClassDao(CommonClassDao commonClassDao) { + CreateOptimizationController.commonClassDao = commonClassDao; + } + + public CreateOptimizationController() { + // Empty Constructor + } + + protected PolicyRestAdapter policyAdapter = null; + private Map<String, String> attributesListRefMap = new HashMap<>(); + private Map<String, LinkedList<String>> arrayTextList = new HashMap<>(); + CreateDcaeMicroServiceController msController = new CreateDcaeMicroServiceController(); + + public PolicyRestAdapter setDataToPolicyRestAdapter(PolicyRestAdapter policyData, JsonNode root) { + String jsonContent = null; + try { + LOGGER.info("policyJSON :" + (root.get("policyJSON")).toString()); + + String tempJson = root.get("policyJSON").toString(); + + // ---replace empty value with the value below before calling decodeContent method. + String dummyValue = "*empty-value*" + UUID.randomUUID().toString(); + LOGGER.info("dummyValue:" + dummyValue); + tempJson = + StringUtils.replaceEach(tempJson, new String[] {"\"\""}, new String[] {"\"" + dummyValue + "\""}); + ObjectMapper mapper = new ObjectMapper(); + JsonNode tempJsonNode = mapper.readTree(tempJson); + jsonContent = msController.decodeContent(tempJsonNode).toString(); + constructJson(policyData, jsonContent, dummyValue); + } catch (Exception e) { + LOGGER.error("Error while decoding microservice content", e); + } + + return policyData; + } + + private PolicyRestAdapter constructJson(PolicyRestAdapter policyAdapter, String jsonContent, String dummyValue) { + ObjectWriter om = new ObjectMapper().writer(); + String json = ""; + OptimizationObject optimizationObject = setOptimizationObjectValues(policyAdapter); + + optimizationObject.setContent(jsonContent); + + try { + json = om.writeValueAsString(optimizationObject); + } catch (JsonProcessingException e) { + LOGGER.error("Error writing out the object", e); + } + LOGGER.info("input json: " + json); + LOGGER.info("input jsonContent: " + jsonContent); + String cleanJson = msController.cleanUPJson(json); + + // --- reset empty value back after called cleanUPJson method and before calling removeNullAttributes + String tempJson = + StringUtils.replaceEach(cleanJson, new String[] {"\"" + dummyValue + "\""}, new String[] {"\"\""}); + LOGGER.info("tempJson: " + tempJson); + cleanJson = msController.removeNullAttributes(tempJson); + policyAdapter.setJsonBody(cleanJson); + return policyAdapter; + } + + @RequestMapping(value = {"/policyController/getOptimizationTemplateData.htm"}, + method = {org.springframework.web.bind.annotation.RequestMethod.POST}) + public ModelAndView getOptimizationTemplateData(HttpServletRequest request, HttpServletResponse response) + throws IOException { + CreateDcaeMicroServiceController controller = new CreateDcaeMicroServiceController(); + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + JsonNode root = mapper.readTree(request.getReader()); + + String value = root.get("policyData").toString().replaceAll("^\"|\"$", ""); + String servicename = value.toString().split("-v")[0]; + String version = null; + if (value.toString().contains("-v")) { + version = value.toString().split("-v")[1]; + } + + OptimizationModels returnModel = getAttributeObject(servicename, version); + + MicroserviceHeaderdeFaults returnHeaderDefauls = getHeaderDefaultsObject(value); + JSONObject jsonHdDefaultObj = null; + if (returnHeaderDefauls != null) { + jsonHdDefaultObj = new JSONObject(); + jsonHdDefaultObj.put("onapName", returnHeaderDefauls.getOnapName()); + jsonHdDefaultObj.put("guard", returnHeaderDefauls.getGuard()); + jsonHdDefaultObj.put("riskLevel", returnHeaderDefauls.getRiskLevel()); + jsonHdDefaultObj.put("riskType", returnHeaderDefauls.getRiskType()); + jsonHdDefaultObj.put("priority", returnHeaderDefauls.getPriority()); + } + + String headDefautlsData = ""; + if (jsonHdDefaultObj != null) { + headDefautlsData = jsonHdDefaultObj.toString(); + LOGGER.info("returnHeaderDefauls headDefautlsData: " + headDefautlsData); + } else { + headDefautlsData = "null"; + } + + // Get all keys with "MANY-true" defined in their value from subAttribute + Set<String> allkeys = null; + if (returnModel.getSubattributes() != null && !returnModel.getSubattributes().isEmpty()) { + JSONObject json = new JSONObject(returnModel.getSubattributes()); + getAllKeys(json); + allkeys = allManyTrueKeys; + allManyTrueKeys = new HashSet<>(); + LOGGER.info("allkeys : " + allkeys); + } + + // Get element order info + String dataOrderInfo = returnModel.getDataOrderInfo(); + if (dataOrderInfo != null && !dataOrderInfo.startsWith("\"")) { + dataOrderInfo = "\"" + dataOrderInfo + "\""; + } + + String nameOfTrueKeys = ""; + if (allkeys != null) { + nameOfTrueKeys = allkeys.toString(); + } + + String jsonModel = createOptimizationJson(returnModel); + + JSONObject jsonObject = new JSONObject(jsonModel); + + JSONObject finalJsonObject = null; + if (allkeys != null) { + Iterator<String> iter = allkeys.iterator(); + while (iter.hasNext()) { + // Convert to array values for MANY-true keys + finalJsonObject = controller.convertToArrayElement(jsonObject, iter.next()); + } + } + + if (finalJsonObject != null) { + LOGGER.info(finalJsonObject.toString()); + jsonModel = finalJsonObject.toString(); + } + + // get all properties with "MANY-true" defined in Ref_attributes + Set<String> manyTrueProperties = controller.getManyTrueProperties(returnModel.getRefattributes()); + JSONObject jsonObj = new JSONObject(jsonModel); + for (String s : manyTrueProperties) { + LOGGER.info(s); + // convert to array element for MANY-true properties + finalJsonObject = controller.convertToArrayElement(jsonObj, s.trim()); + } + + if (finalJsonObject != null) { + LOGGER.info(finalJsonObject.toString()); + jsonModel = finalJsonObject.toString(); + } + + response.setCharacterEncoding(UTF8); + response.setContentType(APPLICATIONJSON); + request.setCharacterEncoding(UTF8); + List<Object> list = new ArrayList<>(); + PrintWriter out = response.getWriter(); + String responseString = mapper.writeValueAsString(returnModel); + JSONObject j = null; + if ("".equals(nameOfTrueKeys)) { + j = new JSONObject("{optimizationModelData: " + responseString + ",jsonValue: " + jsonModel + + ",dataOrderInfo:" + dataOrderInfo + ",headDefautlsData:" + headDefautlsData + "}"); + } else { + j = new JSONObject("{optimizationModelData: " + responseString + ",jsonValue: " + jsonModel + + ",allManyTrueKeys: " + allManyTrueKeys + ",dataOrderInfo:" + dataOrderInfo + ",headDefautlsData:" + + headDefautlsData + "}"); + } + list.add(j); + out.write(list.toString()); + return null; + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + private String createOptimizationJson(OptimizationModels returnModel) { + Map<String, String> attributeMap = new HashMap<>(); + Map<String, String> refAttributeMap = new HashMap<>(); + + String attribute = returnModel.getAttributes(); + if (attribute != null) { + attribute = attribute.trim(); + } + String refAttribute = returnModel.getRefattributes(); + if (refAttribute != null) { + refAttribute = refAttribute.trim(); + } + + String enumAttribute = returnModel.getEnumValues(); + if (enumAttribute != null) { + enumAttribute = enumAttribute.trim(); + } + + CreateDcaeMicroServiceController controller = new CreateDcaeMicroServiceController(); + if (!StringUtils.isEmpty(attribute)) { + attributeMap = controller.convert(attribute, ","); + } + + if (!StringUtils.isEmpty(refAttribute)) { + refAttributeMap = controller.convert(refAttribute, ","); + } + + Gson gson = new Gson(); + + String subAttributes = returnModel.getSubattributes(); + if (subAttributes != null) { + subAttributes = subAttributes.trim(); + } else { + subAttributes = ""; + } + + Map gsonObject = (Map) gson.fromJson(subAttributes, Object.class); + + JSONObject object = new JSONObject(); + JSONArray array; + + for (Entry<String, String> keySet : attributeMap.entrySet()) { + array = new JSONArray(); + String value = keySet.getValue(); + if ("true".equalsIgnoreCase(keySet.getValue().split(MANY)[1])) { + array.put(value); + object.put(keySet.getKey().trim(), array); + } else { + object.put(keySet.getKey().trim(), value.trim()); + } + } + + for (Entry<String, String> keySet : refAttributeMap.entrySet()) { + array = new JSONArray(); + String value = keySet.getValue().split(":")[0]; + if (gsonObject.containsKey(value)) { + if ("true".equalsIgnoreCase(keySet.getValue().split(MANY)[1])) { + array.put(recursiveReference(value, gsonObject, enumAttribute)); + object.put(keySet.getKey().trim(), array); + } else { + object.put(keySet.getKey().trim(), recursiveReference(value, gsonObject, enumAttribute)); + } + } else { + if ("true".equalsIgnoreCase(keySet.getValue().split(MANY)[1])) { + array.put(value.trim()); + object.put(keySet.getKey().trim(), array); + } else { + object.put(keySet.getKey().trim(), value.trim()); + } + } + } + + return object.toString(); + } + + @SuppressWarnings("unchecked") + private JSONObject recursiveReference(String name, Map<String, String> subAttributeMap, String enumAttribute) { + JSONObject object = new JSONObject(); + Map<String, String> map; + Object returnClass = subAttributeMap.get(name); + map = (Map<String, String>) returnClass; + JSONArray array; + + for (Entry<String, String> m : map.entrySet()) { + String[] splitValue = m.getValue().split(":"); + array = new JSONArray(); + if (subAttributeMap.containsKey(splitValue[0])) { + if ("true".equalsIgnoreCase(m.getValue().split(MANY)[1])) { + array.put(recursiveReference(splitValue[0], subAttributeMap, enumAttribute)); + object.put(m.getKey().trim(), array); + } else { + object.put(m.getKey().trim(), recursiveReference(splitValue[0], subAttributeMap, enumAttribute)); + } + } else { + if ("true".equalsIgnoreCase(m.getValue().split(MANY)[1])) { + array.put(splitValue[0].trim()); + object.put(m.getKey().trim(), array); + } else { + object.put(m.getKey().trim(), splitValue[0].trim()); + } + } + } + + return object; + } + + // call this method to start the recursive + private Set<String> getAllKeys(JSONObject json) { + return getAllKeys(json, new HashSet<>()); + } + + private Set<String> getAllKeys(JSONArray arr) { + return getAllKeys(arr, new HashSet<>()); + } + + private Set<String> getAllKeys(JSONArray arr, Set<String> keys) { + for (int i = 0; i < arr.length(); i++) { + Object obj = arr.get(i); + if (obj instanceof JSONObject) + keys.addAll(getAllKeys(arr.getJSONObject(i))); + if (obj instanceof JSONArray) + keys.addAll(getAllKeys(arr.getJSONArray(i))); + } + + return keys; + } + // this method returns a set of keys with "MANY-true" defined in their value. - private Set<String> getAllKeys(JSONObject json, Set<String> keys) { - for (String key : json.keySet()) { - Object obj = json.get(key); - if(obj instanceof String && ((String) obj).contains("MANY-true")){ - LOGGER.info("key : " + key); - LOGGER.info("obj : " + obj); - allManyTrueKeys.add(key); - } - if (obj instanceof JSONObject) keys.addAll(getAllKeys(json.getJSONObject(key))); - if (obj instanceof JSONArray) keys.addAll(getAllKeys(json.getJSONArray(key))); - } - - return keys; - } - - @RequestMapping(value={"/policyController/getModelServiceVersionData.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView getModelServiceVersionData(HttpServletRequest request, HttpServletResponse response) throws IOException{ - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - - String value = root.get("policyData").toString().replaceAll("^\"|\"$", ""); - String servicename = value.split("-v")[0]; - Set<String> returnList = getVersionList(servicename); - - response.setCharacterEncoding(UTF8); - response.setContentType(APPLICATIONJSON); - request.setCharacterEncoding(UTF8); - List<Object> list = new ArrayList<>(); - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(returnList); - JSONObject j = new JSONObject("{optimizationModelVersionData: " + responseString +"}"); - list.add(j); - out.write(list.toString()); - return null; - } - - private Set<String> getVersionList(String name) { - OptimizationModels workingModel; - Set<String> list = new HashSet<>(); - List<Object> optimizationModelsData = commonClassDao.getDataById(OptimizationModels.class, MODELNAME, name); - for (int i = 0; i < optimizationModelsData.size(); i++) { - workingModel = (OptimizationModels) optimizationModelsData.get(i); - if (workingModel.getVersion()!=null){ - list.add(workingModel.getVersion()); - }else{ - list.add("Default"); - } - } - return list; - } - - private OptimizationModels getAttributeObject(String name, String version) { - OptimizationModels workingModel = new OptimizationModels(); - List<Object> optimizationModelsData = commonClassDao.getDataById(OptimizationModels.class, MODELNAME, name); - for (int i = 0; i < optimizationModelsData.size(); i++) { - workingModel = (OptimizationModels) optimizationModelsData.get(i); - if(version != null){ - if (workingModel.getVersion()!=null){ - if (workingModel.getVersion().equals(version)){ - return workingModel; - } - }else{ - return workingModel; - } - }else{ - return workingModel; - } - - } - return workingModel; - } - - private MicroserviceHeaderdeFaults getHeaderDefaultsObject(String modelName) { - return (MicroserviceHeaderdeFaults) commonClassDao.getEntityItem(MicroserviceHeaderdeFaults.class, MODELNAME, modelName); - } - - public void prePopulatePolicyData(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("OOF_") +4); - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - LOGGER.error("Error while collecting the description tag in " + 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 (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); - } - } - readFile(policyAdapter, entity); - } - } - } - } - } - } - } - } - - @SuppressWarnings("unchecked") - private void readFile(PolicyRestAdapter policyAdapter, PolicyEntity entity) { - String policyScopeName = null; - ObjectMapper mapper = new ObjectMapper(); - try { - OptimizationObject optimizationBody = mapper.readValue(entity.getConfigurationData().getConfigBody(), OptimizationObject.class); - policyScopeName = msController.getPolicyScope(optimizationBody.getPolicyScope()); - policyAdapter.setPolicyScope(policyScopeName); - - policyAdapter.setPriority(optimizationBody.getPriority()); - - if (optimizationBody.getVersion()!= null){ - policyAdapter.setServiceType(optimizationBody.getService()); - policyAdapter.setVersion(optimizationBody.getVersion()); - }else{ - policyAdapter.setServiceType(optimizationBody.getService()); - } - if(optimizationBody.getContent() != null){ - LinkedHashMap<String, Object> data = new LinkedHashMap<>(); - LinkedHashMap<String, ?> map = (LinkedHashMap<String, ?>) optimizationBody.getContent(); - msController.readRecursivlyJSONContent(map, data); - policyAdapter.setRuleData(data); - } - - } catch (Exception e) { - LOGGER.error(e); - } - - } - - @RequestMapping(value={"/oof_dictionary/set_ModelData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public void setModelData(HttpServletRequest request, HttpServletResponse response) throws IOException, FileUploadException{ - modelList = new ArrayList<>(); - dirDependencyList = new ArrayList<>(); - classMap = new LinkedHashMap<>(); - List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); - - boolean zip = false; - boolean yml= false; - String errorMsg = ""; - for (FileItem item : items) { - if(item.getName().endsWith(".zip") || item.getName().endsWith(".xmi")||item.getName().endsWith(".yml")){ - this.newModel = new OptimizationModels(); - try{ - File file = new File(item.getName()); - OutputStream outputStream = new FileOutputStream(file); - IOUtils.copy(item.getInputStream(), outputStream); - outputStream.close(); - this.newFile = file.toString(); - this.newModel.setModelName(this.newFile.split("-v")[0]); - - if (this.newFile.contains("-v")){ - if (item.getName().endsWith(".zip")){ - this.newModel.setVersion(this.newFile.split("-v")[1].replace(".zip", "")); - zip = true; - }else if(item.getName().endsWith(".yml")){ - this.newModel.setVersion(this.newFile.split("-v")[1].replace(".yml", "")); - yml = true; - } - else { - this.newModel.setVersion(this.newFile.split("-v")[1].replace(".xmi", "")); - } - } - }catch(Exception e){ - LOGGER.error("Upload error : ", e); - errorMsg = "Upload error:" + e.getMessage(); - } - } - - } - - if(!errorMsg.isEmpty()){ - - PrintWriter out = response.getWriter(); - - response.setCharacterEncoding(UTF8); - response.setContentType(APPLICATIONJSON); - request.setCharacterEncoding(UTF8); - - JSONObject j = new JSONObject(); - j.put("errorMsg", errorMsg); - out.write(j.toString()); - return; - } - - List<File> fileList = new ArrayList<>(); - MSModelUtils modelUtil = new MSModelUtils(); - this.directory = MODEL; - if (zip){ - extractFolder(this.newFile); - fileList = listModelFiles(this.directory); - }else if (yml){ - modelUtil.parseTosca(this.newFile); - }else { - File file = new File(this.newFile); - fileList.add(file); - } - String modelType; - if(! yml){ - modelType="xmi"; - //Process Main Model file first - classMap = new LinkedHashMap<>(); - for (File file : fileList) { - if(!file.isDirectory() && file.getName().endsWith(".xmi")){ - retrieveDependency(file.toString()); - } - } - - modelList = createList(); - - msController.cleanUp(this.newFile); - msController.cleanUp(directory); - }else{ - modelType="yml"; - modelList.add(this.newModel.getModelName()); - String className=this.newModel.getModelName(); - MSAttributeObject optimizationAttributes= new MSAttributeObject(); - optimizationAttributes.setClassName(className); - - LinkedHashMap<String, String> returnAttributeList =new LinkedHashMap<>(); - returnAttributeList.put(className, modelUtil.getAttributeString()); - optimizationAttributes.setAttribute(returnAttributeList); - - optimizationAttributes.setSubClass(modelUtil.getRetmap()); - - optimizationAttributes.setMatchingSet(modelUtil.getMatchableValues()); - - LinkedHashMap<String, String> returnReferenceList =new LinkedHashMap<>(); - returnReferenceList.put(className, modelUtil.getReferenceAttributes()); - optimizationAttributes.setRefAttribute(returnReferenceList); - - if(!"".equals(modelUtil.getListConstraints())){ - LinkedHashMap<String, String> enumList =new LinkedHashMap<>(); - String[] listArray=modelUtil.getListConstraints().split("#"); - for(String str:listArray){ - String[] strArr= str.split("="); - if(strArr.length>1){ + private Set<String> getAllKeys(JSONObject json, Set<String> keys) { + for (String key : json.keySet()) { + Object obj = json.get(key); + if (obj instanceof String && ((String) obj).contains("MANY-true")) { + LOGGER.info("key : " + key); + LOGGER.info("obj : " + obj); + allManyTrueKeys.add(key); + } + if (obj instanceof JSONObject) + keys.addAll(getAllKeys(json.getJSONObject(key))); + if (obj instanceof JSONArray) + keys.addAll(getAllKeys(json.getJSONArray(key))); + } + + return keys; + } + + @RequestMapping(value = {"/policyController/getModelServiceVersionData.htm"}, + method = {org.springframework.web.bind.annotation.RequestMethod.POST}) + public ModelAndView getModelServiceVersionData(HttpServletRequest request, HttpServletResponse response) + throws IOException { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + JsonNode root = mapper.readTree(request.getReader()); + + String value = root.get("policyData").toString().replaceAll("^\"|\"$", ""); + String servicename = value.split("-v")[0]; + Set<String> returnList = getVersionList(servicename); + + response.setCharacterEncoding(UTF8); + response.setContentType(APPLICATIONJSON); + request.setCharacterEncoding(UTF8); + List<Object> list = new ArrayList<>(); + PrintWriter out = response.getWriter(); + String responseString = mapper.writeValueAsString(returnList); + JSONObject j = new JSONObject("{optimizationModelVersionData: " + responseString + "}"); + list.add(j); + out.write(list.toString()); + return null; + } + + private Set<String> getVersionList(String name) { + OptimizationModels workingModel; + Set<String> list = new HashSet<>(); + List<Object> optimizationModelsData = commonClassDao.getDataById(OptimizationModels.class, MODELNAME, name); + for (int i = 0; i < optimizationModelsData.size(); i++) { + workingModel = (OptimizationModels) optimizationModelsData.get(i); + if (workingModel.getVersion() != null) { + list.add(workingModel.getVersion()); + } else { + list.add("Default"); + } + } + return list; + } + + private OptimizationModels getAttributeObject(String name, String version) { + OptimizationModels workingModel = new OptimizationModels(); + List<Object> optimizationModelsData = commonClassDao.getDataById(OptimizationModels.class, MODELNAME, name); + for (int i = 0; i < optimizationModelsData.size(); i++) { + workingModel = (OptimizationModels) optimizationModelsData.get(i); + if (version != null) { + if (workingModel.getVersion() != null) { + if (workingModel.getVersion().equals(version)) { + return workingModel; + } + } else { + return workingModel; + } + } else { + return workingModel; + } + + } + return workingModel; + } + + private MicroserviceHeaderdeFaults getHeaderDefaultsObject(String modelName) { + return (MicroserviceHeaderdeFaults) commonClassDao.getEntityItem(MicroserviceHeaderdeFaults.class, MODELNAME, + modelName); + } + + public void prePopulatePolicyData(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("OOF_") + 4); + policyAdapter.setPolicyName(policyNameValue); + String description = ""; + try { + description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); + } catch (Exception e) { + LOGGER.error("Error while collecting the description tag in " + 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 (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); + } + } + readFile(policyAdapter, entity); + } + } + } + } + } + } + } + } + + @SuppressWarnings("unchecked") + private void readFile(PolicyRestAdapter policyAdapter, PolicyEntity entity) { + String policyScopeName = null; + ObjectMapper mapper = new ObjectMapper(); + try { + OptimizationObject optimizationBody = + mapper.readValue(entity.getConfigurationData().getConfigBody(), OptimizationObject.class); + policyScopeName = msController.getPolicyScope(optimizationBody.getPolicyScope()); + policyAdapter.setPolicyScope(policyScopeName); + + policyAdapter.setPriority(optimizationBody.getPriority()); + + if (optimizationBody.getVersion() != null) { + policyAdapter.setServiceType(optimizationBody.getService()); + policyAdapter.setVersion(optimizationBody.getVersion()); + } else { + policyAdapter.setServiceType(optimizationBody.getService()); + } + if (optimizationBody.getContent() != null) { + LinkedHashMap<String, Object> data = new LinkedHashMap<>(); + LinkedHashMap<String, ?> map = (LinkedHashMap<String, ?>) optimizationBody.getContent(); + msController.readRecursivlyJSONContent(map, data); + policyAdapter.setRuleData(data); + } + + } catch (Exception e) { + LOGGER.error(e); + } + + } + + @RequestMapping(value = {"/oof_dictionary/set_ModelData"}, + method = {org.springframework.web.bind.annotation.RequestMethod.POST}) + public void setModelData(HttpServletRequest request, HttpServletResponse response) + throws IOException, FileUploadException { + modelList = new ArrayList<>(); + dirDependencyList = new ArrayList<>(); + classMap = new LinkedHashMap<>(); + List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); + + boolean zip = false; + boolean yml = false; + String errorMsg = ""; + for (FileItem item : items) { + if (item.getName().endsWith(".zip") || item.getName().endsWith(".xmi") || item.getName().endsWith(".yml")) { + this.newModel = new OptimizationModels(); + try { + File file = new File(item.getName()); + OutputStream outputStream = new FileOutputStream(file); + IOUtils.copy(item.getInputStream(), outputStream); + outputStream.close(); + this.newFile = file.toString(); + this.newModel.setModelName(this.newFile.split("-v")[0]); + + if (this.newFile.contains("-v")) { + if (item.getName().endsWith(".zip")) { + this.newModel.setVersion(this.newFile.split("-v")[1].replace(".zip", "")); + zip = true; + } else if (item.getName().endsWith(".yml")) { + this.newModel.setVersion(this.newFile.split("-v")[1].replace(".yml", "")); + yml = true; + } else { + this.newModel.setVersion(this.newFile.split("-v")[1].replace(".xmi", "")); + } + } + } catch (Exception e) { + LOGGER.error("Upload error : ", e); + errorMsg = "Upload error:" + e.getMessage(); + } + } + + } + + if (!errorMsg.isEmpty()) { + + PrintWriter out = response.getWriter(); + + response.setCharacterEncoding(UTF8); + response.setContentType(APPLICATIONJSON); + request.setCharacterEncoding(UTF8); + + JSONObject j = new JSONObject(); + j.put("errorMsg", errorMsg); + out.write(j.toString()); + return; + } + + List<File> fileList = new ArrayList<>(); + MSModelUtils modelUtil = new MSModelUtils(); + this.directory = MODEL; + if (zip) { + extractFolder(this.newFile); + fileList = listModelFiles(this.directory); + } else if (yml) { + modelUtil.parseTosca(this.newFile); + } else { + File file = new File(this.newFile); + fileList.add(file); + } + String modelType; + if (!yml) { + modelType = "xmi"; + // Process Main Model file first + classMap = new LinkedHashMap<>(); + for (File file : fileList) { + if (!file.isDirectory() && file.getName().endsWith(".xmi")) { + retrieveDependency(file.toString()); + } + } + + modelList = createList(); + + msController.cleanUp(this.newFile); + msController.cleanUp(directory); + } else { + modelType = "yml"; + modelList.add(this.newModel.getModelName()); + String className = this.newModel.getModelName(); + MSAttributeObject optimizationAttributes = new MSAttributeObject(); + optimizationAttributes.setClassName(className); + + LinkedHashMap<String, String> returnAttributeList = new LinkedHashMap<>(); + returnAttributeList.put(className, modelUtil.getAttributeString()); + optimizationAttributes.setAttribute(returnAttributeList); + + optimizationAttributes.setSubClass(modelUtil.getRetmap()); + + optimizationAttributes.setMatchingSet(modelUtil.getMatchableValues()); + + LinkedHashMap<String, String> returnReferenceList = new LinkedHashMap<>(); + returnReferenceList.put(className, modelUtil.getReferenceAttributes()); + optimizationAttributes.setRefAttribute(returnReferenceList); + + if (!"".equals(modelUtil.getListConstraints())) { + LinkedHashMap<String, String> enumList = new LinkedHashMap<>(); + String[] listArray = modelUtil.getListConstraints().split("#"); + for (String str : listArray) { + String[] strArr = str.split("="); + if (strArr.length > 1) { enumList.put(strArr[0], strArr[1]); } } optimizationAttributes.setEnumType(enumList); - } - - classMap=new LinkedHashMap<>(); - classMap.put(className, optimizationAttributes); - - } - - PrintWriter out = response.getWriter(); - - response.setCharacterEncoding(UTF8); - response.setContentType(APPLICATIONJSON); - request.setCharacterEncoding(UTF8); - - ObjectMapper mapper = new ObjectMapper(); - JSONObject j = new JSONObject(); - j.put("classListDatas", modelList); - j.put("modelDatas", mapper.writeValueAsString(classMap)); - j.put("modelType", modelType); - j.put("dataOrderInfo", modelUtil.getDataOrderInfo()); - - out.write(j.toString()); - } - - /* - * Unzip file and store in the model directory for processing - */ - @SuppressWarnings("rawtypes") - private void extractFolder(String zipFile ) { - int BUFFER = 2048; - File file = new File(zipFile); - - try (ZipFile zip = new ZipFile(file)) { - String newPath = MODEL + File.separator + zipFile.substring(0, zipFile.length() - 4); - this.directory = MODEL + File.separator + zipFile.substring(0, zipFile.length() - 4); - msController.checkZipDirectory(this.directory); - new File(newPath).mkdir(); - Enumeration zipFileEntries = zip.entries(); - - // Process each entry - while (zipFileEntries.hasMoreElements()){ - // grab a zip file entry - ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); - String currentEntry = entry.getName(); - File destFile = new File(MODEL + File.separator + currentEntry); - File destinationParent = destFile.getParentFile(); - - destinationParent.mkdirs(); - - if (!entry.isDirectory()){ - BufferedInputStream is = new BufferedInputStream(zip.getInputStream(entry)); - int currentByte; - byte[] data = new byte[BUFFER]; - try (FileOutputStream fos = new FileOutputStream(destFile); - BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER)) { - while ((currentByte = is.read(data, 0, BUFFER)) != -1) { - dest.write(data, 0, currentByte); - } - dest.flush(); - } catch (IOException e) { - LOGGER.error("Failed to write zip contents to {}" + destFile + e); - // - // PLD should I throw e? - // - throw e; - } - } - - if (currentEntry.endsWith(".zip")){ - extractFolder(destFile.getAbsolutePath()); - } - } - } catch (IOException e) { - LOGGER.error("Failed to unzip model file " + zipFile, e); - } - } - - private void retrieveDependency(String workingFile) { - - MSModelUtils utils = new MSModelUtils(PolicyController.getMsOnapName(), PolicyController.getMsPolicyName()); - Map<String, MSAttributeObject> tempMap; - - tempMap = utils.processEpackage(workingFile, MODEL_TYPE.XMI); - - classMap.putAll(tempMap); - LOGGER.info(tempMap); - - return; - - } - - private List<File> listModelFiles(String directoryName) { - File fileDirectory = new File(directoryName); - List<File> resultList = new ArrayList<>(); - File[] fList = fileDirectory.listFiles(); - for (File file : fList) { - if (file.isFile()) { - resultList.add(file); - } else if (file.isDirectory()) { - dirDependencyList.add(file.getName()); - resultList.addAll(listModelFiles(file.getAbsolutePath())); - } - } - return resultList; - } - + } + + classMap = new LinkedHashMap<>(); + classMap.put(className, optimizationAttributes); + + } + + PrintWriter out = response.getWriter(); + + response.setCharacterEncoding(UTF8); + response.setContentType(APPLICATIONJSON); + request.setCharacterEncoding(UTF8); + + ObjectMapper mapper = new ObjectMapper(); + JSONObject j = new JSONObject(); + j.put("classListDatas", modelList); + j.put("modelDatas", mapper.writeValueAsString(classMap)); + j.put("modelType", modelType); + j.put("dataOrderInfo", modelUtil.getDataOrderInfo()); + + out.write(j.toString()); + } + + /* + * Unzip file and store in the model directory for processing + */ + @SuppressWarnings("rawtypes") + private void extractFolder(String zipFile) { + int BUFFER = 2048; + File file = new File(zipFile); + + try (ZipFile zip = new ZipFile(file)) { + String newPath = MODEL + File.separator + zipFile.substring(0, zipFile.length() - 4); + this.directory = MODEL + File.separator + zipFile.substring(0, zipFile.length() - 4); + msController.checkZipDirectory(this.directory); + new File(newPath).mkdir(); + Enumeration zipFileEntries = zip.entries(); + + // Process each entry + while (zipFileEntries.hasMoreElements()) { + // grab a zip file entry + ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); + String currentEntry = entry.getName(); + File destFile = new File(MODEL + File.separator + currentEntry); + File destinationParent = destFile.getParentFile(); + + destinationParent.mkdirs(); + + if (!entry.isDirectory()) { + BufferedInputStream is = new BufferedInputStream(zip.getInputStream(entry)); + int currentByte; + byte[] data = new byte[BUFFER]; + try (FileOutputStream fos = new FileOutputStream(destFile); + BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER)) { + while ((currentByte = is.read(data, 0, BUFFER)) != -1) { + dest.write(data, 0, currentByte); + } + dest.flush(); + } catch (IOException e) { + LOGGER.error("Failed to write zip contents to {}" + destFile + e); + // + // PLD should I throw e? + // + throw e; + } + } + + if (currentEntry.endsWith(".zip")) { + extractFolder(destFile.getAbsolutePath()); + } + } + } catch (IOException e) { + LOGGER.error("Failed to unzip model file " + zipFile, e); + } + } + + private void retrieveDependency(String workingFile) { + + MSModelUtils utils = new MSModelUtils(PolicyController.getMsOnapName(), PolicyController.getMsPolicyName()); + Map<String, MSAttributeObject> tempMap; + + tempMap = utils.processEpackage(workingFile, MODEL_TYPE.XMI); + + classMap.putAll(tempMap); + LOGGER.info(tempMap); + + return; + + } + + private List<File> listModelFiles(String directoryName) { + File fileDirectory = new File(directoryName); + List<File> resultList = new ArrayList<>(); + File[] fList = fileDirectory.listFiles(); + for (File file : fList) { + if (file.isFile()) { + resultList.add(file); + } else if (file.isDirectory()) { + dirDependencyList.add(file.getName()); + resultList.addAll(listModelFiles(file.getAbsolutePath())); + } + } + return resultList; + } + private List<String> createList() { - List<String> list = new ArrayList<>(); - for (Entry<String, MSAttributeObject> cMap : classMap.entrySet()){ - if (cMap.getValue().isPolicyTempalate()){ + List<String> list = new ArrayList<>(); + for (Entry<String, MSAttributeObject> cMap : classMap.entrySet()) { + if (cMap.getValue().isPolicyTempalate()) { list.add(cMap.getKey()); } - + } - - if (list.isEmpty()){ - if (classMap.containsKey(this.newModel.getModelName())){ + + if (list.isEmpty()) { + if (classMap.containsKey(this.newModel.getModelName())) { list.add(this.newModel.getModelName()); - }else { + } else { list.add("EMPTY"); } } return list; } - public Map<String, String> getAttributesListRefMap() { - return attributesListRefMap; - } - - public Map<String, LinkedList<String>> getArrayTextList() { - return arrayTextList; - } - - private OptimizationObject setOptimizationObjectValues(PolicyRestAdapter policyAdapter) { - OptimizationObject optimizationObject = new OptimizationObject(); - optimizationObject.setTemplateVersion(XACMLProperties.getProperty(XACMLRestProperties.TemplateVersion_OOF)); - - if(policyAdapter.getServiceType() !=null){ - optimizationObject.setService(policyAdapter.getServiceType()); - optimizationObject.setVersion(policyAdapter.getVersion()); - } - if(policyAdapter.getPolicyName()!=null){ - optimizationObject.setPolicyName(policyAdapter.getPolicyName()); - } - if(policyAdapter.getPolicyDescription()!=null){ - optimizationObject.setDescription(policyAdapter.getPolicyDescription()); - } - if (policyAdapter.getPriority()!=null){ - optimizationObject.setPriority(policyAdapter.getPriority()); - }else { - optimizationObject.setPriority("9999"); - } - if (policyAdapter.getRiskLevel()!=null){ - optimizationObject.setRiskLevel(policyAdapter.getRiskLevel()); - } - if (policyAdapter.getRiskType()!=null){ - optimizationObject.setRiskType(policyAdapter.getRiskType()); - } - if (policyAdapter.getGuard()!=null){ - optimizationObject.setGuard(policyAdapter.getGuard()); - } - return optimizationObject; - } + public Map<String, String> getAttributesListRefMap() { + return attributesListRefMap; + } + + public Map<String, LinkedList<String>> getArrayTextList() { + return arrayTextList; + } + + private OptimizationObject setOptimizationObjectValues(PolicyRestAdapter policyAdapter) { + OptimizationObject optimizationObject = new OptimizationObject(); + optimizationObject.setTemplateVersion(XACMLProperties.getProperty(XACMLRestProperties.TemplateVersion_OOF)); + + if (policyAdapter.getServiceType() != null) { + optimizationObject.setService(policyAdapter.getServiceType()); + optimizationObject.setVersion(policyAdapter.getVersion()); + } + if (policyAdapter.getPolicyName() != null) { + optimizationObject.setPolicyName(policyAdapter.getPolicyName()); + } + if (policyAdapter.getPolicyDescription() != null) { + optimizationObject.setDescription(policyAdapter.getPolicyDescription()); + } + if (policyAdapter.getPriority() != null) { + optimizationObject.setPriority(policyAdapter.getPriority()); + } else { + optimizationObject.setPriority("9999"); + } + if (policyAdapter.getRiskLevel() != null) { + optimizationObject.setRiskLevel(policyAdapter.getRiskLevel()); + } + if (policyAdapter.getRiskType() != null) { + optimizationObject.setRiskType(policyAdapter.getRiskType()); + } + if (policyAdapter.getGuard() != null) { + optimizationObject.setGuard(policyAdapter.getGuard()); + } + return optimizationObject; + } } + class OptimizationObject { - private String service; - private String policyName; - private String description; - private String templateVersion; - private String version; - private String priority; - private String policyScope; - private String riskType; - private String riskLevel; - private String guard = null; - - public String getGuard() { - return guard; - } - public void setGuard(String guard) { - this.guard = guard; - } - public String getRiskType() { - return riskType; - } - public void setRiskType(String riskType) { - this.riskType = riskType; - } - public String getRiskLevel() { - return riskLevel; - } - public void setRiskLevel(String riskLevel) { - this.riskLevel = riskLevel; - } - public String getPriority() { - return priority; - } - public void setPriority(String priority) { - this.priority = priority; - } - public String getPolicyScope() { - return policyScope; - } - public void setPolicyScope(String policyScope) { - this.policyScope = policyScope; - } - public String getVersion() { - return version; - } - public void setVersion(String version) { - this.version = version; - } - private Object content; - - public String getPolicyName() { - return policyName; - } - public void setPolicyName(String policyName) { - this.policyName = policyName; - } - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - public Object getContent() { - return content; - } - public void setContent(Object content) { - this.content = content; - } - public String getService() { - return service; - } - public void setService(String service) { - this.service = service; - } - public String getTemplateVersion() { - return templateVersion; - } - public void setTemplateVersion(String templateVersion) { - this.templateVersion = templateVersion; - } - -}
\ No newline at end of file + private String service; + private String policyName; + private String description; + private String templateVersion; + private String version; + private String priority; + private String policyScope; + private String riskType; + private String riskLevel; + private String guard = null; + + public String getGuard() { + return guard; + } + + public void setGuard(String guard) { + this.guard = guard; + } + + public String getRiskType() { + return riskType; + } + + public void setRiskType(String riskType) { + this.riskType = riskType; + } + + public String getRiskLevel() { + return riskLevel; + } + + public void setRiskLevel(String riskLevel) { + this.riskLevel = riskLevel; + } + + public String getPriority() { + return priority; + } + + public void setPriority(String priority) { + this.priority = priority; + } + + public String getPolicyScope() { + return policyScope; + } + + public void setPolicyScope(String policyScope) { + this.policyScope = policyScope; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + private Object content; + + public String getPolicyName() { + return policyName; + } + + public void setPolicyName(String policyName) { + this.policyName = policyName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Object getContent() { + return content; + } + + public void setContent(Object content) { + this.content = content; + } + + public String getService() { + return service; + } + + public void setService(String service) { + this.service = service; + } + + public String getTemplateVersion() { + return templateVersion; + } + + public void setTemplateVersion(String templateVersion) { + this.templateVersion = templateVersion; + } + +} diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSModelDictionaryData.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSModelDictionaryData.html new file mode 100644 index 000000000..2a7d49cb7 --- /dev/null +++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSModelDictionaryData.html @@ -0,0 +1,59 @@ +<!--/*- + * ============LICENSE_START======================================================= + * ONAP Policy Engine + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */--> +<script type="text/ng-template" id="add_dictionaryData_popup.html"> +<div class="modal" tabindex="-1"> + <div class="modal-dialog modal-lg"> + <div class="modal-content"> + <div class="modal-header"> + <h2 class="font-showcase-font-name" style="color : #157bb2">{{label}}</h2> + </div> + <form name="formdata" ng-submit="saveMSDictionatyData(editMSDictData);" novalidate> + <div class="modal-body"> + <div class="form-group row"> + <div class="form-group col-sm-6"> + <label>Dictionary Name:<sup><b>*</b></sup></label><br> + <input type="text" ng-model="editMSDictData.dictionaryName" class="form-control" name= "dictionaryName" required/> + <p ng-show="formdata.name.$invalid && !formdata.name.$pristine" class="help-block">Dictionary Name is required.</p> + </div> + </div> + <div class="form-group row"> + <div class="form-group col-sm-6"> + <label>URL:<sup><b>*</b></sup></label><br> + <input type="text" ng-model="editMSDictData.dictionaryUrl" class="form-control" name= "dictionaryUrl" required/> + <p ng-show="formdata.name.$invalid && !formdata.name.$pristine" class="help-block">URL is required.</p> + </div> + </div> + <div class="form-group row"> + <div class="form-group col-sm-6"> + <label>Dictionary Data Name:<sup><b>*</b></sup></label><br> + <input type="text" ng-model="editMSDictData.dictionaryDataByName" class="form-control" name= "dictionaryDataByName" required/> + <p ng-show="formdata.name.$invalid && !formdata.name.$pristine" class="help-block">Dictionary Data Name is required.</p> + </div> + </div> + </div> + <div class="modal-footer"> + <button class="btn btn-success" type="submit" ng-disabled="formdata.$invalid">Save</button> + <button class="btn btn-default" type="button" ng-click="close()">Close</button> + </div> + </form> + </div> + </div> +</div> +</script> diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/DictionaryController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/DictionaryController.js index d12523879..6becb28e6 100644 --- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/DictionaryController.js +++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/DictionaryController.js @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ var subDictionarys = [["Action Dictionary"], ["Settings Dictionary","Rainy Day Allowed Treatments"], ["Descriptive Scope"], ["Action List", "Address Group", "Parent Dictionary List", "Port List", "Prefix List", "Protocol List", "Security Zone", "Service Group", "Service List", "Tag List", "Tag Picker List", "Term List", "Zone"], - ["DCAE UUID","Header Default Values","MicroService ConfigName","MicroService Location", "MicroService Models", "MicroService Dictionary"], + ["DCAE UUID","Header Default Values","MicroService ConfigName","MicroService Location", "MicroService Models", "MicroService Dictionary","MicroService Dictionary Input"], ["ONAP Optimization Models"], ["Closed Loop", "Group Policy Scope", "Resource", "Service", "Type"], ["Risk Type", "Safe Policy Warning"]]; @@ -79,4 +79,4 @@ app.controller('dictionaryTabController', function ($scope, PolicyAppService, mo }); }; -});
\ No newline at end of file +}); diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSDictionaryController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSDictionaryController.js new file mode 100644 index 000000000..21b89697d --- /dev/null +++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSDictionaryController.js @@ -0,0 +1,71 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Engine + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +app.controller('editMSDictController' , function ($scope, $modalInstance, message, UserInfoServiceDS2, Notification){ + if(message.microServiceDictionaryDatas==null) + $scope.label='Add Dictionary input' + else{ + $scope.label='Edit Dictionary input' + $scope.disableCd=true; + } + + + /*getting user info from session*/ + var userid = null; + UserInfoServiceDS2.getFunctionalMenuStaticDetailSession() + .then(function (response) { + userid = response.userid; + }); + + $scope.editMSDictData = message.microServiceDictionaryDatas; + + $scope.saveMSDictionatyData = function(microServiceDictionaryDatas) { + var regex = new RegExp("^[a-zA-Z0-9_]*$"); + if(!regex.test(microServiceDictionaryDatas.name)) { + Notification.error("Enter Valid Dictionary Name without spaces or special characters"); + }else{ + var uuu = "saveDictionary/ms_dictionary/save_DictionaryData"; + var postData={microServiceDictionaryDatas: microServiceDictionaryDatas, userid: userid}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){ + $scope.microServiceDictionaryDatas=data.microServiceDictionaryDatas;}); + if($scope.microServiceDictionaryDatas == "Duplicate"){ + Notification.error("MS Dictionary data exists with Same Name.") + }else{ + console.log($scope.microServiceDictionaryDatas); + $modalInstance.close({microServiceDictionaryDatas:$scope.microServiceDictionaryDatas}); + } + }, + error : function(data){ + alert("Error while saving."); + } + }); + } + }; + + $scope.close = function() { + $modalInstance.close(); + }; +});
\ No newline at end of file diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSModelsDictController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSModelsDictController.js index 262b2adea..abecfdbbd 100644 --- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSModelsDictController.js +++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSModelsDictController.js @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -65,6 +65,7 @@ app.controller('editMSModelController' , function ($scope, $modalInstance, mess $scope.modalDatas = data.modelDatas; $scope.modelType= data.modelType; $scope.dataOrderInfo= data.dataOrderInfo; + $scope.ruleFormation = data.ruleFormation; console.log($scope.classListDatas); } }).error( ); @@ -78,7 +79,7 @@ app.controller('editMSModelController' , function ($scope, $modalInstance, mess $scope.saveMSModel = function(microServiceModelsDictionaryData) { if(valid){ var uuu = "saveDictionary/ms_dictionary/save_model"; - var postData={microServiceModelsDictionaryData: microServiceModelsDictionaryData, userid: userid, classMap: $scope.modalDatas,modelType:$scope.modelType, dataOrderInfo:$scope.dataOrderInfo}; + var postData={microServiceModelsDictionaryData: microServiceModelsDictionaryData, userid: userid, classMap: $scope.modalDatas,modelType:$scope.modelType, dataOrderInfo:$scope.dataOrderInfo, ruleFormation:$scope.ruleFormation}; $.ajax({ type : 'POST', url : uuu, @@ -108,4 +109,4 @@ app.controller('editMSModelController' , function ($scope, $modalInstance, mess $scope.close = function() { $modalInstance.close(); }; -});
\ No newline at end of file +}); diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryGridController/MSModelDictionaryDataController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryGridController/MSModelDictionaryDataController.js new file mode 100644 index 000000000..c4234b969 --- /dev/null +++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryGridController/MSModelDictionaryDataController.js @@ -0,0 +1,127 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Engine + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +app.controller('MSModelDictionaryDataController', function ($scope, PolicyAppService, modalService, $modal){ + $( "#dialog" ).hide(); + + PolicyAppService.getData('getDictionary/get_MicroServiceDictData').then(function (data) { + var j = data; + $scope.data = JSON.parse(j.data); + console.log($scope.data); + $scope.microServiceDictionaryDatas = JSON.parse($scope.data.microServiceDictionaryDatas); + console.log($scope.microServiceDictionaryDatas); + }, function (error) { + console.log("failed"); + }); + + PolicyAppService.getData('get_LockDownData').then(function(data){ + var j = data; + $scope.data = JSON.parse(j.data); + $scope.lockdowndata = JSON.parse($scope.data.lockdowndata); + $scope.msModelsDictionaryDataGrid.columnDefs[0].visible = !$scope.lockdowndata[0].lockdown; + $scope.gridApi.grid.refresh(); + },function(error){ + console.log("failed"); + }); + + $scope.msModelsDictionaryDataGrid = { + data : 'microServiceDictionaryDatas', + enableFiltering: true, + columnDefs: [{ + field: 'id', enableFiltering: false, headerCellTemplate: '' + + '<button id=\'New\' ng-click="grid.appScope.createNewMSDictNameWindow()" class="btn btn-success">' + 'Create</button>', + cellTemplate: + '<button type="button" class="btn btn-primary" ng-click="grid.appScope.editMSDictNameWindow(row.entity)"><i class="fa fa-pencil-square-o"></i></button> ' + + '<button type="button" class="btn btn-danger" ng-click="grid.appScope.deleteMSDictName(row.entity)" ><i class="fa fa-trash-o"></i></button> ', width: '8%' + },{ field: 'dictionaryName', displayName : 'Dictionary Name', sort: { direction: 'asc', priority: 0 }}, + { field: 'dictionaryUrl', displayName : 'URL' }, + {field: 'dictionaryDataByName', displayName : 'Dictionary Data Name'} + ], + onRegisterApi: function(gridApi){ + $scope.gridApi = gridApi; + } + }; + + $scope.editMSDictData = null; + $scope.createNewMSDictNameWindow = function(){ + $scope.editMSDictData = null; + var modalInstance = $modal.open({ + backdrop: 'static', keyboard: false, + templateUrl : 'add_dictionaryData_popup.html', + controller: 'editMSDictController', + resolve: { + message: function () { + var message = { + microServiceDictionaryDatas: $scope.editMSDictData + }; + return message; + } + } + }); + modalInstance.result.then(function(response){ + console.log('response', response); + $scope.microServiceDictionaryDatas=response.microServiceDictionaryDatas; + }); + }; + + $scope.editMSDictNameWindow = function(microServiceDictionaryDatas) { + $scope.editMSDictData = microServiceDictionaryDatas; + var modalInstance = $modal.open({ + backdrop: 'static', keyboard: false, + templateUrl : 'add_dictionaryData_popup.html', + controller: 'editMSDictController', + resolve: { + message: function () { + var message = { + microServiceDictionaryDatas: $scope.editMSDictData + }; + return message; + } + } + }); + modalInstance.result.then(function(response){ + console.log('response', response); + $scope.microServiceDictionaryDatas = response.microServiceDictionaryDatas; + }); + }; + + $scope.deleteMSDictName = function(data) { + modalService.popupConfirmWin("Confirm","You are about to delete the Micro Service Config Name "+data.name+". Do you want to continue?", + function(){ + var uuu = "deleteDictionary/ms_dictionary/remove_msDictionaryData"; + var postData={data: data}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){$scope.microServiceDictionaryDatas=data.microServiceDictionaryDatas;}); + }, + error : function(data){ + console.log(data); + modalService.showFailure("Fail","Error while deleting: "+ data.responseText); + } + }); + + }) + }; + +});
\ No newline at end of file diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/main/policyEditor.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/main/policyEditor.html index 430907a65..6efb8b637 100644 --- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/main/policyEditor.html +++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/main/policyEditor.html @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -158,6 +158,7 @@ <script src= "app/policyApp/controller/dictionaryGridController/MSHeaderDefaultValuesDictGridController.js"></script> <script src= "app/policyApp/controller/dictionaryGridController/MSDcaeUUIDDictGridController.js"></script> <script src= "app/policyApp/controller/dictionaryGridController/MSLocationDictGridController.js"></script> + <script src= "app/policyApp/controller/dictionaryGridController/MSModelDictionaryDataController.js"></script> <script src= "app/policyApp/controller/dictionaryGridController/MSModelDictGridController.js"></script> <script src= "app/policyApp/controller/dictionaryGridController/ModelAttributeDictGridController.js"></script> <script src= "app/policyApp/controller/dictionaryGridController/OptimizationModelDictGridController.js"></script> @@ -201,6 +202,7 @@ <script src= "app/policyApp/controller/dictionaryController/FWZoneDictController.js"></script> <script src= "app/policyApp/controller/dictionaryController/MSHeaderDefaultValuesDictController.js"></script> <script src= "app/policyApp/controller/dictionaryController/MSConfigNameDictController.js"></script> + <script src= "app/policyApp/controller/dictionaryController/MSDictionaryController.js"></script> <script src= "app/policyApp/controller/dictionaryController/MSDcaeUUIDDictController.js"></script> <script src= "app/policyApp/controller/dictionaryController/MSLocationDictController.js"></script> <script src= "app/policyApp/controller/dictionaryController/MSModelsDictController.js"></script> @@ -268,6 +270,7 @@ <div ng-include src="'app/policyApp/Windows/Dictionary/MSDCAEUUIDDictionary.html'"></div> <div ng-include src="'app/policyApp/Windows/Dictionary/MSLocationDictionary.html'"></div> <div ng-include src="'app/policyApp/Windows/Dictionary/MSModelsDictionary.html'"></div> + <div ng-include src="'app/policyApp/Windows/Dictionary/MSModelDictionaryData.html'"></div> <div ng-include src="'app/policyApp/Windows/Dictionary/ModelAttributeDictionary.html'"></div> <div ng-include src="'app/policyApp/Windows/Dictionary/OptimizationModelsDictionary.html'"></div> <div ng-include src="'app/policyApp/Windows/Dictionary/PSClosedLoopDictionary.html'"></div> diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Dictionary/MSModelDictionaryData.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Dictionary/MSModelDictionaryData.html new file mode 100644 index 000000000..3238d023e --- /dev/null +++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Dictionary/MSModelDictionaryData.html @@ -0,0 +1,22 @@ +<!--/*- + * ============LICENSE_START======================================================= + * ONAP Policy Engine + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */--> +<div ng-app ng-controller = "MSModelDictionaryDataController"> + <div ui-grid = "msModelsDictionaryDataGrid" ui-grid-pagination ui-grid-selection ui-grid-exporter class= "grid"></div> +</div>
\ No newline at end of file diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/DCAEMicroServicePolicyController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/DCAEMicroServicePolicyController.js index 5a3c62e3c..cffa46f53 100644 --- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/DCAEMicroServicePolicyController.js +++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/DCAEMicroServicePolicyController.js @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -272,6 +272,10 @@ angular.module('abs').controller('dcaeMicroServiceController', ['$scope', '$wind if (checkValue!=undefined && checkValue!="undefined"){ if($scope.temp.policy.ruleData != null){ var checkValue = $scope.temp.policy.ruleData[selects[i].id]; + var option = document.createElement('option'); + option.setAttribute('value', checkValue); + option.appendChild(document.createTextNode(checkValue)); + document.getElementById(selects[i].id).appendChild(option); document.getElementById(selects[i].id).value = $scope.temp.policy.ruleData[selects[i].id]; plainAttributeKeys.push(selects[i].id); } @@ -1033,25 +1037,25 @@ angular.module('abs').controller('dcaeMicroServiceController', ['$scope', '$wind textField.setAttribute("class" , "form-control"); if(dataType){ - if(dataType == "double"){ - textField.setAttribute("type" , "number"); - textField.setAttribute("step" , "any"); - - }else if(dataType == "boolean"){ //gw1218 testing boolean - var booleanDiv = document.createElement("div"); - - booleanDiv.setAttribute("class" , "onoffswitch"); - - //var checkField = document.createElement("INPUT"); - textField.setAttribute("type" , "checkbox"); - textField.setAttribute("name" , "onoffswitch"); - textField.setAttribute("class" , "onoffswitch-checkbox"); - textField.setAttribute("id" , ''+labelValue +attibuteKey+''); - if(defaultValue && defaultValue == "true") { - textField.setAttribute("checked" , "true"); - }else{ - textField.setAttribute("checked" , "false"); - } + if(dataType == "double"){ + textField.setAttribute("type" , "number"); + textField.setAttribute("step" , "any"); + + }else if(dataType == "boolean"){ //gw1218 testing boolean + var booleanDiv = document.createElement("div"); + + booleanDiv.setAttribute("class" , "onoffswitch"); + + //var checkField = document.createElement("INPUT"); + textField.setAttribute("type" , "checkbox"); + textField.setAttribute("name" , "onoffswitch"); + textField.setAttribute("class" , "onoffswitch-checkbox"); + textField.setAttribute("id" , ''+labelValue +attibuteKey+''); + if(defaultValue.substring(0,defaultValue.indexOf(":")) == "true") { + textField.setAttribute("checked" , true); + }else{ + textField.removeAttribute("checked"); + } var booleanlabel = document.createElement("Label"); booleanlabel.setAttribute("class" , "onoffswitch-label"); @@ -1355,31 +1359,62 @@ angular.module('abs').controller('dcaeMicroServiceController', ['$scope', '$wind requiredNodeToolTip.textContent = "Conditional Required"; requiredNode.appendChild(requiredNodeToolTip); + } + + var listField = document.createElement("SELECT"); + listField.setAttribute("class" , "form-control"); + listField.setAttribute("style" , "width:300px;"); + listField.setAttribute("ng-disabled" , "temp.policy.readOnly"); + + if(description && description != "null"){ + listField.setAttribute("title", description); + } + + if(isRequired){ + if(document.getElementById(divID).hasAttribute('data-conditional')){ + listField.setAttribute("data-conditional", divID); + listField.setAttribute("ng-blur", "validContionalRequired('"+divID+"')"); + }else{ + listField.setAttribute("required", true); } - - var listField = document.createElement("SELECT"); - listField.setAttribute("class" , "form-control"); - listField.setAttribute("style" , "width:300px;"); - listField.setAttribute("ng-disabled" , "temp.policy.readOnly"); - - if(description && description != "null"){ - listField.setAttribute("title", description); - } - - if(isRequired){ - if(document.getElementById(divID).hasAttribute('data-conditional')){ - listField.setAttribute("data-conditional", divID); - listField.setAttribute("ng-blur", "validContionalRequired('"+divID+"')"); - }else{ - listField.setAttribute("required", true); - } - } - if( many != true || isRequired != true){ // add an empty option for not required or not multiple select element - var optionFirst = document.createElement('option'); - optionFirst.setAttribute('value', ""); - listField.appendChild(optionFirst); + } + if( many != true || isRequired != true){ // add an empty option for not required or not multiple select element + var optionFirst = document.createElement('option'); + var optionValue = ""; + if($scope.temp.policy.ruleData != null){ + if($scope.temp.policy.ruleData[labelLevel + attributeName] != undefined && $scope.temp.policy.ruleData[labelLevel + attributeName] != "undefined"){ + optionValue = $scope.temp.policy.ruleData[labelLevel + attributeName]; + } + } + optionFirst.setAttribute('value', optionValue); + optionFirst.appendChild(document.createTextNode(optionValue)); + listField.appendChild(optionFirst); + } + var ruleFormationCheck = false; + if(listemunerateValues.length !== 0 && typeof listemunerateValues[0] == "string" && listemunerateValues[0].includes("dictionary:")) { + var ruleCheck = listemunerateValues[0].split("&"); + var dictParams = ruleCheck[0].split(":"); + var dictParamsSplit = dictParams[1].split("@"); + if (ruleCheck[1] != undefined && ruleCheck[1] == 'Rule') { + ruleFormationCheck = true; } - + PolicyAppService.getData(dictParamsSplit[0]).then(function (data) { + var j = data; + $scope.data = JSON.parse(j.data); + console.log($scope.data); + $scope.listDictionarys = JSON.parse($scope.data[dictParamsSplit[1]]); + for (i=0; i < $scope.listDictionarys.length; i += 1) { + option = document.createElement('option'); + option.setAttribute('value', $scope.listDictionarys[i]); + option.appendChild(document.createTextNode($scope.listDictionarys[i])); + listField.appendChild(option); + } + }, function (error) { + console.log("failed"); + }); + + } + else{ for (i=0; i < listemunerateValues.length; i += 1) { if(typeof listemunerateValues[i] == "string" && listemunerateValues[i].includes("equal-sign")){ listemunerateValues[i] = listemunerateValues[i].replace('equal-sign','='); @@ -1391,95 +1426,130 @@ angular.module('abs').controller('dcaeMicroServiceController', ['$scope', '$wind option.setAttribute('value', listemunerateValues[i]); listField.appendChild(option); } - listField.setAttribute("id" , ''+ labelLevel + attributeName + ''); - - enumKeyList.push(attributeName); - - document.getElementById(divID).appendChild(label); - document.getElementById(divID).appendChild(br); - - if(many == true){ - document.getElementById(divID).appendChild(listField).multiple = true; - plainAttributeKeys.push(labelLevel + attributeName+'*'+true); - }else { - document.getElementById(divID).appendChild(listField).multiple = false; - plainAttributeKeys.push(labelLevel + attributeName+'*'+false); - - if (defaultValue){ - if(defaultValue.includes(':')){ - defaultValue = defaultValue.split(':')[0]; - } - var location = listemunerateValues.indexOf(defaultValue); - document.getElementById(labelLevel +attributeName).options[location+1].selected = true; + } + listField.setAttribute("id" , ''+ labelLevel + attributeName + ''); + + enumKeyList.push(attributeName); + + document.getElementById(divID).appendChild(label); + document.getElementById(divID).appendChild(br); + + if(many == true){ + document.getElementById(divID).appendChild(listField).multiple = true; + plainAttributeKeys.push(labelLevel + attributeName+'*'+true); + }else { + document.getElementById(divID).appendChild(listField).multiple = false; + plainAttributeKeys.push(labelLevel + attributeName+'*'+false); + + if (defaultValue){ + if(defaultValue.includes(':')){ + defaultValue = defaultValue.split(':')[0]; } + var location = listemunerateValues.indexOf(defaultValue); + document.getElementById(labelLevel +attributeName).options[location+1].selected = true; } - - if($scope.temp.policy.ruleData != null){ - if (many == true){ - document.getElementById(labelLevel +attributeName).options[0].selected = false; - for (i=0; i < listemunerateValues.length; i += 1) { - var testValue = $scope.temp.policy.ruleData[labelLevel +attributeName+'@' + i]; - if (testValue === undefined){ - testValue = $scope.temp.policy.ruleData[labelLevel +attributeName]; - } - var location = listemunerateValues.indexOf(testValue); - if (location!=-1){ - document.getElementById(labelLevel +attributeName).options[location].selected = true; - } - } - }else { - if($scope.temp.policy.ruleData[labelLevel + attributeName] != undefined && $scope.temp.policy.ruleData[labelLevel + attributeName] != "undefined"){ - document.getElementById(labelLevel + attributeName).value = $scope.temp.policy.ruleData[labelLevel + attributeName]; - } + } + + if (ruleFormationCheck) { + var optionInput = document.createElement("INPUT"); + optionInput.setAttribute("type" , "text"); + optionInput.setAttribute("id" , ''+ labelLevel + attributeName + '.input'); + optionInput.setAttribute("name" , "ruleName"); + optionInput.setAttribute("value" , " "); + optionInput.setAttribute("style" , "width:300px;"); + optionInput.setAttribute("ng-disabled" , "temp.policy.readOnly"); + optionInput.removeAttribute("required"); + + document.getElementById(divID).appendChild(optionInput); + + var optionButton = document.createElement("BUTTON"); + optionButton.setAttribute("ng-disabled" , "temp.policy.readOnly"); + var buttonLabel = document.createTextNode("+"); + optionButton.appendChild(buttonLabel); + optionButton.setAttribute("class", "btn btn-add-remove"); + optionButton.setAttribute("onclick" , 'addDynamicOptions("'+ labelLevel + attributeName + '");'); + optionButton.removeAttribute("required"); + + + document.getElementById(divID).appendChild(optionButton); + document.getElementById(divID).appendChild(br); + } + + if($scope.temp.policy.ruleData != null){ + if (many == true){ + document.getElementById(labelLevel +attributeName).options[0].selected = false; + for (i=0; i < listemunerateValues.length; i += 1) { + var testValue = $scope.temp.policy.ruleData[labelLevel +attributeName+'@' + i]; + if (testValue === undefined){ + testValue = $scope.temp.policy.ruleData[labelLevel +attributeName]; } + var location = listemunerateValues.indexOf(testValue); + if (location!=-1){ + document.getElementById(labelLevel +attributeName).options[location].selected = true; + } + } + }else { + if($scope.temp.policy.ruleData[labelLevel + attributeName] != undefined && $scope.temp.policy.ruleData[labelLevel + attributeName] != "undefined"){ + document.getElementById(labelLevel + attributeName).value = $scope.temp.policy.ruleData[labelLevel + attributeName]; } - }; - - function onlyUnique(value, index, self) { - return self.indexOf(value) === index; - }; - - - function checkDictionary(value){ - for (i = 0; i < $scope.microServiceAttributeDictionaryDatas.length; i++) { - if ($scope.microServiceAttributeDictionaryDatas[i].name.localeCompare(value)){ - return true; - } - } - - } - $scope.savePolicy = function(policy){ - if(policy.itemContent != undefined){ - $scope.refreshCheck = true; - $scope.policyNavigator = policy.itemContent; - policy.itemContent = ""; - } - $scope.savebutton = false; - var splitAt = '*'; - var dot ='.'; - var jsonPolicy = {}; - if(plainAttributeKeys != null){ - for(a = 0; a < plainAttributeKeys.length; a++){ - var splitPlainAttributeKey = plainAttributeKeys[a].split(splitAt); - console.log("splitPlainAttributeKey: " + splitPlainAttributeKey); - var searchElement = document.getElementById(splitPlainAttributeKey[0]); - var key = splitPlainAttributeKey[0]; - if(searchElement == null){ - searchElement = document.getElementById(splitPlainAttributeKey[0]+'@0'); - key = splitPlainAttributeKey[0]+'@0'; - }else if (searchElement.nodeName == 'BUTTON'){ - searchElement = document.getElementById(splitPlainAttributeKey[0]+'@0'); - key = splitPlainAttributeKey[0]+'@0'; - } - if(searchElement != null){ - var keySplit = key.split(dot); - var elumentLocation = keySplit.length; - var enumKey = key; - if (elumentLocation > 1){ - enumKey = keySplit[keySplit.length - 1]; - } - //check it is undefined or not - if (enumKeyList != undefined && enumKeyList.indexOf(enumKey) != -1){ + } + } + }; + + addDynamicOptions = function(id) { + var option = document.createElement("option"); + var value = document.getElementById(id+".input").value; + option.setAttribute('value', value); + option.appendChild(document.createTextNode(value)); + document.getElementById(id).options.add(option); + document.getElementById(id+".input").value = ""; + }; + + function onlyUnique(value, index, self) { + return self.indexOf(value) === index; + }; + + + function checkDictionary(value){ + for (i = 0; i < $scope.microServiceAttributeDictionaryDatas.length; i++) { + if ($scope.microServiceAttributeDictionaryDatas[i].name.localeCompare(value)){ + return true; + } + } + + } + $scope.savePolicy = function(policy){ + if(policy.itemContent != undefined){ + $scope.refreshCheck = true; + $scope.policyNavigator = policy.itemContent; + policy.itemContent = ""; + } + $scope.savebutton = false; + var splitAt = '*'; + var dot ='.'; + var jsonPolicy = {}; + if(plainAttributeKeys != null){ + for(a = 0; a < plainAttributeKeys.length; a++){ + var splitPlainAttributeKey = plainAttributeKeys[a].split(splitAt); + console.log("splitPlainAttributeKey: " + splitPlainAttributeKey); + var searchElement = document.getElementById(splitPlainAttributeKey[0]); + var key = splitPlainAttributeKey[0]; + if(searchElement == null){ + searchElement = document.getElementById(splitPlainAttributeKey[0]+'@0'); + key = splitPlainAttributeKey[0]+'@0'; + }else if (searchElement.nodeName == 'BUTTON'){ + searchElement = document.getElementById(splitPlainAttributeKey[0]+'@0'); + key = splitPlainAttributeKey[0]+'@0'; + } + if(searchElement != null){ + var keySplit = key.split(dot); + var elumentLocation = keySplit.length; + var enumKey = key; + if (elumentLocation > 1){ + enumKey = keySplit[keySplit.length - 1]; + } + //check it is undefined or not + if (enumKeyList != undefined && enumKeyList.indexOf(enumKey) != -1){ if (splitPlainAttributeKey[1]!= undefined && splitPlainAttributeKey[1].indexOf("true") !== -1){ var multiSlect = []; for ( var i = 0; i < searchElement.selectedOptions.length; i++) { @@ -1722,4 +1792,4 @@ angular.module('abs').controller('dcaeMicroServiceController', ['$scope', '$wind } }); -}]);
\ No newline at end of file +}]); diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css index d7c98b98c..81d91d90b 100644 --- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css +++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -550,4 +550,107 @@ table th > a:focus { border: 0px solid grey; border-left: none; cursor: pointer; -}
\ No newline at end of file +} + +.switch { + position: relative; + display: inline-block; + width: 60px; + height: 34px; +} + +.switch input {display:none;} + +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: .4s; + transition: .4s; +} + +.slider:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: .4s; + transition: .4s; +} + +input:checked + .slider { + background-color: blue; +} + +input:focus + .slider { + box-shadow: 0 0 1px blue; +} + +input:checked + .slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); +} + +/* Rounded sliders */ +.slider.round { + border-radius: 34px; +} + +.slider.round:before { + border-radius: 50%; +} + + +.onoffswitch { + position: relative; width: 90px; + -webkit-user-select:none; -moz-user-select:none; -ms-user-select: none; +} +.onoffswitch-checkbox { + display: none; +} +.onoffswitch-label { + display: block; overflow: hidden; cursor: pointer; + border: 2px solid #999999; border-radius: 20px; +} +.onoffswitch-inner { + display: block; width: 200%; margin-left: -100%; + transition: margin 0.3s ease-in 0s; +} +.onoffswitch-inner:before, .onoffswitch-inner:after { + display: block; float: left; width: 50%; height: 25px; padding: 0; line-height: 25px; + font-size: 14px; color: white; font-family: Trebuchet, Arial, sans-serif; font-weight: bold; + box-sizing: border-box; +} +.onoffswitch-inner:before { + content: "ON"; + padding-left: 10px; + background-color: #337ab7; color: #FFFFFF; +} +.onoffswitch-inner:after { + content: "OFF"; + padding-right: 10px; + background-color: #EEEEEE; color: #999999; + text-align: right; +} +.onoffswitch-switch { + display: block; width: 18px; margin: 6px; + background: #FFFFFF; + position: absolute; top: 0; bottom: 0; + right: 56px; + border: 2px solid #999999; border-radius: 20px; + transition: all 0.3s ease-in 0s; +} +.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner { + margin-left: 0; +} +.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch { + right: 0px; +} diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_Dictionary.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_Dictionary.html index 690f43b36..acf5e1827 100644 --- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_Dictionary.html +++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_Dictionary.html @@ -2,7 +2,7 @@ ============LICENSE_START======================================================= ONAP Policy Engine ================================================================================ - Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. ================================================================================ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -105,6 +105,7 @@ <div ng-if="option2 == 'MicroService Location'" ng-include = "'app/policyApp/policy-models/Dictionary/MSLocationDictionary.html'"></div> <div ng-if="option2 == 'MicroService Models'" ng-include = "'app/policyApp/policy-models/Dictionary/MSModelDictionary.html'"></div> <div ng-if="option2 == 'MicroService Dictionary'" ng-include = "'app/policyApp/policy-models/Dictionary/ModelAttributeDictionary.html'"></div> + <div ng-if="option2 == 'MicroService Dictionary Input'" ng-include = "'app/policyApp/policy-models/Dictionary/MSModelDictionaryData.html'"></div> <!--Optimization Policy Dictionary's--> <div ng-if="option2 == 'ONAP Optimization Models'" ng-include = "'app/policyApp/policy-models/Dictionary/OptimizationModelDictionary.html'"></div> <!-- Policy Scope Dictionary's --> @@ -137,4 +138,4 @@ </div> </div> </div> -</script>
\ No newline at end of file +</script> diff --git a/POLICY-SDK-APP/src/test/java/org/onap/policy/controller/CreateDcaeMicroServiceControllerTest.java b/POLICY-SDK-APP/src/test/java/org/onap/policy/controller/CreateDcaeMicroServiceControllerTest.java index ea67bbd34..e4ededa1f 100644 --- a/POLICY-SDK-APP/src/test/java/org/onap/policy/controller/CreateDcaeMicroServiceControllerTest.java +++ b/POLICY-SDK-APP/src/test/java/org/onap/policy/controller/CreateDcaeMicroServiceControllerTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Modifications Copyright (C) 2019 Samsung * ================================================================================ @@ -31,6 +31,10 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.fge.jackson.JsonLoader; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; @@ -45,6 +49,13 @@ import java.util.Map; import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; +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; import org.junit.Before; import org.junit.Test; import org.onap.policy.common.logging.flexlogger.FlexLogger; @@ -56,25 +67,14 @@ import org.onap.policy.rest.jpa.MicroServiceModels; import org.onap.policy.rest.jpa.PolicyEntity; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.fge.jackson.JsonLoader; -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; /** * The class <code>CreateDcaeMicroServiceControllerTest</code> contains tests for the class * {@link <code>CreateDcaeMicroServiceController</code>}* * - * All JUnits are designed to run in the local development environment where they have write - * privileges and can execute time-sensitive tasks. - * + * All JUnits are designed to run in the local development environment where they have write privileges and can execute + * time-sensitive tasks. + * */ public class CreateDcaeMicroServiceControllerTest { @@ -87,38 +87,94 @@ public class CreateDcaeMicroServiceControllerTest { @Before public void setUp() throws Exception { - logger.info("setUp: Entering"); commonClassDao = mock(CommonClassDao.class); List<Object> microServiceModelsData = new ArrayList<Object>(); MicroServiceModels testData = new MicroServiceModels(); testData.setVersion("OpenOnap-Junit"); + testData.setModelName("modelName"); + testData.setRuleFormation("triggerSignature.signaturesAlarm.alarmSignatures.alarmSignature[VnfType, " + + "Contains, FilterValue]@SymptomTriggerSignature.signaturesSymptom.symptomSignatures." + + "symptomSignature[symptomVnfType, symptomContains, symptomFilterValue]"); + testData.setAttributes( + "ParentCorrelation Name=String:defaultValue-null:required-true:MANY-false:description-null," + + "CorrelationWindow=String:defaultValue-null:required-true:MANY-false:description-null," + + "EmailNotification=String:defaultValue-null:required-true:MANY-false:description-null," + + "CorrelationPriority=string:defaultValue-null:required-true:MANY-false:description-null,"); + testData.setRef_attributes("SymptomTriggerSignature=resource-model-symptomEntity:MANY-true:description-null," + + "triggerSignature=resource-model-entity:MANY-true:description-null," + + "SelectServerScope=SELECTSERVERSCOPE:MANY-false,logicalConnector=LOGICALCONNECTOR:MANY-false," + + "ParentCorrelationTraversal=PARENTCORRELATIONTRAVERSAL:MANY-false,"); + testData.setSub_attributes( + "{\"symptomAlarms\":{\"symptomContains\":\"SYMPTOMCONTAINS:defaultValue-null:required-true:MANY-false:" + + "description-null\",\"symptomFilterValue\":\"string:defaultValue-null:" + + "required-true:MANY-false:" + + "description-null\",\"symptomVnfType\":\"SYMPTOMVNFTYPE:defaultValue-null:" + + "required-true:MANY-false:" + + "description-null\"},\"symptomElement\":{\"symptomSignatures\":\"symptomRange:required-true:" + + "MANY-true:description-null\",\"symptomTraversal\":\"SYMPTOMTRAVERSAL:defaultValue-null:" + + "required-true:MANY-false:description-null\"},\"alarms\":{\"Contains\":\"CONTAINS:" + + "defaultValue-null:required-true:MANY-false:description-null\",\"VnfType\":\"VNFTYPE:" + + "defaultValue-null:required-true:MANY-false:description-null\",\"FilterValue\":\"string:" + + "defaultValue-null:required-true:MANY-false:description-null\"},\"resource-model-entity\":" + + "{\"signaturesAlarm\":\"element:required-false:MANY-false:description-null\"},\"range\":" + + "{\"alarmSignature\":\"alarms:required-true:MANY-false:description-null\"},\"symptomRange\":" + + "{\"symptomSignature\":\"symptomAlarms:required-true:MANY-false:description-null\"}," + + "\"element\":" + + "{\"alarmSignatures\":\"range:required-true:MANY-true:description-null\",\"traversal\":" + + "\"TRAVERSAL:" + "defaultValue-null:required-true:MANY-false:description-null\"}," + + "\"resource-model-symptomEntity\":" + + "{\"signaturesSymptom\":\"symptomElement:required-false:MANY-false:description-null\"}}"); + testData.setAnnotation( + "alarmSignatures=matching-true, symptomContains=matching-true, symptomSignatures=matching-true, " + + "symptomTraversal=matching-true, symptomVnfType=matching-true, Contains=matching-true, " + + "SelectServerScope=matching-true, VnfType=matching-true, traversal=matching-true, " + + "logicalConnector=matching-true, ParentCorrelationTraversal=matching-true"); + testData.setEnumValues("triggerSignature.signaturesAlarm.alarmSignatures.alarmSignature[VnfType, Contains, " + + "FilterValue]@SymptomTriggerSignature.signaturesSymptom.symptomSignatures.symptomSignature" + + "[symptomVnfType, symptomContains, symptomFilterValue]"); + testData.setDataOrderInfo("triggerSignature.signaturesAlarm.alarmSignatures.alarmSignature[VnfType, Contains, " + + "FilterValue]@SymptomTriggerSignature.signaturesSymptom.symptomSignatures." + + "symptomSignature[symptomVnfType, symptomContains, symptomFilterValue]"); microServiceModelsData.add(testData); // mock the getDataById() call - when(commonClassDao.getDataById(MicroServiceModels.class, "modelName", "test")) + when(commonClassDao.getDataById(MicroServiceModels.class, "modelName:version", "TESTMODEL" + ":" + "TODAY")) .thenReturn(microServiceModelsData); - jsonString = - "{\"policyData\": {\"error\": \"\",\"inprocess\": false,\"model\": {\"name\": \"testingdata\", " - + " \"subScopename\": \"\",\"path\": [],\"type\": \"dir\",\"size\": 0," - + "\"date\": \"2017-04-12T21:26:57.000Z\", \"version\": \"\",\"createdBy\": \"someone\"," - + "\"modifiedBy\": \"someone\",\"content\": \"\",\"recursive\": false}," - + "\"tempModel\": {\"name\": \"testingdata\",\"subScopename\": \"\"}," - + "\"policy\": {\"policyType\": \"Config\",\"configPolicyType\": \"Micro Service\"," - + "\"policyName\": \"may1501\", \"policyDescription\": \"testing input\"," - + "\"onapName\": \"RaviTest\",\"guard\": \"False\",\"riskType\": \"Risk12345\"," - + "\"riskLevel\": \"2\",\"priority\": \"6\",\"serviceType\": \"DkatPolicyBody\"," - + "\"version\": \"1707.41.02\",\"ruleGridData\": [[\"fileId\"]],\"ttlDate\": null}}," - + "\"policyJSON\": {\"pmTableName\": \"test\",\"dmdTopic\": \"1\",\"fileId\": \"56\"}}"; - - configBodyString = - "{\"service\":\"SniroPolicyEntityTest\",\"policyName\":\"someone\",\"description\":\"test\"," - + "\"templateVersion\":\"1607\",\"version\":\"HD\",\"priority\":\"2\"," - + "\"content\":{\"lastPolled\":\"1\",\"boolen-test\":\"true\",\"created\":\"test\"," - + "\"retiredDate\":\"test\",\"scope\":\"SNIRO_PLACEMENT_VDHV\",\"name\":\"test\"," - + "\"lastModified\":\"test\",\"state\":\"CREATED\",\"type\":\"CONFIG\",\"intent\":\"test\"," - + "\"target\":\"SNIRO\"}}"; + jsonString = "{\"policyData\":{\"error\":\"\",\"inprocess\":false,\"model\":{\"name\":\"DCAE\"," + + "\"subScopename\":\"\",\"path\":[],\"type\":\"dir\",\"size\":0,\"createdDate\":" + + "\"2019-02-26 09:56:23.0\",\"modifiedDate\":\"2019-02-26 09:56:23.0\",\"version\":" + + "\"\",\"createdBy\":\"super-admin\",\"modifiedBy\":\"super-admin\",\"roleType\":\"super-admin\"," + + "\"content\":\"\",\"recursive\":false},\"tempModel\":{\"name\":\"DCAE\",\"subScopename\":\"\"," + + "\"path\":[],\"type\":\"dir\",\"size\":0,\"createdDate\":\"2019-02-26 09:56:23.0\"," + + "\"modifiedDate\":\"2019-02-26 09:56:23.0\",\"version\":\"\",\"createdBy\":\"super-admin\"," + + "\"modifiedBy\":\"super-admin\",\"roleType\":\"super-admin\",\"content\":\"\"," + + "\"recursive\":false},\"$$hashKey\":\"object:354\",\"policy\":{\"policyType\":\"Config\"," + + "\"configPolicyType\":\"Micro Service\",\"serviceType\":\"TESTMODEL\",\"version\":\"TODAY\"," + + "\"ruleGridData\":[\"Correlation Priority\",\"Correlation Window\"," + + "\"Email Notification for failures\",\"Select Server Scope\"," + + "\"Parent Correlation Name\",\"Parent Correlation Traversal\"," + + "\"traversal\",\"FilterValue\"],\"policyName\":\"testttt\",\"onapName\":" + + "\"asdafadf\",\"guard\":\"True\",\"riskType\":\"sfsgs\",\"riskLevel\":\"1\"," + + "\"priority\":\"1\",\"configName\":\"Search\",\"location\":\"Search\"," + + "\"uuid\":\"Search\",\"policyScope\":\"PolicyScope_ssaaa123\"}}," + + "\"policyJSON\":{\"Correlation Priority\":\"testttt\",\"Correlation Window\":" + + "\"testttt\",\"Email Notification for failures\":\"sds@l.com\"," + + "\"Select Server Scope\":\"testttt\",\"Parent Correlation Name\":" + + "\"testttt\",\"Parent Correlation Traversal\":\"testttt\",\"logicalConnector\":" + + "\"OR\",\"triggerSignature@0.signaturesAlarm.alarmSignatures@0.traversal\":\"testttt\"," + + "\"triggerSignature@0.signaturesAlarm.alarmSignatures@0.alarmSignature@0.VnfType\":" + + "\" testttt\",\"triggerSignature@0.signaturesAlarm.alarmSignatures@0." + + "alarmSignature@0.Contains\":\"AND\",\"triggerSignature@0.signaturesAlarm." + + "alarmSignatures@0.alarmSignature@0.FilterValue\":\"testttt\"}}"; + + configBodyString = "{\"service\":\"SniroPolicyEntityTest\",\"policyName\":\"someone\",\"description\":\"test\"," + + "\"templateVersion\":\"1607\",\"version\":\"HD\",\"priority\":\"2\"," + + "\"content\":{\"lastPolled\":\"1\",\"boolen-test\":\"true\",\"created\":\"test\"," + + "\"retiredDate\":\"test\",\"scope\":\"SNIRO_PLACEMENT_VDHV\",\"name\":\"test\"," + + "\"lastModified\":\"test\",\"state\":\"CREATED\",\"type\":\"CONFIG\",\"intent\":\"test\"," + + "\"target\":\"SNIRO\"}}"; request = mock(HttpServletRequest.class); BufferedReader br = new BufferedReader(new StringReader(jsonString)); @@ -129,7 +185,7 @@ public class CreateDcaeMicroServiceControllerTest { } /** - * Run the PolicyRestAdapter setDataToPolicyRestAdapter(PolicyRestAdapter, JsonNode) method test + * Run the PolicyRestAdapter setDataToPolicyRestAdapter(PolicyRestAdapter, JsonNode) method test. */ @Test @@ -137,7 +193,6 @@ public class CreateDcaeMicroServiceControllerTest { logger.debug("testSetDataToPolicyRestAdapter: enter"); - CreateDcaeMicroServiceController controller = new CreateDcaeMicroServiceController(); CreateDcaeMicroServiceController.setCommonClassDao(commonClassDao); JsonNode root = null; @@ -146,27 +201,24 @@ public class CreateDcaeMicroServiceControllerTest { PolicyRestAdapter policyData = null; try { root = JsonLoader.fromString(jsonString); - policyData = (PolicyRestAdapter) mapper.readValue( - root.get("policyData").get("policy").toString(), PolicyRestAdapter.class); + policyData = mapper.readValue(root.get("policyData").get("policy").toString(), PolicyRestAdapter.class); } catch (Exception e) { logger.error("testSetDataToPolicyRestAdapter", e); } - + CreateDcaeMicroServiceController controller = new CreateDcaeMicroServiceController(); PolicyRestAdapter result = controller.setDataToPolicyRestAdapter(policyData, root); - assertTrue( - result != null && result.getJsonBody() != null && !result.getJsonBody().isEmpty()); + assertTrue(result != null && result.getJsonBody() != null && !result.getJsonBody().isEmpty()); logger.debug("result.getJsonBody() : " + result.getJsonBody()); logger.debug("testSetDataToPolicyRestAdapter: exit"); } /** - * Run the ModelAndView getDCAEMSTemplateData(HttpServletRequest, HttpServletResponse) method - * test + * Run the ModelAndView getDCAEMSTemplateData(HttpServletRequest, HttpServletResponse) method test. */ @Test - public void testGetDCAEMSTemplateData() { + public void testGetDcaeMsTemplateData() { logger.debug("testGetDCAEMSTemplateData: enter"); @@ -186,13 +238,13 @@ public class CreateDcaeMicroServiceControllerTest { testData.setVersion("1707.4.1.2-Junit"); microServiceModelsData.add(testData); // mock the getDataById() call with the same MS model name - when(commonClassDao.getDataById(MicroServiceModels.class, "modelName", - "DkatPolicyBody")).thenReturn(microServiceModelsData); + when(commonClassDao.getDataById(MicroServiceModels.class, "modelName", "DkatPolicyBody")) + .thenReturn(microServiceModelsData); controller.getDCAEMSTemplateData(request, response); - assertTrue(response.getContentAsString() != null - && response.getContentAsString().contains("dcaeModelData")); + assertTrue( + response.getContentAsString() != null && response.getContentAsString().contains("dcaeModelData")); logger.debug("response: " + response.getContentAsString()); @@ -204,8 +256,7 @@ public class CreateDcaeMicroServiceControllerTest { } /** - * Run the ModelAndView getModelServiceVersionData(HttpServletRequest, HttpServletResponse) - * method test + * Run the ModelAndView getModelServiceVersionData(HttpServletRequest, HttpServletResponse) method test. */ @Test @@ -230,8 +281,8 @@ public class CreateDcaeMicroServiceControllerTest { microServiceModelsData.add(testData); // mock the getDataById() call with the same MS model name - when(commonClassDao.getDataById(MicroServiceModels.class, "modelName", - "DkatPolicyBody")).thenReturn(microServiceModelsData); + when(commonClassDao.getDataById(MicroServiceModels.class, "modelName", "DkatPolicyBody")) + .thenReturn(microServiceModelsData); controller.getModelServiceVersionData(request, response); assertTrue(response.getContentAsString() != null @@ -248,11 +299,11 @@ public class CreateDcaeMicroServiceControllerTest { } /** - * Run the void getDCAEPriorityValuesData(HttpServletRequest, HttpServletResponse) method test + * Run the void getDCAEPriorityValuesData(HttpServletRequest, HttpServletResponse) method test. */ @Test - public void testGetDCAEPriorityValuesData() { + public void testGetDcaePriorityValuesData() { logger.debug("testGetDCAEPriorityValuesData: enter"); @@ -262,8 +313,8 @@ public class CreateDcaeMicroServiceControllerTest { MockHttpServletResponse response = new MockHttpServletResponse(); try { controller.getDCAEPriorityValuesData(request, response); - assertTrue(response.getContentAsString() != null - && response.getContentAsString().contains("priorityDatas")); + assertTrue( + response.getContentAsString() != null && response.getContentAsString().contains("priorityDatas")); logger.debug("response: " + response.getContentAsString()); } catch (Exception e) { logger.error("testGetDCAEPriorityValuesData", e); @@ -274,11 +325,11 @@ public class CreateDcaeMicroServiceControllerTest { } /** - * Run the void prePopulateDCAEMSPolicyData(PolicyRestAdapter, PolicyEntity) method test + * Run the void prePopulateDCAEMSPolicyData(PolicyRestAdapter, PolicyEntity) method test. */ @Test - public void testPrePopulateDCAEMSPolicyData() { + public void testPrePopulateDcaeMsPolicyData() { logger.debug("testPrePopulateDCAEMSPolicyData: enter"); @@ -297,9 +348,7 @@ public class CreateDcaeMicroServiceControllerTest { try { root = JsonLoader.fromString(jsonString); - restAdapter = (PolicyRestAdapter) mapper.readValue( - root.get("policyData").get("policy").toString(), PolicyRestAdapter.class); - PolicyType policyType = new PolicyType(); + restAdapter = mapper.readValue(root.get("policyData").get("policy").toString(), PolicyRestAdapter.class); TargetType target = new TargetType(); // create guard attribute @@ -364,8 +413,6 @@ public class CreateDcaeMicroServiceControllerTest { target.getAnyOf().add(anyRiskType); // create RiskLevel attribute - AnyOfType anyRiskLevel = new AnyOfType(); - AllOfType allRiskLevel = new AllOfType(); MatchType matchRiskLevel = new MatchType(); // set value AttributeValueType riskLevel = new AttributeValueType(); @@ -375,6 +422,7 @@ public class CreateDcaeMicroServiceControllerTest { AttributeDesignatorType designatorRiskLevel = new AttributeDesignatorType(); designatorRiskLevel.setAttributeId("RiskLevel"); matchRiskLevel.setAttributeDesignator(designatorRiskLevel); + AllOfType allRiskLevel = new AllOfType(); allRiskLevel.getMatch().add(matchRiskLevel); // add a dummy MatchType object since while (matchList.size()>1 ...) @@ -389,10 +437,10 @@ public class CreateDcaeMicroServiceControllerTest { matchDummy2.setAttributeDesignator(designatorDummy2); allRiskLevel.getMatch().add(matchDummy2); - + AnyOfType anyRiskLevel = new AnyOfType(); anyRiskLevel.getAllOf().add(allRiskLevel); target.getAnyOf().add(anyRiskLevel); - + PolicyType policyType = new PolicyType(); policyType.setTarget(target); restAdapter.setPolicyData(policyType); @@ -417,7 +465,7 @@ public class CreateDcaeMicroServiceControllerTest { } /** - * Run the Map<String,String> convert(String, String) method test + * Run the Map<String,String> convert(String, String) method test. */ @Test @@ -426,39 +474,38 @@ public class CreateDcaeMicroServiceControllerTest { String str = "k1=v1,k2=v2,k3=v3"; String split = ","; - Map<String, String> result = CreateDcaeMicroServiceController.convert(str, split); + Map<String, String> result = new CreateDcaeMicroServiceController().convert(str, split); assertTrue(result != null && result.size() == 3); logger.debug("testConvert: exit"); } /** - * Run the Map<String,String> convertMap(Map<String,String>, Map<String,String>) method test + * Run the Map<String,String> convertMap(Map<String,String>, Map<String,String>) method test. */ @Test public void testConvertMap() { logger.debug("testConvertMap: enter"); - - CreateDcaeMicroServiceController controller = new CreateDcaeMicroServiceController(); Map<String, String> attributesMap = new HashMap<String, String>(); - Map<String, String> attributesRefMap = new HashMap<String, String>(); - Map<String, String> attributesListRefMap = controller.getAttributesListRefMap(); - Map<String, LinkedList<String>> arrayTextList = controller.getArrayTextList(); - LinkedList<String> list = new LinkedList<String>(); attributesMap.put("keyOne", "valueOne"); attributesMap.put("keyTwo", "valueTwo"); attributesMap.put("keyThree", "valueThree"); + Map<String, String> attributesRefMap = new HashMap<String, String>(); attributesRefMap.put("key4", "value4"); attributesRefMap.put("key5", "value5"); attributesRefMap.put("key6", "value6"); + CreateDcaeMicroServiceController controller = new CreateDcaeMicroServiceController(); + Map<String, String> attributesListRefMap = controller.getAttributesListRefMap(); + LinkedList<String> list = new LinkedList<String>(); attributesListRefMap.put("key7", "value7"); list.add("l1"); list.add("l2"); + Map<String, LinkedList<String>> arrayTextList = controller.getArrayTextList(); arrayTextList.put("key8", list); Map<String, String> result = controller.convertMap(attributesMap, attributesRefMap); @@ -471,12 +518,12 @@ public class CreateDcaeMicroServiceControllerTest { } /** - * Run the void SetMSModelData(HttpServletRequest, HttpServletResponse) method test + * Run the void SetMSModelData(HttpServletRequest, HttpServletResponse) method test. */ // @Ignore @Test - public void testSetMSModelData() { + public void testSetMsModelData() { logger.debug("testSetMSModelData: enter"); @@ -493,9 +540,7 @@ public class CreateDcaeMicroServiceControllerTest { String fileName = ""; try { ClassLoader classLoader = getClass().getClassLoader(); - fileName = - new File(classLoader.getResource("schedulerPolicies-v1707.xmi").getFile()) - .getAbsolutePath(); + fileName = new File(classLoader.getResource("schedulerPolicies-v1707.xmi").getFile()).getAbsolutePath(); } catch (Exception e1) { logger.error("Exception Occured while loading file" + e1); } @@ -513,8 +558,7 @@ public class CreateDcaeMicroServiceControllerTest { } /** - * - * @ Get File Stream + * @ Get File Stream. * */ private class MockServletInputStream extends ServletInputStream { |