From 69779180f8f4e020606634f9bd8cac728daed2a2 Mon Sep 17 00:00:00 2001 From: MichaelMorris Date: Tue, 15 Dec 2020 16:12:59 +0000 Subject: Support for category specific metadata Signed-off-by: MichaelMorris Issue-ID: SDC-3412 Change-Id: I87392cc21dc25253b558bdc1d453d99659d049fa --- .../java/org/openecomp/sdc/be/model/Component.java | 9 +++++ .../jsonjanusgraph/datamodel/ToscaElement.java | 7 +++- .../operations/TopologyTemplateOperation.java | 6 +++ .../operations/ToscaElementOperation.java | 18 ++++++++- .../model/jsonjanusgraph/utils/ModelConverter.java | 44 ++++++++++++++++++++++ .../sdc/be/ui/model/UiResourceMetadata.java | 3 ++ .../sdc/be/ui/model/UiServiceMetadata.java | 3 ++ 7 files changed, 87 insertions(+), 3 deletions(-) (limited to 'catalog-model/src/main/java/org') diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/Component.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/Component.java index bf9c3275a6..7b188ac978 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/Component.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/Component.java @@ -29,6 +29,7 @@ import static org.apache.commons.collections.MapUtils.isEmpty; import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.collect.Maps; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -89,6 +90,14 @@ public abstract class Component implements PropertiesOwner { private Map interfaces; private List dataTypes; private SubstitutionFilterDataDefinition substitutionFilter; + + public void setCategorySpecificMetadata(final Map categorySpecificMetadata) { + componentMetadataDefinition.getMetadataDataDefinition().setCategorySpecificMetadata(categorySpecificMetadata); + } + public Map getCategorySpecificMetadata() { + final Map categorySpecificMetadata = componentMetadataDefinition.getMetadataDataDefinition().getCategorySpecificMetadata(); + return categorySpecificMetadata == null ? Collections.emptyMap() : categorySpecificMetadata; + } public Component(ComponentMetadataDefinition componentMetadataDefinition) { this.componentMetadataDefinition = componentMetadataDefinition; diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/datamodel/ToscaElement.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/datamodel/ToscaElement.java index ce9e5e0c43..baea051538 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/datamodel/ToscaElement.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/datamodel/ToscaElement.java @@ -85,11 +85,14 @@ public abstract class ToscaElement { } public void setMetadataValue(JsonPresentationFields name, Object value) { + setMetadataValue(name.getPresentation(), value); + } + + public void setMetadataValue(String name, Object value) { if (metadata == null) { metadata = new HashMap<>(); } - metadata.put(name.getPresentation(), value); - + metadata.put(name, value); } // -------------------- public String getUUID() { diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/TopologyTemplateOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/TopologyTemplateOperation.java index 3109107f03..76f952b4c4 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/TopologyTemplateOperation.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/TopologyTemplateOperation.java @@ -39,6 +39,7 @@ import org.openecomp.sdc.be.dao.jsongraph.GraphVertex; import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum; import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum; import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum; +import org.openecomp.sdc.be.datatypes.category.MetadataKeyDataDefinition; import org.openecomp.sdc.be.datatypes.elements.MapAttributesDataDefinition; import org.openecomp.sdc.be.datatypes.elements.MapCapabilityProperty; import org.openecomp.sdc.be.datatypes.elements.MapListCapabilityDataDefinition; @@ -1189,6 +1190,11 @@ public class TopologyTemplateOperation extends ToscaElementOperation { Type listTypeCat = new TypeToken>() {}.getType(); List iconsfromJsonCat = getGson().fromJson((String) metadataProperties.get(GraphPropertyEnum.ICONS.getProperty()), listTypeCat); category.setIcons(iconsfromJsonCat); + + final Type metadataKeysTypeCat = new TypeToken>() {}.getType(); + final List metadataKeysfromJsonCat = getGson().fromJson((String) metadataProperties.get(GraphPropertyEnum.METADATA_KEYS), metadataKeysTypeCat); + category.setMetadataKeys(metadataKeysfromJsonCat); + categories.add(category); toscaElement.setCategories(categories); diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperation.java index bc77d20ed5..3ae39fdc4a 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperation.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperation.java @@ -54,6 +54,7 @@ import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum; import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum; import org.openecomp.sdc.be.dao.jsongraph.utils.JsonParserUtils; import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary; +import org.openecomp.sdc.be.datatypes.category.MetadataKeyDataDefinition; import org.openecomp.sdc.be.datatypes.elements.AdditionalInfoParameterDataDefinition; import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition; import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition; @@ -330,7 +331,7 @@ public abstract class ToscaElementOperation extends BaseOperation { nodeTypeVertex.addMetadataProperty(GraphPropertyEnum.IS_ARCHIVED, toscaElement.getMetadataValue(JsonPresentationFields.IS_ARCHIVED)); nodeTypeVertex.addMetadataProperty(GraphPropertyEnum.ARCHIVE_TIME, toscaElement.getMetadataValue(JsonPresentationFields.ARCHIVE_TIME)); nodeTypeVertex.addMetadataProperty(GraphPropertyEnum.IS_VSP_ARCHIVED, toscaElement.getMetadataValue(JsonPresentationFields.IS_VSP_ARCHIVED)); - toscaElement.getMetadata().entrySet().stream().filter(e -> e.getValue() != null).forEach(e -> nodeTypeVertex.setJsonMetadataField(JsonPresentationFields.getByPresentation(e.getKey()), e.getValue())); + toscaElement.getMetadata().entrySet().stream().filter(e -> e.getValue() != null).forEach(e -> nodeTypeVertex.setJsonMetadataField(e.getKey(), e.getValue())); nodeTypeVertex.setUniqueId(toscaElement.getUniqueId()); nodeTypeVertex.setType(toscaElement.getComponentType()); @@ -1046,6 +1047,12 @@ public abstract class ToscaElementOperation extends BaseOperation { subcategory.setUniqueId((String) subCategoryV.property(GraphPropertyEnum.UNIQUE_ID.getProperty()).value()); subcategory.setNormalizedName(subCategoryNormalizedName); subcategory.setName((String) subCategoryV.property(GraphPropertyEnum.NAME.getProperty()).value()); + + Type listTypeSubcat = new TypeToken>() { + }.getType(); + List metadataKeys = getGson().fromJson((String) subCategoryV.property(GraphPropertyEnum.METADATA_KEYS.getProperty()).value(), listTypeSubcat); + subcategory.setMetadataKeys(metadataKeys); + Either parentVertex = janusGraphDao.getParentVertex(subCategoryV, EdgeLabelEnum.SUB_CATEGORY, JsonParseFlagEnum.NoParse); Vertex categoryV = parentVertex.left().value(); String categoryNormalizedName = (String) categoryV.property(GraphPropertyEnum.NORMALIZED_NAME.getProperty()).value(); @@ -1077,6 +1084,11 @@ public abstract class ToscaElementOperation extends BaseOperation { category.setName((String) categoryV.property(GraphPropertyEnum.NAME.getProperty()).value()); category.setUseServiceSubstitutionForNestedServices((Boolean) categoryV.property(GraphPropertyEnum.USE_SUBSTITUTION_FOR_NESTED_SERVICES.getProperty()).orElse(false)); + Type listTypeCat = new TypeToken>() { + }.getType(); + List metadataKeys = getGson().fromJson((String) categoryV.property(GraphPropertyEnum.METADATA_KEYS.getProperty()).value(), listTypeCat); + category.setMetadataKeys(metadataKeys); + categories.add(category); catalogComponent.setCategories(categories); return JanusGraphOperationStatus.OK; @@ -1104,6 +1116,10 @@ public abstract class ToscaElementOperation extends BaseOperation { List iconsfromJsonSubcat = getGson().fromJson((String) metadataProperties.get(GraphPropertyEnum.ICONS), listTypeSubcat); subcategory.setIcons(iconsfromJsonSubcat); + final Type metadataKeysTypeCat = new TypeToken>() {}.getType(); + final List metadataKeysfromJsonCat = getGson().fromJson((String) metadataProperties.get(GraphPropertyEnum.METADATA_KEYS), metadataKeysTypeCat); + subcategory.setMetadataKeys(metadataKeysfromJsonCat); + Either parentVertex = janusGraphDao .getParentVertex(subCategoryV, EdgeLabelEnum.SUB_CATEGORY, JsonParseFlagEnum.NoParse); if (parentVertex.isRight()) { diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/utils/ModelConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/utils/ModelConverter.java index 146d5d6c80..bbda9776f7 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/utils/ModelConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/utils/ModelConverter.java @@ -39,10 +39,12 @@ import org.apache.commons.collections.MapUtils; import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import org.openecomp.sdc.be.config.ConfigurationManager; import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus; import org.openecomp.sdc.be.dao.jsongraph.GraphVertex; import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum; import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionaryExtractor; +import org.openecomp.sdc.be.datatypes.category.MetadataKeyDataDefinition; import org.openecomp.sdc.be.datatypes.components.ComponentMetadataDataDefinition; import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition; import org.openecomp.sdc.be.datatypes.components.ServiceMetadataDataDefinition; @@ -105,6 +107,8 @@ import org.openecomp.sdc.be.model.RequirementCapabilityRelDef; import org.openecomp.sdc.be.model.RequirementDefinition; import org.openecomp.sdc.be.model.Resource; import org.openecomp.sdc.be.model.Service; +import org.openecomp.sdc.be.model.category.CategoryDefinition; +import org.openecomp.sdc.be.model.category.SubCategoryDefinition; import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.NodeType; import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.TopologyTemplate; import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElement; @@ -776,6 +780,7 @@ public class ModelConverter { } else { resource.setResourceVendorModelNumber(""); } + } else if (component.getComponentType() == ComponentTypeEnum.SERVICE) { Service service = (Service) component; if (((String) toscaElement.getMetadataValue(JsonPresentationFields.SERVICE_TYPE)) != null){ @@ -803,6 +808,41 @@ public class ModelConverter { component.setUUID((String) toscaElement.getMetadataValue(JsonPresentationFields.UUID)); component.setIsDeleted((Boolean) toscaElement.getMetadataValue(JsonPresentationFields.IS_DELETED)); component.setToscaType(toscaElement.getToscaType().getValue()); + final List metadataKeys = getCategorySpecificMetadataKeys(toscaElement); + if (CollectionUtils.isNotEmpty(metadataKeys)) { + final Map categorySpecificMetadata = new HashMap<>(); + for (final String metadataKey: metadataKeys) { + categorySpecificMetadata.put(metadataKey, (String) toscaElement.getMetadata().get(metadataKey)); + } + component.setCategorySpecificMetadata(categorySpecificMetadata ); + } + } + + private static List getCategorySpecificMetadataKeys(final ToscaElement toscaElement){ + final List metadataKeys = new ArrayList<>(); + final Optional category = getCategory(toscaElement); + if (category.isPresent()) { + if (CollectionUtils.isNotEmpty(category.get().getMetadataKeys())) { + for (final MetadataKeyDataDefinition metadataKey: category.get().getMetadataKeys()) { + metadataKeys.add(metadataKey.getName()); + } + } + final Optional subCategory = getSubCategory(category.get()); + if (subCategory.isPresent() && CollectionUtils.isNotEmpty(subCategory.get().getMetadataKeys())) { + for (final MetadataKeyDataDefinition metadataKey: subCategory.get().getMetadataKeys()) { + metadataKeys.add(metadataKey.getName()); + } + } + } + return metadataKeys; + } + + private static Optional getCategory(ToscaElement toscaElement) { + return CollectionUtils.isEmpty(toscaElement.getCategories()) ? Optional.empty() : Optional.of(toscaElement.getCategories().get(0)); + } + + private static Optional getSubCategory(CategoryDefinition category) { + return CollectionUtils.isEmpty(category.getSubcategories()) ? Optional.empty() : Optional.of(category.getSubcategories().get(0)); } private static NodeType convertToNodeType(Component component) { @@ -1345,6 +1385,10 @@ public class ModelConverter { toscaElement.setMetadataValue(JsonPresentationFields.TAGS, component.getTags()); toscaElement.setMetadataValue(JsonPresentationFields.INVARIANT_UUID, component.getInvariantUUID()); toscaElement.setMetadataValue(JsonPresentationFields.CONTACT_ID, component.getContactId()); + for (final String key: component.getCategorySpecificMetadata().keySet()) { + toscaElement.setMetadataValue(key, component.getCategorySpecificMetadata().get(key)); + } + final List dataTypes = component.getDataTypes(); if (CollectionUtils.isNotEmpty(dataTypes)) { toscaElement.setDataTypes(dataTypes.stream() diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiResourceMetadata.java b/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiResourceMetadata.java index c8d7bdfb7c..971f966d5f 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiResourceMetadata.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiResourceMetadata.java @@ -21,6 +21,7 @@ package org.openecomp.sdc.be.ui.model; import java.util.List; +import java.util.Map; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -42,6 +43,7 @@ public class UiResourceMetadata extends UiComponentMetadata { private String licenseType; private String toscaResourceName; private List derivedFrom; + private Map categorySpecificMetadata; public UiResourceMetadata(List categories, List derivedFrom, @@ -55,6 +57,7 @@ public class UiResourceMetadata extends UiComponentMetadata { this.licenseType = metadata.getLicenseType(); this.toscaResourceName = metadata.getToscaResourceName(); this.derivedFrom = derivedFrom; + this.categorySpecificMetadata = metadata.getCategorySpecificMetadata(); } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiServiceMetadata.java b/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiServiceMetadata.java index e1fe5876e6..6aec7bca36 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiServiceMetadata.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiServiceMetadata.java @@ -21,6 +21,7 @@ package org.openecomp.sdc.be.ui.model; import java.util.List; +import java.util.Map; import lombok.Getter; import lombok.Setter; import org.openecomp.sdc.be.datatypes.components.ServiceMetadataDataDefinition; @@ -38,6 +39,7 @@ public class UiServiceMetadata extends UiComponentMetadata { private String environmentContext; private String instantiationType; private String serviceFunction; + private Map categorySpecificMetadata; public UiServiceMetadata(List categories, ServiceMetadataDataDefinition metadata) { super(categories, metadata); @@ -49,6 +51,7 @@ public class UiServiceMetadata extends UiComponentMetadata { this.environmentContext = metadata.getEnvironmentContext(); this.instantiationType = metadata.getInstantiationType(); this.serviceFunction = metadata.getServiceFunction(); + this.categorySpecificMetadata = metadata.getCategorySpecificMetadata(); } } -- cgit 1.2.3-korg