X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=POLICY-SDK-APP%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fcontroller%2FCreateDcaeMicroServiceController.java;h=431482d40b40ffbf7d25383ae6b46c39a9997408;hb=401b48bc573561f097960a9ca7abe6d788456f28;hp=0f55ba6ec12b481143b6a315913b8e1f3bce026f;hpb=e9e7bef3c130f7525a5ad250f365ee910bebe85a;p=policy%2Fengine.git 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 0f55ba6ec..431482d40 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 @@ -73,7 +73,6 @@ import org.json.JSONArray; import org.json.JSONObject; import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; -import org.onap.policy.controller.PolicyController; import org.onap.policy.rest.XACMLRestProperties; import org.onap.policy.rest.adapter.PolicyRestAdapter; import org.onap.policy.rest.dao.CommonClassDao; @@ -83,8 +82,8 @@ import org.onap.policy.rest.jpa.PolicyEntity; import org.onap.policy.rest.util.MSAttributeObject; import org.onap.policy.rest.util.MSModelUtils; import org.onap.policy.rest.util.MSModelUtils.MODEL_TYPE; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.JsonMessage; +import org.onap.portalsdk.core.controller.RestrictedBaseController; +import org.onap.portalsdk.core.web.support.JsonMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; @@ -141,6 +140,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { Set uniqueDataKeys= new HashSet<>(); StringBuilder dataListBuffer=new StringBuilder(); List dataConstraints= new ArrayList <>(); + Set allManyTrueKeys= new HashSet <>(); public static final String DATATYPE = "data_types.policy.data."; public static final String PROPERTIES=".properties."; @@ -158,7 +158,9 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { CreateDcaeMicroServiceController.commonClassDao = commonClassDao; } - public CreateDcaeMicroServiceController(){} + public CreateDcaeMicroServiceController(){ + // Empty Constructor + } protected PolicyRestAdapter policyAdapter = null; private int priorityCount; @@ -175,6 +177,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { //---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); @@ -188,8 +191,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } private GroupPolicyScopeList getPolicyObject(String policyScope) { - GroupPolicyScopeList groupList= (GroupPolicyScopeList) commonClassDao.getEntityItem(GroupPolicyScopeList.class, "name", policyScope); - return groupList; + return (GroupPolicyScopeList) commonClassDao.getEntityItem(GroupPolicyScopeList.class, "name", policyScope); } private PolicyRestAdapter constructJson(PolicyRestAdapter policyAdapter, String jsonContent, String dummyValue) { @@ -274,13 +276,21 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { final JsonNode value = field.getValue(); if("content".equalsIgnoreCase(key)){ String contentStr = value.toString(); - try (JsonReader jsonReader = Json.createReader(new StringReader(contentStr))) { - JsonObject jsonContent = jsonReader.readObject(); - removed = removeNull(jsonContent); - if(!jsonContent.toString().equals(removed.toString())){ - contentChanged = true; - } - } + try(JsonReader reader = Json.createReader(new StringReader(contentStr))){ + JsonObject jsonContent = reader.readObject(); + removed = removeNull(jsonContent); + if(!jsonContent.toString().equals(removed.toString())){ + contentChanged = true; + } + } + + if (value==null || value.isNull()){ + ((ObjectNode) returnNode).remove(key); + remove = true; + } + } + if (remove){ + cleanJson = returnNode.toString(); } if (value==null || value.isNull()){ ((ObjectNode) returnNode).remove(key); @@ -402,18 +412,17 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } + @SuppressWarnings("unchecked") public Map load(String fileName) throws IOException { File newConfiguration = new File(fileName); - InputStream is = null; - try { - is = new FileInputStream(newConfiguration); + Yaml yaml = new Yaml(); + Map yamlMap = null; + try(InputStream is = new FileInputStream(newConfiguration)){ + yamlMap = (Map) yaml.load(is); } catch (FileNotFoundException e) { LOGGER.error(e); } - Yaml yaml = new Yaml(); - @SuppressWarnings("unchecked") - Map yamlMap = (Map) yaml.load(is); StringBuilder sb = new StringBuilder(); Map settings = new HashMap<>(); if (yamlMap == null) { @@ -424,7 +433,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { return settings; } - public Map load(byte[] source) throws IOException { + public Map load(byte[] source) { Yaml yaml = new Yaml(); @SuppressWarnings("unchecked") Map yamlMap = (Map) yaml.load(Arrays.toString(source)); @@ -517,7 +526,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { String findType=DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+TYPE; String typeValue=map.get(findType); LOGGER.info(typeValue); - if(typeValue.equalsIgnoreCase(STRING)|| + if(typeValue != null && typeValue.equalsIgnoreCase(STRING)|| typeValue.equalsIgnoreCase(INTEGER) ) { @@ -535,7 +544,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { attributeIndividualStringBuilder.append(requiredValue+MANYFALSE); dataMapForJson.put(uniqueDataKey, attributeIndividualStringBuilder.toString()); } - else if(typeValue.equalsIgnoreCase(LIST)){ + else if(typeValue != null && typeValue.equalsIgnoreCase(LIST)){ String findList= DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+".entry_schema.type"; String listValue=map.get(findList); if(listValue!=null){ @@ -677,8 +686,8 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { for(Map.Entry> entry: mapKey.entrySet()){ String keySetString= entry.getKey(); HashMap keyValues=mapKey.get(keySetString); - if(keyValues.get("type").equalsIgnoreCase(STRING)|| - keyValues.get("type").equalsIgnoreCase(INTEGER) + if(keyValues.get("type") != null && keyValues.get("type").equalsIgnoreCase(STRING)|| + keyValues.get("type") != null && keyValues.get("type").equalsIgnoreCase(INTEGER) ){ StringBuilder attributeIndividualStringBuilder= new StringBuilder(); attributeIndividualStringBuilder.append(keySetString+"="); @@ -688,39 +697,50 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { attributeStringBuilder.append(attributeIndividualStringBuilder+","); } - else if(keyValues.get("type").equalsIgnoreCase(LIST)){ + else if(keyValues.get("type") != null && keyValues.get("type").equalsIgnoreCase(LIST)){ //List Datatype Set keys= keyValues.keySet(); Iterator itr=keys.iterator(); while(itr.hasNext()){ String key= itr.next(); - if((!("type").equals(key) ||("required").equals(key))) + if(!("type").equals(key) ||("required").equals(key)) { String value= keyValues.get(key); //The "." in the value determines if its a string or a user defined type. if (!value.contains(".")){ //This is string - constraints.add(keyValues.get(key)); + if(StringUtils.isNumeric(key) ){ //only integer key for the value of Constrains + constraints.add(keyValues.get(key)); + } }else{ - //This is userdefined string + //This is user defined string String trimValue=value.substring(value.lastIndexOf('.')+1); StringBuilder referenceIndividualStringBuilder= new StringBuilder(); referenceIndividualStringBuilder.append(keySetString+"="+trimValue+":MANY-true"); referenceStringBuilder.append(referenceIndividualStringBuilder+","); } - } + } + } + if(keyValues.get("type").equalsIgnoreCase(LIST) && + (constraints == null || constraints.isEmpty()) ) { + referenceStringBuilder.append(keySetString+"=MANY-true"+","); + } }else{ //User defined Datatype. String value=keyValues.get("type"); - String trimValue=value.substring(value.lastIndexOf('.')+1); - StringBuilder referenceIndividualStringBuilder= new StringBuilder(); - referenceIndividualStringBuilder.append(keySetString+"="+trimValue+":MANY-false"); - referenceStringBuilder.append(referenceIndividualStringBuilder+","); + if(value != null && !value.isEmpty()){ + String trimValue=value.substring(value.lastIndexOf('.')+1); + StringBuilder referenceIndividualStringBuilder= new StringBuilder(); + referenceIndividualStringBuilder.append(keySetString+"="+trimValue+":MANY-false"); + referenceStringBuilder.append(referenceIndividualStringBuilder+","); + }else{ + LOGGER.info("keyValues.get(type) is null/empty"); + } } - if(constraints!=null &&constraints.isEmpty()==false){ + if(constraints!=null && ! constraints.isEmpty()){ //List handling. listBuffer.append(keySetString.toUpperCase()+"=["); for(String str:constraints){ @@ -810,19 +830,21 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { JsonNodeFactory nodeFactory = JsonNodeFactory.instance; ObjectNode node = nodeFactory.objectNode(); String prevKey = null; - String presKey = null; - for(String key: element.keySet()){ + String presKey; + for(Entry entry: element.entrySet()){ + String key = entry.getKey(); + String value = entry.getValue(); if(key.contains(".")){ - presKey = key.substring(0,key.indexOf(".")); + presKey = key.substring(0,key.indexOf('.')); }else if(key.contains("@")){ - presKey = key.substring(0,key.indexOf("@")); + presKey = key.substring(0,key.indexOf('@')); }else{ presKey = key; } // first check if we are different from old. LOGGER.info(key+"\n"); if(jsonArray!=null && jsonArray.length()>0 && key.contains("@") && !key.contains(".") && oldValue!=null){ - if(!oldValue.equals(key.substring(0,key.indexOf("@")))){ + if(!oldValue.equals(key.substring(0,key.indexOf('@')))){ jsonResult.put(oldValue, jsonArray); jsonArray = new JSONArray(); } @@ -836,86 +858,62 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { // if(key.contains(".")){ if(nodeKey==null){ - nodeKey = key.substring(0,key.indexOf(".")); + nodeKey = key.substring(0,key.indexOf('.')); } - if(nodeKey.equals(key.substring(0,key.indexOf(".")))){ - node.put(key.substring(key.indexOf(".")+1), element.get(key)); + if(nodeKey.equals(key.substring(0,key.indexOf('.')))){ + node.put(key.substring(key.indexOf('.')+1), value); }else{ if(node.size()!=0){ if(nodeKey.contains("@")){ if(arryKey==null){ - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); + arryKey = nodeKey.substring(0,nodeKey.indexOf('@')); } if(nodeKey.endsWith("@0")){ isArray = true; jsonArray = new JSONArray(); } - if(jsonArray != null && arryKey.equals(nodeKey.substring(0,nodeKey.indexOf("@")))){ + if(jsonArray != null && arryKey.equals(nodeKey.substring(0,nodeKey.indexOf('@')))){ jsonArray.put(decodeContent(node)); } - if((key.contains("@") && !arryKey.equals(key.substring(0,nodeKey.indexOf("@")))) || !key.contains("@")){ + if((key.contains("@") && !arryKey.equals(key.substring(0,nodeKey.indexOf('@')))) || !key.contains("@")){ jsonResult.put(arryKey, jsonArray); jsonArray = new JSONArray(); } - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); + arryKey = nodeKey.substring(0,nodeKey.indexOf('@')); }else{ isArray = false; jsonResult.put(nodeKey, decodeContent(node)); } node = nodeFactory.objectNode(); } - nodeKey = key.substring(0,key.indexOf(".")); + nodeKey = key.substring(0,key.indexOf('.')); if(nodeKey.contains("@")){ - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); - } - node.put(key.substring(key.indexOf(".")+1), element.get(key)); - } - }else if(node.size()!=0){ - if(nodeKey.contains("@")){ - if(arryKey==null){ - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); - } - if(nodeKey.endsWith("@0")){ - isArray = true; - jsonArray = new JSONArray(); - } - if(jsonArray != null && arryKey.equals(nodeKey.substring(0,nodeKey.indexOf("@")))){ - jsonArray.put(decodeContent(node)); + arryKey = nodeKey.substring(0,nodeKey.indexOf('@')); } - jsonResult.put(arryKey, jsonArray); - jsonArray = new JSONArray(); - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); - }else{ - isArray = false; - jsonResult.put(nodeKey, decodeContent(node)); + node.put(key.substring(key.indexOf('.')+1), value); } - node = nodeFactory.objectNode(); - if(key.contains("@")){ - isArray = true; - if(key.endsWith("@0")|| jsonArray==null){ + }else { + if(node.size()!=0){ + if(nodeKey.contains("@")){ + if(arryKey==null){ + arryKey = nodeKey.substring(0,nodeKey.indexOf('@')); + } + if(nodeKey.endsWith("@0")){ + isArray = true; + jsonArray = new JSONArray(); + } + if(jsonArray != null && arryKey.equals(nodeKey.substring(0,nodeKey.indexOf('@')))){ + jsonArray.put(decodeContent(node)); + } + jsonResult.put(arryKey, jsonArray); jsonArray = new JSONArray(); - } - }else if(!key.contains("@")){ - isArray = false; - } - if(isArray){ - if(oldValue==null){ - oldValue = key.substring(0,key.indexOf("@")); - } - if(oldValue!=prevKey){ - oldValue = key.substring(0,key.indexOf("@")); - } - if(oldValue.equals(key.substring(0,key.indexOf("@")))){ - jsonArray.put(element.get(key)); + arryKey = nodeKey.substring(0,nodeKey.indexOf('@')); }else{ - jsonResult.put(oldValue, jsonArray); - jsonArray = new JSONArray(); + isArray = false; + jsonResult.put(nodeKey, decodeContent(node)); } - oldValue = key.substring(0,key.indexOf("@")); - }else{ - jsonResult.put(key, element.get(key)); + node = nodeFactory.objectNode(); } - }else{ if(key.contains("@")){ isArray = true; if(key.endsWith("@0")|| jsonArray==null){ @@ -926,20 +924,20 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } if(isArray){ if(oldValue==null){ - oldValue = key.substring(0,key.indexOf("@")); + oldValue = key.substring(0,key.indexOf('@')); } if(oldValue!=prevKey){ - oldValue = key.substring(0,key.indexOf("@")); + oldValue = key.substring(0,key.indexOf('@')); } - if(oldValue.equals(key.substring(0,key.indexOf("@")))){ - jsonArray.put(element.get(key)); + if(oldValue.equals(key.substring(0,key.indexOf('@')))){ + jsonArray.put(value); }else{ jsonResult.put(oldValue, jsonArray); jsonArray = new JSONArray(); } - oldValue = key.substring(0,key.indexOf("@")); + oldValue = key.substring(0,key.indexOf('@')); }else{ - jsonResult.put(key, element.get(key)); + jsonResult.put(key, value); } } } @@ -949,11 +947,11 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { jsonArray = new JSONArray(); } if(arryKey==null){ - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); + arryKey = nodeKey.substring(0,nodeKey.indexOf('@')); } jsonArray.put(decodeContent(node)); jsonResult.put(arryKey, jsonArray); - isArray = false;; + isArray = false; }else{ jsonResult.put(nodeKey, decodeContent(node)); } @@ -971,14 +969,62 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { JsonNode root = mapper.readTree(request.getReader()); String value = root.get("policyData").toString().replaceAll("^\"|\"$", ""); - String servicename = value.toString().split("-v")[0]; + String servicename = value.split("-v")[0]; String version = null; - if (value.toString().contains("-v")){ - version = value.toString().split("-v")[1]; + if (value.contains("-v")){ + version = value.split("-v")[1]; } MicroServiceModels returnModel = getAttributeObject(servicename, version); - String jsonModel = createMicroSeriveJson(returnModel); + + //Get all keys with "MANY-true" defined in their value from subAttribute + Set allkeys = null; + if(returnModel.getSub_attributes() != null && !returnModel.getSub_attributes().isEmpty()){ + JSONObject json = new JSONObject(returnModel.getSub_attributes()); + getAllKeys(json); + allkeys = allManyTrueKeys; + allManyTrueKeys = new HashSet <>(); + LOGGER.info("allkeys : " + allkeys); + } + + String allManyTrueKeys = ""; + if(allkeys != null){ + allManyTrueKeys = allkeys.toString(); + } + + String jsonModel = createMicroSeriveJson(returnModel, allkeys); + + 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 = 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 = getManyTrueProperties(returnModel.getRef_attributes()); + if(manyTrueProperties != null){ + JSONObject jsonObj = new JSONObject(jsonModel); + for (String s : manyTrueProperties) { + LOGGER.info(s); + //convert to array element for MANY-true properties + finalJsonObject = convertToArrayElement(jsonObj, s.trim()); + } + + if(finalJsonObject != null){ + LOGGER.info(finalJsonObject.toString()); + jsonModel = finalJsonObject.toString(); + } + } response.setCharacterEncoding("UTF-8"); response.setContentType("application / json"); @@ -986,14 +1032,19 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { List list = new ArrayList<>(); PrintWriter out = response.getWriter(); String responseString = mapper.writeValueAsString(returnModel); - JSONObject j = new JSONObject("{dcaeModelData: " + responseString + ",jsonValue: " + jsonModel + "}"); + JSONObject j; + if("".equals(allManyTrueKeys)){ + j = new JSONObject("{dcaeModelData: " + responseString + ",jsonValue: " + jsonModel + "}"); + }else{ + j = new JSONObject("{dcaeModelData: " + responseString + ",jsonValue: " + jsonModel + ",allManyTrueKeys: " + allManyTrueKeys+ "}"); + } list.add(j); out.write(list.toString()); return null; } @SuppressWarnings({ "unchecked", "rawtypes" }) - private String createMicroSeriveJson(MicroServiceModels returnModel) { + private String createMicroSeriveJson(MicroServiceModels returnModel, Set allkeys) { Map attributeMap = new HashMap<>(); Map refAttributeMap = new HashMap<>(); String attribute = returnModel.getAttributes(); @@ -1026,12 +1077,12 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { Map gsonObject = (Map) gson.fromJson(subAttributes, Object.class); JSONObject object = new JSONObject(); - JSONArray array = new JSONArray(); + JSONArray array; for (Entry keySet : attributeMap.entrySet()){ array = new JSONArray(); String value = keySet.getValue(); - if (keySet.getValue().split("MANY-")[1].equalsIgnoreCase("true")){ + if ("true".equalsIgnoreCase(keySet.getValue().split("MANY-")[1])){ array.put(value); object.put(keySet.getKey().trim(), array); }else { @@ -1043,14 +1094,14 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { array = new JSONArray(); String value = keySet.getValue().split(":")[0]; if (gsonObject.containsKey(value)){ - if (keySet.getValue().split("MANY-")[1].equalsIgnoreCase("true")){ + 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 (keySet.getValue().split("MANY-")[1].equalsIgnoreCase("true")){ + if ("true".equalsIgnoreCase(keySet.getValue().split("MANY-")[1])){ array.put(value.trim()); object.put(keySet.getKey().trim(), array); }else { @@ -1058,6 +1109,8 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } } } + + return object.toString(); } @@ -1065,23 +1118,23 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { @SuppressWarnings("unchecked") private JSONObject recursiveReference(String name, Map subAttributeMap, String enumAttribute) { JSONObject object = new JSONObject(); - Map map = new HashMap<>(); + Map map; Object returnClass = subAttributeMap.get(name); map = (Map) returnClass; - JSONArray array = new JSONArray(); + JSONArray array; for( Entry m:map.entrySet()){ String[] splitValue = m.getValue().split(":"); array = new JSONArray(); if (subAttributeMap.containsKey(splitValue[0])){ - if (m.getValue().split("MANY-")[1].equalsIgnoreCase("true")){ + 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 (m.getValue().split("MANY-")[1].equalsIgnoreCase("true")){ + if ("true".equalsIgnoreCase(m.getValue().split("MANY-")[1])){ array.put(splitValue[0].trim()); object.put(m.getKey().trim(), array); }else { @@ -1092,6 +1145,88 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { return object; } + + + public static JSONObject convertToArrayElement(JSONObject json, String keyValue) { + return convertToArrayElement(json, new HashSet<>(), keyValue); + } + + private static JSONObject convertToArrayElement(JSONObject json, Set keys, String keyValue) { + for (String key : json.keySet()) { + Object obj = json.get(key); + if(key.equals(keyValue.trim())){ + if(!(obj instanceof JSONArray)){ + JSONArray newJsonArray = new JSONArray(); + newJsonArray.put(obj); + json.put(key, newJsonArray); + } + LOGGER.info("key : " + key); + LOGGER.info("obj : " + obj); + LOGGER.info("json.get(key) : " + json.get(key)); + LOGGER.info("keyValue : " + keyValue); + keys.addAll(json.keySet()); + + return json; + } + + if (obj instanceof JSONObject) convertToArrayElement(json.getJSONObject(key), keyValue); + } + + return json; + } + + // call this method to get all MANY-true properties + public static Set getManyTrueProperties(String referAttributes){ + LOGGER.info("referAttributes : " + referAttributes); + Set manyTrueProperties = new HashSet<>(); + + if(referAttributes != null){ + String[] referAarray = referAttributes.split(","); + String []element; + for(int i=0; i 1 && element[1].contains("MANY-true")){ + manyTrueProperties.add(element[0]); + } + } + } + + return manyTrueProperties; + } + + //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/getModelServiceVersioneData.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) @@ -1101,7 +1236,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { JsonNode root = mapper.readTree(request.getReader()); String value = root.get("policyData").toString().replaceAll("^\"|\"$", ""); - String servicename = value.toString().split("-v")[0]; + String servicename = value.split("-v")[0]; Set returnList = getVersionList(servicename); response.setCharacterEncoding("UTF-8"); @@ -1117,7 +1252,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } private Set getVersionList(String name) { - MicroServiceModels workingModel = new MicroServiceModels(); + MicroServiceModels workingModel; Set list = new HashSet<>(); List microServiceModelsData = commonClassDao.getDataById(MicroServiceModels.class, "modelName", name); for (int i = 0; i < microServiceModelsData.size(); i++) { @@ -1217,28 +1352,28 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { AttributeDesignatorType designator = match.getAttributeDesignator(); String attributeId = designator.getAttributeId(); // First match in the target is OnapName, so set that value. - if (attributeId.equals("ONAPName")) { + if ("ONAPName".equals(attributeId)) { policyAdapter.setOnapName(value); } - if (attributeId.equals("ConfigName")){ + if ("ConfigName".equals(attributeId)){ policyAdapter.setConfigName(value); } - if (attributeId.equals("uuid")){ + if ("uuid".equals(attributeId)){ policyAdapter.setUuid(value); } - if (attributeId.equals("location")){ + if ("location".equals(attributeId)){ policyAdapter.setLocation(value); } - if (attributeId.equals("RiskType")){ + if ("RiskType".equals(attributeId)){ policyAdapter.setRiskType(value); } - if (attributeId.equals("RiskLevel")){ + if ("RiskLevel".equals(attributeId)){ policyAdapter.setRiskLevel(value); } - if (attributeId.equals("guard")){ + if ("guard".equals(attributeId)){ policyAdapter.setGuard(value); } - if (attributeId.equals("TTLDate") && !value.contains("NA")){ + if ("TTLDate".equals(attributeId) && !value.contains("NA")){ PolicyController controller = new PolicyController(); String newDate = controller.convertDate(value); policyAdapter.setTtlDate(newDate); @@ -1269,7 +1404,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { String policyScopeName = null; ObjectMapper mapper = new ObjectMapper(); try { - DCAEMicroServiceObject msBody = (DCAEMicroServiceObject) mapper.readValue(entity.getConfigurationData().getConfigBody(), DCAEMicroServiceObject.class); + DCAEMicroServiceObject msBody = mapper.readValue(entity.getConfigurationData().getConfigBody(), DCAEMicroServiceObject.class); policyScopeName = getPolicyScope(msBody.getPolicyScope()); policyAdapter.setPolicyScope(policyScopeName); @@ -1302,8 +1437,8 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { if(value instanceof LinkedHashMap){ LinkedHashMap secondObjec = new LinkedHashMap<>(); readRecursivlyJSONContent((LinkedHashMap) value, secondObjec); - for(String objKey: secondObjec.keySet()){ - data.put(key+"." +objKey, secondObjec.get(objKey)); + for( Entry entry : secondObjec.entrySet()){ + data.put(key+"." + entry.getKey(), entry.getValue()); } }else if(value instanceof ArrayList){ ArrayList jsonArrayVal = (ArrayList)value; @@ -1312,8 +1447,8 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { if(arrayvalue instanceof LinkedHashMap){ LinkedHashMap newData = new LinkedHashMap<>(); readRecursivlyJSONContent((LinkedHashMap) arrayvalue, newData); - for(String objKey: newData.keySet()){ - data.put(key+"@"+i+"." +objKey, newData.get(objKey)); + for(Entry entry: newData.entrySet()){ + data.put(key+"@"+i+"." +entry.getKey(), entry.getValue()); } }else if(arrayvalue instanceof ArrayList){ ArrayList jsonArrayVal1 = (ArrayList)value; @@ -1343,7 +1478,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { //Convert the map values and set into JSON body public Map convertMap(Map attributesMap, Map attributesRefMap) { Map attribute = new HashMap<>(); - String temp = null; + StringBuilder temp; String key; String value; for (Entry entry : attributesMap.entrySet()) { @@ -1353,12 +1488,12 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } for (Entry entryRef : attributesRefMap.entrySet()) { key = entryRef.getKey(); - value = entryRef.getValue().toString(); + value = entryRef.getValue(); attribute.put(key, value); } for (Entry entryList : attributesListRefMap.entrySet()) { key = entryList.getKey(); - value = entryList.getValue().toString(); + value = entryList.getValue(); attribute.put(key, value); } for (Entry> arrayList : arrayTextList.entrySet()){ @@ -1366,9 +1501,10 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { temp = null; for (Object textList : arrayList.getValue()){ if (temp == null){ - temp = "[" + textList; + temp = new StringBuilder(); + temp.append("[" + textList); }else{ - temp = temp + "," + textList; + temp.append("," + textList); } } attribute.put(key, temp+ "]"); @@ -1379,9 +1515,18 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { @RequestMapping(value={"/ms_dictionary/set_MSModelData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) public void SetMSModelData(HttpServletRequest request, HttpServletResponse response) throws IOException, FileUploadException{ + modelList = new ArrayList<>(); + dirDependencyList = new ArrayList<>(); + classMap = new HashMap<>(); + retmap = new HashMap<>(); + uniqueKeys= new HashSet<>(); + uniqueDataKeys= new HashSet<>(); + dataListBuffer=new StringBuilder(); + dataConstraints= new ArrayList <>(); 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 MicroServiceModels(); @@ -1391,40 +1536,55 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { IOUtils.copy(item.getInputStream(), outputStream); outputStream.close(); this.newFile = file.toString(); - this.newModel.setModelName(this.newFile.toString().split("-v")[0]); + this.newModel.setModelName(this.newFile.split("-v")[0]); - if (this.newFile.toString().contains("-v")){ + if (this.newFile.contains("-v")){ if (item.getName().endsWith(".zip")){ - this.newModel.setVersion(this.newFile.toString().split("-v")[1].replace(".zip", "")); + this.newModel.setVersion(this.newFile.split("-v")[1].replace(".zip", "")); zip = true; }else if(item.getName().endsWith(".yml")){ - this.newModel.setVersion(this.newFile.toString().split("-v")[1].replace(".yml", "")); + this.newModel.setVersion(this.newFile.split("-v")[1].replace(".yml", "")); yml = true; } else { - this.newModel.setVersion(this.newFile.toString().split("-v")[1].replace(".xmi", "")); + this.newModel.setVersion(this.newFile.split("-v")[1].replace(".xmi", "")); } - } - + } }catch(Exception e){ - LOGGER.error("Upload error : " + e); + LOGGER.error("Upload error : ", e); + errorMsg = "Upload error:" + e.getMessage(); } } } - List fileList = new ArrayList<>();; + + if(!errorMsg.isEmpty()){ + + PrintWriter out = response.getWriter(); + + response.setCharacterEncoding("UTF-8"); + response.setContentType("application / json"); + request.setCharacterEncoding("UTF-8"); + + JSONObject j = new JSONObject(); + j.put("errorMsg", errorMsg); + out.write(j.toString()); + return; + } + + List fileList = new ArrayList<>(); this.directory = "model"; if (zip){ extractFolder(this.newFile); fileList = listModelFiles(this.directory); - }else if (yml==true){ + }else if (yml){ parseTosca(this.newFile); }else { File file = new File(this.newFile); fileList.add(file); } - String modelType= ""; - if(yml==false){ + String modelType; + if(! yml){ modelType="xmi"; //Process Main Model file first classMap = new HashMap<>(); @@ -1452,7 +1612,6 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { msAttributes.setSubClass(this.retmap); HashMap returnReferenceList =new HashMap<>(); - //String[] referenceArray=this.referenceAttributes.split("="); returnReferenceList.put(className, this.referenceAttributes); msAttributes.setRefAttribute(returnReferenceList); @@ -1495,9 +1654,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { int BUFFER = 2048; File file = new File(zipFile); - ZipFile zip = null; - try { - zip = new ZipFile(file); + 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); checkZipDirectory(this.directory); @@ -1517,15 +1674,20 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { if (!entry.isDirectory()){ BufferedInputStream is = new BufferedInputStream(zip.getInputStream(entry)); int currentByte; - byte data[] = new byte[BUFFER]; - FileOutputStream fos = new FileOutputStream(destFile); - BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER); - while ((currentByte = is.read(data, 0, BUFFER)) != -1) { - dest.write(data, 0, 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; } - dest.flush(); - dest.close(); - is.close(); } if (currentEntry.endsWith(".zip")){ @@ -1534,20 +1696,13 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } } catch (IOException e) { LOGGER.error("Failed to unzip model file " + zipFile, e); - }finally{ - try { - if(zip != null) - zip.close(); - } catch (IOException e) { - LOGGER.error("Exception Occured While closing zipfile " + e); - } } } private void retreiveDependency(String workingFile, Boolean modelClass) { MSModelUtils utils = new MSModelUtils(PolicyController.getMsOnapName(), PolicyController.getMsPolicyName()); - HashMap tempMap = new HashMap<>(); + Map tempMap; tempMap = utils.processEpackage(workingFile, MODEL_TYPE.XMI);