From 6047cd212696f5260d1296ce1fc3449dadb6005d Mon Sep 17 00:00:00 2001 From: aribeiro Date: Tue, 18 May 2021 20:57:07 +0100 Subject: Support for associating node types to models Issue-ID: SDC-3597 Signed-off-by: aribeiro Signed-off-by: MichaelMorris Change-Id: Icd0066240b78ba98d8f0efab66d11756f18cb251 --- .../java/org/openecomp/sdc/be/model/Component.java | 8 ++ .../openecomp/sdc/be/model/UploadResourceInfo.java | 20 +++- .../jsonjanusgraph/datamodel/ToscaElement.java | 1 + .../operations/NodeTypeOperation.java | 5 + .../operations/ToscaElementOperation.java | 28 +++++ .../operations/ToscaOperationFacade.java | 132 +++++++++++++++++---- .../model/jsonjanusgraph/utils/ModelConverter.java | 5 + .../operations/api/StorageOperationStatus.java | 1 + 8 files changed, 177 insertions(+), 23 deletions(-) (limited to 'catalog-model/src/main/java') 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 dee4088d04..1b5038efde 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 @@ -104,6 +104,14 @@ public abstract class Component implements PropertiesOwner { componentMetadataDefinition.getMetadataDataDefinition().setCategorySpecificMetadata(categorySpecificMetadata); } + public String getModel() { + return getComponentMetadataDefinition().getMetadataDataDefinition().getModel(); + } + + public void setModel(final String model) { + getComponentMetadataDefinition().getMetadataDataDefinition().setModel(model); + } + @JsonIgnore public ComponentMetadataDefinition getComponentMetadataDefinition() { return componentMetadataDefinition; diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/UploadResourceInfo.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/UploadResourceInfo.java index d6151c3d78..752fad2278 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/UploadResourceInfo.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/UploadResourceInfo.java @@ -35,15 +35,17 @@ public class UploadResourceInfo { private List artifactList; private String contactId, name, resourceIconPath, icon, vendorName, vendorRelease, resourceVendorModelNumber; private String resourceType = "VFC"; + private String model; public UploadResourceInfo(String payload, String payloadName, String description, String category, List tags, - List artifactsList) { + List artifactsList, String modelName) { super(); this.payloadData = payload; this.payloadName = payloadName; this.description = description; this.tags = tags; this.artifactList = artifactsList; + this.model = modelName; if (category != null) { String[] arr = category.split("/"); if (arr.length >= 2) { @@ -101,6 +103,14 @@ public class UploadResourceInfo { this.artifactList = artifactsList; } + public String getModel() { + return model; + } + + public void setModel(final String model) { + this.model = model; + } + @Override public int hashCode() { final int prime = 31; @@ -116,6 +126,7 @@ public class UploadResourceInfo { result = prime * result + ((tags == null) ? 0 : tags.hashCode()); result = prime * result + ((vendorName == null) ? 0 : vendorName.hashCode()); result = prime * result + ((vendorRelease == null) ? 0 : vendorRelease.hashCode()); + result = prime * result + ((model == null) ? 0 : model.hashCode()); result = prime * result + ((resourceVendorModelNumber == null) ? 0 : resourceVendorModelNumber.hashCode()); return result; } @@ -195,6 +206,13 @@ public class UploadResourceInfo { } else if (!tags.equals(other.tags)) { return false; } + if (model == null) { + if (other.model != null) { + return false; + } + } else if (!model.equals(other.model)) { + return false; + } if (vendorName == null) { if (other.vendorName != null) { return false; 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 c176ec812b..38fb83bcf2 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 @@ -59,6 +59,7 @@ public abstract class ToscaElement { private Map capabilitiesProperties; private Map requirements; private Map dataTypes; + private String model; // User private String creatorUserId; private String creatorFullName; diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/NodeTypeOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/NodeTypeOperation.java index 3369d65f76..21c25a2289 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/NodeTypeOperation.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/NodeTypeOperation.java @@ -137,6 +137,11 @@ public class NodeTypeOperation extends ToscaElementOperation { if (addAdditionalInformation != StorageOperationStatus.OK) { return Either.right(addAdditionalInformation); } + final StorageOperationStatus associateNodeTypeToModel = associateResourceMetadataToModel(nodeTypeVertex, nodeType); + if (associateNodeTypeToModel != StorageOperationStatus.OK) { + return Either.right(associateNodeTypeToModel); + } + return Either.left(nodeType); } 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 884f040d07..eb85090755 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 @@ -73,8 +73,10 @@ 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; import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElementTypeEnum; +import org.openecomp.sdc.be.model.jsonjanusgraph.operations.exception.ModelOperationExceptionSupplier; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter; +import org.openecomp.sdc.be.model.operations.impl.ModelOperation; import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder; import org.openecomp.sdc.be.utils.TypeUtils; import org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum; @@ -95,6 +97,8 @@ public abstract class ToscaElementOperation extends BaseOperation { private static Logger log = Logger.getLogger(ToscaElementOperation.class.getName()); @Autowired protected CategoryOperation categoryOperation; + @Autowired + protected ModelOperation modelOperation; public static DataTypeDefinition createDataType(final String dataTypeName) { final DataTypeDefinition dataType = new DataTypeDefinition(); @@ -339,6 +343,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)); + nodeTypeVertex.addMetadataProperty(GraphPropertyEnum.MODEL, toscaElement.getMetadataValue(JsonPresentationFields.MODEL)); toscaElement.getMetadata().entrySet().stream().filter(e -> e.getValue() != null) .forEach(e -> nodeTypeVertex.setJsonMetadataField(e.getKey(), e.getValue())); nodeTypeVertex.setUniqueId(toscaElement.getUniqueId()); @@ -420,6 +425,29 @@ public abstract class ToscaElementOperation extends BaseOperation { return StorageOperationStatus.OK; } + protected StorageOperationStatus associateResourceMetadataToModel(final GraphVertex nodeTypeVertex, final ToscaElement nodeType) { + if (nodeType.getMetadataValue(JsonPresentationFields.MODEL) == null) { + return StorageOperationStatus.OK; + } + final String model = ((String) nodeType.getMetadataValue(JsonPresentationFields.MODEL)); + final JanusGraphOperationStatus createEdge = janusGraphDao + .createEdge(getModelVertex(model), nodeTypeVertex, EdgeLabelEnum.MODEL_ELEMENT, new HashMap<>()); + if (createEdge != JanusGraphOperationStatus.OK) { + log.trace("Failed to associate resource {} to model {}", nodeType.getUniqueId(), model); + return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(createEdge); + } + return StorageOperationStatus.OK; + } + + private GraphVertex getModelVertex(final String modelName) { + log.debug("getModelVertex: fetching model {}", modelName); + final Optional modelVertexByNameOptional = modelOperation.findModelVertexByName(modelName); + if (modelVertexByNameOptional.isEmpty()) { + throw ModelOperationExceptionSupplier.invalidModel(modelName).get(); + } + return modelVertexByNameOptional.get(); + } + protected Either getResourceCategoryVertex(String elementId, String subcategoryName, String categoryName) { Either category = categoryOperation.getCategory(categoryName, VertexTypeEnum.RESOURCE_CATEGORY); if (category.isRight()) { diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacade.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacade.java index 205a48e9b2..814ac01eac 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacade.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacade.java @@ -39,6 +39,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.function.BiPredicate; @@ -112,7 +113,6 @@ import org.openecomp.sdc.be.model.catalog.CatalogComponent; import org.openecomp.sdc.be.model.jsonjanusgraph.config.ContainerInstanceTypesData; import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.TopologyTemplate; import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElement; -import org.openecomp.sdc.be.model.jsonjanusgraph.operations.exception.OperationException; import org.openecomp.sdc.be.model.jsonjanusgraph.utils.ModelConverter; import org.openecomp.sdc.be.model.operations.StorageException; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; @@ -348,19 +348,57 @@ public class ToscaOperationFacade { return ModelConverter.isAtomicComponent(component) ? nodeTypeOperation : topologyTemplateOperation; } + public Either getLatestByToscaResourceNameAndModel(final String toscaResourceName, + final String model) { + return getLatestByNameAndModel(toscaResourceName, JsonParseFlagEnum.ParseMetadata, new ComponentParametersView(), model); + } + + private Either getLatestByNameAndModel(final String nodeName, + final JsonParseFlagEnum parseFlag, + final ComponentParametersView filter, + final String model) { + Either result; + final Map propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class); + final Map propertiesNotToMatch = new EnumMap<>(GraphPropertyEnum.class); + propertiesToMatch.put(GraphPropertyEnum.TOSCA_RESOURCE_NAME, nodeName); + propertiesToMatch.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true); + propertiesToMatch.put(GraphPropertyEnum.MODEL, model); + propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true); + final Either, JanusGraphOperationStatus> highestResources = janusGraphDao + .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, parseFlag); + if (highestResources.isRight()) { + final JanusGraphOperationStatus status = highestResources.right().value(); + log.debug("failed to find resource with name {}. status={} ", nodeName, status); + result = Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status)); + return result; + } + final List resources = highestResources.left().value(); + double version = 0.0; + GraphVertex highestResource = null; + for (final GraphVertex vertex : resources) { + final Object versionObj = vertex.getMetadataProperty(GraphPropertyEnum.VERSION); + double resourceVersion = Double.parseDouble((String) versionObj); + if (resourceVersion > version) { + version = resourceVersion; + highestResource = vertex; + } + } + return getToscaElementByOperation(highestResource, filter); + } + public Either getLatestByToscaResourceName(String toscaResourceName) { - return getLatestByName(GraphPropertyEnum.TOSCA_RESOURCE_NAME, toscaResourceName); + return getLatestByName(GraphPropertyEnum.TOSCA_RESOURCE_NAME, toscaResourceName, null); } public Either getFullLatestComponentByToscaResourceName(String toscaResourceName) { ComponentParametersView fetchAllFilter = new ComponentParametersView(); fetchAllFilter.setIgnoreServicePath(true); fetchAllFilter.setIgnoreCapabiltyProperties(false); - return getLatestByName(GraphPropertyEnum.TOSCA_RESOURCE_NAME, toscaResourceName, JsonParseFlagEnum.ParseAll, fetchAllFilter); + return getLatestByName(GraphPropertyEnum.TOSCA_RESOURCE_NAME, toscaResourceName, JsonParseFlagEnum.ParseAll, fetchAllFilter, null); } - public Either getLatestByName(String resourceName) { - return getLatestByName(GraphPropertyEnum.NAME, resourceName); + public Either getLatestByName(String resourceName, String modelName) { + return getLatestByName(GraphPropertyEnum.NAME, resourceName, modelName); } public StorageOperationStatus validateCsarUuidUniqueness(String csarUUID) { @@ -483,6 +521,25 @@ public class ToscaOperationFacade { return predicateCriteria; } + public Optional isNodeAssociatedToModel(final String model, Resource resource) { + return getNodeModelVertices(resource, model); + } + + public Optional getNodeModelVertices(final Resource resource, final String model) { + final Either vertex = janusGraphDao + .getVertexById(resource.getUniqueId(), JsonParseFlagEnum.NoParse); + if (vertex.isRight() || Objects.isNull(vertex.left().value())) { + return Optional.empty(); + } + final Either, JanusGraphOperationStatus> nodeModelVertices = janusGraphDao + .getParentVertices(vertex.left().value(), EdgeLabelEnum.MODEL_ELEMENT, JsonParseFlagEnum.NoParse); + if (nodeModelVertices.isRight() || Objects.isNull(nodeModelVertices.left().value())) { + return Optional.empty(); + } + return nodeModelVertices.left().value().stream().filter(graphVertex -> graphVertex.getMetadataProperty(GraphPropertyEnum.NAME).equals(model)) + .findFirst(); + } + private boolean isValidForVendorRelease(final GraphVertex resource, final String vendorRelease) { if (!vendorRelease.equals("1.0")) { try { @@ -733,18 +790,19 @@ public class ToscaOperationFacade { } private Either getLatestByName(GraphPropertyEnum property, String nodeName, - JsonParseFlagEnum parseFlag) { - return getLatestByName(property, nodeName, parseFlag, new ComponentParametersView()); + JsonParseFlagEnum parseFlag, String modelName) { + return getLatestByName(property, nodeName, parseFlag, new ComponentParametersView(), modelName); } - // endregion private Either getLatestByName(GraphPropertyEnum property, String nodeName, - JsonParseFlagEnum parseFlag, ComponentParametersView filter) { + JsonParseFlagEnum parseFlag, ComponentParametersView filter, + String model) { Either result; Map propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class); Map propertiesNotToMatch = new EnumMap<>(GraphPropertyEnum.class); propertiesToMatch.put(property, nodeName); propertiesToMatch.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true); + propertiesToMatch.put(GraphPropertyEnum.MODEL, model); propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true); Either, JanusGraphOperationStatus> highestResources = janusGraphDao .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, parseFlag); @@ -769,8 +827,8 @@ public class ToscaOperationFacade { } // region - Component Get By .. - private Either getLatestByName(GraphPropertyEnum property, String nodeName) { - return getLatestByName(property, nodeName, JsonParseFlagEnum.ParseMetadata); + private Either getLatestByName(GraphPropertyEnum property, String nodeName, String modelName) { + return getLatestByName(property, nodeName, JsonParseFlagEnum.ParseMetadata, modelName); } public Either, StorageOperationStatus> getBySystemName(ComponentTypeEnum componentType, String systemName) { @@ -841,8 +899,8 @@ public class ToscaOperationFacade { } public Either getComponentByNameAndVendorRelease(final ComponentTypeEnum componentType, - final String name, final String vendorRelease, - final JsonParseFlagEnum parseFlag) { + final String name, final String vendorRelease, + final JsonParseFlagEnum parseFlag) { Map hasProperties = new EnumMap<>(GraphPropertyEnum.class); Map hasNotProperties = new EnumMap<>(GraphPropertyEnum.class); hasProperties.put(GraphPropertyEnum.NAME, name); @@ -851,8 +909,8 @@ public class ToscaOperationFacade { hasProperties.put(GraphPropertyEnum.COMPONENT_TYPE, componentType.name()); } Map> predicateCriteria = getVendorVersionPredicate(vendorRelease); - Either, JanusGraphOperationStatus> getResourceRes = janusGraphDao - .getByCriteria(null, hasProperties, hasNotProperties, predicateCriteria, parseFlag); + Either, JanusGraphOperationStatus> getResourceRes = janusGraphDao.getByCriteria(null, hasProperties, hasNotProperties, + predicateCriteria, parseFlag); if (getResourceRes.isRight()) { JanusGraphOperationStatus status = getResourceRes.right().value(); log.debug("failed to find resource with name {}, version {}. Status is {} ", name, predicateCriteria, status); @@ -2006,16 +2064,11 @@ public class ToscaOperationFacade { } return result; } - public Either validateComponentNameUniqueness(String name, ResourceTypeEnum resourceType, ComponentTypeEnum componentType) { - VertexTypeEnum vertexType = ModelConverter.isAtomicComponent(resourceType) ? VertexTypeEnum.NODE_TYPE : VertexTypeEnum.TOPOLOGY_TEMPLATE; String normalizedName = ValidationUtils.normaliseComponentName(name); - Map properties = new EnumMap<>(GraphPropertyEnum.class); - properties.put(GraphPropertyEnum.NORMALIZED_NAME, normalizedName); - properties.put(GraphPropertyEnum.COMPONENT_TYPE, componentType.name()); Either, JanusGraphOperationStatus> vertexEither = janusGraphDao - .getByCriteria(vertexType, properties, JsonParseFlagEnum.NoParse); + .getByCriteria(getVertexTypeEnum(resourceType), propertiesToMatch(normalizedName, componentType), JsonParseFlagEnum.NoParse); if (vertexEither.isRight() && vertexEither.right().value() != JanusGraphOperationStatus.NOT_FOUND) { log.debug("failed to get vertex from graph with property normalizedName: {}", normalizedName); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(vertexEither.right().value())); @@ -2023,6 +2076,41 @@ public class ToscaOperationFacade { return Either.left(CollectionUtils.isEmpty(vertexEither.isLeft() ? vertexEither.left().value() : null)); } + public Either validateComponentNameAndModelExists(final String resourceName, final String model, + final ResourceTypeEnum resourceType, + final ComponentTypeEnum componentType) { + Either result = validateComponentNameAndModelUniqueness(resourceName, model, resourceType, componentType); + if (result.isLeft()) { + result = Either.left(!result.left().value()); + } + return result; + } + + private Either validateComponentNameAndModelUniqueness(final String resourceName, final String modelName, + final ResourceTypeEnum resourceType, + final ComponentTypeEnum componentType) { + final String normalizedName = ValidationUtils.normaliseComponentName(resourceName); + final Either, JanusGraphOperationStatus> vertexEither = janusGraphDao + .getByCriteria(getVertexTypeEnum(resourceType), propertiesToMatch(normalizedName, componentType), null, null, JsonParseFlagEnum.NoParse); + if (vertexEither.isRight() && vertexEither.right().value() != JanusGraphOperationStatus.NOT_FOUND) { + log.debug("failed to get vertex from graph with property normalizedName: {} and model: {}", normalizedName, modelName); + return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(vertexEither.right().value())); + } + return Either.left(CollectionUtils.isEmpty(vertexEither.isLeft() ? vertexEither.left().value().stream() + .filter(graphVertex -> graphVertex.getMetadataProperty(GraphPropertyEnum.NAME).equals(modelName)).collect(Collectors.toList()) : null)); + } + + private VertexTypeEnum getVertexTypeEnum(final ResourceTypeEnum resourceType) { + return ModelConverter.isAtomicComponent(resourceType) ? VertexTypeEnum.NODE_TYPE : VertexTypeEnum.TOPOLOGY_TEMPLATE; + } + + private Map propertiesToMatch(final String normalizedName, final ComponentTypeEnum componentType) { + final Map properties = new EnumMap<>(GraphPropertyEnum.class); + properties.put(GraphPropertyEnum.NORMALIZED_NAME, normalizedName); + properties.put(GraphPropertyEnum.COMPONENT_TYPE, componentType.name()); + return properties; + } + private void fillNodeTypePropsMap(final Map hasProps, final Map hasNotProps, final String internalComponentType) { final Configuration configuration = ConfigurationManager.getConfigurationManager().getConfiguration(); @@ -3242,6 +3330,6 @@ public class ToscaOperationFacade { } public Either getLatestByServiceName(String serviceName) { - return getLatestByName(GraphPropertyEnum.NAME, serviceName); + return getLatestByName(GraphPropertyEnum.NAME, serviceName, null); } } 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 225a068aaf..193270974e 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 @@ -718,6 +718,9 @@ public class ModelConverter { component.setSystemName((String) toscaElement.getMetadataValue(JsonPresentationFields.SYSTEM_NAME)); component.setDerivedFromGenericType(toscaElement.getDerivedFromGenericType()); component.setDerivedFromGenericVersion(toscaElement.getDerivedFromGenericVersion()); + if(toscaElement.getModel() != null) { + component.setModel(toscaElement.getModel()); + } Map properties = toscaElement.getProperties(); if (MapUtils.isNotEmpty(properties)) { List propertiesMap = properties.values().stream().map(x -> new PropertyDefinition(x)).collect(Collectors.toList()); @@ -733,6 +736,7 @@ public class ModelConverter { resource.setToscaResourceName((String) toscaElement.getMetadataValue(JsonPresentationFields.TOSCA_RESOURCE_NAME)); resource.setVendorName((String) toscaElement.getMetadataValue(JsonPresentationFields.VENDOR_NAME)); resource.setVendorRelease((String) toscaElement.getMetadataValue(JsonPresentationFields.VENDOR_RELEASE)); + resource.setModel((String) toscaElement.getMetadataValue(JsonPresentationFields.MODEL)); // field isn't mandatory , but shouldn't be null(should be an empty string instead) if (((String) toscaElement.getMetadataValue(JsonPresentationFields.RESOURCE_VENDOR_MODEL_NUMBER)) != null) { resource.setResourceVendorModelNumber((String) toscaElement.getMetadataValue(JsonPresentationFields.RESOURCE_VENDOR_MODEL_NUMBER)); @@ -1294,6 +1298,7 @@ public class ModelConverter { toscaElement.setMetadataValue(JsonPresentationFields.TOSCA_RESOURCE_NAME, ((Resource) component).getToscaResourceName()); toscaElement.setMetadataValue(JsonPresentationFields.VENDOR_NAME, ((Resource) component).getVendorName()); toscaElement.setMetadataValue(JsonPresentationFields.VENDOR_RELEASE, ((Resource) component).getVendorRelease()); + toscaElement.setMetadataValue(JsonPresentationFields.MODEL, component.getModel()); // field isn't mandatory , but shouldn't be null(should be an empty string instead) if (((Resource) component).getResourceVendorModelNumber() != null) { toscaElement diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/StorageOperationStatus.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/StorageOperationStatus.java index 3c8521ae79..4fbb5fbef3 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/StorageOperationStatus.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/StorageOperationStatus.java @@ -41,6 +41,7 @@ public enum StorageOperationStatus { OPERATION_NOT_SUPPORTED, CATEGORY_NOT_FOUND, PARENT_RESOURCE_NOT_FOUND, + MODEL_NOT_FOUND, MULTIPLE_PARENT_RESOURCE_FOUND, INCONSISTENCY, GRAPH_IS_NOT_AVAILABLE, -- cgit 1.2.3-korg