X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ONAP-REST%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Frest%2Futil%2FMSModelUtils.java;h=1f40be60af7adbc1f75d9981c51a393c844dff8c;hb=142ae9408466e78a4509490eb9ffe8bbc19f634a;hp=91e7626ea3b45e4d21fbe961a1e95b30b57b1ce1;hpb=7e28140dbf60ca27976668a372747af48600a325;p=policy%2Fengine.git diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java b/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java index 91e7626ea..1f40be60a 100644 --- a/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java +++ b/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java @@ -35,6 +35,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; + import java.util.Map.Entry; import org.apache.commons.lang.StringUtils; @@ -96,6 +97,7 @@ public class MSModelUtils { public static final String STRING="string"; public static final String INTEGER="integer"; public static final String LIST="list"; + public static final String MAP="map"; public static final String DEFAULT=".default"; public static final String MANYFALSE=":MANY-false"; public static final String MANYTRUE=":MANY-true"; @@ -762,13 +764,16 @@ public class MSModelUtils { } catch (IOException e) { logger.error(e); + }catch(ParserException e){ + logger.error(e); + return e.getMessage(); } return null; } @SuppressWarnings("unchecked") - public LinkedHashMap load(String fileName) throws IOException { + public LinkedHashMap load(String fileName) throws IOException,ParserException { File newConfiguration = new File(fileName); StringBuilder orderInfo = new StringBuilder("["); Yaml yaml = new Yaml(); @@ -777,6 +782,8 @@ public class MSModelUtils { yamlMap = (LinkedHashMap) yaml.load(is); } catch (FileNotFoundException e) { logger.error(e); + }catch(Exception e){ + throw new ParserException("Invalid TOSCA Model format. Please make sure it is a valid YAML file"); } StringBuilder sb = new StringBuilder(); @@ -1030,7 +1037,6 @@ public class MSModelUtils { logger.info(mainObject); logger.info("###############################################################################"); } - LinkedHashMap parseDataNodes(LinkedHashMap map){ LinkedHashMap dataMapForJson=new LinkedHashMap <>(); matchableValues = new HashMap <>(); @@ -1075,7 +1081,7 @@ public class MSModelUtils { attributeIndividualStringBuilder.append(requiredValue+MANYFALSE); dataMapForJson.put(uniqueDataKey, attributeIndividualStringBuilder.toString()); } - else if(typeValue != null && typeValue.equalsIgnoreCase(LIST)){ + else if(LIST.equalsIgnoreCase(typeValue) || MAP.equalsIgnoreCase(typeValue)){ logger.info("requiredValue is:"+ requiredValue); String findList= DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+".entry_schema.type"; String listValue=map.get(findList); @@ -1091,29 +1097,48 @@ public class MSModelUtils { }//Its string else{ StringBuilder stringListItems= new StringBuilder(); - stringListItems.append(uniqueDataKeySplit[1].toUpperCase()+REQUIREDVALUE+requiredValue +MANYFALSE); + if(LIST.equalsIgnoreCase(typeValue)){ + stringListItems.append(uniqueDataKeySplit[1].toUpperCase()+REQUIREDVALUE+requiredValue +MANYFALSE); + }else if( MAP.equalsIgnoreCase(typeValue)){ + stringListItems.append(uniqueDataKeySplit[1].toUpperCase()+REQUIREDVALUE+requiredValue +MANYTRUE); + } dataMapForJson.put(uniqueDataKey, stringListItems.toString()); - dataListBuffer.append(uniqueDataKeySplit[1].toUpperCase()+"=["); + boolean isConstraintsFound = false; for(int i=0;i<10;i++){ String findConstraints= DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+".entry_schema.constraints.0.valid_values."+i; logger.info("findConstraints => " + findConstraints); String constraintsValue=map.get(findConstraints); logger.info("constraintsValue => " + constraintsValue); - if(constraintsValue==null){ + + if((constraintsValue==null || constraintsValue.isEmpty()) && i==0){ //if no constraints at all ( index i as 0 can tell this ) + isConstraintsFound = false; + //if type is list but no constraints + String newValue = dataMapForJson.get(uniqueDataKey).replace("MANY-false", "MANY-true"); + newValue = newValue.replace(uniqueDataKeySplit[1].toUpperCase()+":", ""); + dataMapForJson.put(uniqueDataKey, newValue); break; - } - else{ - logger.info("constraintsValue => " + constraintsValue); - if(constraintsValue.contains("=")){ + } else{ + isConstraintsFound = true; + if(i == 0){ // only need to add one time for the same attribute + dataListBuffer.append(uniqueDataKeySplit[1].toUpperCase()+"=["); + } + + if(constraintsValue==null){ + constraintsValue = ""; + }else if (constraintsValue.contains("=")) { constraintsValue = constraintsValue.replace("=", "equal-sign"); } + dataConstraints.add(constraintsValue); dataListBuffer.append(constraintsValue+","); } } - dataListBuffer.append("]#"); - logger.info(dataListBuffer); + if(isConstraintsFound){ + dataListBuffer.append("]#"); + } } + }else{ + logger.info("entry_schema.type is not defined correctly"); } } else{ @@ -1133,7 +1158,7 @@ public class MSModelUtils { } - LinkedHashMap> parsePolicyNodes(Map map){ + LinkedHashMap> parsePolicyNodes(Map map) throws ParserException{ LinkedHashMap> mapKey= new LinkedHashMap <>(); for(String uniqueKey: uniqueKeys){ LinkedHashMap hm; @@ -1145,7 +1170,11 @@ public class MSModelUtils { hm = mapKey.get(uniqueKey); String keyStr= key.substring(key.lastIndexOf('.')+1); String valueStr= map.get(key); - if(("type").equals(keyStr)){ + if("type".equalsIgnoreCase(keyStr) && ((key.contains("entry_schema.0.type") || key.contains("entry_schema.type") && valueStr.contains("policy.data.")))){ + throw new ParserException("For using user defined object type, Please make sure no space between 'type:' and object " + valueStr ); + + } + if("type".equals(keyStr)){ if(!key.contains("entry_schema")) { hm.put(keyStr,valueStr); @@ -1158,6 +1187,9 @@ public class MSModelUtils { hm = new LinkedHashMap <>(); String keyStr= key.substring(key.lastIndexOf('.')+1); String valueStr= map.get(key); + if(key.contains(".objective.")){ + throw new ParserException("Attribute objective is a key word. Please use a different name"); + } if(("type").equals(keyStr)){ if(!key.contains("entry_schema")) {