X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=catalog-be%2Fsrc%2Fmain%2Fjava%2Forg%2Fopenecomp%2Fsdc%2Fbe%2Fcomponents%2Fimpl%2FImportUtils.java;h=3a1c55a31f31f0f8947cd35e98a2bafcf91fca12;hb=7081d625ddd0aadcb64f5ba882339fabb612233d;hp=614b261b4ad8919343f18d74cdf0b8889293bbb3;hpb=95ad93091d5fa6e377e76f312d495151bddc9da8;p=sdc.git diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ImportUtils.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ImportUtils.java index 614b261b4a..3a1c55a31f 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ImportUtils.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ImportUtils.java @@ -17,7 +17,6 @@ * limitations under the License. * ============LICENSE_END========================================================= */ - package org.openecomp.sdc.be.components.impl; import static org.apache.commons.collections.CollectionUtils.isEmpty; @@ -43,15 +42,14 @@ import java.util.function.Consumer; import java.util.function.Function; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringEscapeUtils; +import org.onap.sdc.tosca.datatypes.model.EntrySchema; import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.datatypes.elements.Annotation; -import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition; import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition; import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition; import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields; -import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.model.AnnotationTypeDefinition; import org.openecomp.sdc.be.model.AttributeDefinition; @@ -87,10 +85,8 @@ public final class ImportUtils { private static final CustomResolver customResolver = new CustomResolver(); private static final Yaml strictYamlLoader = new YamlLoader().getStrictYamlLoader(); - - private static ComponentsUtils componentsUtils; - private static final Logger log = Logger.getLogger(ImportUtils.class); + private static ComponentsUtils componentsUtils; private ImportUtils() { } @@ -100,21 +96,6 @@ public final class ImportUtils { componentsUtils = componentsUtils; } - private static class CustomResolver extends Resolver { - - @Override - protected void addImplicitResolvers() { - // avoid implicit resolvers for strings that can be interpreted as boolean values - addImplicitResolver(Tag.STR, EMPTY, ""); - addImplicitResolver(Tag.STR, NULL, null); - addImplicitResolver(Tag.NULL, NULL, "~nN\0"); - addImplicitResolver(Tag.NULL, EMPTY, null); - addImplicitResolver(Tag.INT, INT, "-+0123456789"); - addImplicitResolver(Tag.FLOAT, FLOAT, "-+0123456789."); - addImplicitResolver(Tag.YAML, YAML, "!&*"); - } - } - private static void buildMap(Map output, Map map) { for (Entry entry : map.entrySet()) { String key = entry.getKey(); @@ -143,55 +124,17 @@ public final class ImportUtils { return result; } - private static class YamlLoader extends YamlProcessor { - - public Yaml getStrictYamlLoader() { - return createYaml(); - } - } - @SuppressWarnings("unchecked") - public static Either, ResultStatusEnum> getHeatParamsWithoutImplicitTypes( - String heatDecodedPayload, String artifactType) { - Map heatData = (Map) new Yaml(new Constructor(), new Representer(), - new DumperOptions(), customResolver).load(heatDecodedPayload); + public static Either, ResultStatusEnum> getHeatParamsWithoutImplicitTypes(String heatDecodedPayload, + String artifactType) { + Map heatData = (Map) new Yaml(new Constructor(), new Representer(), new DumperOptions(), customResolver) + .load(heatDecodedPayload); return getHeatParameters(heatData, artifactType); } - public static class Constants { - - public static final String FIRST_NON_CERTIFIED_VERSION = "0.1"; - public static final String VENDOR_NAME = "ONAP (Tosca)"; - public static final String VENDOR_RELEASE = "1.0.0.wd03"; - public static final LifecycleStateEnum NORMATIVE_TYPE_LIFE_CYCLE = LifecycleStateEnum.CERTIFIED; - public static final LifecycleStateEnum NORMATIVE_TYPE_LIFE_CYCLE_NOT_CERTIFIED_CHECKOUT = LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT; - public static final boolean NORMATIVE_TYPE_HIGHEST_VERSION = true; - public static final String ABSTRACT_CATEGORY_NAME = "Generic"; - public static final String ABSTRACT_SUBCATEGORY = "Abstract"; - public static final String DEFAULT_ICON = "defaulticon"; - public static final String INNER_VFC_DESCRIPTION = "Not reusable inner VFC"; - public static final String USER_DEFINED_RESOURCE_NAMESPACE_PREFIX = "org.openecomp.resource."; - public static final String UI_JSON_PAYLOAD_NAME = "payloadName"; - public static final String CVFC_DESCRIPTION = "Complex node type that is used as nested type in VF"; - public static final String ESCAPED_DOUBLE_QUOTE = "\""; - public static final String QUOTE = "'"; - public static final String VF_DESCRIPTION = "Nested VF in service"; - - private Constants() { - } - } - - public enum ResultStatusEnum { - ELEMENT_NOT_FOUND, GENERAL_ERROR, OK, INVALID_PROPERTY_DEFAULT_VALUE, INVALID_PROPERTY_TYPE, INVALID_PROPERTY_VALUE, MISSING_ENTRY_SCHEMA_TYPE, INVALID_PROPERTY_NAME - } - - public enum ToscaElementTypeEnum { - BOOLEAN, STRING, MAP, LIST, ALL - } - @SuppressWarnings("unchecked") - private static void handleElementNameNotFound(String elementName, Object elementValue, - ToscaElementTypeEnum elementType, List returnedList) { + private static void handleElementNameNotFound(String elementName, Object elementValue, ToscaElementTypeEnum elementType, + List returnedList) { if (elementValue instanceof Map) { findToscaElements((Map) elementValue, elementName, elementType, returnedList); } else if (elementValue instanceof List) { @@ -200,9 +143,8 @@ public final class ImportUtils { } @SuppressWarnings("unchecked") - private static void addFoundElementAccordingToItsType(String elementName, ToscaElementTypeEnum elementType, - List returnedList, Object elementValue) { - + private static void addFoundElementAccordingToItsType(String elementName, ToscaElementTypeEnum elementType, List returnedList, + Object elementValue) { if (elementValue instanceof Boolean) { if (elementType == ToscaElementTypeEnum.BOOLEAN || elementType == ToscaElementTypeEnum.ALL) { returnedList.add(elementValue); @@ -216,13 +158,11 @@ public final class ImportUtils { returnedList.add(elementValue); } findToscaElements((Map) elementValue, elementName, elementType, returnedList); - } else if (elementValue instanceof List) { if (elementType == ToscaElementTypeEnum.LIST || elementType == ToscaElementTypeEnum.ALL) { returnedList.add(elementValue); } findAllToscaElementsInList((List) elementValue, elementName, elementType, returnedList); - } // For Integer, Double etc... else if (elementType == ToscaElementTypeEnum.ALL && elementValue != null) { @@ -230,13 +170,12 @@ public final class ImportUtils { } } - private static void findAllToscaElementsInList(List list, String elementName, - ToscaElementTypeEnum elementType, List returnedList) { + private static void findAllToscaElementsInList(List list, String elementName, ToscaElementTypeEnum elementType, + List returnedList) { list.forEach(elementValue -> handleElementNameNotFound(elementName, elementValue, elementType, returnedList)); } - public static Either findToscaElement(Map toscaJson, - TypeUtils.ToscaTagNamesEnum elementName, + public static Either findToscaElement(Map toscaJson, TypeUtils.ToscaTagNamesEnum elementName, ToscaElementTypeEnum elementType) { List foundElements = new ArrayList<>(); findToscaElements(toscaJson, elementName.getElementName(), elementType, foundElements); @@ -247,22 +186,19 @@ public final class ImportUtils { } /** - * Recursively searches for all tosca elements with key equals to elementName and value equals to elementType.
- * Returns Either element with:
List with all value if values found
Or ELEMENT_NOT_FOUND ActionStatus + * Recursively searches for all tosca elements with key equals to elementName and value equals to elementType.
Returns Either element + * with:
List with all value if values found
Or ELEMENT_NOT_FOUND ActionStatus * * @param toscaJson * @return */ - public static Either, ResultStatusEnum> findToscaElements(Map toscaJson, - String elementName, - ToscaElementTypeEnum elementType, - List returnedList) { + public static Either, ResultStatusEnum> findToscaElements(Map toscaJson, String elementName, + ToscaElementTypeEnum elementType, List returnedList) { Either, ResultStatusEnum> returnedElement = Either.right(ResultStatusEnum.ELEMENT_NOT_FOUND); String skipKey = null; if (toscaJson.containsKey(elementName)) { skipKey = handleFoundElement(toscaJson, elementName, elementType, returnedList); } - Iterator> keyValItr = toscaJson.entrySet().iterator(); while (keyValItr.hasNext()) { Entry keyValEntry = keyValItr.next(); @@ -270,53 +206,45 @@ public final class ImportUtils { handleElementNameNotFound(elementName, keyValEntry.getValue(), elementType, returnedList); } } - if (!isEmpty(returnedList)) { returnedElement = Either.left(returnedList); } - return returnedElement; } - private static String handleFoundElement(Map toscaJson, String elementName, - ToscaElementTypeEnum elementType, List returnedList) { + private static String handleFoundElement(Map toscaJson, String elementName, ToscaElementTypeEnum elementType, + List returnedList) { Object elementValue = toscaJson.get(elementName); addFoundElementAccordingToItsType(elementName, elementType, returnedList, elementValue); return elementName; - } @SuppressWarnings("unchecked") public static Either, ResultStatusEnum> findFirstToscaListElement(Map toscaJson, TypeUtils.ToscaTagNamesEnum toscaTagName) { Either, ResultStatusEnum> returnedElement = Either.right(ResultStatusEnum.ELEMENT_NOT_FOUND); - Either findFirstToscaElement = findToscaElement(toscaJson, toscaTagName, - ToscaElementTypeEnum.LIST); + Either findFirstToscaElement = findToscaElement(toscaJson, toscaTagName, ToscaElementTypeEnum.LIST); if (findFirstToscaElement.isLeft()) { returnedElement = Either.left((List) findFirstToscaElement.left().value()); } return returnedElement; - } @SuppressWarnings("unchecked") public static Either, ResultStatusEnum> findFirstToscaMapElement(Map toscaJson, TypeUtils.ToscaTagNamesEnum toscaTagName) { Either, ResultStatusEnum> returnedElement = Either.right(ResultStatusEnum.ELEMENT_NOT_FOUND); - Either findFirstToscaElement = findToscaElement(toscaJson, toscaTagName, - ToscaElementTypeEnum.MAP); + Either findFirstToscaElement = findToscaElement(toscaJson, toscaTagName, ToscaElementTypeEnum.MAP); if (findFirstToscaElement.isLeft()) { returnedElement = Either.left((Map) findFirstToscaElement.left().value()); } return returnedElement; - } public static Either findFirstToscaStringElement(Map toscaJson, TypeUtils.ToscaTagNamesEnum toscaTagName) { Either returnedElement = Either.right(ResultStatusEnum.ELEMENT_NOT_FOUND); - Either findFirstToscaElements = findToscaElement(toscaJson, toscaTagName, - ToscaElementTypeEnum.STRING); + Either findFirstToscaElements = findToscaElement(toscaJson, toscaTagName, ToscaElementTypeEnum.STRING); if (findFirstToscaElements.isLeft()) { returnedElement = Either.left((String) findFirstToscaElements.left().value()); } @@ -324,8 +252,7 @@ public final class ImportUtils { } /** - * searches for first Tosca in Json map (toscaJson) boolean element by name (toscaTagName) returns found element or - * ELEMENT_NOT_FOUND status + * searches for first Tosca in Json map (toscaJson) boolean element by name (toscaTagName) returns found element or ELEMENT_NOT_FOUND status * * @param toscaJson * @param toscaTagName @@ -334,8 +261,7 @@ public final class ImportUtils { public static Either findFirstToscaBooleanElement(Map toscaJson, TypeUtils.ToscaTagNamesEnum toscaTagName) { Either returnedElement = Either.right(ResultStatusEnum.ELEMENT_NOT_FOUND); - Either findFirstToscaElements = findToscaElement(toscaJson, toscaTagName, - ToscaElementTypeEnum.BOOLEAN); + Either findFirstToscaElements = findToscaElement(toscaJson, toscaTagName, ToscaElementTypeEnum.BOOLEAN); if (findFirstToscaElements.isLeft()) { returnedElement = Either.left(String.valueOf(findFirstToscaElements.left().value())); } @@ -349,8 +275,7 @@ public final class ImportUtils { } } - private static List getPropertyConstraints(final Map propertyValue, - final String propertyType) { + private static List getPropertyConstraints(final Map propertyValue, final String propertyType) { final List propertyFieldConstraints = findCurrentLevelConstraintsElement(propertyValue); if (CollectionUtils.isEmpty(propertyFieldConstraints)) { return Collections.emptyList(); @@ -358,12 +283,9 @@ public final class ImportUtils { final List constraintList = new ArrayList<>(); final Type constraintType = new TypeToken() { }.getType(); - final Gson gson = new GsonBuilder().registerTypeAdapter(constraintType, new PropertyConstraintDeserialiser()) - .create(); - + final Gson gson = new GsonBuilder().registerTypeAdapter(constraintType, new PropertyConstraintDeserialiser()).create(); for (final Object constraintJson : propertyFieldConstraints) { - final PropertyConstraint propertyConstraint = validateAndGetPropertyConstraint(propertyType, constraintType, - gson, constraintJson); + final PropertyConstraint propertyConstraint = validateAndGetPropertyConstraint(propertyType, constraintType, gson, constraintJson); constraintList.add(propertyConstraint); } return constraintList; @@ -380,26 +302,22 @@ public final class ImportUtils { } } return constraints; - } - private static PropertyConstraint validateAndGetPropertyConstraint(String propertyType, Type constraintType, - Gson gson, Object constraintJson) { + private static PropertyConstraint validateAndGetPropertyConstraint(String propertyType, Type constraintType, Gson gson, Object constraintJson) { PropertyConstraint propertyConstraint; try { propertyConstraint = gson.fromJson(gson.toJson(constraintJson), constraintType); } catch (ClassCastException | JsonParseException e) { - throw new ByActionStatusComponentException(ActionStatus.INVALID_PROPERTY_CONSTRAINTS_FORMAT, - constraintJson.toString()); + throw new ByActionStatusComponentException(ActionStatus.INVALID_PROPERTY_CONSTRAINTS_FORMAT, constraintJson.toString()); } if (propertyConstraint != null && propertyConstraint instanceof ValidValuesConstraint) { try { ((ValidValuesConstraint) propertyConstraint).validateType(propertyType); } catch (ConstraintValueDoNotMatchPropertyTypeException e) { - BeEcompErrorManager.getInstance().logInternalFlowError("GetInitializedPropertyConstraint", - e.getMessage(), BeEcompErrorManager.ErrorSeverity.ERROR); - throw new ByActionStatusComponentException(ActionStatus.INVALID_PROPERTY_CONSTRAINTS, - ConstraintType.VALID_VALUES.name(), + BeEcompErrorManager.getInstance() + .logInternalFlowError("GetInitializedPropertyConstraint", e.getMessage(), BeEcompErrorManager.ErrorSeverity.ERROR); + throw new ByActionStatusComponentException(ActionStatus.INVALID_PROPERTY_CONSTRAINTS, ConstraintType.VALID_VALUES.name(), ((ValidValuesConstraint) propertyConstraint).getValidValues().toString(), propertyType); } } @@ -407,41 +325,29 @@ public final class ImportUtils { } public static PropertyDefinition createModuleProperty(Map propertyValue) { - PropertyDefinition propertyDef = new PropertyDefinition(); setField(propertyValue, TypeUtils.ToscaTagNamesEnum.TYPE, propertyDef::setType); - setFieldBoolean(propertyValue, ToscaTagNamesEnum.REQUIRED, - req -> propertyDef.setRequired(Boolean.parseBoolean(req))); + setFieldBoolean(propertyValue, ToscaTagNamesEnum.REQUIRED, req -> propertyDef.setRequired(Boolean.parseBoolean(req))); setField(propertyValue, TypeUtils.ToscaTagNamesEnum.DESCRIPTION, propertyDef::setDescription); - - setJsonStringField(propertyValue, TypeUtils.ToscaTagNamesEnum.DEFAULT_VALUE, propertyDef.getType(), - propertyDef::setDefaultValue); - setJsonStringField(propertyValue, TypeUtils.ToscaTagNamesEnum.VALUE, propertyDef.getType(), - propertyDef::setValue); - - setFieldBoolean(propertyValue, TypeUtils.ToscaTagNamesEnum.IS_PASSWORD, - pass -> propertyDef.setPassword(Boolean.parseBoolean(pass))); + setJsonStringField(propertyValue, TypeUtils.ToscaTagNamesEnum.DEFAULT_VALUE, propertyDef.getType(), propertyDef::setDefaultValue); + setJsonStringField(propertyValue, TypeUtils.ToscaTagNamesEnum.VALUE, propertyDef.getType(), propertyDef::setValue); + setFieldBoolean(propertyValue, TypeUtils.ToscaTagNamesEnum.IS_PASSWORD, pass -> propertyDef.setPassword(Boolean.parseBoolean(pass))); setField(propertyValue, TypeUtils.ToscaTagNamesEnum.STATUS, propertyDef::setStatus); - setScheme(propertyValue, propertyDef); + setSchema(propertyValue, propertyDef); setPropertyConstraints(propertyValue, propertyDef); - return propertyDef; } - private static void setJsonStringField(Map propertyValue, ToscaTagNamesEnum elementName, - String type, Consumer setter) { - Either eitherValue = findToscaElement(propertyValue, elementName, - ToscaElementTypeEnum.ALL); + private static void setJsonStringField(Map propertyValue, ToscaTagNamesEnum elementName, String type, Consumer setter) { + Either eitherValue = findToscaElement(propertyValue, elementName, ToscaElementTypeEnum.ALL); if (eitherValue.isLeft()) { String propertyJsonStringValue = getPropertyJsonStringValue(eitherValue.left().value(), type); setter.accept(propertyJsonStringValue); } } - public static Annotation createModuleAnnotation(Map annotationMap, - AnnotationTypeOperations annotationTypeOperations) { - String parsedAnnotationType = findFirstToscaStringElement(annotationMap, TypeUtils.ToscaTagNamesEnum.TYPE) - .left().value(); + public static Annotation createModuleAnnotation(Map annotationMap, AnnotationTypeOperations annotationTypeOperations) { + String parsedAnnotationType = findFirstToscaStringElement(annotationMap, TypeUtils.ToscaTagNamesEnum.TYPE).left().value(); AnnotationTypeDefinition annotationTypeObject = annotationTypeOperations.getLatestType(parsedAnnotationType); if (annotationTypeObject != null) { Annotation annotation = new Annotation(); @@ -464,11 +370,9 @@ public final class ImportUtils { for (Entry entry : value.entrySet()) { String name = entry.getKey(); if (!PROPERTY_NAME_PATTERN_IGNORE_LENGTH.matcher(name).matches()) { - log.debug("The property with invalid name {} occurred upon import resource {}. ", name, - annotation.getName()); - result = Either.right(componentsUtils.getResponseFormat(componentsUtils - .convertFromResultStatusEnum(ResultStatusEnum.INVALID_PROPERTY_NAME, - JsonPresentationFields.PROPERTY))); + log.debug("The property with invalid name {} occurred upon import resource {}. ", name, annotation.getName()); + result = Either.right(componentsUtils.getResponseFormat( + componentsUtils.convertFromResultStatusEnum(ResultStatusEnum.INVALID_PROPERTY_NAME, JsonPresentationFields.PROPERTY))); } PropertyDefinition propertyDefinition = entry.getValue(); propertyDefinition.setValue(propertyDefinition.getName()); @@ -478,16 +382,13 @@ public final class ImportUtils { } annotation.setProperties(propertiesList); } else if (properties.right().value() != ResultStatusEnum.ELEMENT_NOT_FOUND) { - result = Either - .right(componentsUtils.getResponseFormat(componentsUtils.convertFromResultStatusEnum(properties - .right() - .value(), JsonPresentationFields.PROPERTY))); + result = Either.right(componentsUtils + .getResponseFormat(componentsUtils.convertFromResultStatusEnum(properties.right().value(), JsonPresentationFields.PROPERTY))); } return result; } - public static InputDefinition createModuleInput(final Map inputValue, - final AnnotationTypeOperations annotationTypeOperations) { + public static InputDefinition createModuleInput(final Map inputValue, final AnnotationTypeOperations annotationTypeOperations) { return parseAnnotationsAndAddItToInput(createModuleInput(inputValue), inputValue, annotationTypeOperations); } @@ -496,66 +397,60 @@ public final class ImportUtils { setField(inputValue, TypeUtils.ToscaTagNamesEnum.TYPE, inputDef::setType); setFieldBoolean(inputValue, ToscaTagNamesEnum.REQUIRED, req -> inputDef.setRequired(Boolean.parseBoolean(req))); setField(inputValue, TypeUtils.ToscaTagNamesEnum.DESCRIPTION, inputDef::setDescription); - - setJsonStringField(inputValue, TypeUtils.ToscaTagNamesEnum.DEFAULT_VALUE, inputDef.getType(), - inputDef::setDefaultValue); - + setJsonStringField(inputValue, TypeUtils.ToscaTagNamesEnum.DEFAULT_VALUE, inputDef.getType(), inputDef::setDefaultValue); setFieldBoolean(inputValue, TypeUtils.ToscaTagNamesEnum.IS_PASSWORD, pass -> inputDef.setPassword(Boolean.parseBoolean(pass))); setField(inputValue, TypeUtils.ToscaTagNamesEnum.STATUS, inputDef::setStatus); setField(inputValue, TypeUtils.ToscaTagNamesEnum.LABEL, inputDef::setLabel); setFieldBoolean(inputValue, TypeUtils.ToscaTagNamesEnum.HIDDEN, hidden -> inputDef.setHidden(Boolean.parseBoolean(hidden))); setFieldBoolean(inputValue, TypeUtils.ToscaTagNamesEnum.IMMUTABLE, immutable -> inputDef.setImmutable(Boolean.parseBoolean(immutable))); - - setScheme(inputValue, inputDef); + setFieldMap(inputValue, ToscaTagNamesEnum.METADATA, inputDef::setMetadata); + setSchema(inputValue, inputDef); setPropertyConstraints(inputValue, inputDef); return inputDef; } - public static InputDefinition parseAnnotationsAndAddItToInput(InputDefinition inputDef, - Map inputValue, + public static InputDefinition parseAnnotationsAndAddItToInput(InputDefinition inputDef, Map inputValue, AnnotationTypeOperations annotationTypeOperations) { Function elementGenByName = ImportUtils::createAnnotation; - Function, Annotation> func = annotation -> createModuleAnnotation(annotation, - annotationTypeOperations); - return getElements(inputValue, TypeUtils.ToscaTagNamesEnum.ANNOTATIONS, elementGenByName, func). - left().map(annotations -> modifyInputWithAnnotations(inputDef, annotations)). - left().on(err -> { - log.error("Parsing annotations or adding them to the PropertyDataDefinition object failed"); - return inputDef; - }); - } - - private static InputDefinition modifyInputWithAnnotations(InputDefinition inputDef, - Map annotationsMap) { + Function, Annotation> func = annotation -> createModuleAnnotation(annotation, annotationTypeOperations); + return getElements(inputValue, TypeUtils.ToscaTagNamesEnum.ANNOTATIONS, elementGenByName, func).left() + .map(annotations -> modifyInputWithAnnotations(inputDef, annotations)).left().on(err -> { + log.error("Parsing annotations or adding them to the PropertyDataDefinition object failed"); + return inputDef; + }); + } + + private static InputDefinition modifyInputWithAnnotations(InputDefinition inputDef, Map annotationsMap) { setAnnotationsName(annotationsMap); inputDef.setAnnotationsToInput(annotationsMap.values()); return inputDef; } public static AttributeDefinition createModuleAttribute(Map attributeMap) { - AttributeDefinition attributeDef = new AttributeDefinition(); setField(attributeMap, TypeUtils.ToscaTagNamesEnum.TYPE, attributeDef::setType); setField(attributeMap, TypeUtils.ToscaTagNamesEnum.DESCRIPTION, attributeDef::setDescription); setField(attributeMap, TypeUtils.ToscaTagNamesEnum.STATUS, attributeDef::setStatus); - - setJsonStringField(attributeMap, TypeUtils.ToscaTagNamesEnum.DEFAULT_VALUE, attributeDef.getType(), - attributeDef::set_default); - - setScheme(attributeMap, attributeDef); + setJsonStringField(attributeMap, TypeUtils.ToscaTagNamesEnum.DEFAULT_VALUE, attributeDef.getType(), attributeDef::set_default); + setEntrySchema(attributeMap, attributeDef); return attributeDef; } - private static void setScheme(Map propertyValue, - ToscaDataDefinition toscaDataDefinition) { - Either schemaElementRes = findSchemaElement(propertyValue); + private static void setSchema(final Map propertyValue, final PropertyDefinition propertyDefinition) { + final Either schemaElementRes = findEntrySchemaElement(propertyValue); + if (schemaElementRes.isLeft()) { + propertyDefinition.setSchema(getSchema(schemaElementRes.left().value())); + } + } + + private static void setEntrySchema(final Map toscaJsonMap, final AttributeDefinition attributeDefinition) { + final Either schemaElementRes = findEntrySchemaElement(toscaJsonMap); if (schemaElementRes.isLeft()) { - SchemaDefinition schemaDef = getSchema(schemaElementRes.left().value()); - toscaDataDefinition.setSchema(schemaDef); + attributeDefinition.setEntry_schema(createEntrySchema(schemaElementRes.left().value())); } } - private static Either findSchemaElement(Map propertyValue) { + private static Either findEntrySchemaElement(final Map propertyValue) { return findToscaElement(propertyValue, TypeUtils.ToscaTagNamesEnum.ENTRY_SCHEMA, ToscaElementTypeEnum.ALL); } @@ -573,55 +468,68 @@ public final class ImportUtils { return schema; } - private static void setField(Map toscaJson, TypeUtils.ToscaTagNamesEnum tagName, - Consumer setter) { + private static EntrySchema createEntrySchema(final Object toscaEntrySchemaObj) { + final EntrySchema entrySchema = new EntrySchema(); + if (toscaEntrySchemaObj instanceof String) { + entrySchema.setType((String) toscaEntrySchemaObj); + } else if (toscaEntrySchemaObj instanceof Map) { + final PropertyDefinition schemeProperty = createModuleProperty((Map) toscaEntrySchemaObj); + entrySchema.setType(schemeProperty.getType()); + entrySchema.setDescription(schemeProperty.getDescription()); + } + return entrySchema; + } + + private static void setField(Map toscaJson, TypeUtils.ToscaTagNamesEnum tagName, Consumer setter) { Either fieldStringValue = findFirstToscaStringElement(toscaJson, tagName); if (fieldStringValue.isLeft()) { setter.accept(fieldStringValue.left().value()); } - } - public static void setFieldBoolean(Map toscaJson, TypeUtils.ToscaTagNamesEnum tagName, - Consumer setter) { + public static void setFieldBoolean(Map toscaJson, TypeUtils.ToscaTagNamesEnum tagName, Consumer setter) { Either fieldStringValue = findFirstToscaBooleanElement(toscaJson, tagName); if (fieldStringValue.isLeft()) { setter.accept(fieldStringValue.left().value()); } + } + private static void setFieldMap(final Map toscaJson, final ToscaTagNamesEnum tagName, + final Consumer> setter) { + final Either, ResultStatusEnum> toscaMapElement = findFirstToscaMapElement(toscaJson, tagName); + if (toscaMapElement.isLeft()) { + setter.accept(toscaMapElement.left().value()); + } } - public static Either, ResultStatusEnum> getProperties( - Map toscaJson) { + public static Either, ResultStatusEnum> getProperties(Map toscaJson) { Function elementGenByName = ImportUtils::createProperties; Function, PropertyDefinition> func = ImportUtils::createModuleProperty; - return getElements(toscaJson, TypeUtils.ToscaTagNamesEnum.PROPERTIES, elementGenByName, func); + } + public static Either, ResultStatusEnum> getAttributes(final Map toscaJson) { + final Function elementGenByName = ImportUtils::createAttribute; + final Function, AttributeDefinition> func = ImportUtils::createModuleAttribute; + return getElements(toscaJson, ToscaTagNamesEnum.ATTRIBUTES, elementGenByName, func); } public static Either, ResultStatusEnum> getInputs(Map toscaJson, AnnotationTypeOperations annotationTypeOperations) { Function elementGenByName = ImportUtils::createInputs; - Function, InputDefinition> func = object -> createModuleInput(object, - annotationTypeOperations); - + Function, InputDefinition> func = object -> createModuleInput(object, annotationTypeOperations); return getElements(toscaJson, TypeUtils.ToscaTagNamesEnum.INPUTS, elementGenByName, func); - } public static Either, ResultStatusEnum> getInputs(final Map toscaJson) { - return getElements(toscaJson, TypeUtils.ToscaTagNamesEnum.INPUTS, ImportUtils::createInputs, - ImportUtils::createModuleInput); + return getElements(toscaJson, TypeUtils.ToscaTagNamesEnum.INPUTS, ImportUtils::createInputs, ImportUtils::createModuleInput); } - public static Either, ResultStatusEnum> getElements(Map toscaJson, - TypeUtils.ToscaTagNamesEnum elementTagName, + public static Either, ResultStatusEnum> getElements(Map toscaJson, TypeUtils.ToscaTagNamesEnum elementTagName, Function elementGenByName, Function, T> func) { Either, ResultStatusEnum> eitherResult = Either.right(ResultStatusEnum.ELEMENT_NOT_FOUND); - Either, ResultStatusEnum> toscaAttributes = findFirstToscaMapElement(toscaJson, - elementTagName); + Either, ResultStatusEnum> toscaAttributes = findFirstToscaMapElement(toscaJson, elementTagName); if (toscaAttributes.isLeft()) { Map jsonAttributes = toscaAttributes.left().value(); Map moduleAttributes = new HashMap<>(); @@ -629,8 +537,7 @@ public final class ImportUtils { while (propertiesNameValue.hasNext()) { Entry attributeNameValue = propertiesNameValue.next(); if (attributeNameValue.getValue() instanceof Map) { - @SuppressWarnings("unchecked") - T attribute = func.apply((Map) attributeNameValue.getValue()); + @SuppressWarnings("unchecked") T attribute = func.apply((Map) attributeNameValue.getValue()); if (attribute != null) { moduleAttributes.put(String.valueOf(attributeNameValue.getKey()), attribute); } @@ -642,15 +549,12 @@ public final class ImportUtils { if (moduleAttributes.size() > 0) { eitherResult = Either.left(moduleAttributes); } - } return eitherResult; - } private static AttributeDefinition createAttribute(String name) { AttributeDefinition attribute = new AttributeDefinition(); - attribute.setName(name); return attribute; } @@ -664,7 +568,6 @@ public final class ImportUtils { private static InputDefinition createInputs(String name) { InputDefinition input = new InputDefinition(); - input.setName(name); return input; } @@ -676,11 +579,8 @@ public final class ImportUtils { } public static Either, ResultStatusEnum> getHeatParameters(Map heatData, String artifactType) { - - Either, ResultStatusEnum> eitherResult = Either - .right(ResultStatusEnum.ELEMENT_NOT_FOUND); - Either, ResultStatusEnum> toscaProperties = findFirstToscaMapElement(heatData, - TypeUtils.ToscaTagNamesEnum.PARAMETERS); + Either, ResultStatusEnum> eitherResult = Either.right(ResultStatusEnum.ELEMENT_NOT_FOUND); + Either, ResultStatusEnum> toscaProperties = findFirstToscaMapElement(heatData, TypeUtils.ToscaTagNamesEnum.PARAMETERS); if (toscaProperties.isLeft()) { Map jsonProperties = toscaProperties.left().value(); List moduleProperties = new ArrayList<>(); @@ -689,8 +589,7 @@ public final class ImportUtils { Entry propertyNameValue = propertiesNameValue.next(); if (propertyNameValue.getValue() instanceof Map || propertyNameValue.getValue() instanceof List) { if (!artifactType.equals(ArtifactTypeEnum.HEAT_ENV.getType())) { - @SuppressWarnings("unchecked") - Either propertyStatus = createModuleHeatParameter( + @SuppressWarnings("unchecked") Either propertyStatus = createModuleHeatParameter( (Map) propertyNameValue.getValue()); if (propertyStatus.isRight()) { return Either.right(propertyStatus.right().value()); @@ -704,36 +603,29 @@ public final class ImportUtils { } else { addHeatParamDefinition(moduleProperties, propertyNameValue, false); } - } - if (!isEmpty(moduleProperties)) { eitherResult = Either.left(moduleProperties); } - } return eitherResult; - } - private static void addHeatParamDefinition(List moduleProperties, - Entry propertyNameValue, boolean isJson) { + private static void addHeatParamDefinition(List moduleProperties, Entry propertyNameValue, + boolean isJson) { HeatParameterDefinition property = new HeatParameterDefinition(); Object value = propertyNameValue.getValue(); if (value != null) { - property.setDefaultValue( - isJson ? new Gson().toJson(value) : StringEscapeUtils.escapeJava(String.valueOf(value))); + property.setDefaultValue(isJson ? new Gson().toJson(value) : StringEscapeUtils.escapeJava(String.valueOf(value))); } property.setName(String.valueOf(propertyNameValue.getKey())); moduleProperties.add(property); } - private static Either createModuleHeatParameter( - Map propertyValue) { + private static Either createModuleHeatParameter(Map propertyValue) { HeatParameterDefinition propertyDef = new HeatParameterDefinition(); String type; - Either propertyFieldType = findFirstToscaStringElement(propertyValue, - TypeUtils.ToscaTagNamesEnum.TYPE); + Either propertyFieldType = findFirstToscaStringElement(propertyValue, TypeUtils.ToscaTagNamesEnum.TYPE); if (propertyFieldType.isLeft()) { type = propertyFieldType.left().value(); propertyDef.setType(type); @@ -745,20 +637,18 @@ public final class ImportUtils { if (propertyFieldDescription.isLeft()) { propertyDef.setDescription(propertyFieldDescription.left().value()); } - - Either propertyFieldDefaultVal = findToscaElement(propertyValue, - TypeUtils.ToscaTagNamesEnum.DEFAULT_VALUE, ToscaElementTypeEnum.ALL); + Either propertyFieldDefaultVal = findToscaElement(propertyValue, TypeUtils.ToscaTagNamesEnum.DEFAULT_VALUE, + ToscaElementTypeEnum.ALL); if (propertyFieldDefaultVal.isLeft()) { if (propertyFieldDefaultVal.left().value() == null) { return Either.right(ResultStatusEnum.INVALID_PROPERTY_VALUE); } Object value = propertyFieldDefaultVal.left().value(); - String defaultValue = type.equals(HeatParameterType.JSON.getType()) ? new Gson().toJson(value) - : StringEscapeUtils.escapeJava(String.valueOf(value)); + String defaultValue = + type.equals(HeatParameterType.JSON.getType()) ? new Gson().toJson(value) : StringEscapeUtils.escapeJava(String.valueOf(value)); propertyDef.setDefaultValue(defaultValue); propertyDef.setCurrentValue(defaultValue); } - return Either.left(propertyDef); } @@ -773,16 +663,14 @@ public final class ImportUtils { return null; } ToscaPropertyType validType = ToscaPropertyType.isValidType(type); - if (validType == null || validType == ToscaPropertyType.JSON || validType == ToscaPropertyType.MAP - || validType == ToscaPropertyType.LIST) { + if (validType == null || validType == ToscaPropertyType.JSON || validType == ToscaPropertyType.MAP || validType == ToscaPropertyType.LIST) { return gson.toJson(value); } return value.toString(); } /** - * removes from Json map (toscaJson) first element found by name (elementName) note that this method could update - * the received argument toscaJson + * removes from Json map (toscaJson) first element found by name (elementName) note that this method could update the received argument toscaJson * * @param toscaJson * @param elementName @@ -799,4 +687,57 @@ public final class ImportUtils { } } } + + public enum ResultStatusEnum { + ELEMENT_NOT_FOUND, GENERAL_ERROR, OK, INVALID_PROPERTY_DEFAULT_VALUE, INVALID_PROPERTY_TYPE, INVALID_PROPERTY_VALUE, MISSING_ENTRY_SCHEMA_TYPE, INVALID_PROPERTY_NAME, INVALID_ATTRIBUTE_NAME + } + + public enum ToscaElementTypeEnum { + BOOLEAN, STRING, MAP, LIST, ALL + } + + private static class CustomResolver extends Resolver { + + @Override + protected void addImplicitResolvers() { + // avoid implicit resolvers for strings that can be interpreted as boolean values + addImplicitResolver(Tag.STR, EMPTY, ""); + addImplicitResolver(Tag.STR, NULL, null); + addImplicitResolver(Tag.NULL, NULL, "~nN\0"); + addImplicitResolver(Tag.NULL, EMPTY, null); + addImplicitResolver(Tag.INT, INT, "-+0123456789"); + addImplicitResolver(Tag.FLOAT, FLOAT, "-+0123456789."); + addImplicitResolver(Tag.YAML, YAML, "!&*"); + } + } + + private static class YamlLoader extends YamlProcessor { + + public Yaml getStrictYamlLoader() { + return createYaml(); + } + } + + public static class Constants { + + public static final String FIRST_NON_CERTIFIED_VERSION = "0.1"; + public static final String VENDOR_NAME = "ONAP (Tosca)"; + public static final String VENDOR_RELEASE = "1.0.0.wd03"; + public static final LifecycleStateEnum NORMATIVE_TYPE_LIFE_CYCLE = LifecycleStateEnum.CERTIFIED; + public static final LifecycleStateEnum NORMATIVE_TYPE_LIFE_CYCLE_NOT_CERTIFIED_CHECKOUT = LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT; + public static final boolean NORMATIVE_TYPE_HIGHEST_VERSION = true; + public static final String ABSTRACT_CATEGORY_NAME = "Generic"; + public static final String ABSTRACT_SUBCATEGORY = "Abstract"; + public static final String DEFAULT_ICON = "defaulticon"; + public static final String INNER_VFC_DESCRIPTION = "Not reusable inner VFC"; + public static final String USER_DEFINED_RESOURCE_NAMESPACE_PREFIX = "org.openecomp.resource."; + public static final String UI_JSON_PAYLOAD_NAME = "payloadName"; + public static final String CVFC_DESCRIPTION = "Complex node type that is used as nested type in VF"; + public static final String ESCAPED_DOUBLE_QUOTE = "\""; + public static final String QUOTE = "'"; + public static final String VF_DESCRIPTION = "Nested VF in service"; + + private Constants() { + } + } }