summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/tosca
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/tosca')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CapabiltyRequirementConvertor.java79
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java79
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java6
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java270
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaMetadata.java40
5 files changed, 315 insertions, 159 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CapabiltyRequirementConvertor.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CapabiltyRequirementConvertor.java
index 41268188f9..886b654b81 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CapabiltyRequirementConvertor.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CapabiltyRequirementConvertor.java
@@ -1,5 +1,4 @@
/*-
-
* ============LICENSE_START=======================================================
* SDC
* ================================================================================
@@ -81,9 +80,7 @@ public class CapabiltyRequirementConvertor {
@Autowired
private ToscaOperationFacade toscaOperationFacade;
- protected CapabiltyRequirementConvertor() {
-
- }
+ protected CapabiltyRequirementConvertor() {}
public static synchronized CapabiltyRequirementConvertor getInstance() {
if (instance == null) {
@@ -117,9 +114,8 @@ public class CapabiltyRequirementConvertor {
}
private void convertOverridenProperties(ComponentInstance componentInstance, Map<String, DataTypeDefinition> dataTypes, Map<String, ToscaTemplateCapability> capabilties, CapabilityDefinition c) {
- List<ComponentInstanceProperty> properties = c.getProperties();
- if (properties != null && !properties.isEmpty()) {
- properties
+ if (CollectionUtils.isNotEmpty(c.getProperties())) {
+ c.getProperties()
.stream()
.filter(p -> p.getValue() != null || p.getDefaultValue() != null)
.forEach(p -> convertOverridenProperty(componentInstance, dataTypes, capabilties, c, p));
@@ -331,7 +327,9 @@ public class CapabiltyRequirementConvertor {
result = Either.right(false);
}
if(result == null){
- result = buildSubstitutedName(componentsCache, getOriginRes.left().value(), Lists.newArrayList(path.subList(0, path.size()-1)), name);
+ List<String> reducedPath = getReducedPath(path);
+ reducedPath.remove(reducedPath.size()-1);
+ result = buildSubstitutedName(componentsCache, getOriginRes.left().value(), reducedPath, name);
}
return result;
}
@@ -432,12 +430,12 @@ public class CapabiltyRequirementConvertor {
*/
public Either<Map<String, String[]>, ToscaError> convertSubstitutionMappingCapabilities(Map<String, Component> componentsCache, Component component) {
Map<String, List<CapabilityDefinition>> capabilities = component.getCapabilities();
- Either<Map<String, String[]>, ToscaError> res = null;
+ Either<Map<String, String[]>, ToscaError> res;
if (capabilities != null) {
res = buildAddSubstitutionMappingsCapabilities(componentsCache, component, capabilities);
} else {
+ res = Either.left(Maps.newHashMap());
logger.debug(NO_CAPABILITIES);
- res = Either.left(new HashMap<>());
}
return res;
}
@@ -483,7 +481,7 @@ public class CapabiltyRequirementConvertor {
toscaCapability.setValid_source_types(c.getValidSourceTypes());
List<ComponentInstanceProperty> properties = c.getProperties();
- if (properties != null && !properties.isEmpty()) {
+ if (CollectionUtils.isNotEmpty(properties)) {
Map<String, ToscaProperty> toscaProperties = new HashMap<>();
for (PropertyDefinition property : properties) {
ToscaProperty toscaProperty = PropertyConvertor.getInstance().convertProperty(dataTypes, property, true);
@@ -493,15 +491,22 @@ public class CapabiltyRequirementConvertor {
}
toscaCapabilities.put(name, toscaCapability);
}
-
- Either<String, Boolean> buildSubstitutedName(Map<String, Component> originComponents, Component originComponent, List<String> path, String name) {
+ /**
+ * Allows to build substituted name of capability\requirement of the origin component instance according to the path
+ * @param componentsCache
+ * @param originComponent
+ * @param path
+ * @param name
+ * @return
+ */
+ public Either<String, Boolean> buildSubstitutedName(Map<String, Component> componentsCache, Component originComponent, List<String> path, String name) {
StringBuilder substitutedName = new StringBuilder();
boolean nameBuiltSuccessfully = true;
Either<String, Boolean> result;
if(CollectionUtils.isNotEmpty(path) && !ToscaUtils.isComplexVfc(originComponent)){
- Collections.reverse(path);
- Iterator<String> instanceIdIter = path.iterator();
- nameBuiltSuccessfully = appendNameRecursively(originComponents, originComponent, instanceIdIter, substitutedName);
+ List<String> reducedPath = getReducedPath(path);
+ Collections.reverse(reducedPath);
+ nameBuiltSuccessfully = appendNameRecursively(componentsCache, originComponent, reducedPath.iterator(), substitutedName);
}
if(nameBuiltSuccessfully){
result = Either.left(substitutedName.append(name).toString());
@@ -511,43 +516,57 @@ public class CapabiltyRequirementConvertor {
return result;
}
- private boolean appendNameRecursively(Map<String, Component> originComponents, Component originComponent, Iterator<String> instanceIdIter, StringBuilder substitutedName) {
- if(CollectionUtils.isNotEmpty(originComponent.getComponentInstances()) && instanceIdIter.hasNext()){
+ private List<String> getReducedPath(List<String> path) {
+ List<String> pathCopy = Lists.newArrayList();
+ path.stream().forEach(id -> {if(!pathCopy.contains(id))pathCopy.add(id);});
+ return pathCopy;
+ }
+
+ private boolean appendNameRecursively(Map<String, Component> componentsCache, Component originComponent, Iterator<String> instanceIdIter, StringBuilder substitutedName) {
+ if(CollectionUtils.isNotEmpty(originComponent.getComponentInstances()) && instanceIdIter.hasNext() && !ToscaUtils.isComplexVfc(originComponent)){
String instanceId = instanceIdIter.next();
Optional<ComponentInstance> instanceOpt = originComponent.getComponentInstances().stream().filter(i -> i.getUniqueId().equals(instanceId)).findFirst();
if(!instanceOpt.isPresent()){
logger.debug("Failed to find an instance with uniqueId {} on a component with uniqueId {}", instanceId, originComponent.getUniqueId());
return false;
}
- Either<Component, Boolean> getOriginRes = getOriginComponent(originComponents, instanceOpt.get());
+ substitutedName.append(instanceOpt.get().getNormalizedName()).append('.');
+ Either<Component, Boolean> getOriginRes = getOriginComponent(componentsCache, instanceOpt.get());
if(getOriginRes.isRight()){
return false;
}
- appendNameRecursively(originComponents, getOriginRes.left().value(), instanceIdIter, substitutedName);
- substitutedName.append(instanceOpt.get().getNormalizedName()).append('.');
- return true;
+ appendNameRecursively(componentsCache, getOriginRes.left().value(), instanceIdIter, substitutedName);
}
return true;
}
- private Either<Component, Boolean> getOriginComponent(Map<String, Component> originComponents, ComponentInstance instance) {
+ Either<Component, Boolean> getOriginComponent(Map<String, Component> componentsCache, ComponentInstance instance) {
Either<Component, Boolean> result;
Either<Component, StorageOperationStatus> getOriginRes;
- if(originComponents.containsKey(instance.getComponentUid())){
- result = Either.left(originComponents.get(instance.getComponentUid()));
+ if(componentsCache.containsKey(instance.getActualComponentUid())){
+ result = Either.left(componentsCache.get(instance.getActualComponentUid()));
} else {
- ComponentParametersView filter = new ComponentParametersView(true);
- filter.setIgnoreComponentInstances(false);
- getOriginRes = toscaOperationFacade.getToscaElement(instance.getComponentUid(), filter);
+ ComponentParametersView filter = getFilter(instance);
+ getOriginRes = toscaOperationFacade.getToscaElement(instance.getActualComponentUid(), filter);
if(getOriginRes.isRight()){
- logger.debug("Failed to get an origin component with uniqueId {}", instance.getComponentUid());
+ logger.debug("Failed to get an origin component with uniqueId {}", instance.getActualComponentUid());
result = Either.right(false);
} else {
result = Either.left(getOriginRes.left().value());
- originComponents.put(getOriginRes.left().value().getUniqueId(), getOriginRes.left().value());
+ componentsCache.put(getOriginRes.left().value().getUniqueId(), getOriginRes.left().value());
}
}
return result;
}
+ private ComponentParametersView getFilter(ComponentInstance instance) {
+ ComponentParametersView filter = new ComponentParametersView(true);
+ filter.setIgnoreComponentInstances(false);
+ if(instance.getIsProxy()){
+ filter.setIgnoreCapabilities(false);
+ filter.setIgnoreRequirements(false);
+ }
+ return filter;
+ }
+
}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java
index 2f4a385f69..f6ae79b26a 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java
@@ -20,8 +20,26 @@
package org.openecomp.sdc.be.tosca;
-import com.google.gson.Gson;
-import fj.data.Either;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.output.ByteArrayOutputStream;
@@ -61,7 +79,6 @@ import org.openecomp.sdc.be.tosca.model.ToscaTemplate;
import org.openecomp.sdc.be.utils.CommonBeUtils;
import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
import org.openecomp.sdc.common.api.ArtifactTypeEnum;
-import org.openecomp.sdc.common.api.Constants;
import org.openecomp.sdc.common.impl.ExternalConfiguration;
import org.openecomp.sdc.common.util.GeneralUtility;
import org.openecomp.sdc.common.util.ValidationUtils;
@@ -75,25 +92,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
+import com.google.gson.Gson;
+
+import fj.data.Either;
/**
@@ -254,7 +255,8 @@ public class CsarUtils {
String cassandraId = artifactDefinition.getEsId();
Either<byte[], ActionStatus> fromCassandra = getFromCassandra(cassandraId);
if (fromCassandra.isRight()) {
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(fromCassandra.right().value());
+ log.debug("ArtifactName {}, unique ID {}", artifactDefinition.getArtifactName(), artifactDefinition.getUniqueId());
+ ResponseFormat responseFormat = componentsUtils.getResponseFormat(fromCassandra.right().value());
return Either.right(responseFormat);
}
mainYaml = fromCassandra.left().value();
@@ -328,6 +330,12 @@ public class CsarUtils {
// add component to zip
Either<byte[], ActionStatus> entryData = getEntryData(innerComponentTriple.getLeft(), innerComponent);
+ if (entryData.isRight()) {
+ ResponseFormat responseFormat = componentsUtils.getResponseFormat(entryData.right().value());
+ log.debug("Failed adding to zip component {}, error {}", innerComponentTriple.getLeft(),
+ entryData.right().value());
+ return Either.right(responseFormat);
+ }
byte[] content = entryData.left().value();
zip.putNextEntry(new ZipEntry(DEFINITIONS_PATH + icFileName));
zip.write(content);
@@ -394,7 +402,7 @@ public class CsarUtils {
final int initSize = 2048;
- log.debug("Starting coppy from Schema file zip to CSAR zip");
+ log.debug("Starting copy from Schema file zip to CSAR zip");
try (ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(schemaFileZip));
ByteArrayOutputStream out = new ByteArrayOutputStream();
@@ -657,7 +665,7 @@ public class CsarUtils {
null, null, user, component, shouldLock, inTransaction, false);
if (validateAndHandleArtifact.isRight()) {
- if (ArtifactOperationEnum.Create == operationType.getArtifactOperationEnum() || ArtifactOperationEnum.Update == operationType.getArtifactOperationEnum()) {
+ if (ArtifactOperationEnum.isCreateOrLink(operationType.getArtifactOperationEnum()) || ArtifactOperationEnum.Update == operationType.getArtifactOperationEnum()) {
ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.AAI_ARTIFACT_GENERATION_FAILED, componentType.getValue(), component.getName(), validateAndHandleArtifact.right().value().toString());
Either.right(responseFormat);
@@ -739,7 +747,7 @@ public class CsarUtils {
} else {
Either<byte[], ActionStatus> fromCassandra = getFromCassandra(cassandraId);
if (fromCassandra.isRight()) {
- return Either.right(fromCassandra.right().value());
+ return Either.right(fromCassandra.right().value());
} else {
content = fromCassandra.left().value();
}
@@ -773,19 +781,16 @@ public class CsarUtils {
Either<ESArtifactData, CassandraOperationStatus> artifactResponse = artifactCassandraDao.getArtifact(cassandraId);
if (artifactResponse.isRight()) {
- log.debug("In createCsar fetching of artifact from CS failed");
- log.debug("Failed to fetch from Cassandra by id {} error {} ", cassandraId, artifactResponse.right().value());
+ log.debug("Failed to fetch artifact from Cassandra by id {} error {} ", cassandraId, artifactResponse.right().value());
StorageOperationStatus storageStatus = DaoStatusConverter.convertCassandraStatusToStorageStatus(artifactResponse.right().value());
ActionStatus convertedFromStorageResponse = componentsUtils.convertFromStorageResponse(storageStatus);
return Either.right(convertedFromStorageResponse);
- } else {
- ESArtifactData artifactData = artifactResponse.left().value();
- return Either.left(artifactData.getDataAsArray());
-
}
+ ESArtifactData artifactData = artifactResponse.left().value();
+ return Either.left(artifactData.getDataAsArray());
}
-
+
private String createCsarBlock0(String metaFileVersion, String toscaConformanceLevel) {
final String BLOCK_0_TEMPLATE =
"SDC-TOSCA-Meta-File-Version: %s\nSDC-TOSCA-Definitions-Version: %s\n";
@@ -1201,18 +1206,20 @@ public class CsarUtils {
for (ArtifactDefinition artifactDefinition : artifactDefinitionList) {
if (!isInCertificationRequest && componentType == ComponentTypeEnum.SERVICE
- && artifactDefinition.getArtifactType().equals(heatEnvType)){
+ && artifactDefinition.getArtifactType().equals(heatEnvType) ||
+ //this is placeholder
+ (artifactDefinition.getEsId() == null && artifactDefinition.getMandatory())){
continue;
}
- String esId = artifactDefinition.getEsId();
byte[] payloadData = artifactDefinition.getPayloadData();
String artifactFileName = artifactDefinition.getArtifactName();
if (payloadData == null) {
- Either<byte[], ActionStatus> fromCassandra = getFromCassandra(esId);
+ Either<byte[], ActionStatus> fromCassandra = getFromCassandra(artifactDefinition.getEsId());
if (fromCassandra.isRight()) {
+ log.debug("ArtifactName {}, unique ID {}", artifactDefinition.getArtifactName(), artifactDefinition.getUniqueId());
log.debug("Failed to get {} payload from DB reason: {}", artifactFileName, fromCassandra.right().value());
continue;
}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java
index 22f6730eb1..083ea67769 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java
@@ -145,7 +145,7 @@ public class PropertyConvertor {
}
innerConverter = type.getValueConverter();
- if (ToscaPropertyType.STRING.equals(type) && value.startsWith("/")) {
+ if (ToscaPropertyType.STRING.equals(type) && valueStartsWithNonJsonChar(value)) {
return innerConverter.convertToToscaValue(value, innerType, dataTypes);
}
}
@@ -192,4 +192,8 @@ public class PropertyConvertor {
}
+ private boolean valueStartsWithNonJsonChar(String value) {
+ return value.startsWith("/") || value.startsWith(":");
+ }
+
}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java
index 1f29eb2113..c37c15f694 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java
@@ -57,7 +57,7 @@ import org.openecomp.sdc.be.model.GroupInstance;
import org.openecomp.sdc.be.model.GroupProperty;
import org.openecomp.sdc.be.model.InputDefinition;
import org.openecomp.sdc.be.model.PropertyDefinition;
-import org.openecomp.sdc.be.model.RequirementAndRelationshipPair;
+import org.openecomp.sdc.be.model.RelationshipInfo;
import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
import org.openecomp.sdc.be.model.RequirementDefinition;
import org.openecomp.sdc.be.model.Resource;
@@ -110,7 +110,7 @@ public class ToscaExportHandler {
@Autowired
private CapabiltyRequirementConvertor capabiltyRequirementConvertor;
private PropertyConvertor propertyConvertor = PropertyConvertor.getInstance();
- Map<String,Component> originComponents = new HashMap<>();
+ Map<String, Component> originComponents = new HashMap<>();
private static Logger log = LoggerFactory.getLogger(ToscaExportHandler.class.getName());
@@ -127,7 +127,8 @@ public class ToscaExportHandler {
public static final String VF_MODULE_TYPE_EXPANSION = "Expansion";
private static final String FAILED_TO_GET_DEFAULT_IMPORTS_CONFIGURATION = "convertToToscaTemplate - failed to get Default Imports section from configuration";
private static final String NOT_SUPPORTED_COMPONENT_TYPE = "Not supported component type {}";
- protected static final List<Map<String, Map<String, String>>> DEFAULT_IMPORTS = ConfigurationManager.getConfigurationManager().getConfiguration().getDefaultImports();
+ protected static final List<Map<String, Map<String, String>>> DEFAULT_IMPORTS = ConfigurationManager
+ .getConfigurationManager().getConfiguration().getDefaultImports();
public Either<ToscaRepresentation, ToscaError> exportComponent(Component component) {
@@ -229,7 +230,7 @@ public class ToscaExportHandler {
return Either.right(importsRes.right().value());
}
toscaNode = importsRes.left().value().left;
- /*Either<Map<String, ToscaNodeType>, ToscaError> nodeTypesMapEither = createProxyNodeTypes(component);
+ Either<Map<String, ToscaNodeType>, ToscaError> nodeTypesMapEither = createProxyNodeTypes(component);
if (nodeTypesMapEither.isRight()) {
log.debug("Failed to fetch normative service proxy resource by tosca name, error {}",
nodeTypesMapEither.right().value());
@@ -237,7 +238,7 @@ public class ToscaExportHandler {
}
Map<String, ToscaNodeType> nodeTypesMap = nodeTypesMapEither.left().value();
if (nodeTypesMap != null && !nodeTypesMap.isEmpty())
- toscaNode.setNode_types(nodeTypesMap);*/
+ toscaNode.setNode_types(nodeTypesMap);
Map<String, Component> componentCache = importsRes.left().value().right;
Either<Map<String, DataTypeDefinition>, TitanOperationStatus> dataTypesEither = dataTypeCache.getAll();
@@ -274,8 +275,17 @@ public class ToscaExportHandler {
if (groups != null && !groups.isEmpty()) {
groupsMap = new HashMap<>();
for (GroupDefinition group : groups) {
- ToscaGroupTemplate toscaGroup = convertGroup(group);
- groupsMap.put(group.getName(), toscaGroup);
+ boolean addToTosca = true;
+ if (group.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE)) {
+ List<String> artifacts = group.getArtifacts();
+ if (artifacts == null || artifacts.isEmpty()) {
+ addToTosca = false;
+ }
+ }
+ if (addToTosca) {
+ ToscaGroupTemplate toscaGroup = convertGroup(group);
+ groupsMap.put(group.getName(), toscaGroup);
+ }
}
log.debug("groups converted");
@@ -343,10 +353,10 @@ public class ToscaExportHandler {
private ToscaMetadata convertMetadata(Component component, boolean isInstance,
ComponentInstance componentInstance) {
ToscaMetadata toscaMetadata = new ToscaMetadata();
- toscaMetadata.setName(component.getComponentMetadataDefinition().getMetadataDataDefinition().getName());
toscaMetadata.setInvariantUUID(component.getInvariantUUID());
toscaMetadata.setUUID(component.getUUID());
toscaMetadata.setDescription(component.getDescription());
+ toscaMetadata.setName(component.getComponentMetadataDefinition().getMetadataDataDefinition().getName());
List<CategoryDefinition> categories = component.getCategories();
CategoryDefinition categoryDefinition = categories.get(0);
@@ -355,11 +365,26 @@ public class ToscaExportHandler {
if (isInstance) {
toscaMetadata.setVersion(component.getVersion());
toscaMetadata.setCustomizationUUID(componentInstance.getCustomizationUUID());
+ if (componentInstance.getSourceModelInvariant() != null
+ && !componentInstance.getSourceModelInvariant().isEmpty()) {
+ toscaMetadata.setVersion(componentInstance.getComponentVersion());
+ toscaMetadata.setSourceModelInvariant(componentInstance.getSourceModelInvariant());
+ toscaMetadata.setSourceModelUuid(componentInstance.getSourceModelUuid());
+ toscaMetadata.setSourceModelName(componentInstance.getSourceModelName());
+ toscaMetadata.setName(
+ componentInstance.getSourceModelName() + " " + OriginTypeEnum.ServiceProxy.getDisplayValue());
+ toscaMetadata.setDescription(componentInstance.getDescription());
+ }
+
}
switch (component.getComponentType()) {
case RESOURCE:
Resource resource = (Resource) component;
- toscaMetadata.setType(resource.getResourceType().name());
+
+ if (isInstance && componentInstance.getOriginType() == OriginTypeEnum.ServiceProxy) {
+ toscaMetadata.setType(componentInstance.getOriginType().getDisplayValue());
+ } else
+ toscaMetadata.setType(resource.getResourceType().name());
toscaMetadata.setSubcategory(categoryDefinition.getSubcategories().get(0).getName());
toscaMetadata.setResourceVendor(resource.getVendorName());
toscaMetadata.setResourceVendorRelease(resource.getVendorRelease());
@@ -370,15 +395,16 @@ public class ToscaExportHandler {
toscaMetadata.setType(component.getComponentType().getValue());
toscaMetadata.setServiceType(service.getServiceType());
toscaMetadata.setServiceRole(service.getServiceRole());
+ toscaMetadata.setEnvironmentContext(service.getEnvironmentContext());
if (!isInstance) {
// DE268546
- toscaMetadata.setServiceEcompNaming(((Service)component).isEcompGeneratedNaming());
- toscaMetadata.setEcompGeneratedNaming(((Service)component).isEcompGeneratedNaming());
- toscaMetadata.setNamingPolicy(((Service)component).getNamingPolicy());
+ toscaMetadata.setServiceEcompNaming(((Service) component).isEcompGeneratedNaming());
+ toscaMetadata.setEcompGeneratedNaming(((Service) component).isEcompGeneratedNaming());
+ toscaMetadata.setNamingPolicy(((Service) component).getNamingPolicy());
}
break;
default:
- log.debug("Not supported component type {}", component.getComponentType());
+ log.debug(NOT_SUPPORTED_COMPONENT_TYPE, component.getComponentType());
}
return toscaMetadata;
}
@@ -472,7 +498,7 @@ public class ToscaExportHandler {
}
public static String getInterfaceFilename(String artifactName) {
- return artifactName.substring(0, artifactName.lastIndexOf('.')) + ToscaExportHandler.TOSCA_INTERFACE_NAME;
+ return artifactName.substring(0, artifactName.lastIndexOf('.')) + ToscaExportHandler.TOSCA_INTERFACE_NAME;
}
private Either<ToscaTemplate, ToscaError> convertNodeType(Component component, ToscaTemplate toscaNode,
@@ -539,7 +565,8 @@ public class ToscaExportHandler {
toscaNodeType = capabilities.left().value();
log.debug("Capabilities converted for {}", component.getUniqueId());
- Either<ToscaNodeType, ToscaError> requirements = capabiltyRequirementConvertor.convertRequirements(component, toscaNodeType);
+ Either<ToscaNodeType, ToscaError> requirements = capabiltyRequirementConvertor.convertRequirements(component,
+ toscaNodeType);
if (requirements.isRight()) {
return Either.right(requirements.right().value());
}
@@ -584,9 +611,15 @@ public class ToscaExportHandler {
ToscaNodeTemplate nodeTemplate = new ToscaNodeTemplate();
nodeTemplate.setType(componentInstance.getToscaComponentName());
+ Either<Component, Boolean> originComponentRes = capabiltyRequirementConvertor
+ .getOriginComponent(componentCache, componentInstance);
+ if (originComponentRes.isRight()) {
+ convertNodeTemplatesRes = Either.right(ToscaError.NODE_TYPE_REQUIREMENT_ERROR);
+ break;
+ }
Either<ToscaNodeTemplate, ToscaError> requirements = convertComponentInstanceRequirements(component,
componentInstance, component.getComponentInstancesRelations(), nodeTemplate,
- componentCache.get(componentInstance.getComponentUid()));
+ originComponentRes.left().value());
if (requirements.isRight()) {
convertNodeTemplatesRes = Either.right(requirements.right().value());
break;
@@ -596,7 +629,7 @@ public class ToscaExportHandler {
nodeTemplate = requirements.left().value();
- Component componentOfInstance = componentCache.get(componentInstance.getComponentUid());
+ Component componentOfInstance = componentCache.get(componentInstance.getActualComponentUid());
nodeTemplate.setMetadata(convertMetadata(componentOfInstance, true, componentInstance));
Either<ToscaNodeTemplate, ToscaError> capabilities = capabiltyRequirementConvertor
@@ -634,9 +667,17 @@ public class ToscaExportHandler {
groupsMap = new HashMap<>();
}
for (GroupInstance groupInst : groupInstances) {
- ToscaGroupTemplate toscaGroup = convertGroupInstance(groupInst);
+ boolean addToTosca = true;
+
+ List<String> artifacts = groupInst.getArtifacts();
+ if (artifacts == null || artifacts.isEmpty()) {
+ addToTosca = false;
+ }
- groupsMap.put(groupInst.getName(), toscaGroup);
+ if (addToTosca) {
+ ToscaGroupTemplate toscaGroup = convertGroupInstance(groupInst);
+ groupsMap.put(groupInst.getName(), toscaGroup);
+ }
}
}
@@ -729,6 +770,7 @@ public class ToscaExportHandler {
}
private ToscaGroupTemplate convertGroup(GroupDefinition group) {
+
ToscaGroupTemplate toscaGroup = new ToscaGroupTemplate();
Map<String, String> members = group.getMembers();
if (members != null)
@@ -845,7 +887,7 @@ public class ToscaExportHandler {
return toscaNodeType;
}
- /*private Either<Map<String, ToscaNodeType>, ToscaError> createProxyNodeTypes(Component container) {
+ private Either<Map<String, ToscaNodeType>, ToscaError> createProxyNodeTypes(Component container) {
Map<String, ToscaNodeType> nodeTypesMap = null;
Either<Map<String, ToscaNodeType>, ToscaError> res = Either.left(nodeTypesMap);
@@ -855,13 +897,15 @@ public class ToscaExportHandler {
if (componetInstances == null || componetInstances.isEmpty())
return res;
Map<String, ComponentInstance> serviceProxyInstanceList = new HashMap<>();
- List<ComponentInstance> proxyInst = componetInstances.stream().filter(p -> p.getOriginType().name().equals(OriginTypeEnum.ServiceProxy.name())).collect(Collectors.toList());
- if(proxyInst != null && !proxyInst.isEmpty()){
- for(ComponentInstance inst: proxyInst){
+ List<ComponentInstance> proxyInst = componetInstances.stream()
+ .filter(p -> p.getOriginType().name().equals(OriginTypeEnum.ServiceProxy.name()))
+ .collect(Collectors.toList());
+ if (proxyInst != null && !proxyInst.isEmpty()) {
+ for (ComponentInstance inst : proxyInst) {
serviceProxyInstanceList.put(inst.getToscaComponentName(), inst);
}
}
-
+
if (serviceProxyInstanceList.isEmpty())
return res;
ComponentParametersView filter = new ComponentParametersView(true);
@@ -894,7 +938,7 @@ public class ToscaExportHandler {
}
return Either.left(nodeTypesMap);
- }*/
+ }
private ToscaNodeType createProxyNodeType(Component origComponent, Component proxyComponent,
ComponentInstance instance) {
@@ -920,8 +964,9 @@ public class ToscaExportHandler {
ToscaNodeTemplate nodeTypeTemplate, Component originComponent) {
List<Map<String, ToscaTemplateRequirement>> toscaRequirements = new ArrayList<>();
- if(!addRequirements(component, componentInstance, relations, originComponent, toscaRequirements)){
- log.debug("Failed to convert component instance requirements for the component instance {}. ", componentInstance.getName());
+ if (!addRequirements(component, componentInstance, relations, originComponent, toscaRequirements)) {
+ log.debug("Failed to convert component instance requirements for the component instance {}. ",
+ componentInstance.getName());
return Either.right(ToscaError.NODE_TYPE_REQUIREMENT_ERROR);
}
if (!toscaRequirements.isEmpty()) {
@@ -931,82 +976,114 @@ public class ToscaExportHandler {
return Either.left(nodeTypeTemplate);
}
- private boolean addRequirements(Component component, ComponentInstance componentInstance, List<RequirementCapabilityRelDef> relations, Component originComponent,
+ private boolean addRequirements(Component component, ComponentInstance componentInstance,
+ List<RequirementCapabilityRelDef> relations, Component originComponent,
List<Map<String, ToscaTemplateRequirement>> toscaRequirements) {
boolean result;
- List<RequirementCapabilityRelDef> filteredRelations = relations.stream().filter(p -> componentInstance.getUniqueId().equals(p.getFromNode())).collect(Collectors.toList());
- if(CollectionUtils.isEmpty(filteredRelations)){
+ List<RequirementCapabilityRelDef> filteredRelations = relations.stream()
+ .filter(p -> componentInstance.getUniqueId().equals(p.getFromNode())).collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(filteredRelations)) {
result = true;
} else {
- result = !filteredRelations.stream().filter(rel -> !addRequirement(component,componentInstance, originComponent, component.getComponentInstances(), rel, toscaRequirements)).findFirst().isPresent();
+ result = !filteredRelations.stream().filter(rel -> !addRequirement(componentInstance, originComponent,
+ component.getComponentInstances(), rel, toscaRequirements)).findFirst().isPresent();
}
return result;
}
-
- private boolean addRequirement(Component component,ComponentInstance fromInstance, Component originComponent, List<ComponentInstance> instancesList, RequirementCapabilityRelDef rel, List<Map<String, ToscaTemplateRequirement>> toscaRequirements){
-
+
+ private boolean addRequirement(ComponentInstance fromInstance, Component fromOriginComponent,
+ List<ComponentInstance> instancesList, RequirementCapabilityRelDef rel,
+ List<Map<String, ToscaTemplateRequirement>> toscaRequirements) {
+
boolean result = true;
- Map<String,Component> originComponents = new HashMap<>();
- Map<String, List<RequirementDefinition>> reqMap = originComponent.getRequirements();
- RequirementAndRelationshipPair reqAndRelationshipPair = rel.getRelationships().get(0);
+ Map<String, List<RequirementDefinition>> reqMap = fromOriginComponent.getRequirements();
+ RelationshipInfo reqAndRelationshipPair = rel.getRelationships().get(0).getRelation();
Either<Component, StorageOperationStatus> getOriginRes = null;
Optional<RequirementDefinition> reqOpt = null;
Component toOriginComponent = null;
Optional<CapabilityDefinition> cap = null;
- Either<String, Boolean> buildCapNameRes = null;
- Either<String, Boolean> buildReqNameRes = null;
-
- ComponentInstance toInstance = instancesList.stream().filter(i -> rel.getToNode().equals(i.getUniqueId())).findFirst().orElse(null);
+
+ ComponentInstance toInstance = instancesList.stream().filter(i -> rel.getToNode().equals(i.getUniqueId()))
+ .findFirst().orElse(null);
if (toInstance == null) {
- log.debug("Failed to find a relation from the node {} to the node {}", fromInstance.getName(), rel.getToNode());
+ log.debug("Failed to find a relation from the node {} to the node {}", fromInstance.getName(),
+ rel.getToNode());
result = false;
}
- if(result){
-
- if(component.getComponentType().equals(ComponentTypeEnum.SERVICE)) {
- reqOpt = findRequirement(reqMap, reqAndRelationshipPair);
- }
- else {
- reqOpt = findRequirement(reqMap, reqAndRelationshipPair.getRequirementUid());
- }
- if(!reqOpt.isPresent()){
- log.debug("Failed to find a requirement with uniqueId {} on a component with uniqueId {}", reqAndRelationshipPair.getRequirementUid(), originComponent.getUniqueId());
+ if (result) {
+ reqOpt = findRequirement(fromOriginComponent, reqMap, reqAndRelationshipPair, toInstance.getUniqueId());
+ if (!reqOpt.isPresent()) {
+ log.debug("Failed to find a requirement with uniqueId {} on a component with uniqueId {}",
+ reqAndRelationshipPair.getRequirementUid(), fromOriginComponent.getUniqueId());
result = false;
}
}
- if(result){
+ if (result) {
ComponentParametersView filter = new ComponentParametersView(true);
filter.setIgnoreComponentInstances(false);
filter.setIgnoreCapabilities(false);
- getOriginRes = toscaOperationFacade.getToscaElement(toInstance.getComponentUid(), filter);
- if(getOriginRes.isRight()){
- log.debug("Failed to build substituted name for the requirement {}. Failed to get an origin component with uniqueId {}", reqOpt.get().getName(), toInstance.getComponentUid());
+ getOriginRes = toscaOperationFacade.getToscaElement(toInstance.getActualComponentUid(), filter);
+ if (getOriginRes.isRight()) {
+ log.debug("Failed to build substituted name for the requirement {}. Failed to get an origin component with uniqueId {}",
+ reqOpt.get().getName(), toInstance.getActualComponentUid());
result = false;
}
}
- if(result){
+ if (result) {
toOriginComponent = getOriginRes.left().value();
- cap = toOriginComponent.getCapabilities().get(reqOpt.get().getCapability()).stream().filter(c -> c.getName().equals(reqAndRelationshipPair.getCapability())).findFirst();
- if(!cap.isPresent()){
- log.debug("Failed to find a capability with name {} on a component with uniqueId {}", reqAndRelationshipPair.getCapability(), originComponent.getUniqueId());
+ cap = toOriginComponent.getCapabilities().get(reqOpt.get().getCapability()).stream()
+ .filter(c -> c.getName().equals(reqAndRelationshipPair.getCapability())).findFirst();
+ if (!cap.isPresent()) {
+ cap = findCapability(reqMap, reqAndRelationshipPair, toOriginComponent, fromOriginComponent, reqOpt.get(), fromInstance);
+ if(!cap.isPresent()){
result = false;
+ log.debug("Failed to find a capability with name {} on a component with uniqueId {}",
+ reqAndRelationshipPair.getCapability(), fromOriginComponent.getUniqueId());
+ }
}
}
- if(result){
- buildCapNameRes = capabiltyRequirementConvertor.buildSubstitutedName(originComponents, toOriginComponent, cap.get().getPath(), reqAndRelationshipPair.getCapability());
- if(buildCapNameRes.isRight()){
- log.debug("Failed to build a substituted capability name for the capability with name {} on a component with uniqueId {}", reqAndRelationshipPair.getCapability(), originComponent.getUniqueId());
- result = false;
- }
+ if (result) {
+ result = buildAndAddRequirement(toscaRequirements, fromOriginComponent, toOriginComponent, cap.get(),
+ reqOpt.get(), reqAndRelationshipPair, toInstance);
}
- if(result){
- buildReqNameRes = capabiltyRequirementConvertor.buildSubstitutedName(originComponents, originComponent, reqOpt.get().getPath(), reqAndRelationshipPair.getRequirement());
- if(buildReqNameRes.isRight()){
- log.debug("Failed to build a substituted requirement name for the requirement with name {} on a component with uniqueId {}", reqAndRelationshipPair.getRequirement(), originComponent.getUniqueId());
+ return result;
+ }
+
+ private Optional<CapabilityDefinition> findCapability(Map<String, List<RequirementDefinition>> reqMap, RelationshipInfo reqAndRelationshipPair, Component toOriginComponent, Component fromOriginComponent, RequirementDefinition requirement, ComponentInstance fromInstance) {
+ Optional<CapabilityDefinition> cap = Optional.empty();
+ Optional<RequirementDefinition> findAny = reqMap.values().stream().flatMap(e -> e.stream()).filter(e -> e.getName().equals(reqAndRelationshipPair.getRequirement())).findAny();
+ if (findAny.isPresent()) {
+ RequirementDefinition reqDefinition = findAny.get();
+ cap = toOriginComponent.getCapabilities().get(requirement.getCapability()).stream().filter(c -> c.getType().equals(reqDefinition.getCapability())).findFirst();
+ if (!cap.isPresent()) {
+ log.debug("Failed to find a capability with name {} on a component with uniqueId {}", reqAndRelationshipPair.getCapability(), fromOriginComponent.getUniqueId());
+ }
+ }
+ return cap;
+ }
+
+ private boolean buildAndAddRequirement(List<Map<String, ToscaTemplateRequirement>> toscaRequirements, Component fromOriginComponent, Component toOriginComponent, CapabilityDefinition capability, RequirementDefinition requirement, RelationshipInfo reqAndRelationshipPair, ComponentInstance toInstance) {
+ boolean result = true;
+ Either<String, Boolean> buildReqNameRes = null;
+ Either<String, Boolean> buildCapNameRes = capabiltyRequirementConvertor.buildSubstitutedName(originComponents,
+ toOriginComponent, capability.getPath(), reqAndRelationshipPair.getCapability());
+ if (buildCapNameRes.isRight()) {
+ log.debug(
+ "Failed to build a substituted capability name for the capability with name {} on a component with uniqueId {}",
+ reqAndRelationshipPair.getCapability(), fromOriginComponent.getUniqueId());
+ result = false;
+ }
+ if (result) {
+ buildReqNameRes = capabiltyRequirementConvertor.buildSubstitutedName(originComponents, fromOriginComponent,
+ requirement.getPath(), reqAndRelationshipPair.getRequirement());
+ if (buildReqNameRes.isRight()) {
+ log.debug(
+ "Failed to build a substituted requirement name for the requirement with name {} on a component with uniqueId {}",
+ reqAndRelationshipPair.getRequirement(), fromOriginComponent.getUniqueId());
result = false;
}
}
- if(result){
+ if (result) {
ToscaTemplateRequirement toscaRequirement = new ToscaTemplateRequirement();
Map<String, ToscaTemplateRequirement> toscaReqMap = new HashMap<>();
toscaRequirement.setNode(toInstance.getName());
@@ -1017,39 +1094,49 @@ public class ToscaExportHandler {
return result;
}
- private Optional<RequirementDefinition> findRequirement(Map<String, List<RequirementDefinition>> reqMap, String reqId) {
+ private Optional<RequirementDefinition> findRequirement(Component fromOriginComponent, Map<String, List<RequirementDefinition>> reqMap, RelationshipInfo reqAndRelationshipPair, String toInstanceId) {
for(List<RequirementDefinition> reqList: reqMap.values()){
- Optional<RequirementDefinition> reqOpt = reqList.stream().filter(r -> r.getUniqueId().equals(reqId)).findFirst();
+ Optional<RequirementDefinition> reqOpt = reqList.stream().filter(r -> isRequirementBelongToRelation(fromOriginComponent, reqAndRelationshipPair, r, toInstanceId)).findFirst();
if(reqOpt.isPresent()){
return reqOpt;
}
}
return Optional.empty();
}
-
- private Optional<RequirementDefinition> findRequirement(Map<String, List<RequirementDefinition>> reqMap, RequirementAndRelationshipPair reqAndRelationshipPair) {
- for(List<RequirementDefinition> reqList: reqMap.values()){
- Optional<RequirementDefinition> reqOpt = reqList.stream().filter(r ->
- isRequirmentBelongTo(reqAndRelationshipPair, r))
- .findFirst();
- if(reqOpt.isPresent()){
- return reqOpt;
- }
- }
- return Optional.empty();
+
+ /**
+ * Allows detecting the requirement belonging to the received relationship
+ * The detection logic is: A requirement belongs to a relationship IF 1.The
+ * name of the requirement equals to the "requirement" field of the
+ * relation; AND 2. In case of a non-atomic resource, OwnerId of the
+ * requirement equals to requirementOwnerId of the relation OR uniqueId of
+ * toInstance equals to capabilityOwnerId of the relation
+ *
+ * @param fromOriginComponent
+ * @param reqAndRelationshipPair
+ * @param requirement
+ * @param toInstanceId
+ * @return
+ */
+ private boolean isRequirementBelongToRelation(Component originComponent, RelationshipInfo reqAndRelationshipPair, RequirementDefinition requirement, String toInstanceId) {
+ if (!StringUtils.equals(requirement.getName(), reqAndRelationshipPair.getRequirement()))
+ return false;
+ if (!ModelConverter.isAtomicComponent(originComponent))
+ return isRequirementBelongToOwner(reqAndRelationshipPair, requirement, toInstanceId);
+ return true;
}
- private boolean isRequirmentBelongTo(RequirementAndRelationshipPair reqAndRelationshipPair, RequirementDefinition r) {
- return StringUtils.isNotEmpty(r.getOwnerId()) && r.getOwnerId().equals(reqAndRelationshipPair.getRequirementOwnerId())
- && StringUtils.isNotEmpty(r.getName()) && r.getName().equals(reqAndRelationshipPair.getRequirement());
+ private boolean isRequirementBelongToOwner(RelationshipInfo reqAndRelationshipPair, RequirementDefinition requirement, String toInstanceId) {
+ return StringUtils.equals(requirement.getOwnerId(), reqAndRelationshipPair.getRequirementOwnerId()) || StringUtils.equals(toInstanceId, reqAndRelationshipPair.getCapabilityOwnerId());
}
- private Either<SubstitutionMapping, ToscaError> convertCapabilities(Component component, SubstitutionMapping substitutionMappings) {
-
- Either<SubstitutionMapping, ToscaError> result = Either.left(substitutionMappings);;
+ private Either<SubstitutionMapping, ToscaError> convertCapabilities(Component component,
+ SubstitutionMapping substitutionMappings) {
+
+ Either<SubstitutionMapping, ToscaError> result = Either.left(substitutionMappings);
Either<Map<String, String[]>, ToscaError> toscaCapabilitiesRes = capabiltyRequirementConvertor
.convertSubstitutionMappingCapabilities(originComponents, component);
- if(toscaCapabilitiesRes.isRight()){
+ if (toscaCapabilitiesRes.isRight()) {
result = Either.right(toscaCapabilitiesRes.right().value());
log.error("Failed convert capabilities for the component {}. ", component.getName());
} else if (MapUtils.isNotEmpty(toscaCapabilitiesRes.left().value())) {
@@ -1108,6 +1195,7 @@ public class ToscaExportHandler {
}
private class RepresentNull implements Represent {
+ @Override
public Node representData(Object data) {
// possible values are here http://yaml.org/type/null.html
return representScalar(Tag.NULL, "");
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaMetadata.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaMetadata.java
index 604a52083b..4f91e211cc 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaMetadata.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaMetadata.java
@@ -38,7 +38,12 @@ public class ToscaMetadata implements IToscaMetadata {
private Boolean serviceEcompNaming;
private Boolean ecompGeneratedNaming;
private String namingPolicy;
-
+ private String sourceModelInvariant;
+ private String environmentContext;
+ private String sourceModelName;
+ private String sourceModelUuid;
+
+
public String getName() {
return name;
}
@@ -179,4 +184,37 @@ public class ToscaMetadata implements IToscaMetadata {
this.customizationUUID = customizationUUID;
}
+ public String getSourceModelInvariant() {
+ return sourceModelInvariant;
+ }
+
+ public void setSourceModelInvariant(String sourceModelInvariant) {
+ this.sourceModelInvariant = sourceModelInvariant;
+ }
+
+ public String getSourceModelName() {
+ return sourceModelName;
+ }
+
+ public void setSourceModelName(String sourceModelName) {
+ this.sourceModelName = sourceModelName;
+ }
+
+ public String getSourceModelUuid() {
+ return sourceModelUuid;
+ }
+
+ public void setSourceModelUuid(String sourceModelUuid) {
+ this.sourceModelUuid = sourceModelUuid;
+ }
+
+
+
+ public String getEnvironmentContext() {
+ return environmentContext;
+ }
+
+ public void setEnvironmentContext(String environmentContext) {
+ this.environmentContext = environmentContext;
+ }
}