X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fclamp%2Fclds%2Ftosca%2Fupdate%2Fparser%2Fmetadata%2FToscaMetadataParserWithDictionarySupport.java;h=33e0842798cf664842af5d6ef6579153e3ba3a2a;hb=e65d457a2dfd6ebb5e1f5a28b74f05c16c285dc3;hp=8aff9668f56f594fe80397fae086eb76e7eae9a4;hpb=afac3121bfacc4d81903b1d8492613b0b77d3298;p=clamp.git diff --git a/src/main/java/org/onap/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParserWithDictionarySupport.java b/src/main/java/org/onap/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParserWithDictionarySupport.java index 8aff9668..33e08427 100644 --- a/src/main/java/org/onap/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParserWithDictionarySupport.java +++ b/src/main/java/org/onap/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParserWithDictionarySupport.java @@ -73,13 +73,17 @@ public class ToscaMetadataParserWithDictionarySupport implements ToscaMetadataPa ((LinkedHashMap) childNodeMap.get(ToscaSchemaConstants.METADATA)).forEach((key, value) -> { if (key.equalsIgnoreCase(ToscaSchemaConstants.METADATA_CLAMP_POSSIBLE_VALUES)) { - if (((String) value).contains(ToscaSchemaConstants.DICTIONARY)) { - processDictionaryElements((String) value, childObject, dictionaryService); - } - if (((String) value).contains("ClampExecution:")) { - executeClampProcess(((String) value).replaceAll("ClampExecution:", ""), childObject, - serviceModel, toscaMetadataExecutor); + String[] multipleValues = ((String) value).split(","); + for (String multipleValue : multipleValues) { + if (multipleValue.contains(ToscaSchemaConstants.DICTIONARY)) { + processDictionaryElements(multipleValue, childObject, dictionaryService); + } + if (multipleValue.contains("ClampExecution:")) { + executeClampProcess(multipleValue.replaceAll("ClampExecution:", ""), childObject, + serviceModel, toscaMetadataExecutor); + } } + } }); } @@ -91,75 +95,113 @@ public class ToscaMetadataParserWithDictionarySupport implements ToscaMetadataPa toscaMetadataExecutor.executeTheProcess(processInfo, childObject, serviceModel); } - private static void processDictionaryElements(String dictionaryReference, JsonObject childObject, - DictionaryService dictionaryService) { - String[] dictionaryKeyArray = - dictionaryReference.substring(dictionaryReference.indexOf(ToscaSchemaConstants.DICTIONARY) + 11, - dictionaryReference.length()).split("#"); - if (dictionaryKeyArray.length > 1) { - // We support only one # as of now. - List dictionaryElements = null; - if (dictionaryKeyArray.length == 2) { - dictionaryElements = new ArrayList<>(dictionaryService.getDictionary(dictionaryKeyArray[0]) - .getDictionaryElements()); - JsonArray subDictionaryNames = new JsonArray(); - new ArrayList(dictionaryService.getDictionary(dictionaryKeyArray[1]) - .getDictionaryElements()).forEach(elem -> subDictionaryNames.add(elem.getShortName())); - - JsonArray jsonArray = new JsonArray(); - - Optional.of(dictionaryElements).get().stream().forEach(c -> { - JsonObject jsonObject = new JsonObject(); - jsonObject.addProperty(JsonEditorSchemaConstants.TYPE, getJsonType(c.getType())); - if (c.getType() != null - && c.getType().equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) { - jsonObject.addProperty(JsonEditorSchemaConstants.MIN_LENGTH, 1); + /** + * For dictionary with multiple levels (defined by #). + * + * @param dictionaryKeyArray the array containing the different elements + * @param childObject the structure getting the new entries + * @param dictionaryService the dictionary service bean + */ + private static void processComplexDictionaryElements(String[] dictionaryKeyArray, JsonObject childObject, + DictionaryService dictionaryService) { + // We support only one # as of now. + List dictionaryElements = null; + if (dictionaryKeyArray.length == 2) { + dictionaryElements = new ArrayList<>(dictionaryService.getDictionary(dictionaryKeyArray[0]) + .getDictionaryElements()); + JsonArray subDictionaryNames = new JsonArray(); + new ArrayList(dictionaryService.getDictionary(dictionaryKeyArray[1]) + .getDictionaryElements()).forEach(elem -> subDictionaryNames.add(elem.getShortName())); + + JsonArray jsonArray = new JsonArray(); + + Optional.of(dictionaryElements).get().forEach(c -> { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty(JsonEditorSchemaConstants.TYPE, getJsonType(c.getType())); + if (c.getType() != null + && c.getType().equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) { + jsonObject.addProperty(JsonEditorSchemaConstants.MIN_LENGTH, 1); - } - jsonObject.addProperty(JsonEditorSchemaConstants.ID, c.getName()); - jsonObject.addProperty(JsonEditorSchemaConstants.LABEL, c.getShortName()); - jsonObject.add(JsonEditorSchemaConstants.OPERATORS, subDictionaryNames); - jsonArray.add(jsonObject); - }); + } + jsonObject.addProperty(JsonEditorSchemaConstants.ID, c.getName()); + jsonObject.addProperty(JsonEditorSchemaConstants.LABEL, c.getShortName()); + jsonObject.add(JsonEditorSchemaConstants.OPERATORS, subDictionaryNames); + jsonArray.add(jsonObject); + }); - JsonObject filterObject = new JsonObject(); - filterObject.add(JsonEditorSchemaConstants.FILTERS, jsonArray); + JsonObject filterObject = new JsonObject(); + filterObject.add(JsonEditorSchemaConstants.FILTERS, jsonArray); - childObject.addProperty(JsonEditorSchemaConstants.TYPE, - JsonEditorSchemaConstants.TYPE_QBLDR); - // TO invoke validation on such parameters - childObject.addProperty(JsonEditorSchemaConstants.MIN_LENGTH, 1); - childObject.add(JsonEditorSchemaConstants.QSSCHEMA, filterObject); + childObject.addProperty(JsonEditorSchemaConstants.TYPE, + JsonEditorSchemaConstants.TYPE_QBLDR); + // TO invoke validation on such parameters + childObject.addProperty(JsonEditorSchemaConstants.MIN_LENGTH, 1); + childObject.add(JsonEditorSchemaConstants.QSSCHEMA, filterObject); - } } - else { - List dictionaryElements = - new ArrayList<>(dictionaryService.getDictionary(dictionaryKeyArray[0]).getDictionaryElements()); - JsonArray dictionaryNames = new JsonArray(); - JsonArray dictionaryFullNames = new JsonArray(); - dictionaryElements.stream().forEach(c -> { - // Json type will be translated before Policy creation - if (c.getType() != null && !c.getType().equalsIgnoreCase("json")) { - dictionaryFullNames.add(c.getName()); - } - dictionaryNames.add(c.getShortName()); - }); + } + + /** + * For dictionary with single entry. + * + * @param dictionaryKeyArray the array containing the different elements + * @param childObject the structure getting the new entries + * @param dictionaryService the dictionary service bean + */ + private static void processSimpleDictionaryElements(String[] dictionaryKeyArray, JsonObject childObject, + DictionaryService dictionaryService) { + JsonArray dictionaryNames = new JsonArray(); + JsonArray dictionaryFullNames = new JsonArray(); + dictionaryService.getDictionary(dictionaryKeyArray[0]).getDictionaryElements().forEach(c -> { + // Json type will be translated before Policy creation + if (c.getType() != null && !c.getType().equalsIgnoreCase("json")) { + dictionaryFullNames.add(c.getName()); + } + dictionaryNames.add(c.getShortName()); + }); - if (dictionaryFullNames.size() > 0) { + if (dictionaryFullNames.size() > 0) { + if (childObject.get(JsonEditorSchemaConstants.ENUM) != null) { + childObject.get(JsonEditorSchemaConstants.ENUM).getAsJsonArray().add(dictionaryFullNames); + } + else { childObject.add(JsonEditorSchemaConstants.ENUM, dictionaryFullNames); - // Add Enum titles for generated translated values during JSON instance - // generation - JsonObject enumTitles = new JsonObject(); - enumTitles.add(JsonEditorSchemaConstants.ENUM_TITLES, dictionaryNames); + } + // Add Enum titles for generated translated values during JSON instance + // generation + JsonObject enumTitles = new JsonObject(); + enumTitles.add(JsonEditorSchemaConstants.ENUM_TITLES, dictionaryNames); + if (childObject.get(JsonEditorSchemaConstants.OPTIONS) != null) { + childObject.get(JsonEditorSchemaConstants.OPTIONS).getAsJsonArray().add(enumTitles); + } + else { childObject.add(JsonEditorSchemaConstants.OPTIONS, enumTitles); } + + } + else { + if (childObject.get(JsonEditorSchemaConstants.ENUM) != null) { + childObject.get(JsonEditorSchemaConstants.ENUM).getAsJsonArray().add(dictionaryNames); + } else { childObject.add(JsonEditorSchemaConstants.ENUM, dictionaryNames); } } } + private static void processDictionaryElements(String dictionaryReference, JsonObject childObject, + DictionaryService dictionaryService) { + String[] dictionaryKeyArray = + dictionaryReference.substring(dictionaryReference.indexOf(ToscaSchemaConstants.DICTIONARY) + 11, + dictionaryReference.length()).split("#"); + if (dictionaryKeyArray.length > 1) { + processComplexDictionaryElements(dictionaryKeyArray, childObject, dictionaryService); + } + else { + processSimpleDictionaryElements(dictionaryKeyArray, childObject, dictionaryService); + } + } + private static String getJsonType(String toscaType) { String jsonType = null; if (toscaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_INTEGER)) {