X-Git-Url: https://gerrit.onap.org/r/gitweb?p=policy%2Fengine.git;a=blobdiff_plain;f=ONAP-REST%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Frest%2Futil%2FMSModelUtils.java;h=29fb635b2700469358301c24e5913389e556b181;hp=50628d7d510a16c1f4f94ed4599f56e4161fc195;hb=c2ca6ea5cb44103903e1409e8dd6db80167e61e8;hpb=1df87df1af0d215b9ff908dd15089393b9be270b 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 50628d7d5..29fb635b2 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 @@ -2,15 +2,16 @@ * ============LICENSE_START======================================================= * ONAP-REST * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd. + * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * 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. @@ -23,11 +24,39 @@ package org.onap.policy.rest.util; import com.att.research.xacml.util.XACMLProperties; import com.google.gson.Gson; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.eclipse.emf.common.util.*; -import org.eclipse.emf.ecore.*; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.EMap; +import org.eclipse.emf.common.util.Enumerator; +import org.eclipse.emf.common.util.TreeIterator; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EAnnotation; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EClassifier; +import org.eclipse.emf.ecore.EEnum; +import org.eclipse.emf.ecore.EEnumLiteral; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.impl.EAttributeImpl; import org.eclipse.emf.ecore.impl.EEnumImpl; import org.eclipse.emf.ecore.resource.Resource; @@ -35,19 +64,17 @@ import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.json.JSONObject; -import org.onap.policy.rest.XACMLRestProperties; +import org.onap.policy.rest.XacmlRestProperties; +import org.onap.policy.rest.dao.CommonClassDao; +import org.onap.policy.rest.jpa.DictionaryData; import org.yaml.snakeyaml.Yaml; -import java.io.*; -import java.util.*; -import java.util.Map.Entry; - public class MSModelUtils { - private static final Log logger = LogFactory.getLog(MSModelUtils.class); + private static final Log logger = LogFactory.getLog(MSModelUtils.class); - private HashMap classMap = new HashMap<>(); + private HashMap classMap = new HashMap<>(); private HashMap enumMap = new HashMap<>(); private HashMap matchingClass = new HashMap<>(); private String configuration = "configuration"; @@ -56,45 +83,67 @@ public class MSModelUtils { private String policy = ""; private String eProxyURI = "eProxyURI:"; private List orderedElements = new ArrayList<>(); - private String dataOrderInfo = null; - private Set uniqueDataKeys= new HashSet<>(); - private Set uniqueKeys= new HashSet<>(); + private String dataOrderInfo = ""; + private Set uniqueDataKeys = new HashSet<>(); + private Set uniqueKeys = new HashSet<>(); private String listConstraints = null; private String referenceAttributes; private LinkedHashMap retmap = new LinkedHashMap<>(); - private Map matchableValues; - private static final String PROPERTIES=".properties."; - public static final String DATATYPE = "data_types.policy.data."; - public static final String TYPE=".type"; - public static final String REQUIRED=".required"; - private static final String MATCHABLE=".matchable"; - private static final String STRING="string"; - private static final String INTEGER="integer"; - private static final String LIST="list"; - public static final String MAP="map"; - private static final String DEFAULT=".default"; - private static final String MANYFALSE=":MANY-false"; - private static final String MANYTRUE=":MANY-true"; - private static final String DEFAULTVALUE=":defaultValue-"; - private static final String REQUIREDVALUE=":required-"; - private static final String MATCHABLEKEY="matchable"; - private static final String REQUIREDFALSE=":required-false"; - private static final String REQUIREDTRUE=":required-true"; - private static final String MATCHINGTRUE="matching-true"; - - private StringBuilder dataListBuffer=new StringBuilder(); - private List dataConstraints= new ArrayList <>(); + private Map matchableValues; + private static final String PROPERTIES = ".properties."; + private static final String DATATYPE = "data_types.policy.data."; + private static final String TYPE = ".type"; + private static final String REQUIRED = ".required"; + private static final String DICTIONARYNAME = "dictionaryName"; + private static final String DICTIONARY = "dictionary:"; + private static final String MATCHABLE = ".matchable"; + public static final String STRING = "string"; + public static final String INTEGER = "integer"; + private static final String BOOLEAN = "boolean"; + public static final String LIST = "list"; + public static final String MAP = "map"; + private static final String DEFAULT = ".default"; + private static final String MANYFALSE = ":MANY-false"; + private static final String DESCRIPTION = ".description"; + + private static final String MANYTRUE = ":MANY-true"; + private static final String DEFAULTVALUE = ":defaultValue-"; + private static final String REQUIREDVALUE = ":required-"; + private static final String MATCHABLEKEY = "matchable"; + private static final String REQUIREDFALSE = ":required-false"; + private static final String REQUIREDTRUE = ":required-true"; + private static final String MATCHINGTRUE = "matching-true"; + private static final String DESCRIPTION_KEY = "description"; + private static final String DESCRIPTION_TOKEN = ":description-"; + private static final String PROPERTIES_KEY = "properties"; + private static final String DATA_TYPE = "data_types"; + private static final String ERROR = "error"; + private static final String NODE_TYPE = "node_types"; + private static final String TOSCA_DEFINITION_VERSION = "tosca_definitions_version"; + private static final String TOSCA_SIMPLE_YAML_1_0_0 = "tosca_simple_yaml_1_0_0"; + private static final String JSON_MODEL = "JSON_MODEL"; + private StringBuilder dataListBuffer = new StringBuilder(); + private List dataConstraints = new ArrayList<>(); private String attributeString = null; + private boolean isDuplicatedAttributes = false; + private String jsonRuleFormation = null; + + private static CommonClassDao commonClassDao; + + public MSModelUtils() { + // Default Constructor + } - public MSModelUtils(){ + public MSModelUtils(CommonClassDao commonClassDao) { + MSModelUtils.commonClassDao = commonClassDao; } - public MSModelUtils(String onap, String policy){ + public MSModelUtils(String onap, String policy) { this.onap = onap; this.policy = policy; } - private enum ANNOTATION_TYPE{ + private enum ANNOTATION_TYPE { MATCHING, VALIDATION, DICTIONARY }; @@ -102,22 +151,25 @@ public class MSModelUtils { XMI }; + public enum SearchType { + TOSCA_DEFINITION_VERSION, TOSCA_SIMPLE_YAML_1_0_0, NODE_TYPE, DATA_TYPE, JSON_MODEL + } - public Map processEpackage(String file, MODEL_TYPE model){ - if (model == MODEL_TYPE.XMI ){ + public Map processEpackage(String file, MODEL_TYPE model) { + if (model == MODEL_TYPE.XMI) { processXMIEpackage(file); } return classMap; } - private void processXMIEpackage(String xmiFile){ + private void processXMIEpackage(String xmiFile) { EPackage root = getEpackage(xmiFile); TreeIterator treeItr = root.eAllContents(); String className; String returnValue; - // Pulling out dependency from file + // Pulling out dependency from file while (treeItr.hasNext()) { EObject obj = treeItr.next(); if (obj instanceof EClassifier) { @@ -126,54 +178,54 @@ public class MSModelUtils { if (obj instanceof EEnum) { enumMap.putAll(getEEnum(obj)); - }else if (obj instanceof EClass) { + } else if (obj instanceof EClass) { String temp = getDependencyList(eClassifier).toString(); - returnValue = StringUtils.replaceEach(temp, new String[]{"[", "]"}, new String[]{"", ""}); + returnValue = StringUtils.replaceEach(temp, new String[] {"[", "]"}, new String[] {"", ""}); getAttributes(className, returnValue, root); } } } - if (!enumMap.isEmpty()){ + if (!enumMap.isEmpty()) { addEnumClassMap(); } - if (!matchingClass.isEmpty()){ - CheckForMatchingClass(); + if (!matchingClass.isEmpty()) { + checkForMatchingClass(); } } - private void CheckForMatchingClass() { + private void checkForMatchingClass() { HashMap tempAttribute = new HashMap<>(); - for (Entry set : matchingClass.entrySet()){ + for (Entry set : matchingClass.entrySet()) { String key = set.getKey(); - if (classMap.containsKey(key)){ + if (classMap.containsKey(key)) { Map listAttributes = classMap.get(key).getAttribute(); Map listRef = classMap.get(key).getRefAttribute(); - for ( Entry eSet : listAttributes.entrySet()){ + for (Entry eSet : listAttributes.entrySet()) { String key2 = eSet.getKey(); tempAttribute.put(key2, MATCHINGTRUE); } - for ( Entry eSet : listRef.entrySet()){ + for (Entry eSet : listRef.entrySet()) { String key3 = eSet.getKey(); tempAttribute.put(key3, MATCHINGTRUE); } } - UpdateMatching(tempAttribute, key); + updateMatching(tempAttribute, key); } } - private void UpdateMatching(HashMap tempAttribute, String key) { + private void updateMatching(HashMap tempAttribute, String key) { Map newClass = classMap; - for (Entry updateClass : newClass.entrySet()){ + for (Entry updateClass : newClass.entrySet()) { Map valueMap = updateClass.getValue().getMatchingSet(); String keymap = updateClass.getKey(); - if (valueMap.containsKey(key)){ + if (valueMap.containsKey(key)) { Map modifyMap = classMap.get(keymap).getMatchingSet(); modifyMap.remove(key); modifyMap.putAll(tempAttribute); @@ -184,7 +236,7 @@ public class MSModelUtils { } private void addEnumClassMap() { - for (Entry value :classMap.entrySet()){ + for (Entry value : classMap.entrySet()) { value.getValue().setEnumType(enumMap); } } @@ -207,11 +259,10 @@ public class MSModelUtils { private HashMap getEEnum(EObject obj) { List valueList = new ArrayList<>(); HashMap returnMap = new HashMap<>(); - EEnum eenum = (EEnum)obj; + EEnum eenum = (EEnum) obj; String name = eenum.getName(); - for (EEnumLiteral eEnumLiteral : eenum.getELiterals()) - { + for (EEnumLiteral eEnumLiteral : eenum.getELiterals()) { Enumerator instance = eEnumLiteral.getInstance(); String value = instance.getLiteral(); valueList.add(value); @@ -222,7 +273,7 @@ public class MSModelUtils { public void getAttributes(String className, String dependency, EPackage root) { List dpendList = new ArrayList<>(); - if (dependency!=null){ + if (dependency != null) { dpendList = new ArrayList<>(Arrays.asList(dependency.split(","))); } MSAttributeObject msAttributeObject = new MSAttributeObject(); @@ -248,15 +299,15 @@ public class MSModelUtils { boolean requiredMatchAttribute = false; HashMap annotationSet = new HashMap<>(); - // Pulling out dependency from file + // Pulling out dependency from file while (treeItr.hasNext()) { EObject obj = treeItr.next(); if (obj instanceof EClassifier) { - requiredAttribute = isRequiredAttribute(obj, className ); - requiredMatchAttribute = isRequiredAttribute(obj, extendClass ); + requiredAttribute = isRequiredAttribute(obj, className); + requiredMatchAttribute = isRequiredAttribute(obj, extendClass); } - if (requiredAttribute){ + if (requiredAttribute) { if (obj instanceof EStructuralFeature) { checkAnnotation(annotationSet, (EStructuralFeature) obj); } @@ -272,13 +323,13 @@ public class MSModelUtils { if (eStrucClassifier.getEAnnotations().isEmpty()) { return; } - String matching = annotationValue(eStrucClassifier, ANNOTATION_TYPE.MATCHING, policy); - if (matching!=null){ - if (obj instanceof EReference){ + String matching = annotationValue(eStrucClassifier, ANNOTATION_TYPE.MATCHING, policy); + if (matching != null) { + if (obj instanceof EReference) { EClass refType = ((EReference) obj).getEReferenceType(); annotationSet.put(refType.getName(), matching); matchingClass.put(refType.getName(), matching); - }else{ + } else { annotationSet.put(eStrucClassifier.getName(), matching); } } @@ -290,37 +341,37 @@ public class MSModelUtils { if (eStrucClassifier.getEAnnotations().isEmpty()) { return; } - String matching = annotationValue(eStrucClassifier, ANNOTATION_TYPE.MATCHING, policy); - if (matching!=null){ + String matching = annotationValue(eStrucClassifier, ANNOTATION_TYPE.MATCHING, policy); + if (matching != null) { annotationSet.put(eStrucClassifier.getName(), matching); } - String range = annotationValue(eStrucClassifier, ANNOTATION_TYPE.VALIDATION, policy); - if (range!=null){ + String range = annotationValue(eStrucClassifier, ANNOTATION_TYPE.VALIDATION, policy); + if (range != null) { annotationSet.put(eStrucClassifier.getName(), range); } String annotationDict = annotationValue(eStrucClassifier, ANNOTATION_TYPE.DICTIONARY, policy); - if (annotationDict!=null){ + if (annotationDict != null) { annotationSet.put(eStrucClassifier.getName(), annotationDict); } } - private Map getSubAttributeList(EPackage root, String className , String superClass) { + private Map getSubAttributeList(EPackage root, String className, String superClass) { TreeIterator treeItr = root.eAllContents(); boolean requiredAttribute = false; Map subAttribute = new HashMap<>(); int rollingCount = 0; int processClass = 0; - // Pulling out dependency from file + // Pulling out dependency from file while (treeItr.hasNext() && rollingCount < 2) { EObject obj = treeItr.next(); if (obj instanceof EClassifier) { - requiredAttribute = isRequiredAttribute(obj, className ) || isRequiredAttribute(obj, superClass ); - if (requiredAttribute){ + requiredAttribute = isRequiredAttribute(obj, className) || isRequiredAttribute(obj, superClass); + if (requiredAttribute) { processClass++; } - rollingCount = rollingCount+processClass; + rollingCount = rollingCount + processClass; } if (requiredAttribute && (obj instanceof EStructuralFeature)) { @@ -333,15 +384,16 @@ public class MSModelUtils { return subAttribute; } - private void updateSubAttributes(Map subAttribute, EObject obj, EStructuralFeature eStrucClassifier) { + private void updateSubAttributes(Map subAttribute, EObject obj, + EStructuralFeature eStrucClassifier) { if (!(obj instanceof EReference)) { return; } if (annotationTest(eStrucClassifier, configuration, onap)) { EClass refType = ((EReference) obj).getEReferenceType(); - if(!refType.toString().contains(eProxyURI)){ + if (!refType.toString().contains(eProxyURI)) { String required = REQUIREDFALSE; - if(eStrucClassifier.getLowerBound() == 1){ + if (eStrucClassifier.getLowerBound() == 1) { required = REQUIREDTRUE; } subAttribute.put(eStrucClassifier.getName(), refType.getName() + required); @@ -350,32 +402,27 @@ public class MSModelUtils { } public String checkDefultValue(String defultValue) { - if (defultValue!=null){ - return DEFAULTVALUE+ defultValue; + if (defultValue != null) { + return DEFAULTVALUE + defultValue; } return ":defaultValue-NA"; } public String checkRequiredPattern(int upper, int lower) { - - String pattern = XACMLProperties.getProperty(XACMLRestProperties.PROP_XCORE_REQUIRED_PATTERN); - - if (pattern!=null){ - if (upper == Integer.parseInt(pattern.split(",")[1]) && lower==Integer.parseInt(pattern.split(",")[0])){ - return REQUIREDTRUE; - } + String pattern = XACMLProperties.getProperty(XacmlRestProperties.PROP_XCORE_REQUIRED_PATTERN); + if (pattern != null && upper == Integer.parseInt(pattern.split(",")[1]) + && lower == Integer.parseInt(pattern.split(",")[0])) { + return REQUIREDTRUE; } - return REQUIREDFALSE; } - public JSONObject buildJavaObject(Map map){ - - return new JSONObject(map); + public JSONObject buildJavaObject(Map map) { + return new JSONObject(map); } - public Map getRefAttributeList(EPackage root, String className, String superClass){ + public Map getRefAttributeList(EPackage root, String className, String superClass) { TreeIterator treeItr = root.eAllContents(); boolean requiredAttribute = false; @@ -383,59 +430,63 @@ public class MSModelUtils { int rollingCount = 0; int processClass = 0; boolean annotation; - // Pulling out dependency from file + // Pulling out dependency from file while (treeItr.hasNext()) { EObject obj = treeItr.next(); if (obj instanceof EClassifier) { - requiredAttribute = isRequiredAttribute(obj, className ) || isRequiredAttribute(obj, superClass ); - if (requiredAttribute){ + requiredAttribute = isRequiredAttribute(obj, className) || isRequiredAttribute(obj, superClass); + if (requiredAttribute) { processClass++; } - rollingCount = rollingCount+processClass; + rollingCount = rollingCount + processClass; } if (requiredAttribute && (obj instanceof EStructuralFeature)) { - EStructuralFeature eStrucClassifier = (EStructuralFeature) obj; - if (!eStrucClassifier.getEAnnotations().isEmpty()) { - annotation = annotationTest(eStrucClassifier, configuration, onap); - if ( annotation && obj instanceof EReference) { - updRefAttributes(refAttribute, (EStructuralFeature) obj, eStrucClassifier); - } else if (annotation && obj instanceof EAttributeImpl) { - updEnumTypeRefAttrib(refAttribute, (EStructuralFeature) obj, eStrucClassifier); - } + EStructuralFeature eStrucClassifier = (EStructuralFeature) obj; + if (!eStrucClassifier.getEAnnotations().isEmpty()) { + annotation = annotationTest(eStrucClassifier, configuration, onap); + if (annotation && obj instanceof EReference) { + updRefAttributes(refAttribute, (EStructuralFeature) obj, eStrucClassifier); + } else if (annotation && obj instanceof EAttributeImpl) { + updEnumTypeRefAttrib(refAttribute, (EStructuralFeature) obj, eStrucClassifier); } + } } } return refAttribute; } - private void updEnumTypeRefAttrib(HashMap refAttribute, EStructuralFeature obj, EStructuralFeature eStrucClassifier) { + private void updEnumTypeRefAttrib(HashMap refAttribute, EStructuralFeature obj, + EStructuralFeature eStrucClassifier) { EClassifier refType = ((EAttributeImpl) obj).getEType(); - if (!(refType instanceof EEnumImpl)){ + if (!(refType instanceof EEnumImpl)) { return; } String array = arrayCheck(obj.getUpperBound()); String required = REQUIREDFALSE; - if(obj.getLowerBound() == 1){ + if (obj.getLowerBound() == 1) { required = REQUIREDTRUE; } refAttribute.put(eStrucClassifier.getName(), refType.getName() + array + required); } - private void updRefAttributes(HashMap refAttribute, EStructuralFeature obj, EStructuralFeature eStrucClassifier) { + private void updRefAttributes(HashMap refAttribute, EStructuralFeature obj, + EStructuralFeature eStrucClassifier) { EClass refType = ((EReference) obj).getEReferenceType(); - if(refType.toString().contains(eProxyURI)){ + if (refType.toString().contains(eProxyURI)) { String one = refType.toString().split(eProxyURI)[1]; - String refValue = StringUtils.replaceEach(one.split("#")[1], new String[]{"//", ")"}, new String[]{"", ""}); + String refValue = + StringUtils.replaceEach(one.split("#")[1], new String[] {"//", ")"}, new String[] {"", ""}); refAttribute.put(eStrucClassifier.getName(), refValue); } else { String required = REQUIREDFALSE; - if(obj.getLowerBound() == 1){ + if (obj.getLowerBound() == 1) { required = REQUIREDTRUE; } - refAttribute.put(eStrucClassifier.getName(), refType.getName() + arrayCheck(obj.getUpperBound()) + required); + refAttribute.put(eStrucClassifier.getName(), + refType.getName() + arrayCheck(obj.getUpperBound()) + required); } } @@ -447,17 +498,17 @@ public class MSModelUtils { EList value = eStrucClassifier.getEAnnotations(); - for (int i = 0; i < value.size(); i++){ + for (int i = 0; i < value.size(); i++) { annotationType = value.get(i).getSource(); eAnnotation = eStrucClassifier.getEAnnotations().get(i); onapType = eAnnotation.getDetails().get(0).getValue(); onapValue = eAnnotation.getDetails().get(0).getKey(); - if (annotationType.contains(type) && onapType.contains(annotation)){ + if (annotationType.contains(type) && onapType.contains(annotation)) { return true; } - if (annotationType.contains(type) && onapValue.contains(annotation)){ + if (annotationType.contains(type) && onapValue.contains(annotation)) { return true; } } @@ -474,13 +525,13 @@ public class MSModelUtils { EList value = eStrucClassifier.getEAnnotations(); - for (int i = 0; i < value.size(); i++){ + for (int i = 0; i < value.size(); i++) { annotationType = value.get(i).getSource(); eAnnotation = eStrucClassifier.getEAnnotations().get(i); onapType = eAnnotation.getDetails().get(0).getKey(); - if (annotationType.contains(type) && onapType.compareToIgnoreCase(annotation.toString())==0){ + if (annotationType.contains(type) && onapType.compareToIgnoreCase(annotation.toString()) == 0) { onapValue = eAnnotation.getDetails().get(0).getValue(); - if (annotation == ANNOTATION_TYPE.VALIDATION){ + if (annotation == ANNOTATION_TYPE.VALIDATION) { return onapValue; } else { return onapType + "-" + onapValue; @@ -490,21 +541,22 @@ public class MSModelUtils { return onapValue; } - public boolean isRequiredAttribute(EObject obj, String className){ + + public boolean isRequiredAttribute(EObject obj, String className) { EClassifier eClassifier = (EClassifier) obj; String workingClass = eClassifier.getName().trim(); - if (workingClass.equalsIgnoreCase(className)){ - return true; + if (workingClass.equalsIgnoreCase(className)) { + return true; } return false; } - private boolean isPolicyTemplate(EPackage root, String className){ + private boolean isPolicyTemplate(EPackage root, String className) { boolean result = false; - for (EClassifier classifier : root.getEClassifiers()){ + for (EClassifier classifier : root.getEClassifiers()) { if (classifier instanceof EClass) { - EClass eClass = (EClass)classifier; + EClass eClass = (EClass) classifier; if (eClass.getName().contentEquals(className)) { result = checkPolicyTemplate(eClass); break; @@ -516,9 +568,9 @@ public class MSModelUtils { private boolean checkPolicyTemplate(EClass eClass) { EList value = eClass.getEAnnotations(); - for (EAnnotation workingValue : value){ + for (EAnnotation workingValue : value) { EMap keyMap = workingValue.getDetails(); - if (keyMap.containsKey("policyTemplate")){ + if (keyMap.containsKey("policyTemplate")) { return true; } } @@ -527,7 +579,7 @@ public class MSModelUtils { private String getSubTypes(EPackage root, String className) { String returnSubTypes = null; - for (EClassifier classifier : root.getEClassifiers()){ + for (EClassifier classifier : root.getEClassifiers()) { if (classifier instanceof EClass) { returnSubTypes = findSubTypes(className, returnSubTypes, (EClass) classifier); } @@ -538,26 +590,25 @@ public class MSModelUtils { private String findSubTypes(String className, String returnSubTypes, EClass classifier) { EClass eClass = classifier; - for (EClass eSuperType : eClass.getEAllSuperTypes()) - { - if (eClass.getName().contentEquals(className)){ + for (EClass eSuperType : eClass.getEAllSuperTypes()) { + if (eClass.getName().contentEquals(className)) { returnSubTypes = eSuperType.getName(); } } return returnSubTypes; } - public Map getAttributeList(EPackage root, String className, String superClass){ + public Map getAttributeList(EPackage root, String className, String superClass) { TreeIterator treeItr = root.eAllContents(); boolean requiredAttribute = false; HashMap refAttribute = new HashMap<>(); - // Pulling out dependency from file + // Pulling out dependency from file while (treeItr.hasNext()) { EObject obj = treeItr.next(); if (obj instanceof EClassifier) { - requiredAttribute = isRequiredAttribute(obj, className ) || isRequiredAttribute(obj, superClass ); + requiredAttribute = isRequiredAttribute(obj, className) || isRequiredAttribute(obj, superClass); } if (requiredAttribute && (obj instanceof EStructuralFeature)) { @@ -571,7 +622,8 @@ public class MSModelUtils { } - private void checkStrucClassifier(HashMap refAttribute, EObject obj, EStructuralFeature eStrucClassifier) { + private void checkStrucClassifier(HashMap refAttribute, EObject obj, + EStructuralFeature eStrucClassifier) { EClassifier refType = ((EStructuralFeature) obj).getEType(); boolean annotation = annotationTest(eStrucClassifier, configuration, onap); boolean dictionaryTest = annotationTest(eStrucClassifier, dictionary, policy); @@ -580,12 +632,13 @@ public class MSModelUtils { } } - private void updEReferenceAttrib(HashMap refAttribute, boolean dictionaryTest, EStructuralFeature obj, EStructuralFeature eStrucClassifier) { + private void updEReferenceAttrib(HashMap refAttribute, boolean dictionaryTest, + EStructuralFeature obj, EStructuralFeature eStrucClassifier) { String eType; String name = eStrucClassifier.getName(); - if (dictionaryTest){ + if (dictionaryTest) { eType = annotationValue(eStrucClassifier, ANNOTATION_TYPE.DICTIONARY, policy); - }else { + } else { eType = eStrucClassifier.getEType().getInstanceClassName(); } String defaultValue = checkDefultValue(obj.getDefaultValueLiteral()); @@ -596,23 +649,24 @@ public class MSModelUtils { public String arrayCheck(int upperBound) { - if (upperBound == -1){ + if (upperBound == -1) { return MANYTRUE; } return MANYFALSE; } - public List getDependencyList(EClassifier eClassifier){ + public List getDependencyList(EClassifier eClassifier) { List returnValue = new ArrayList<>();; EList somelist = ((EClass) eClassifier).getEAllSuperTypes(); - if (somelist.isEmpty()){ + if (somelist.isEmpty()) { return returnValue; } - for(EClass depend: somelist){ - if (depend.toString().contains(eProxyURI)){ + for (EClass depend : somelist) { + if (depend.toString().contains(eProxyURI)) { String one = depend.toString().split(eProxyURI)[1]; - String value = StringUtils.replaceEach(one.split("#")[1], new String[]{"//", ")"}, new String[]{"", ""}); + String value = + StringUtils.replaceEach(one.split("#")[1], new String[] {"//", ")"}, new String[] {"", ""}); returnValue.add(value); } } @@ -620,21 +674,22 @@ public class MSModelUtils { return returnValue; } - public Map buildSubList(Map subClassAttributes, Map classMap, String className){ + public Map buildSubList(Map subClassAttributes, + Map classMap, String className) { Map missingValues = new HashMap<>(); Map workingMap; boolean enumType; - for ( Entry map : classMap.get(className).getRefAttribute().entrySet()){ + for (Entry map : classMap.get(className).getRefAttribute().entrySet()) { String value = map.getValue().split(":")[0]; - if (value!=null){ + if (value != null) { classMap.get(className).getEnumType(); enumType = classMap.get(className).getEnumType().containsKey(value); - if (!enumType){ - workingMap = classMap.get(value).getRefAttribute(); - for ( Entry subMab : workingMap.entrySet()){ + if (!enumType) { + workingMap = classMap.get(value).getRefAttribute(); + for (Entry subMab : workingMap.entrySet()) { String value2 = subMab.getValue().split(":")[0]; - if (!subClassAttributes.containsValue(value2)){ + if (!subClassAttributes.containsValue(value2)) { missingValues.put(subMab.getKey(), subMab.getValue()); } } @@ -646,15 +701,16 @@ public class MSModelUtils { return missingValues; } - public Map> recursiveReference(Map classMap, String className){ + public Map> recursiveReference(Map classMap, + String className) { Map> returnObject = new HashMap<>(); Map returnClass = getRefclass(classMap, className); returnObject.put(className, returnClass); - for (Entry reAttribute :returnClass.entrySet()){ - if (reAttribute.getValue().split(":")[1].contains("MANY") && - classMap.get(reAttribute.getValue().split(":")[0]) != null){ - returnObject.putAll(recursiveReference(classMap, reAttribute.getValue().split(":")[0])); + for (Entry reAttribute : returnClass.entrySet()) { + if (reAttribute.getValue().split(":")[1].contains("MANY") + && classMap.get(reAttribute.getValue().split(":")[0]) != null) { + returnObject.putAll(recursiveReference(classMap, reAttribute.getValue().split(":")[0])); } } @@ -666,13 +722,14 @@ public class MSModelUtils { public String createJson(Map classMap, String className) { boolean enumType; Map> myObject = new HashMap<>(); - for ( Entry map : classMap.get(className).getRefAttribute().entrySet()){ + for (Entry map : classMap.get(className).getRefAttribute().entrySet()) { String value = map.getValue().split(":")[0]; - if (value!=null){ + if (value != null) { enumType = classMap.get(className).getEnumType().containsKey(value); - if (!enumType && map.getValue().split(":")[1].contains("MANY")){ - Map> testRecursive = recursiveReference(classMap, map.getValue().split(":")[0] ); - myObject.putAll(testRecursive); + if (!enumType && map.getValue().split(":")[1].contains("MANY")) { + Map> testRecursive = + recursiveReference(classMap, map.getValue().split(":")[0]); + myObject.putAll(testRecursive); } } } @@ -681,32 +738,33 @@ public class MSModelUtils { return gson.toJson(myObject); } - public Map getRefclass(Map classMap, String className){ + public Map getRefclass(Map classMap, String className) { HashMap missingValues = new HashMap<>(); - if (classMap.get(className).getAttribute()!=null || !classMap.get(className).getAttribute().isEmpty()){ + if (classMap.get(className).getAttribute() != null || !classMap.get(className).getAttribute().isEmpty()) { missingValues.putAll(classMap.get(className).getAttribute()); } - if (classMap.get(className).getRefAttribute()!=null || !classMap.get(className).getRefAttribute().isEmpty()){ + if (classMap.get(className).getRefAttribute() != null || !classMap.get(className).getRefAttribute().isEmpty()) { missingValues.putAll(classMap.get(className).getRefAttribute()); } return missingValues; } - public String createSubAttributes(List dependency, Map classMap, String modelName) { + public String createSubAttributes(List dependency, Map classMap, + String modelName) { - HashMap workingMap = new HashMap<>(); + HashMap workingMap = new HashMap<>(); MSAttributeObject tempObject; - if (dependency!=null){ - if (dependency.isEmpty()){ + if (dependency != null) { + if (dependency.isEmpty()) { return "{}"; } dependency.add(modelName); - for (String element: dependency){ + for (String element : dependency) { tempObject = classMap.get(element); - if (tempObject!=null){ + if (tempObject != null) { workingMap.putAll(classMap.get(element).getSubClass()); } } @@ -715,16 +773,17 @@ public class MSModelUtils { return createJson(classMap, modelName); } - public List getFullDependencyList(List dependency, Map classMap) { + public List getFullDependencyList(List dependency, Map classMap) { ArrayList returnList = new ArrayList<>(); ArrayList workingList; returnList.addAll(dependency); - for (String element : dependency ){ - if (classMap.containsKey(element)){ + for (String element : dependency) { + if (classMap.containsKey(element)) { MSAttributeObject value = classMap.get(element); - String rawValue = StringUtils.replaceEach(value.getDependency(), new String[]{"[", "]"}, new String[]{"", ""}); + String rawValue = + StringUtils.replaceEach(value.getDependency(), new String[] {"[", "]"}, new String[] {"", ""}); workingList = new ArrayList<>(Arrays.asList(rawValue.split(","))); - for(String depend : workingList) { + for (String depend : workingList) { updDependencyList(returnList, depend); } } @@ -734,7 +793,7 @@ public class MSModelUtils { } private void updDependencyList(ArrayList returnList, String depend) { - if (!returnList.contains(depend) && !depend.isEmpty()){ + if (!returnList.contains(depend) && !depend.isEmpty()) { returnList.add(depend.trim()); } } @@ -742,31 +801,22 @@ public class MSModelUtils { /* * For TOSCA Model */ - public String parseTosca (String fileName){ - LinkedHashMap map= new LinkedHashMap<>(); - + public String parseTosca(String fileName) { + Map map = new LinkedHashMap<>(); try { - map=load(fileName); - - if(map != null){ - if(map.get("error") != null){ - return map.get("error"); - } + map = load(fileName); + if (map != null && map.get(ERROR) != null) { + return map.get(ERROR); } - parseDataAndPolicyNodes(map); - - LinkedHashMap dataMapForJson=parseDataNodes(map); - + LinkedHashMap dataMapForJson = parseDataNodes(map); constructJsonForDataFields(dataMapForJson); - - LinkedHashMap> mapKey= parsePolicyNodes(map); - + LinkedHashMap> mapKey = parsePolicyNodes(map); createAttributes(mapKey); } catch (IOException e) { logger.error(e); - }catch(ParserException e){ + } catch (ParserException e) { logger.error(e); return e.getMessage(); } @@ -775,16 +825,17 @@ public class MSModelUtils { } @SuppressWarnings("unchecked") - public LinkedHashMap load(String fileName) throws IOException,ParserException { + public Map load(String fileName) throws IOException, ParserException { File newConfiguration = new File(fileName); StringBuilder orderInfo = new StringBuilder("["); Yaml yaml = new Yaml(); LinkedHashMap yamlMap = null; - try(InputStream is = new FileInputStream(newConfiguration)){ + try (InputStream is = new FileInputStream(newConfiguration)) { yamlMap = (LinkedHashMap) yaml.load(is); } catch (FileNotFoundException e) { logger.error(e); - }catch(Exception e){ + } catch (Exception e) { + logger.error(e); throw new ParserException("Invalid TOSCA Model format. Please make sure it is a valid YAML file"); } @@ -796,33 +847,35 @@ public class MSModelUtils { String message = validations(yamlMap); - if(message != null){ - settings.put("error", message); + if (message != null) { + settings.put(ERROR, message); return settings; } findNode(yamlMap); - orderedElements.stream().forEach((string) -> { - orderInfo.append(string); - orderInfo.append(","); - logger.info("Content: " + string); - }); + if (!isDuplicatedAttributes && orderedElements != null && !orderedElements.isEmpty()) { + orderedElements.stream().forEach(string -> { + orderInfo.append(string); + orderInfo.append(","); + logger.info("Content: " + string); + }); - orderInfo.append("]"); + orderInfo.append("]"); - dataOrderInfo = orderInfo.toString(); - dataOrderInfo = dataOrderInfo.replace(",]", "]"); + dataOrderInfo = orderInfo.toString(); + dataOrderInfo = dataOrderInfo.replace(",]", "]"); - logger.info("dataOrderInfo :" + dataOrderInfo); + logger.info("dataOrderInfo :" + dataOrderInfo); + } - List path = new ArrayList <>(); + List path = new ArrayList<>(); serializeMap(settings, sb, path, yamlMap); return settings; } @SuppressWarnings("unchecked") - private String validations(@SuppressWarnings("rawtypes") LinkedHashMap yamlMap){ + private String validations(@SuppressWarnings("rawtypes") Map yamlMap) { boolean isNoteTypeFound = false; boolean isDataTypeFound = false; @@ -830,76 +883,72 @@ public class MSModelUtils { boolean isToscaVersionValueFound = false; @SuppressWarnings("rawtypes") Map m1 = new HashMap(); - short order =0; - if(yamlMap != null){ + short order = 0; + if (yamlMap != null) { // Get a set of the entries - @SuppressWarnings("rawtypes") - Set set = yamlMap.entrySet(); - // Get an iterator - @SuppressWarnings("rawtypes") - Iterator i = set.iterator(); - // Display elements - while(i.hasNext()) { - @SuppressWarnings("rawtypes") - Entry me = (Entry)i.next(); - - if("tosca_definitions_version".equals(me.getKey())){ - isToscaVersionKeyFound = true; - order++; - m1.put("tosca_definitions_version", order); - } - - if("tosca_simple_yaml_1_0_0".equals(me.getValue())){ - isToscaVersionValueFound = true; - } - - if("node_types".equals(me.getKey())){ - isNoteTypeFound = true; - order++; - m1.put("node_types", order); - } - - if("data_types".equals(me.getKey())){ - isDataTypeFound = true; - order++; - m1.put("data_types", order); - } - - } - - - if(!isDataTypeFound){ - return "data_types are missing or invalid."; - } - - if(!isToscaVersionKeyFound || !isToscaVersionValueFound){ - return "tosca_definitions_version is missing or invalid."; - } - - if(!isNoteTypeFound){ - return "node_types are missing or invalid."; - } - - short version = (short) m1.get("tosca_definitions_version"); - - if(version > 1 ){ + @SuppressWarnings("rawtypes") + Set entries = yamlMap.entrySet(); + for (@SuppressWarnings("rawtypes") + Map.Entry me : entries) { + if (TOSCA_SIMPLE_YAML_1_0_0.equals(me.getValue())) { + isToscaVersionValueFound = true; + } + + switch (me.getKey().toString()) { + case TOSCA_DEFINITION_VERSION: + isToscaVersionKeyFound = true; + order++; + m1.put(TOSCA_DEFINITION_VERSION, order); + break; + case NODE_TYPE: + isNoteTypeFound = true; + order++; + m1.put(NODE_TYPE, order); + break; + case DATA_TYPE: + isDataTypeFound = true; + order++; + m1.put(DATA_TYPE, order); + break; + case JSON_MODEL: + setJsonRuleFormation(me.getValue().toString()); + break; + default: + break; + } + } + if (!isDataTypeFound) { + return "data_types are missing or invalid."; + } + if (!isToscaVersionKeyFound || !isToscaVersionValueFound) { + return "tosca_definitions_version is missing or invalid."; + } + + if (!isNoteTypeFound) { + return "node_types are missing or invalid."; + } + + short version = (short) m1.get(TOSCA_DEFINITION_VERSION); + + if (version > 1) { return "tosca_definitions_version should be defined first."; - } + } - short data = (short) m1.get("data_types"); - short node = (short) m1.get("node_types"); - if(node > data){ + short data = (short) m1.get(DATA_TYPE); + short node = (short) m1.get(NODE_TYPE); + if (isDataTypeFound && node > data) { return "node_types should be defined before data_types."; - } + } } return null; } - @SuppressWarnings({ "unchecked", "rawtypes" }) - private void serializeMap(LinkedHashMap settings, StringBuilder sb, List path, Map yamlMap) { - for (Entry entry : yamlMap.entrySet()) { + @SuppressWarnings({"unchecked", "rawtypes"}) + private void serializeMap(LinkedHashMap settings, StringBuilder sb, List path, + Map yamlMap) { + for (Map.Entry entry : yamlMap.entrySet()) { if (entry.getValue() instanceof Map) { path.add((String) entry.getKey()); @@ -916,7 +965,8 @@ public class MSModelUtils { } @SuppressWarnings("unchecked") - private void serializeList(LinkedHashMap settings, StringBuilder sb, List path, List yamlList) { + private void serializeList(LinkedHashMap settings, StringBuilder sb, List path, + List yamlList) { int counter = 0; for (Object listEle : yamlList) { if (listEle instanceof Map) { @@ -934,7 +984,8 @@ public class MSModelUtils { } } - private void serializeValue(LinkedHashMap settings, StringBuilder sb, List path, String name, Object value) { + private void serializeValue(LinkedHashMap settings, StringBuilder sb, List path, + String name, Object value) { if (value == null) { return; } @@ -947,23 +998,20 @@ public class MSModelUtils { } - void parseDataAndPolicyNodes(LinkedHashMap map){ - for(String key:map.keySet()){ - if(key.contains("policy.nodes.Root")) - { + void parseDataAndPolicyNodes(Map map) { + for (String key : map.keySet()) { + if (key.contains("policy.nodes.Root")) { continue; - } - else if(key.contains("policy.nodes")){ + } else if (key.contains("policy.nodes")) { String wordToFind = "policy.nodes."; - int indexForPolicyNode=key.indexOf(wordToFind); - String subNodeString= key.substring(indexForPolicyNode+13, key.length()); + int indexForPolicyNode = key.indexOf(wordToFind); + String subNodeString = key.substring(indexForPolicyNode + 13, key.length()); stringBetweenDots(subNodeString); - } - else if(key.contains("policy.data")){ - String wordToFind="policy.data."; - int indexForPolicyNode=key.indexOf(wordToFind); - String subNodeString= key.substring(indexForPolicyNode+12, key.length()); + } else if (key.contains("policy.data")) { + String wordToFind = "policy.data."; + int indexForPolicyNode = key.indexOf(wordToFind); + String subNodeString = key.substring(indexForPolicyNode + 12, key.length()); stringBetweenDotsForDataFields(subNodeString); } @@ -971,12 +1019,12 @@ public class MSModelUtils { } // Second index of dot should be returned. - public int stringBetweenDots(String str){ - String stringToSearch=str; - String[]ss=stringToSearch.split("\\."); - if(ss!=null){ - int len= ss.length; - if(len>2){ + public int stringBetweenDots(String str) { + String stringToSearch = str; + String[] ss = stringToSearch.split("\\."); + if (ss != null) { + int len = ss.length; + if (len > 2) { uniqueKeys.add(ss[2]); } } @@ -985,51 +1033,50 @@ public class MSModelUtils { } - public void stringBetweenDotsForDataFields(String str){ - String stringToSearch=str; - String[]ss=stringToSearch.split("\\."); - if(ss!=null){ - int len= ss.length; + public void stringBetweenDotsForDataFields(String str) { + String stringToSearch = str; + String[] ss = stringToSearch.split("\\."); + if (ss != null) { + int len = ss.length; - if(len>2){ - uniqueDataKeys.add(ss[0]+"%"+ss[2]); + if (len > 2) { + uniqueDataKeys.add(ss[0] + "%" + ss[2]); } } } - void constructJsonForDataFields(LinkedHashMap dataMapForJson){ - LinkedHashMap> dataMapKey= new LinkedHashMap <>(); + void constructJsonForDataFields(LinkedHashMap dataMapForJson) { + LinkedHashMap> dataMapKey = new LinkedHashMap<>(); LinkedHashMap hmSub; - for(Entry entry: dataMapForJson.entrySet()){ - String uniqueDataKey= entry.getKey(); - String[] uniqueDataKeySplit=uniqueDataKey.split("%"); - String value= dataMapForJson.get(uniqueDataKey); - if(dataMapKey.containsKey(uniqueDataKeySplit[0])){ + for (Map.Entry entry : dataMapForJson.entrySet()) { + String uniqueDataKey = entry.getKey(); + String[] uniqueDataKeySplit = uniqueDataKey.split("%"); + String value = dataMapForJson.get(uniqueDataKey); + if (dataMapKey.containsKey(uniqueDataKeySplit[0])) { hmSub = dataMapKey.get(uniqueDataKeySplit[0]); hmSub.put(uniqueDataKeySplit[1], value); - } - else{ - hmSub=new LinkedHashMap <>(); + } else { + hmSub = new LinkedHashMap<>(); hmSub.put(uniqueDataKeySplit[1], value); } dataMapKey.put(uniqueDataKeySplit[0], hmSub); } - JSONObject mainObject= new JSONObject(); + JSONObject mainObject = new JSONObject(); JSONObject json; - for(Entry> entry: dataMapKey.entrySet()){ - String s=entry.getKey(); - json= new JSONObject(); - HashMap jsonHm=dataMapKey.get(s); - for(Entry entryMap:jsonHm.entrySet()){ - String key=entryMap.getKey(); + for (Map.Entry> entry : dataMapKey.entrySet()) { + String s = entry.getKey(); + json = new JSONObject(); + HashMap jsonHm = dataMapKey.get(s); + for (Map.Entry entryMap : jsonHm.entrySet()) { + String key = entryMap.getKey(); json.put(key, jsonHm.get(key)); } - mainObject.put(s,json); + mainObject.put(s, json); } Iterator keysItr = mainObject.keys(); - while(keysItr.hasNext()) { + while (keysItr.hasNext()) { String key = keysItr.next(); String value = mainObject.get(key).toString(); retmap.put(key, value); @@ -1039,166 +1086,189 @@ public class MSModelUtils { logger.info(mainObject); logger.info("###############################################################################"); } - LinkedHashMap parseDataNodes(LinkedHashMap map){ - LinkedHashMap dataMapForJson=new LinkedHashMap <>(); - matchableValues = new HashMap <>(); - for(String uniqueDataKey: uniqueDataKeys){ - if(uniqueDataKey.contains("%")){ - String[] uniqueDataKeySplit= uniqueDataKey.split("%"); - String findType=DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+TYPE; - String typeValue=map.get(findType); + + LinkedHashMap parseDataNodes(Map map) { + LinkedHashMap dataMapForJson = new LinkedHashMap<>(); + matchableValues = new HashMap<>(); + for (String uniqueDataKey : uniqueDataKeys) { + if (uniqueDataKey.contains("%")) { + String[] uniqueDataKeySplit = uniqueDataKey.split("%"); + String findType = DATATYPE + uniqueDataKeySplit[0] + PROPERTIES + uniqueDataKeySplit[1] + TYPE; + String typeValue = map.get(findType); logger.info(typeValue); - String findRequired=DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+REQUIRED; - String requiredValue= map.get(findRequired); + String findRequired = DATATYPE + uniqueDataKeySplit[0] + PROPERTIES + uniqueDataKeySplit[1] + REQUIRED; + String requiredValue = map.get(findRequired); - String matchable =DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+MATCHABLE; + String matchable = DATATYPE + uniqueDataKeySplit[0] + PROPERTIES + uniqueDataKeySplit[1] + MATCHABLE; - String matchableValue= map.get(matchable); + String matchableValue = map.get(matchable); - if(matchableValue != null && matchableValue.equalsIgnoreCase("true")){ - if(uniqueDataKey.contains("%")){ - String[] keys= uniqueDataKey.split("%"); - String key=keys[keys.length -1]; - matchableValues.put(key, MATCHINGTRUE); - }else{ - matchableValues.put(uniqueDataKey, MATCHINGTRUE); - } + if ("true".equalsIgnoreCase(matchableValue)) { + String key = uniqueDataKeySplit[uniqueDataKeySplit.length - 1]; + matchableValues.put(key, MATCHINGTRUE); } - if(requiredValue == null || requiredValue.isEmpty()){ + if (requiredValue == null || requiredValue.isEmpty()) { requiredValue = "false"; } - if(typeValue != null && (typeValue.equalsIgnoreCase(STRING)|| - typeValue.equalsIgnoreCase(INTEGER))){ - - String findDefault=DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+DEFAULT; - String defaultValue= map.get(findDefault); - logger.info("defaultValue is:"+ defaultValue); - logger.info("requiredValue is:"+ requiredValue); - - StringBuilder attributeIndividualStringBuilder= new StringBuilder(); - attributeIndividualStringBuilder.append(typeValue+DEFAULTVALUE); - attributeIndividualStringBuilder.append(defaultValue+REQUIREDVALUE); - attributeIndividualStringBuilder.append(requiredValue+MANYFALSE); + if (INTEGER.equalsIgnoreCase(typeValue) || STRING.equalsIgnoreCase(typeValue) + || typeValue.equalsIgnoreCase(BOOLEAN)) { + String findDefault = + DATATYPE + uniqueDataKeySplit[0] + PROPERTIES + uniqueDataKeySplit[1] + DEFAULT; + String findDescription = + DATATYPE + uniqueDataKeySplit[0] + PROPERTIES + uniqueDataKeySplit[1] + DESCRIPTION; + String defaultValue = map.get(findDefault); + String descriptionDefined = map.get(findDescription); + logger.info("defaultValue is:" + defaultValue); + logger.info("requiredValue is:" + requiredValue); + + StringBuilder attributeIndividualStringBuilder = new StringBuilder(); + attributeIndividualStringBuilder.append(typeValue + DEFAULTVALUE); + attributeIndividualStringBuilder.append(defaultValue + REQUIREDVALUE); + attributeIndividualStringBuilder.append(requiredValue + MANYFALSE); + attributeIndividualStringBuilder.append(DESCRIPTION_TOKEN + descriptionDefined); dataMapForJson.put(uniqueDataKey, attributeIndividualStringBuilder.toString()); - } - 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); - if(listValue!=null){ - logger.info("Type of list is:"+ listValue); - //Its userdefined - if(listValue.contains(".")){ - String trimValue=listValue.substring(listValue.lastIndexOf('.')+1); - StringBuilder referenceIndividualStringBuilder= new StringBuilder(); - referenceIndividualStringBuilder.append(trimValue+REQUIREDVALUE); - referenceIndividualStringBuilder.append(requiredValue+MANYTRUE); + } 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 findDefaultValue = DATATYPE + uniqueDataKeySplit[0] + PROPERTIES + uniqueDataKeySplit[1] + + ".entry_schema.default"; + String findDescription = DATATYPE + uniqueDataKeySplit[0] + PROPERTIES + uniqueDataKeySplit[1] + + ".entry_schema.description"; + String listValue = map.get(findList); + String defaultValue = map.get(findDefaultValue); + String description = map.get(findDescription); + if (listValue != null) { + logger.info("Type of list is:" + listValue); + // Its userdefined + if (listValue.contains(".")) { + String trimValue = listValue.substring(listValue.lastIndexOf('.') + 1); + StringBuilder referenceIndividualStringBuilder = new StringBuilder(); + referenceIndividualStringBuilder.append(trimValue + REQUIREDVALUE); + referenceIndividualStringBuilder.append(requiredValue + MANYTRUE); + referenceIndividualStringBuilder.append(DESCRIPTION_TOKEN + description); dataMapForJson.put(uniqueDataKey, referenceIndividualStringBuilder.toString()); - }//Its string - else{ - StringBuilder stringListItems= new StringBuilder(); - 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); + } else { // Its string + StringBuilder stringListItems = new StringBuilder(); + if (LIST.equalsIgnoreCase(typeValue)) { + stringListItems.append(uniqueDataKeySplit[1].toUpperCase() + DEFAULTVALUE + defaultValue + + REQUIREDVALUE + requiredValue + MANYFALSE + DESCRIPTION_TOKEN + description); + } else if (MAP.equalsIgnoreCase(typeValue)) { + stringListItems.append(uniqueDataKeySplit[1].toUpperCase() + DEFAULTVALUE + defaultValue + + REQUIREDVALUE + requiredValue + MANYTRUE + DESCRIPTION_TOKEN + description); } dataMapForJson.put(uniqueDataKey, stringListItems.toString()); - 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 || 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); + dataListBuffer.append(uniqueDataKeySplit[1].toUpperCase() + "=["); + for (int i = 0; i < 10; i++) { + String findConstraints = DATATYPE + uniqueDataKeySplit[0] + PROPERTIES + + uniqueDataKeySplit[1] + ".entry_schema.constraints.0.valid_values." + i; + String constraintsValue = map.get(findConstraints); + logger.info(constraintsValue); + boolean ruleCheck = false; + if (constraintsValue == null) { break; - } else{ - isConstraintsFound = true; - if(i == 0){ // only need to add one time for the same attribute - dataListBuffer.append(uniqueDataKeySplit[1].toUpperCase()+"=["); + } else if (constraintsValue.startsWith(DICTIONARY)) { + List dictFromDB = null; + String[] dictionaryNameValRule; + String[] dictionaryName = constraintsValue.split(":"); + String dictionaryNameVal = dictionaryName[1]; + if (dictionaryNameVal.contains("#Rules")) { + ruleCheck = true; + dictionaryNameValRule = dictionaryNameVal.split("#"); + dictFromDB = commonClassDao.getDataById(DictionaryData.class, DICTIONARYNAME, + dictionaryNameValRule[0]); + } else { + dictFromDB = commonClassDao.getDataById(DictionaryData.class, DICTIONARYNAME, + dictionaryName[1]); } - - if(constraintsValue==null){ - constraintsValue = ""; - }else if (constraintsValue.contains("=")) { + if (dictFromDB != null && !dictFromDB.isEmpty()) { + DictionaryData data = (DictionaryData) dictFromDB.get(0); + if (ruleCheck) { + constraintsValue = DICTIONARY + data.getDictionaryUrl() + "@" + + data.getDictionaryDataByName() + "&Rule"; + } else { + constraintsValue = DICTIONARY + data.getDictionaryUrl() + "@" + + data.getDictionaryDataByName(); + } + } + dataListBuffer.append(constraintsValue + ","); + } else { + logger.info("constraintsValue => " + constraintsValue); + if (constraintsValue.contains("=")) { constraintsValue = constraintsValue.replace("=", "equal-sign"); } - dataConstraints.add(constraintsValue); - dataListBuffer.append(constraintsValue+","); + dataListBuffer.append(constraintsValue + ","); } } - if(isConstraintsFound){ - dataListBuffer.append("]#"); - } + dataListBuffer.append("]#"); + logger.info(dataListBuffer); } - }else{ - logger.info("entry_schema.type is not defined correctly"); } - } - else{ - String findUserDefined=DATATYPE+uniqueDataKeySplit[0]+"."+"properties"+"."+uniqueDataKeySplit[1]+TYPE; - String userDefinedValue=map.get(findUserDefined); - String trimValue=userDefinedValue.substring(userDefinedValue.lastIndexOf('.')+1); - StringBuilder referenceIndividualStringBuilder= new StringBuilder(); - referenceIndividualStringBuilder.append(trimValue+REQUIREDVALUE); - referenceIndividualStringBuilder.append(requiredValue+MANYFALSE); + } else { + String findUserDefined = DATATYPE + uniqueDataKeySplit[0] + "." + PROPERTIES_KEY + "." + + uniqueDataKeySplit[1] + TYPE; + String findDescription = DATATYPE + uniqueDataKeySplit[0] + "." + PROPERTIES_KEY + "." + + uniqueDataKeySplit[1] + DESCRIPTION; + String userDefinedValue = map.get(findUserDefined); + String description = map.get(findDescription); + String trimValue = userDefinedValue.substring(userDefinedValue.lastIndexOf('.') + 1); + StringBuilder referenceIndividualStringBuilder = new StringBuilder(); + referenceIndividualStringBuilder.append(trimValue + REQUIREDVALUE); + referenceIndividualStringBuilder.append(requiredValue + MANYFALSE); + referenceIndividualStringBuilder.append(DESCRIPTION_TOKEN + description); dataMapForJson.put(uniqueDataKey, referenceIndividualStringBuilder.toString()); } + } else { + matchableValues.put(uniqueDataKey, MATCHINGTRUE); } } return dataMapForJson; } + LinkedHashMap> parsePolicyNodes(Map map) + throws ParserException { + LinkedHashMap> mapKey = new LinkedHashMap<>(); + for (String uniqueKey : uniqueKeys) { + LinkedHashMap hm; - LinkedHashMap> parsePolicyNodes(Map map) throws ParserException{ - LinkedHashMap> mapKey= new LinkedHashMap <>(); - for(String uniqueKey: uniqueKeys){ - LinkedHashMap hm; - - for(Entry entry:map.entrySet()){ - String key=entry.getKey(); - if(key.contains(uniqueKey) && key.contains("policy.nodes")){ - if(mapKey.containsKey(uniqueKey)){ + for (Entry entry : map.entrySet()) { + String key = entry.getKey(); + if (key.contains(uniqueKey) && key.contains("policy.nodes")) { + if (mapKey.containsKey(uniqueKey)) { hm = mapKey.get(uniqueKey); - String keyStr= key.substring(key.lastIndexOf('.')+1); - String valueStr= map.get(key); - 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 ); + String keyStr = key.substring(key.lastIndexOf('.') + 1); + String valueStr = map.get(key); + if ("type".equalsIgnoreCase(keyStr) && key.contains("entry_schema.0.type") + || key.contains("entry_schema.type") && valueStr.contains("policy.data.")) { + throw new ParserException( + "For 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); + if ("type".equals(keyStr)) { + if (!key.contains("entry_schema")) { + hm.put(keyStr, valueStr); } - }else{ - hm.put(keyStr,valueStr); + } else { + hm.put(keyStr, valueStr); } } else { - 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")) - { - hm.put(keyStr,valueStr); + hm = new LinkedHashMap<>(); + String keyStr = key.substring(key.lastIndexOf('.') + 1); + String valueStr = map.get(key); + + if (("type").equals(keyStr)) { + if (!key.contains("entry_schema")) { + hm.put(keyStr, valueStr); } - }else{ - hm.put(keyStr,valueStr); + } else { + hm.put(keyStr, valueStr); } mapKey.put(uniqueKey, hm); } @@ -1208,92 +1278,101 @@ public class MSModelUtils { return mapKey; } - void createAttributes(LinkedHashMap> mapKey){ - StringBuilder attributeStringBuilder= new StringBuilder(); - StringBuilder referenceStringBuilder= new StringBuilder(); - StringBuilder listBuffer= new StringBuilder(); - List constraints= new ArrayList<>(); - for(Entry> entry: mapKey.entrySet()){ - String keySetString= entry.getKey(); - LinkedHashMap keyValues=mapKey.get(keySetString); - if(STRING.equalsIgnoreCase(keyValues.get("type"))|| - INTEGER.equalsIgnoreCase(keyValues.get("type"))){ - StringBuilder attributeIndividualStringBuilder= new StringBuilder(); - attributeIndividualStringBuilder.append(keySetString+"="); - attributeIndividualStringBuilder.append(keyValues.get("type")+DEFAULTVALUE); - attributeIndividualStringBuilder.append(keyValues.get("default")+REQUIREDVALUE); - attributeIndividualStringBuilder.append(keyValues.get("required")+MANYFALSE); - attributeStringBuilder.append(attributeIndividualStringBuilder+","); - if("true".equalsIgnoreCase(keyValues.get(MATCHABLEKEY))){ + private void createAttributes(LinkedHashMap> mapKey) { + StringBuilder attributeStringBuilder = new StringBuilder(); + StringBuilder referenceStringBuilder = new StringBuilder(); + StringBuilder listBuffer = new StringBuilder(); + List constraints = new ArrayList<>(); + for (Map.Entry> entry : mapKey.entrySet()) { + String keySetString = entry.getKey(); + LinkedHashMap keyValues = mapKey.get(keySetString); + if (keyValues.get("type") != null && (STRING.equalsIgnoreCase(keyValues.get("type")) + || INTEGER.equalsIgnoreCase(keyValues.get("type")) + || BOOLEAN.equalsIgnoreCase(keyValues.get("type")))) { + StringBuilder attributeIndividualStringBuilder = new StringBuilder(); + attributeIndividualStringBuilder.append(keySetString + "="); + attributeIndividualStringBuilder.append(keyValues.get("type") + DEFAULTVALUE); + attributeIndividualStringBuilder.append(keyValues.get("default") + REQUIREDVALUE); + attributeIndividualStringBuilder.append(keyValues.get("required") + MANYFALSE); + attributeIndividualStringBuilder.append(DESCRIPTION_TOKEN + keyValues.get(DESCRIPTION_KEY)); + attributeStringBuilder.append(attributeIndividualStringBuilder + ","); + if (keyValues.get(MATCHABLEKEY) != null && "true".equalsIgnoreCase(keyValues.get(MATCHABLEKEY))) { matchableValues.put(keySetString, MATCHINGTRUE); } - } - else if(LIST.equalsIgnoreCase(keyValues.get("type"))){ - - if(("true").equalsIgnoreCase(keyValues.get(MATCHABLEKEY))){ + } else if (LIST.equalsIgnoreCase(keyValues.get("type"))) { + if ("true".equalsIgnoreCase(keyValues.get(MATCHABLEKEY))) { matchableValues.put(keySetString, MATCHINGTRUE); } - //List Datatype - Set keys= keyValues.keySet(); - Iterator itr=keys.iterator(); + // List Data type + Set keys = keyValues.keySet(); + Iterator itr = keys.iterator(); boolean isDefinedType = false; - while(itr.hasNext()){ - String key= itr.next(); - 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 - if(StringUtils.isNumeric(key) ){ //only integer key for the value of Constrains + while (itr.hasNext()) { + String key = itr.next(); + 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 + if (StringUtils.isNumeric(key)) { // only integer key for the value of Constrains constraints.add(keyValues.get(key)); } - }else{ - //This is user defined type - String trimValue=value.substring(value.lastIndexOf('.')+1); - StringBuilder referenceIndividualStringBuilder= new StringBuilder(); - referenceIndividualStringBuilder.append(keySetString+"="+trimValue+MANYTRUE); - referenceStringBuilder.append(referenceIndividualStringBuilder+","); + } else { + // This is user defined type + String trimValue = value.substring(value.lastIndexOf('.') + 1); + StringBuilder referenceIndividualStringBuilder = new StringBuilder(); + referenceIndividualStringBuilder.append(keySetString + "=" + trimValue + MANYTRUE + + DESCRIPTION_TOKEN + keyValues.get(DESCRIPTION_KEY)); + referenceStringBuilder.append(referenceIndividualStringBuilder + ","); isDefinedType = true; } } } - if(!isDefinedType && LIST.equalsIgnoreCase(keyValues.get("type"))){ //type is not user defined and is a list but no constraints defined. - if(constraints == null || constraints.isEmpty()){ - referenceStringBuilder.append(keySetString+"=MANY-true"+","); - } + if (!isDefinedType && LIST.equalsIgnoreCase(keyValues.get("type")) + && (constraints == null || constraints.isEmpty())) { + referenceStringBuilder.append(keySetString + "=MANY-true" + ","); } - }else{ - //User defined Datatype. - if("true".equalsIgnoreCase(keyValues.get(MATCHABLEKEY))){ + } else { + // User defined Datatype. + if ("true".equalsIgnoreCase(keyValues.get(MATCHABLEKEY))) { matchableValues.put(keySetString, MATCHINGTRUE); } - String value=keyValues.get("type"); - if(value != null && !value.isEmpty()){ - String trimValue=value.substring(value.lastIndexOf('.')+1); - StringBuilder referenceIndividualStringBuilder= new StringBuilder(); - referenceIndividualStringBuilder.append(keySetString+"="+trimValue+MANYFALSE); - referenceStringBuilder.append(referenceIndividualStringBuilder+","); - }else{ + String value = keyValues.get("type"); + if (value != null && !value.isEmpty()) { + String trimValue = value.substring(value.lastIndexOf('.') + 1); + StringBuilder referenceIndividualStringBuilder = new StringBuilder(); + referenceIndividualStringBuilder.append(keySetString + "=" + trimValue + MANYFALSE + + DESCRIPTION_TOKEN + keyValues.get(DESCRIPTION_KEY)); + referenceStringBuilder.append(referenceIndividualStringBuilder + ","); + } else { logger.info("keyValues.get(type) is null/empty"); } } - if(constraints!=null && !constraints.isEmpty()){ - //List handling. - listBuffer.append(keySetString.toUpperCase()+"=["); - for(String str:constraints){ - listBuffer.append(str+","); + if (constraints != null && !constraints.isEmpty()) { + // List handling. + listBuffer.append(keySetString.toUpperCase() + "=["); + for (String str : constraints) { + if (str.contains(DICTIONARY)) { + String[] dictionaryName = str.split(":"); + List dictFromDB = + commonClassDao.getDataById(DictionaryData.class, DICTIONARYNAME, dictionaryName[1]); + if (dictFromDB != null && !dictFromDB.isEmpty()) { + DictionaryData data = (DictionaryData) dictFromDB.get(0); + str = DICTIONARY + data.getDictionaryUrl() + "@" + data.getDictionaryDataByName(); + } + } + listBuffer.append(str + ","); } listBuffer.append("]#"); logger.info(listBuffer); - StringBuilder referenceIndividualStringBuilder= new StringBuilder(); - referenceIndividualStringBuilder.append(keySetString+"="+keySetString.toUpperCase()+MANYFALSE); - referenceStringBuilder.append(referenceIndividualStringBuilder+","); + StringBuilder referenceIndividualStringBuilder = new StringBuilder(); + referenceIndividualStringBuilder.append(keySetString + "=" + keySetString.toUpperCase() + MANYFALSE); + referenceStringBuilder.append(referenceIndividualStringBuilder + ","); constraints.clear(); } } @@ -1302,47 +1381,55 @@ public class MSModelUtils { logger.info("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); - logger.info("Whole attribute String is:"+attributeStringBuilder); - logger.info("Whole reference String is:"+referenceStringBuilder); - logger.info("List String is:"+listBuffer); - logger.info("Data list buffer is:"+dataListBuffer); + logger.info("Whole attribute String is:" + attributeStringBuilder); + logger.info("Whole reference String is:" + referenceStringBuilder); + logger.info("List String is:" + listBuffer); + logger.info("Data list buffer is:" + dataListBuffer); logger.info("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); - this.listConstraints=dataListBuffer.toString(); - this.referenceAttributes=referenceStringBuilder.toString(); - this.attributeString=attributeStringBuilder.toString(); + this.listConstraints = dataListBuffer.toString(); + this.referenceAttributes = referenceStringBuilder.toString(); + this.attributeString = attributeStringBuilder.toString(); } @SuppressWarnings("unchecked") - public void findNode(LinkedHashMap map) { + private void findNode(LinkedHashMap map) { - map.forEach((key,value) -> { + map.forEach((key, value) -> { // if the value is properties and its type is map object, then save all the keys - if(key.equals("properties") && value instanceof Map){ - saveNodes((LinkedHashMap)value); + if (key.equals(PROPERTIES_KEY) && value instanceof Map) { + saveNodes((LinkedHashMap) value); + if (isDuplicatedAttributes) { + orderedElements = new ArrayList<>(); + return; + } } - if(!key.equals("policy.nodes.Root") && value instanceof Map){ - //value is a Map object, then make a recursive call + if (!"policy.nodes.Root".equals(key) && value instanceof Map) { + // value is a Map object, then make a recursive call findNode((LinkedHashMap) value); } }); } - public void saveNodes(LinkedHashMap map) { + private void saveNodes(LinkedHashMap map) { - map.forEach((key,value) -> { - - orderedElements.add((String)key); - - }); + for (Entry entry : map.entrySet()) { + if (orderedElements.indexOf(entry.getKey()) >= 0) { // duplicated attribute names + isDuplicatedAttributes = true; + return; + } else { + orderedElements.add((String) entry.getKey()); + } + } } public String getAttributeString() { return attributeString; } + public void setAttributeString(String attributeString) { this.attributeString = attributeString; } @@ -1354,6 +1441,7 @@ public class MSModelUtils { public void setRetmap(LinkedHashMap retmap) { this.retmap = retmap; } + public Map getMatchableValues() { return matchableValues; } @@ -1361,6 +1449,7 @@ public class MSModelUtils { public void setMatchableValues(Map matchableValues) { this.matchableValues = matchableValues; } + public String getReferenceAttributes() { return referenceAttributes; } @@ -1368,6 +1457,7 @@ public class MSModelUtils { public void setReferenceAttributes(String referenceAttributes) { this.referenceAttributes = referenceAttributes; } + public String getListConstraints() { return listConstraints; } @@ -1375,6 +1465,7 @@ public class MSModelUtils { public void setListConstraints(String listConstraints) { this.listConstraints = listConstraints; } + public String getDataOrderInfo() { return dataOrderInfo; } @@ -1383,4 +1474,12 @@ public class MSModelUtils { this.dataOrderInfo = dataOrderInfo; } -} \ No newline at end of file + public String getJsonRuleFormation() { + return jsonRuleFormation; + } + + public void setJsonRuleFormation(String jsonRuleFormation) { + this.jsonRuleFormation = jsonRuleFormation; + } + +}