summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/ecomp/converters/AssetMetadataConverter.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/ecomp/converters/AssetMetadataConverter.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/ecomp/converters/AssetMetadataConverter.java687
1 files changed, 335 insertions, 352 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/ecomp/converters/AssetMetadataConverter.java b/catalog-be/src/main/java/org/openecomp/sdc/be/ecomp/converters/AssetMetadataConverter.java
index 93de8fed2c..b02a4a52cd 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/ecomp/converters/AssetMetadataConverter.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/ecomp/converters/AssetMetadataConverter.java
@@ -20,30 +20,15 @@
package org.openecomp.sdc.be.ecomp.converters;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
+import fj.data.Either;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.openecomp.sdc.be.dao.api.ActionStatus;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
import org.openecomp.sdc.be.distribution.servlet.DistributionCatalogServlet;
-import org.openecomp.sdc.be.externalapi.servlet.representation.ArtifactMetadata;
-import org.openecomp.sdc.be.externalapi.servlet.representation.AssetMetadata;
-import org.openecomp.sdc.be.externalapi.servlet.representation.ResourceAssetDetailedMetadata;
-import org.openecomp.sdc.be.externalapi.servlet.representation.ResourceAssetMetadata;
-import org.openecomp.sdc.be.externalapi.servlet.representation.ResourceInstanceMetadata;
-import org.openecomp.sdc.be.externalapi.servlet.representation.ServiceAssetDetailedMetadata;
-import org.openecomp.sdc.be.externalapi.servlet.representation.ServiceAssetMetadata;
+import org.openecomp.sdc.be.externalapi.servlet.representation.*;
import org.openecomp.sdc.be.impl.ComponentsUtils;
-import org.openecomp.sdc.be.model.ArtifactDefinition;
-import org.openecomp.sdc.be.model.Component;
-import org.openecomp.sdc.be.model.ComponentInstance;
-import org.openecomp.sdc.be.model.Resource;
-import org.openecomp.sdc.be.model.Service;
+import org.openecomp.sdc.be.model.*;
import org.openecomp.sdc.be.model.category.CategoryDefinition;
import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
@@ -52,341 +37,339 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import fj.data.Either;
+import java.util.*;
@org.springframework.stereotype.Component("asset-metadata-utils")
public class AssetMetadataConverter {
- private static Logger log = LoggerFactory.getLogger(DistributionCatalogServlet.class.getName());
-
- @Autowired
- private ComponentsUtils componentsUtils;
-
- @Autowired
- protected ToscaOperationFacade toscaOperationFacade;
-
- /*
- * Relative asset’s URL. Should be used in REST GET API to download the asset’s CSAR. https://{serverBaseURL}/{csarPath} can be obtained from (HttpServletRequest)request.getServerName()
- */
- public Either<List<? extends AssetMetadata>, ResponseFormat> convertToAssetMetadata(List<? extends Component> componentList, String serverBaseURL, boolean detailed) {
- if (componentList == null || componentList.isEmpty()) {
- return Either.left(new LinkedList<>());
- }
- List<AssetMetadata> retResList = new LinkedList<>();
-
- for (Component curr : componentList) {
- Either<? extends AssetMetadata, ResponseFormat> resMetaData = convertToSingleAssetMetadata(curr, serverBaseURL, detailed);
- if (resMetaData.isRight()) {
- return Either.right(resMetaData.right().value());
- }
- retResList.add(resMetaData.left().value());
- }
-
- return Either.left(retResList);
-
- }
-
- public <T extends Component> Either<? extends AssetMetadata, ResponseFormat> convertToSingleAssetMetadata(T component, String serverBaseURL, boolean detailed) {
- ComponentTypeEnum componentType = component.getComponentType();
- Either<? extends AssetMetadata, ResponseFormat> resMetaData = convertToMetadata(componentType, serverBaseURL, detailed, component);
-
- if (resMetaData.isRight()) {
- return Either.right(resMetaData.right().value());
- }
- else{
- return Either.left(resMetaData.left().value());
- }
-
- }
-
- private Either<? extends AssetMetadata, ResponseFormat> convertToMetadata(ComponentTypeEnum componentType, String serverBaseURL, boolean detailed, Component curr) {
-
- switch (componentType) {
-
- case RESOURCE:
-
- return generateResourceMeatdata(serverBaseURL, detailed, curr);
-
- case SERVICE:
-
- return generateServiceMetadata(serverBaseURL, detailed, curr);
-
- // For future US's that include product
- /*
- * case PRODUCT: if (component instanceof Product) { List<ProductAssetMetadata> retResList = new LinkedList<>(); for (Component curr : componentList) { retResList.add(convertToProductAssetMetadata((Product) curr, serverBaseURL)); } return
- * Either.left(retResList);
- */
- default:
-
- ResponseFormat responseFormat = componentsUtils.getResponseFormatAdditionalProperty(ActionStatus.COMPONENT_INVALID_CATEGORY);
- return Either.right(responseFormat);
- }
- }
-
- private Either<? extends AssetMetadata, ResponseFormat> generateResourceMeatdata(String serverBaseURL, boolean detailed, Component curr) {
- AssetMetadata metaData;
- metaData = createMetadaObject(detailed, curr.getComponentType());
- metaData = convertToResourceMetadata((ResourceAssetMetadata) metaData, (Resource) curr, serverBaseURL, detailed);
-
- if (detailed) {
- Either<ResourceAssetDetailedMetadata, StorageOperationStatus> converted = convertToResourceDetailedMetadata((ResourceAssetDetailedMetadata) metaData, (Resource) curr, serverBaseURL);
- if (converted.isRight()) {
- ActionStatus storageResponse = componentsUtils.convertFromStorageResponse(converted.right().value(), ComponentTypeEnum.RESOURCE);
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(storageResponse);
- return Either.right(responseFormat);
- }
- }
-
- return Either.left(metaData);
- }
-
- private AssetMetadata createMetadaObject(boolean detailed, ComponentTypeEnum type) {
- AssetMetadata metaData = null;
- switch (type) {
- case SERVICE:
- if (!detailed) {
- metaData = new ServiceAssetMetadata();
- } else {
- metaData = new ServiceAssetDetailedMetadata();
- }
- break;
- case RESOURCE:
- if (!detailed) {
- metaData = new ResourceAssetMetadata();
- } else {
- metaData = new ResourceAssetDetailedMetadata();
- }
- break;
- default:
- break;
- }
- return metaData;
- }
-
- private Either<? extends AssetMetadata, ResponseFormat> generateServiceMetadata(String serverBaseURL, boolean detailed, Component curr) {
- AssetMetadata metaData = createMetadaObject(detailed, curr.getComponentType());
-
- metaData = convertToServiceAssetMetadata((ServiceAssetMetadata) metaData, (Service) curr, serverBaseURL, detailed);
-
- if (detailed) {
- Either<ServiceAssetDetailedMetadata, StorageOperationStatus> converted = convertToServiceDetailedMetadata((ServiceAssetDetailedMetadata) metaData, (Service) curr, serverBaseURL);
- if (converted.isRight()) {
- ActionStatus storageResponse = componentsUtils.convertFromStorageResponse(converted.right().value(), ComponentTypeEnum.RESOURCE);
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(storageResponse);
- return Either.right(responseFormat);
- }
- }
-
- return Either.left(metaData);
- }
-
- private <U extends AssetMetadata, T extends Component> U convertToAsset(U asset, T component, String serverBaseURL, boolean detailed) {
- asset.setUuid(component.getUUID());
- asset.setInvariantUUID(component.getInvariantUUID());
- asset.setName(component.getName());
- asset.setVersion(component.getVersion());
- if (!detailed) {
- asset.setToscaModelURL(serverBaseURL + "/" + component.getUUID() + "/toscaModel");
- } else {
- String toscaModelUrl = (new String(serverBaseURL)).replace("metadata", "toscaModel");
- asset.setToscaModelURL(toscaModelUrl);
- }
-
- return asset;
- }
-
- private <T extends ResourceAssetMetadata> T convertToResourceMetadata(T assetToPopulate, Resource resource, String serverBaseURL, boolean detailed) {
- assetToPopulate = convertToAsset(assetToPopulate, resource, serverBaseURL, detailed);
- if(resource.getCategories() != null && !resource.getCategories().isEmpty()){
- CategoryDefinition categoryDefinition = resource.getCategories().get(0);
- assetToPopulate.setCategory(categoryDefinition.getName());
- assetToPopulate.setSubCategory(categoryDefinition.getSubcategories().get(0).getName());
- }
- assetToPopulate.setResourceType(resource.getResourceType().name());
- assetToPopulate.setLifecycleState(resource.getLifecycleState().name());
- assetToPopulate.setLastUpdaterUserId(resource.getLastUpdaterUserId());
-
- return (T) assetToPopulate;
- }
-
- private <T extends ServiceAssetMetadata> T convertToServiceAssetMetadata(T assetToPopulate, Service service, String serverBaseURL, boolean detailed) {
- assetToPopulate = convertToAsset(assetToPopulate, service, serverBaseURL, detailed);
-
- if(service.getCategories() != null && !service.getCategories().isEmpty()){
- CategoryDefinition categoryDefinition = service.getCategories().get(0);
- assetToPopulate.setCategory(categoryDefinition.getName());
- }
-
- assetToPopulate.setLifecycleState(service.getLifecycleState().name());
- assetToPopulate.setLastUpdaterUserId(service.getLastUpdaterUserId());
- assetToPopulate.setDistributionStatus(service.getDistributionStatus().name());
-
- return (T) assetToPopulate;
- }
-
- private <T extends ResourceAssetDetailedMetadata> Either<T, StorageOperationStatus> convertToResourceDetailedMetadata(T assetToPopulate, Resource resource, String serverBaseURL) {
-
- List<ComponentInstance> componentInstances = resource.getComponentInstances();
-
- if (componentInstances != null) {
- Either<List<ResourceInstanceMetadata>, StorageOperationStatus> resourceInstanceMetadata = convertToResourceInstanceMetadata(componentInstances, ComponentTypeEnum.RESOURCE_PARAM_NAME, resource.getUUID());
- if (resourceInstanceMetadata.isRight()) {
- return Either.right(resourceInstanceMetadata.right().value());
- }
-
- assetToPopulate.setResources(resourceInstanceMetadata.left().value());
- }
-
- Map<String, ArtifactDefinition> deploymentArtifacts = resource.getDeploymentArtifacts();
- assetToPopulate = populateResourceWithArtifacts(assetToPopulate, resource, serverBaseURL, deploymentArtifacts);
-
- assetToPopulate.setLastUpdaterFullName(resource.getLastUpdaterFullName());
- assetToPopulate.setToscaResourceName(resource.getToscaResourceName());
- assetToPopulate.setDescription(resource.getDescription());
- return Either.left(assetToPopulate);
- }
-
- private <T extends ServiceAssetDetailedMetadata> Either<T, StorageOperationStatus> convertToServiceDetailedMetadata(T assetToPopulate, Service service, String serverBaseURL) {
-
- List<ComponentInstance> componentInstances = service.getComponentInstances();
-
- if (componentInstances != null) {
- Either<List<ResourceInstanceMetadata>, StorageOperationStatus> resourceInstanceMetadata = convertToResourceInstanceMetadata(componentInstances, ComponentTypeEnum.SERVICE_PARAM_NAME, service.getUUID());
- if (resourceInstanceMetadata.isRight()) {
- return Either.right(resourceInstanceMetadata.right().value());
- }
-
- assetToPopulate.setResources(resourceInstanceMetadata.left().value());
- }
-
- Map<String, ArtifactDefinition> deploymentArtifacts = service.getDeploymentArtifacts();
- assetToPopulate = populateServiceWithArtifacts(assetToPopulate, service, deploymentArtifacts);
-
- assetToPopulate.setLastUpdaterFullName(service.getLastUpdaterFullName());
-
- return Either.left(assetToPopulate);
- }
-
- private <T extends ResourceAssetDetailedMetadata> T populateResourceWithArtifacts(T asset, Resource resource, String serverBaseURL, Map<String, ArtifactDefinition> artifacts) {
-
- List<ArtifactMetadata> artifactMetaList = populateAssetWithArtifacts(resource, artifacts);
-
- asset.setArtifacts(artifactMetaList);
-
- return asset;
- }
-
- private <T extends ServiceAssetDetailedMetadata> T populateServiceWithArtifacts(T asset, Service service, Map<String, ArtifactDefinition> artifacts) {
-
- List<ArtifactMetadata> artifactMetaList = populateAssetWithArtifacts(service, artifacts);
-
- asset.setArtifacts(artifactMetaList);
-
- return asset;
- }
-
- private List<ArtifactMetadata> populateAssetWithArtifacts(Component component, Map<String, ArtifactDefinition> artifacts) {
- List<ArtifactMetadata> artifactMetaList = new LinkedList<>();
- if (artifacts != null) {
- Collection<ArtifactDefinition> artefactDefList = artifacts.values();
-
- for (ArtifactDefinition artifactDefinition : artefactDefList) {
- if (artifactDefinition.getEsId() != null && !artifactDefinition.getEsId().isEmpty()) {
- ArtifactMetadata convertedArtifactMetadata = convertToArtifactMetadata(artifactDefinition, ComponentTypeEnum.findParamByType(component.getComponentType()), component.getUUID(), null);
- artifactMetaList.add(convertedArtifactMetadata);
- }
- }
- }
- return artifactMetaList.isEmpty() ? null : artifactMetaList;
- }
-
- private ArtifactMetadata convertToArtifactMetadata(ArtifactDefinition artifact, String componentType, String componentUUID, String resourceInstanceName) {
- // /sdc/v1/catalog/{services/resources}/{componentUUID}/artifacts/{artifactUUID}
- final String COMPONENT_ARTIFACT_URL = "/sdc/v1/catalog/%s/%s/artifacts/%s";
-
- // /sdc/v1/catalog/{services/resources}/{componentUUID}/resourceInstances/{resourceInstanceName}/artifacts/{artifactUUID}
- final String RESOURCE_INSTANCE_ARTIFACT_URL = "/sdc/v1/catalog/%s/%s/resourceInstances/%s/artifacts/%s";
-
- ArtifactMetadata metadata = new ArtifactMetadata();
-
- metadata.setArtifactName(artifact.getArtifactName());
- metadata.setArtifactType(artifact.getArtifactType());
-
- if (resourceInstanceName == null || resourceInstanceName.isEmpty()) {
- metadata.setArtifactURL(String.format(COMPONENT_ARTIFACT_URL, componentType, componentUUID, artifact.getArtifactUUID()));
- } else {
- metadata.setArtifactURL(String.format(RESOURCE_INSTANCE_ARTIFACT_URL, componentType, componentUUID, resourceInstanceName, artifact.getArtifactUUID()));
- }
-
- metadata.setArtifactDescription(artifact.getDescription());
- metadata.setArtifactTimeout(artifact.getTimeout() > 0 ? artifact.getTimeout() : null);
- metadata.setArtifactChecksum(artifact.getArtifactChecksum());
- metadata.setArtifactUUID(artifact.getArtifactUUID());
- metadata.setArtifactVersion(artifact.getArtifactVersion());
- metadata.setGeneratedFromUUID(artifact.getGeneratedFromId());
- metadata.setArtifactLabel(artifact.getArtifactLabel());
- metadata.setArtifactGroupType(artifact.getArtifactGroupType().getType());
- return metadata;
- }
-
- private Either<List<ResourceInstanceMetadata>, StorageOperationStatus> convertToResourceInstanceMetadata(List<ComponentInstance> componentInstances, String componentType, String componentUUID) {
- List<ResourceInstanceMetadata> retList = new LinkedList<>();
- Map<String, ImmutablePair<String, String>> uuidDuplicatesMap = new HashMap<>();
-
- for (ComponentInstance componentInstance : componentInstances) {
- ResourceInstanceMetadata metadata = new ResourceInstanceMetadata();
- String componentUid = componentInstance.getComponentUid();
- String invariantUUID, resourceUUID;
-
- if (!uuidDuplicatesMap.containsKey(componentUid)) {
- Either<Resource, StorageOperationStatus> eitherResource = toscaOperationFacade.getToscaElement(componentInstance.getComponentUid());
- if (eitherResource.isRight()) {
- log.debug("convertToResourceInstanceMetadata: Failed getting resource with Uid: {}", componentInstance.getComponentUid());
- return Either.right(eitherResource.right().value());
- } else {
- final Resource resource = eitherResource.left().value();
- invariantUUID = resource.getInvariantUUID();
- resourceUUID = resource.getUUID();
- ImmutablePair<String, String> uuidInvariantUUIDPair = new ImmutablePair<>(resourceUUID, invariantUUID);
- uuidDuplicatesMap.put(componentUid, uuidInvariantUUIDPair);
- }
- } else {
- invariantUUID = uuidDuplicatesMap.get(componentUid).getRight();
- resourceUUID = uuidDuplicatesMap.get(componentUid).getLeft();
- }
-
- metadata.setResourceInvariantUUID(invariantUUID);
- metadata.setResourceUUID(resourceUUID);
- metadata.setResourceInstanceName(componentInstance.getName());
- metadata.setResourceName(componentInstance.getComponentName());
- metadata.setResourceVersion(componentInstance.getComponentVersion());
- metadata.setResoucreType(componentInstance.getOriginType().getValue());
-
- if(MapUtils.isNotEmpty(componentInstance.getDeploymentArtifacts())){
- LinkedList<ArtifactMetadata> artifactMetaList = new LinkedList<>();
- Collection<ArtifactDefinition> values = componentInstance.getDeploymentArtifacts().values();
- for (ArtifactDefinition artifactDefinition : values) {
- ArtifactMetadata converted = convertToArtifactMetadata(artifactDefinition, componentType, componentUUID, componentInstance.getNormalizedName());
- artifactMetaList.add(converted);
- }
- metadata.setArtifacts(artifactMetaList);
- }
- retList.add(metadata);
- }
- return Either.left(retList);
- }
-
- // For future US to support Product
- /*
- * private ProductAssetMetadata convertToProductAssetMetadata(Product product, String serverBaseURL) { ProductAssetMetadata retProdAsset = new ProductAssetMetadata();
- *
- * retProdAsset = convertToAsset(retProdAsset, product, serverBaseURL); retProdAsset.setLifecycleState(product.getLifecycleState().name()); retProdAsset.setLastUpdaterUserId(product.getLastUpdaterUserId());
- * retProdAsset.setActive(product.getIsActive()); retProdAsset.setContacts(product.getContacts());
- *
- * List<CategoryDefinition> categories = product.getCategories(); List<ProductCategoryGroupMetadata> categoryMetadataList = new LinkedList<>();
- *
- * if (categories == null || categories.isEmpty()) { return retProdAsset; } else { for (CategoryDefinition categoryDefinition : categories) { String categoryName = categoryDefinition.getName(); List<SubCategoryDefinition> subcategories =
- * categoryDefinition.getSubcategories(); for (SubCategoryDefinition subCategoryDefinition : subcategories) { String subCategoryName = subCategoryDefinition.getName(); List<GroupDefinition> groups = product.getGroups(); for (GroupDefinition
- * groupDefinition : groups) { String groupName = groupDefinition.getName(); categoryMetadataList.add(new ProductCategoryGroupMetadata(categoryName, subCategoryName, groupName)); } } } retProdAsset.setProductGroupings(categoryMetadataList);
- * return retProdAsset; } }
- */
+ private static final Logger log = LoggerFactory.getLogger(DistributionCatalogServlet.class);
+
+ @Autowired
+ private ComponentsUtils componentsUtils;
+
+ @Autowired
+ protected ToscaOperationFacade toscaOperationFacade;
+
+ /*
+ * Relative asset’s URL. Should be used in REST GET API to download the asset’s CSAR. https://{serverBaseURL}/{csarPath} can be obtained from (HttpServletRequest)request.getServerName()
+ */
+ public Either<List<? extends AssetMetadata>, ResponseFormat> convertToAssetMetadata(List<? extends Component> componentList, String serverBaseURL, boolean detailed) {
+ if (componentList == null || componentList.isEmpty()) {
+ return Either.left(new LinkedList<>());
+ }
+ List<AssetMetadata> retResList = new LinkedList<>();
+
+ for (Component curr : componentList) {
+ Either<? extends AssetMetadata, ResponseFormat> resMetaData = convertToSingleAssetMetadata(curr, serverBaseURL, detailed);
+ if (resMetaData.isRight()) {
+ return Either.right(resMetaData.right().value());
+ }
+ retResList.add(resMetaData.left().value());
+ }
+
+ return Either.left(retResList);
+
+ }
+
+ public <T extends Component> Either<? extends AssetMetadata, ResponseFormat> convertToSingleAssetMetadata(T component, String serverBaseURL, boolean detailed) {
+ ComponentTypeEnum componentType = component.getComponentType();
+ Either<? extends AssetMetadata, ResponseFormat> resMetaData = convertToMetadata(componentType, serverBaseURL, detailed, component);
+
+ if (resMetaData.isRight()) {
+ return Either.right(resMetaData.right().value());
+ }
+ else{
+ return Either.left(resMetaData.left().value());
+ }
+
+ }
+
+ private Either<? extends AssetMetadata, ResponseFormat> convertToMetadata(ComponentTypeEnum componentType, String serverBaseURL, boolean detailed, Component curr) {
+
+ switch (componentType) {
+
+ case RESOURCE:
+
+ return generateResourceMeatdata(serverBaseURL, detailed, curr);
+
+ case SERVICE:
+
+ return generateServiceMetadata(serverBaseURL, detailed, curr);
+
+ // For future US's that include product
+ /*
+ * case PRODUCT: if (component instanceof Product) { List<ProductAssetMetadata> retResList = new LinkedList<>(); for (Component curr : componentList) { retResList.add(convertToProductAssetMetadata((Product) curr, serverBaseURL)); } return
+ * Either.left(retResList);
+ */
+ default:
+
+ ResponseFormat responseFormat = componentsUtils.getResponseFormatAdditionalProperty(ActionStatus.COMPONENT_INVALID_CATEGORY);
+ return Either.right(responseFormat);
+ }
+ }
+
+ private Either<? extends AssetMetadata, ResponseFormat> generateResourceMeatdata(String serverBaseURL, boolean detailed, Component curr) {
+ AssetMetadata metaData;
+ metaData = createMetadaObject(detailed, curr.getComponentType());
+ metaData = convertToResourceMetadata((ResourceAssetMetadata) metaData, (Resource) curr, serverBaseURL, detailed);
+
+ if (detailed) {
+ Either<ResourceAssetDetailedMetadata, StorageOperationStatus> converted = convertToResourceDetailedMetadata((ResourceAssetDetailedMetadata) metaData, (Resource) curr, serverBaseURL);
+ if (converted.isRight()) {
+ ActionStatus storageResponse = componentsUtils.convertFromStorageResponse(converted.right().value(), ComponentTypeEnum.RESOURCE);
+ ResponseFormat responseFormat = componentsUtils.getResponseFormat(storageResponse);
+ return Either.right(responseFormat);
+ }
+ }
+
+ return Either.left(metaData);
+ }
+
+ private AssetMetadata createMetadaObject(boolean detailed, ComponentTypeEnum type) {
+ AssetMetadata metaData = null;
+ switch (type) {
+ case SERVICE:
+ if (!detailed) {
+ metaData = new ServiceAssetMetadata();
+ } else {
+ metaData = new ServiceAssetDetailedMetadata();
+ }
+ break;
+ case RESOURCE:
+ if (!detailed) {
+ metaData = new ResourceAssetMetadata();
+ } else {
+ metaData = new ResourceAssetDetailedMetadata();
+ }
+ break;
+ default:
+ break;
+ }
+ return metaData;
+ }
+
+ private Either<? extends AssetMetadata, ResponseFormat> generateServiceMetadata(String serverBaseURL, boolean detailed, Component curr) {
+ AssetMetadata metaData = createMetadaObject(detailed, curr.getComponentType());
+
+ metaData = convertToServiceAssetMetadata((ServiceAssetMetadata) metaData, (Service) curr, serverBaseURL, detailed);
+
+ if (detailed) {
+ Either<ServiceAssetDetailedMetadata, StorageOperationStatus> converted = convertToServiceDetailedMetadata((ServiceAssetDetailedMetadata) metaData, (Service) curr, serverBaseURL);
+ if (converted.isRight()) {
+ ActionStatus storageResponse = componentsUtils.convertFromStorageResponse(converted.right().value(), ComponentTypeEnum.RESOURCE);
+ ResponseFormat responseFormat = componentsUtils.getResponseFormat(storageResponse);
+ return Either.right(responseFormat);
+ }
+ }
+
+ return Either.left(metaData);
+ }
+
+ private <U extends AssetMetadata, T extends Component> U convertToAsset(U asset, T component, String serverBaseURL, boolean detailed) {
+ asset.setUuid(component.getUUID());
+ asset.setInvariantUUID(component.getInvariantUUID());
+ asset.setName(component.getName());
+ asset.setVersion(component.getVersion());
+ if (!detailed) {
+ asset.setToscaModelURL(serverBaseURL + "/" + component.getUUID() + "/toscaModel");
+ } else {
+ String toscaModelUrl = (new String(serverBaseURL)).replace("metadata", "toscaModel");
+ asset.setToscaModelURL(toscaModelUrl);
+ }
+
+ return asset;
+ }
+
+ private <T extends ResourceAssetMetadata> T convertToResourceMetadata(T assetToPopulate, Resource resource, String serverBaseURL, boolean detailed) {
+ assetToPopulate = convertToAsset(assetToPopulate, resource, serverBaseURL, detailed);
+ if(resource.getCategories() != null && !resource.getCategories().isEmpty()){
+ CategoryDefinition categoryDefinition = resource.getCategories().get(0);
+ assetToPopulate.setCategory(categoryDefinition.getName());
+ assetToPopulate.setSubCategory(categoryDefinition.getSubcategories().get(0).getName());
+ }
+ assetToPopulate.setResourceType(resource.getResourceType().name());
+ assetToPopulate.setLifecycleState(resource.getLifecycleState().name());
+ assetToPopulate.setLastUpdaterUserId(resource.getLastUpdaterUserId());
+
+ return (T) assetToPopulate;
+ }
+
+ private <T extends ServiceAssetMetadata> T convertToServiceAssetMetadata(T assetToPopulate, Service service, String serverBaseURL, boolean detailed) {
+ assetToPopulate = convertToAsset(assetToPopulate, service, serverBaseURL, detailed);
+
+ if(service.getCategories() != null && !service.getCategories().isEmpty()){
+ CategoryDefinition categoryDefinition = service.getCategories().get(0);
+ assetToPopulate.setCategory(categoryDefinition.getName());
+ }
+
+ assetToPopulate.setLifecycleState(service.getLifecycleState().name());
+ assetToPopulate.setLastUpdaterUserId(service.getLastUpdaterUserId());
+ assetToPopulate.setDistributionStatus(service.getDistributionStatus().name());
+
+ return (T) assetToPopulate;
+ }
+
+ private <T extends ResourceAssetDetailedMetadata> Either<T, StorageOperationStatus> convertToResourceDetailedMetadata(T assetToPopulate, Resource resource, String serverBaseURL) {
+
+ List<ComponentInstance> componentInstances = resource.getComponentInstances();
+
+ if (componentInstances != null) {
+ Either<List<ResourceInstanceMetadata>, StorageOperationStatus> resourceInstanceMetadata = convertToResourceInstanceMetadata(componentInstances, ComponentTypeEnum.RESOURCE_PARAM_NAME, resource.getUUID());
+ if (resourceInstanceMetadata.isRight()) {
+ return Either.right(resourceInstanceMetadata.right().value());
+ }
+
+ assetToPopulate.setResources(resourceInstanceMetadata.left().value());
+ }
+
+ Map<String, ArtifactDefinition> deploymentArtifacts = resource.getDeploymentArtifacts();
+ assetToPopulate = populateResourceWithArtifacts(assetToPopulate, resource, serverBaseURL, deploymentArtifacts);
+
+ assetToPopulate.setLastUpdaterFullName(resource.getLastUpdaterFullName());
+ assetToPopulate.setToscaResourceName(resource.getToscaResourceName());
+ assetToPopulate.setDescription(resource.getDescription());
+ return Either.left(assetToPopulate);
+ }
+
+ private <T extends ServiceAssetDetailedMetadata> Either<T, StorageOperationStatus> convertToServiceDetailedMetadata(T assetToPopulate, Service service, String serverBaseURL) {
+
+ List<ComponentInstance> componentInstances = service.getComponentInstances();
+
+ if (componentInstances != null) {
+ Either<List<ResourceInstanceMetadata>, StorageOperationStatus> resourceInstanceMetadata = convertToResourceInstanceMetadata(componentInstances, ComponentTypeEnum.SERVICE_PARAM_NAME, service.getUUID());
+ if (resourceInstanceMetadata.isRight()) {
+ return Either.right(resourceInstanceMetadata.right().value());
+ }
+
+ assetToPopulate.setResources(resourceInstanceMetadata.left().value());
+ }
+
+ Map<String, ArtifactDefinition> deploymentArtifacts = service.getDeploymentArtifacts();
+ assetToPopulate = populateServiceWithArtifacts(assetToPopulate, service, deploymentArtifacts);
+
+ assetToPopulate.setLastUpdaterFullName(service.getLastUpdaterFullName());
+
+ return Either.left(assetToPopulate);
+ }
+
+ private <T extends ResourceAssetDetailedMetadata> T populateResourceWithArtifacts(T asset, Resource resource, String serverBaseURL, Map<String, ArtifactDefinition> artifacts) {
+
+ List<ArtifactMetadata> artifactMetaList = populateAssetWithArtifacts(resource, artifacts);
+
+ asset.setArtifacts(artifactMetaList);
+
+ return asset;
+ }
+
+ private <T extends ServiceAssetDetailedMetadata> T populateServiceWithArtifacts(T asset, Service service, Map<String, ArtifactDefinition> artifacts) {
+
+ List<ArtifactMetadata> artifactMetaList = populateAssetWithArtifacts(service, artifacts);
+
+ asset.setArtifacts(artifactMetaList);
+
+ return asset;
+ }
+
+ private List<ArtifactMetadata> populateAssetWithArtifacts(Component component, Map<String, ArtifactDefinition> artifacts) {
+ List<ArtifactMetadata> artifactMetaList = new LinkedList<>();
+ if (artifacts != null) {
+ Collection<ArtifactDefinition> artefactDefList = artifacts.values();
+
+ for (ArtifactDefinition artifactDefinition : artefactDefList) {
+ if (artifactDefinition.getEsId() != null && !artifactDefinition.getEsId().isEmpty()) {
+ ArtifactMetadata convertedArtifactMetadata = convertToArtifactMetadata(artifactDefinition, ComponentTypeEnum.findParamByType(component.getComponentType()), component.getUUID(), null);
+ artifactMetaList.add(convertedArtifactMetadata);
+ }
+ }
+ }
+ return artifactMetaList.isEmpty() ? null : artifactMetaList;
+ }
+
+ private ArtifactMetadata convertToArtifactMetadata(ArtifactDefinition artifact, String componentType, String componentUUID, String resourceInstanceName) {
+ final String COMPONENT_ARTIFACT_URL = "/sdc/v1/catalog/%s/%s/artifacts/%s";
+
+ final String RESOURCE_INSTANCE_ARTIFACT_URL = "/sdc/v1/catalog/%s/%s/resourceInstances/%s/artifacts/%s";
+
+ ArtifactMetadata metadata = new ArtifactMetadata();
+
+ metadata.setArtifactName(artifact.getArtifactName());
+ metadata.setArtifactType(artifact.getArtifactType());
+
+ if (resourceInstanceName == null || resourceInstanceName.isEmpty()) {
+ metadata.setArtifactURL(String.format(COMPONENT_ARTIFACT_URL, componentType, componentUUID, artifact.getArtifactUUID()));
+ } else {
+ metadata.setArtifactURL(String.format(RESOURCE_INSTANCE_ARTIFACT_URL, componentType, componentUUID, resourceInstanceName, artifact.getArtifactUUID()));
+ }
+
+ metadata.setArtifactDescription(artifact.getDescription());
+ metadata.setArtifactTimeout(artifact.getTimeout() > 0 ? artifact.getTimeout() : null);
+ metadata.setArtifactChecksum(artifact.getArtifactChecksum());
+ metadata.setArtifactUUID(artifact.getArtifactUUID());
+ metadata.setArtifactVersion(artifact.getArtifactVersion());
+ metadata.setGeneratedFromUUID(artifact.getGeneratedFromId());
+ metadata.setArtifactLabel(artifact.getArtifactLabel());
+ metadata.setArtifactGroupType(artifact.getArtifactGroupType().getType());
+ return metadata;
+ }
+
+ private Either<List<ResourceInstanceMetadata>, StorageOperationStatus> convertToResourceInstanceMetadata(List<ComponentInstance> componentInstances, String componentType, String componentUUID) {
+ List<ResourceInstanceMetadata> retList = new LinkedList<>();
+ Map<String, ImmutablePair<String, String>> uuidDuplicatesMap = new HashMap<>();
+
+ for (ComponentInstance componentInstance : componentInstances) {
+ ResourceInstanceMetadata metadata = new ResourceInstanceMetadata();
+ String componentUid = componentInstance.getComponentUid();
+ String invariantUUID, resourceUUID;
+
+ if (!uuidDuplicatesMap.containsKey(componentUid)) {
+ Either<Resource, StorageOperationStatus> eitherResource = toscaOperationFacade.getToscaElement(componentInstance.getComponentUid());
+ if (eitherResource.isRight()) {
+ log.debug("convertToResourceInstanceMetadata: Failed getting resource with Uid: {}", componentInstance.getComponentUid());
+ return Either.right(eitherResource.right().value());
+ } else {
+ final Resource resource = eitherResource.left().value();
+ invariantUUID = resource.getInvariantUUID();
+ resourceUUID = resource.getUUID();
+ ImmutablePair<String, String> uuidInvariantUUIDPair = new ImmutablePair<>(resourceUUID, invariantUUID);
+ uuidDuplicatesMap.put(componentUid, uuidInvariantUUIDPair);
+ }
+ } else {
+ invariantUUID = uuidDuplicatesMap.get(componentUid).getRight();
+ resourceUUID = uuidDuplicatesMap.get(componentUid).getLeft();
+ }
+
+ metadata.setResourceInvariantUUID(invariantUUID);
+ metadata.setResourceUUID(resourceUUID);
+ metadata.setResourceInstanceName(componentInstance.getName());
+ metadata.setResourceName(componentInstance.getComponentName());
+ metadata.setResourceVersion(componentInstance.getComponentVersion());
+ metadata.setResoucreType(componentInstance.getOriginType().getValue());
+
+ if(MapUtils.isNotEmpty(componentInstance.getDeploymentArtifacts())){
+ LinkedList<ArtifactMetadata> artifactMetaList = new LinkedList<>();
+ Collection<ArtifactDefinition> values = componentInstance.getDeploymentArtifacts().values();
+ for (ArtifactDefinition artifactDefinition : values) {
+ ArtifactMetadata converted = convertToArtifactMetadata(artifactDefinition, componentType, componentUUID, componentInstance.getNormalizedName());
+ artifactMetaList.add(converted);
+ }
+ metadata.setArtifacts(artifactMetaList);
+ }
+ retList.add(metadata);
+ }
+ return Either.left(retList);
+ }
+
+ // For future US to support Product
+ /*
+ * private ProductAssetMetadata convertToProductAssetMetadata(Product product, String serverBaseURL) { ProductAssetMetadata retProdAsset = new ProductAssetMetadata();
+ *
+ * retProdAsset = convertToAsset(retProdAsset, product, serverBaseURL); retProdAsset.setLifecycleState(product.getLifecycleState().name()); retProdAsset.setLastUpdaterUserId(product.getLastUpdaterUserId());
+ * retProdAsset.setActive(product.getIsActive()); retProdAsset.setContacts(product.getContacts());
+ *
+ * List<CategoryDefinition> categories = product.getCategories(); List<ProductCategoryGroupMetadata> categoryMetadataList = new LinkedList<>();
+ *
+ * if (categories == null || categories.isEmpty()) { return retProdAsset; } else { for (CategoryDefinition categoryDefinition : categories) { String categoryName = categoryDefinition.getName(); List<SubCategoryDefinition> subcategories =
+ * categoryDefinition.getSubcategories(); for (SubCategoryDefinition subCategoryDefinition : subcategories) { String subCategoryName = subCategoryDefinition.getName(); List<GroupDefinition> groups = product.getGroups(); for (GroupDefinition
+ * groupDefinition : groups) { String groupName = groupDefinition.getName(); categoryMetadataList.add(new ProductCategoryGroupMetadata(categoryName, subCategoryName, groupName)); } } } retProdAsset.setProductGroupings(categoryMetadataList);
+ * return retProdAsset; } }
+ */
}