From 06e02108525c3e5e8c85de233aef3bb332173c00 Mon Sep 17 00:00:00 2001 From: uj426b <30905205+uj426b@users.noreply.github.com> Date: Thu, 28 Mar 2019 18:40:54 -0400 Subject: CLAMP Model policy creation support Change-Id: Ia69f061c078e4f6ed4b4d2cd12f03f58514f2123 Issue-ID: POLICY-1416 Signed-off-by: uj426b --- .../CreateDcaeMicroServiceController.java | 309 +++- .../controller/CreateOptimizationController.java | 1773 ++++++++++---------- .../Windows/Dictionary/MSModelDictionaryData.html | 59 + .../policyApp/controller/DictionaryController.js | 6 +- .../dictionaryController/MSDictionaryController.js | 71 + .../dictionaryController/MSModelsDictController.js | 7 +- .../MSModelDictionaryDataController.js | 127 ++ .../webapp/app/policyApp/main/policyEditor.html | 5 +- .../Dictionary/MSModelDictionaryData.html | 22 + .../DCAEMicroServicePolicyController.js | 328 ++-- .../policyApp/policy-models/Editor/css/main.css | 107 +- .../policyApp/policy-models/policy_Dictionary.html | 5 +- 12 files changed, 1764 insertions(+), 1055 deletions(-) create mode 100644 POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSModelDictionaryData.html create mode 100644 POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSDictionaryController.js create mode 100644 POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryGridController/MSModelDictionaryDataController.js create mode 100644 POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Dictionary/MSModelDictionaryData.html (limited to 'POLICY-SDK-APP/src/main') 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 classMap = new LinkedHashMap<>(); String referenceAttributes; String attributeString; - Set allManyTrueKeys = new HashSet<>(); + Set allManyTrueKeys = null; + private Map 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 jsonStringValues) { + private JSONObject saveOriginalJsonObject(JSONObject jsonObj, Map 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 jsonStringValues) { + private JSONObject setOriginalJsonObject(JSONObject jsonObj, Map 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 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 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 keys, String keyValue) { + private JSONObject convertToArrayElement(JSONObject json, Set 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 getManyTrueProperties(String referAttributes) { + public Set getManyTrueProperties(String referAttributes) { LOGGER.info("referAttributes : " + referAttributes); Set manyTrueProperties = new HashSet<>(); @@ -1125,7 +1305,14 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } } - public static Map convert(String str, String split) { + /** + * Convert. + * + * @param str the str + * @param split the split + * @return the map + */ + public Map convert(String str, String split) { Map 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 content = (LinkedHashMap) msBody.getUiContent(); + if (content == null) { + content = (LinkedHashMap) msBody.getContent(); + } + if (content != null) { LinkedHashMap data = new LinkedHashMap<>(); - LinkedHashMap map = (LinkedHashMap) msBody.getContent(); + LinkedHashMap map = content; readRecursivlyJSONContent(map, data); policyAdapter.setRuleData(data); } @@ -1167,7 +1365,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } @SuppressWarnings({"rawtypes", "unchecked"}) - public void readRecursivlyJSONContent(LinkedHashMap map, LinkedHashMap data) { + public void readRecursivlyJSONContent(Map map, Map 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 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 getSigRules() { + return sigRules; + } + + public void setSigRules(Map 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 modelList = new ArrayList<>(); - private List dirDependencyList = new ArrayList<>(); - private LinkedHashMap classMap = new LinkedHashMap<>(); - String referenceAttributes; - String attributeString; - Set 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 attributesListRefMap = new HashMap<>(); - private Map> 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 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 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 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 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 attributeMap = new HashMap<>(); - Map 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 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 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 subAttributeMap, String enumAttribute) { - JSONObject object = new JSONObject(); - Map map; - Object returnClass = subAttributeMap.get(name); - map = (Map) returnClass; - JSONArray array; - - for( Entry 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 getAllKeys(JSONObject json) { - return getAllKeys(json, new HashSet<>()); - } - - private Set getAllKeys(JSONArray arr) { - return getAllKeys(arr, new HashSet<>()); - } - - private Set getAllKeys(JSONArray arr, Set 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 modelList = new ArrayList<>(); + private List dirDependencyList = new ArrayList<>(); + private LinkedHashMap classMap = new LinkedHashMap<>(); + String referenceAttributes; + String attributeString; + Set 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 attributesListRefMap = new HashMap<>(); + private Map> 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 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 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 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 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 attributeMap = new HashMap<>(); + Map 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 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 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 subAttributeMap, String enumAttribute) { + JSONObject object = new JSONObject(); + Map map; + Object returnClass = subAttributeMap.get(name); + map = (Map) returnClass; + JSONArray array; + + for (Entry 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 getAllKeys(JSONObject json) { + return getAllKeys(json, new HashSet<>()); + } + + private Set getAllKeys(JSONArray arr) { + return getAllKeys(arr, new HashSet<>()); + } + + private Set getAllKeys(JSONArray arr, Set 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 getAllKeys(JSONObject json, Set 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 returnList = getVersionList(servicename); - - response.setCharacterEncoding(UTF8); - response.setContentType(APPLICATIONJSON); - request.setCharacterEncoding(UTF8); - List 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 getVersionList(String name) { - OptimizationModels workingModel; - Set list = new HashSet<>(); - List 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 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 anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator iterAllOf = allOfList.iterator(); - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List matchList = allOf.getMatch(); - if (matchList != null) { - Iterator 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 data = new LinkedHashMap<>(); - LinkedHashMap map = (LinkedHashMap) 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 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 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 returnAttributeList =new LinkedHashMap<>(); - returnAttributeList.put(className, modelUtil.getAttributeString()); - optimizationAttributes.setAttribute(returnAttributeList); - - optimizationAttributes.setSubClass(modelUtil.getRetmap()); - - optimizationAttributes.setMatchingSet(modelUtil.getMatchableValues()); - - LinkedHashMap returnReferenceList =new LinkedHashMap<>(); - returnReferenceList.put(className, modelUtil.getReferenceAttributes()); - optimizationAttributes.setRefAttribute(returnReferenceList); - - if(!"".equals(modelUtil.getListConstraints())){ - LinkedHashMap enumList =new LinkedHashMap<>(); - String[] listArray=modelUtil.getListConstraints().split("#"); - for(String str:listArray){ - String[] strArr= str.split("="); - if(strArr.length>1){ + private Set getAllKeys(JSONObject json, Set 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 returnList = getVersionList(servicename); + + response.setCharacterEncoding(UTF8); + response.setContentType(APPLICATIONJSON); + request.setCharacterEncoding(UTF8); + List 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 getVersionList(String name) { + OptimizationModels workingModel; + Set list = new HashSet<>(); + List 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 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 anyOfList = target.getAnyOf(); + if (anyOfList != null) { + Iterator iterAnyOf = anyOfList.iterator(); + while (iterAnyOf.hasNext()) { + AnyOfType anyOf = iterAnyOf.next(); + // Under AnyOFType we have AllOFType + List allOfList = anyOf.getAllOf(); + if (allOfList != null) { + Iterator iterAllOf = allOfList.iterator(); + while (iterAllOf.hasNext()) { + AllOfType allOf = iterAllOf.next(); + // Under AllOFType we have Match + List matchList = allOf.getMatch(); + if (matchList != null) { + Iterator 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 data = new LinkedHashMap<>(); + LinkedHashMap map = (LinkedHashMap) 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 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 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 returnAttributeList = new LinkedHashMap<>(); + returnAttributeList.put(className, modelUtil.getAttributeString()); + optimizationAttributes.setAttribute(returnAttributeList); + + optimizationAttributes.setSubClass(modelUtil.getRetmap()); + + optimizationAttributes.setMatchingSet(modelUtil.getMatchableValues()); + + LinkedHashMap returnReferenceList = new LinkedHashMap<>(); + returnReferenceList.put(className, modelUtil.getReferenceAttributes()); + optimizationAttributes.setRefAttribute(returnReferenceList); + + if (!"".equals(modelUtil.getListConstraints())) { + LinkedHashMap 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 tempMap; - - tempMap = utils.processEpackage(workingFile, MODEL_TYPE.XMI); - - classMap.putAll(tempMap); - LOGGER.info(tempMap); - - return; - - } - - private List listModelFiles(String directoryName) { - File fileDirectory = new File(directoryName); - List 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 tempMap; + + tempMap = utils.processEpackage(workingFile, MODEL_TYPE.XMI); + + classMap.putAll(tempMap); + LOGGER.info(tempMap); + + return; + + } + + private List listModelFiles(String directoryName) { + File fileDirectory = new File(directoryName); + List 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 createList() { - List list = new ArrayList<>(); - for (Entry cMap : classMap.entrySet()){ - if (cMap.getValue().isPolicyTempalate()){ + List list = new ArrayList<>(); + for (Entry 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 getAttributesListRefMap() { - return attributesListRefMap; - } - - public Map> 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 getAttributesListRefMap() { + return attributesListRefMap; + } + + public Map> 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 @@ + + 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: '' + + '', + cellTemplate: + ' ' + + ' ', 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 @@ + @@ -201,6 +202,7 @@ + @@ -268,6 +270,7 @@
+
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 @@ + +
+
+
\ 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 @@
+
@@ -137,4 +138,4 @@ - \ No newline at end of file + -- cgit 1.2.3-korg