summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/ServiceDistributionArtifactsBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/ServiceDistributionArtifactsBuilder.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/ServiceDistributionArtifactsBuilder.java503
1 files changed, 219 insertions, 284 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/ServiceDistributionArtifactsBuilder.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/ServiceDistributionArtifactsBuilder.java
index 0330a756c6..f3d17979ba 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/ServiceDistributionArtifactsBuilder.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/ServiceDistributionArtifactsBuilder.java
@@ -20,26 +20,16 @@
package org.openecomp.sdc.be.components.distribution.engine;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-import javax.annotation.PostConstruct;
+import fj.data.Either;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
import org.openecomp.sdc.be.config.ConfigurationManager;
-import org.openecomp.sdc.be.model.ArtifactDefinition;
-import org.openecomp.sdc.be.model.ComponentInstance;
-import org.openecomp.sdc.be.model.ComponentParametersView;
-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.category.SubCategoryDefinition;
import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
import org.openecomp.sdc.be.model.operations.api.IArtifactOperation;
-import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation;
import org.openecomp.sdc.common.api.ArtifactTypeEnum;
import org.slf4j.Logger;
@@ -47,279 +37,224 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import fj.data.Either;
+import java.util.*;
+import java.util.stream.Collectors;
@Component("serviceDistributionArtifactsBuilder")
public class ServiceDistributionArtifactsBuilder {
- private int defaultArtifactInstallTimeout = 60;
-
- private static Logger logger = LoggerFactory.getLogger(ServiceDistributionArtifactsBuilder.class.getName());
-
- final static String BASE_ARTIFACT_URL = "/sdc/v1/catalog/services/%s/%s/";
- final static String RESOURCE_ARTIFACT_URL = BASE_ARTIFACT_URL + "resources/%s/%s/artifacts/%s";
- final static String SERVICE_ARTIFACT_URL = BASE_ARTIFACT_URL + "artifacts/%s";
-
- final static String RESOURCE_INSTANCE_ARTIFACT_URL = BASE_ARTIFACT_URL + "resourceInstances/%s/artifacts/%s";
-
- @javax.annotation.Resource
- InterfaceLifecycleOperation interfaceLifecycleOperation;
-
- @javax.annotation.Resource
- IArtifactOperation artifactOperation;
-
- @Autowired
- ToscaOperationFacade toscaOperationFacade;
-
- /*
- * @javax.annotation.Resource private
- * InformationDeployedArtifactsBusinessLogic
- * informationDeployedArtifactsBusinessLogic;
- */
-
- @PostConstruct
- private void init() {
- defaultArtifactInstallTimeout = ConfigurationManager.getConfigurationManager().getConfiguration()
- .getDefaultHeatArtifactTimeoutMinutes();
- }
-
- public InterfaceLifecycleOperation getInterfaceLifecycleOperation() {
- return interfaceLifecycleOperation;
- }
-
- public void setInterfaceLifecycleOperation(InterfaceLifecycleOperation interfaceLifecycleOperation) {
- this.interfaceLifecycleOperation = interfaceLifecycleOperation;
- }
-
- public INotificationData buildResourceInstanceForDistribution(Service service, String distributionId) {
- INotificationData notificationData = new NotificationDataImpl();
-
- notificationData.setResources(convertRIToJsonContanier(service));
- notificationData.setServiceName(service.getName());
- notificationData.setServiceVersion(service.getVersion());
- notificationData.setDistributionID(distributionId);
- notificationData.setServiceUUID(service.getUUID());
- notificationData.setServiceDescription(service.getDescription());
- notificationData.setServiceInvariantUUID(service.getInvariantUUID());
- String workloadContext= ConfigurationManager.getConfigurationManager().getConfiguration().getWorkloadContext();
- if(workloadContext!=null){
- notificationData.setWorkloadContext(workloadContext);
- }
- logger.debug("Before returning notification data object {}", notificationData);
-
- return notificationData;
-
- }
-
- public INotificationData buildServiceForDistribution(INotificationData notificationData, Service service) {
-
- notificationData.setServiceArtifacts(convertServiceArtifactsToArtifactInfo(service));
-
- logger.debug("Before returning notification data object {}", notificationData);
-
- return notificationData;
-
- }
-
- private List<ArtifactInfoImpl> convertServiceArtifactsToArtifactInfo(Service service) {
-
- Map<String, ArtifactDefinition> serviceArtifactsMap = service.getDeploymentArtifacts();
- List<ArtifactDefinition> extractedServiceArtifacts = serviceArtifactsMap.values().stream()
- //filters all artifacts with existing EsId
- .filter(artifactDef -> artifactDef.checkEsIdExist())
- //collects all filtered artifacts with existing EsId to List
- .collect(Collectors.toList());
-
- Optional<ArtifactDefinition> toscaTemplateArtifactOptl = exrtactToscaTemplateArtifact(service);
- if(toscaTemplateArtifactOptl.isPresent()){
- extractedServiceArtifacts.add(toscaTemplateArtifactOptl.get());
- }
-
- Optional<ArtifactDefinition> toscaCsarArtifactOptl = exrtactToscaCsarArtifact(service);
- if(toscaCsarArtifactOptl.isPresent()){
- extractedServiceArtifacts.add(toscaCsarArtifactOptl.get());
- }
-
- List<ArtifactInfoImpl> artifacts = ArtifactInfoImpl.convertServiceArtifactToArtifactInfoImpl(service, extractedServiceArtifacts);
- return artifacts;
- }
-
- private Optional<ArtifactDefinition> exrtactToscaTemplateArtifact(Service service) {
- return service.getToscaArtifacts().values().stream()
- //filters TOSCA_TEMPLATE artifact
- .filter(e -> e.getArtifactType().equals(ArtifactTypeEnum.TOSCA_TEMPLATE.getType())).findAny();
- }
-
- private Optional<ArtifactDefinition> exrtactToscaCsarArtifact(Service service) {
- return service.getToscaArtifacts().values().stream()
- //filters TOSCA_CSAR artifact
- .filter(e -> e.getArtifactType().equals(ArtifactTypeEnum.TOSCA_CSAR.getType())).findAny();
- }
-
- private List<JsonContainerResourceInstance> convertRIToJsonContanier(Service service) {
- List<JsonContainerResourceInstance> ret = new ArrayList<JsonContainerResourceInstance>();
- if (service.getComponentInstances() != null) {
- for (ComponentInstance resourceInstance : service.getComponentInstances()) {
- String resoucreType = resourceInstance.getOriginType().getValue();
- List<ArtifactDefinition> artifactsDefList = getArtifactsWithPayload(resourceInstance);
- List<ArtifactInfoImpl> artifacts = ArtifactInfoImpl.convertToArtifactInfoImpl(service, resourceInstance,
- artifactsDefList);
-
- String resourceInvariantUUID = null;
- String resourceCategory = null;
- String resourceSubcategory = null;
-
- ComponentParametersView componentParametersView = new ComponentParametersView();
- componentParametersView.disableAll();
- componentParametersView.setIgnoreCategories(false);
- Either<Resource, StorageOperationStatus> componentResponse = toscaOperationFacade
- .getToscaElement(resourceInstance.getComponentUid(), componentParametersView);
-
- if (componentResponse.isRight()) {
- logger.debug("Resource {} Invariant UUID & Categories retrieving failed", resourceInstance.getComponentUid());
- } else {
- Resource resource = componentResponse.left().value();
- resourceInvariantUUID = resource.getInvariantUUID();
-
- List<CategoryDefinition> categories = resource.getCategories();
-
- if (categories != null) {
- CategoryDefinition categoryDefinition = categories.get(0);
-
- if (categoryDefinition != null) {
- resourceCategory = categoryDefinition.getName();
- List<SubCategoryDefinition> subcategories = categoryDefinition.getSubcategories();
- if (null != subcategories) {
- SubCategoryDefinition subCategoryDefinition = subcategories.get(0);
-
- if (subCategoryDefinition != null) {
- resourceSubcategory = subCategoryDefinition.getName();
- }
- }
- }
- }
- }
-
- JsonContainerResourceInstance jsonContainer = new JsonContainerResourceInstance(resourceInstance, resoucreType,
- rebuildArtifactswith120TimeoutInsteadOf60(artifacts)/*TODO used to send artifacts, the function is a fix to the short timeout bug in distribution*/);
- jsonContainer.setResourceInvariantUUID(resourceInvariantUUID);
- jsonContainer.setCategory(resourceCategory);
- jsonContainer.setSubcategory(resourceSubcategory);
- ret.add(jsonContainer);
- }
- }
- return ret;
- }
-
- private List<ArtifactInfoImpl> rebuildArtifactswith120TimeoutInsteadOf60(List<ArtifactInfoImpl> artifacts) {
- for(ArtifactInfoImpl artifact : artifacts){
- if(artifact.getArtifactTimeout().equals(60)){
- artifact.setArtifactTimeout(120);
- }
- }
- return artifacts;
- }
-
- private List<ArtifactDefinition> getArtifactsWithPayload(ComponentInstance resourceInstance) {
- List<ArtifactDefinition> ret = new ArrayList<ArtifactDefinition>();
-
- // List<ArtifactDefinition> informationDeployedArtifacts =
- // informationDeployedArtifactsBusinessLogic.getInformationalDeployedArtifactsForResourceInstance(resourceInstance);
- List<ArtifactDefinition> deployableArtifacts = new ArrayList<ArtifactDefinition>();
- // deployableArtifacts.addAll(informationDeployedArtifacts);
- if (resourceInstance.getDeploymentArtifacts() != null) {
- deployableArtifacts.addAll(resourceInstance.getDeploymentArtifacts().values());
- }
-
- for (ArtifactDefinition artifactDef : deployableArtifacts) {
- if (artifactDef.checkEsIdExist()) {
- ret.add(artifactDef);
- }
- }
-
- return ret;
- }
-
- /**
- * build the url for resource intance artifact
- *
- * @param service
- * @param resourceData
- * @param artifactName
- * @return
- */
- public static String buildResourceInstanceArtifactUrl(Service service, ComponentInstance resourceInstance,
- String artifactName) {
-
- String url = String.format(RESOURCE_INSTANCE_ARTIFACT_URL, service.getSystemName(), service.getVersion(),
- resourceInstance.getNormalizedName(), artifactName);
-
- logger.debug("After building artifact url {}", url);
-
- return url;
- }
-
- /**
- * build the url for resource intance artifact
- *
- * @param service
- * @param resourceData
- * @param artifactName
- * @return
- */
- public static String buildServiceArtifactUrl(Service service, String artifactName) {
-
- String url = String.format(SERVICE_ARTIFACT_URL, service.getSystemName(), service.getVersion(), artifactName);
-
- logger.debug("After building artifact url {}", url);
-
- return url;
-
- }
-
- /**
- * Retrieve all deployment artifacts of all resources under a given service
- *
- * @param resourceArtifactsResult
- * @param service
- * @param deConfiguration
- * @return
- */
- public Either<Boolean, StorageOperationStatus> isServiceContainsDeploymentArtifacts(Service service) {
-
- Either<Boolean, StorageOperationStatus> result = Either.left(false);
- Map<String, ArtifactDefinition> serviseArtifactsMap = service.getDeploymentArtifacts();
- if (serviseArtifactsMap != null && !serviseArtifactsMap.isEmpty()) {
- result = Either.left(true);
- return result;
- }
-
- List<ComponentInstance> resourceInstances = service.getComponentInstances();
-
- if (resourceInstances != null) {
- for (ComponentInstance resourceInstance : resourceInstances) {
-
- Map<String, ArtifactDefinition> deploymentArtifactsMapper = resourceInstance.getDeploymentArtifacts();
- // List<ArtifactDefinition> informationDeployedArtifacts =
- // informationDeployedArtifactsBusinessLogic.getInformationalDeployedArtifactsForResourceInstance(resourceInstance);
-
- boolean isDeployableArtifactFound = isContainsPayload(deploymentArtifactsMapper.values());// ||
- // isContainsPayload(informationDeployedArtifacts);
- if (isDeployableArtifactFound) {
- result = Either.left(true);
- break;
- }
-
- }
-
- }
-
- return result;
- }
-
- private boolean isContainsPayload(Collection<ArtifactDefinition> collection) {
- boolean payLoadFound = collection != null && collection.stream().anyMatch(p -> p.checkEsIdExist());
- return payLoadFound;
- }
+ private static final Logger logger = LoggerFactory.getLogger(ServiceDistributionArtifactsBuilder.class);
+
+ static final String BASE_ARTIFACT_URL = "/sdc/v1/catalog/services/%s/%s/";
+ static final String RESOURCE_ARTIFACT_URL = BASE_ARTIFACT_URL + "resources/%s/%s/artifacts/%s";
+ static final String SERVICE_ARTIFACT_URL = BASE_ARTIFACT_URL + "artifacts/%s";
+ static final String RESOURCE_INSTANCE_ARTIFACT_URL = BASE_ARTIFACT_URL + "resourceInstances/%s/artifacts/%s";
+
+ @javax.annotation.Resource
+ InterfaceLifecycleOperation interfaceLifecycleOperation;
+
+ @javax.annotation.Resource
+ IArtifactOperation artifactOperation;
+
+ @Autowired
+ ToscaOperationFacade toscaOperationFacade;
+
+ public InterfaceLifecycleOperation getInterfaceLifecycleOperation() {
+ return interfaceLifecycleOperation;
+ }
+
+ public void setInterfaceLifecycleOperation(InterfaceLifecycleOperation interfaceLifecycleOperation) {
+ this.interfaceLifecycleOperation = interfaceLifecycleOperation;
+ }
+
+ private String resolveWorkloadContext(String workloadContext) {
+ return workloadContext != null ? workloadContext :
+ ConfigurationManager.getConfigurationManager().getConfiguration().getWorkloadContext();
+ }
+
+ public INotificationData buildResourceInstanceForDistribution(Service service, String distributionId, String workloadContext) {
+ INotificationData notificationData = new NotificationDataImpl();
+
+ notificationData.setResources(convertRIsToJsonContanier(service));
+ notificationData.setServiceName(service.getName());
+ notificationData.setServiceVersion(service.getVersion());
+ notificationData.setDistributionID(distributionId);
+ notificationData.setServiceUUID(service.getUUID());
+ notificationData.setServiceDescription(service.getDescription());
+ notificationData.setServiceInvariantUUID(service.getInvariantUUID());
+ workloadContext = resolveWorkloadContext(workloadContext);
+ if (workloadContext!=null){
+ notificationData.setWorkloadContext(workloadContext);
+ }
+ logger.debug("Before returning notification data object {}", notificationData);
+
+ return notificationData;
+ }
+
+ public INotificationData buildServiceForDistribution(INotificationData notificationData, Service service) {
+
+ notificationData.setServiceArtifacts(convertServiceArtifactsToArtifactInfo(service));
+
+ logger.debug("Before returning notification data object {}", notificationData);
+
+ return notificationData;
+ }
+
+ private List<ArtifactInfoImpl> convertServiceArtifactsToArtifactInfo(Service service) {
+
+ Map<String, ArtifactDefinition> serviceArtifactsMap = service.getDeploymentArtifacts();
+ List<ArtifactDefinition> extractedServiceArtifacts = serviceArtifactsMap.values().stream()
+ //filters all artifacts with existing EsId
+ .filter(ArtifactDefinition::checkEsIdExist)
+ //collects all filtered artifacts with existing EsId to List
+ .collect(Collectors.toList());
+
+ Optional<ArtifactDefinition> toscaTemplateArtifactOptl = exrtactToscaTemplateArtifact(service);
+ if(toscaTemplateArtifactOptl.isPresent()){
+ extractedServiceArtifacts.add(toscaTemplateArtifactOptl.get());
+ }
+
+ Optional<ArtifactDefinition> toscaCsarArtifactOptl = exrtactToscaCsarArtifact(service);
+ if(toscaCsarArtifactOptl.isPresent()){
+ extractedServiceArtifacts.add(toscaCsarArtifactOptl.get());
+ }
+
+ return ArtifactInfoImpl.convertServiceArtifactToArtifactInfoImpl(service, extractedServiceArtifacts);
+ }
+
+ private Optional<ArtifactDefinition> exrtactToscaTemplateArtifact(Service service) {
+ return service.getToscaArtifacts().values().stream()
+ //filters TOSCA_TEMPLATE artifact
+ .filter(e -> e.getArtifactType().equals(ArtifactTypeEnum.TOSCA_TEMPLATE.getType())).findAny();
+ }
+
+ private Optional<ArtifactDefinition> exrtactToscaCsarArtifact(Service service) {
+ return service.getToscaArtifacts().values().stream()
+ //filters TOSCA_CSAR artifact
+ .filter(e -> e.getArtifactType().equals(ArtifactTypeEnum.TOSCA_CSAR.getType())).findAny();
+ }
+
+ private List<JsonContainerResourceInstance> convertRIsToJsonContanier(Service service) {
+ List<JsonContainerResourceInstance> ret = new ArrayList<>();
+ if (service.getComponentInstances() != null) {
+ for (ComponentInstance instance : service.getComponentInstances()) {
+ JsonContainerResourceInstance jsonContainer = new JsonContainerResourceInstance(instance, convertToArtifactsInfoImpl(service, instance));
+ ComponentParametersView filter = new ComponentParametersView();
+ filter.disableAll();
+ filter.setIgnoreCategories(false);
+ toscaOperationFacade.getToscaElement(instance.getComponentUid(), filter)
+ .left()
+ .bind(r->{fillJsonContainer(jsonContainer, (Resource) r); return Either.left(r);})
+ .right()
+ .forEach(r->logger.debug("Resource {} Invariant UUID & Categories retrieving failed", instance.getComponentUid()));
+ ret.add(jsonContainer);
+ }
+ }
+ return ret;
+ }
+
+ private void fillJsonContainer(JsonContainerResourceInstance jsonContainer, Resource resource) {
+ jsonContainer.setResourceInvariantUUID(resource.getInvariantUUID());
+ setCategories(jsonContainer, resource.getCategories());
+ }
+
+ private List<ArtifactInfoImpl> convertToArtifactsInfoImpl(Service service, ComponentInstance resourceInstance) {
+ List<ArtifactInfoImpl> artifacts = ArtifactInfoImpl.convertToArtifactInfoImpl(service, resourceInstance, getArtifactsWithPayload(resourceInstance));
+ artifacts.stream().forEach(ArtifactInfoImpl::updateArtifactTimeout);
+ return artifacts;
+ }
+
+ private void setCategories(JsonContainerResourceInstance jsonContainer, List<CategoryDefinition> categories) {
+ if (categories != null) {
+ CategoryDefinition categoryDefinition = categories.get(0);
+
+ if (categoryDefinition != null) {
+ jsonContainer.setCategory(categoryDefinition.getName());
+ List<SubCategoryDefinition> subcategories = categoryDefinition.getSubcategories();
+ if (null != subcategories) {
+ SubCategoryDefinition subCategoryDefinition = subcategories.get(0);
+
+ if (subCategoryDefinition != null) {
+ jsonContainer.setSubcategory(subCategoryDefinition.getName());
+ }
+ }
+ }
+ }
+ }
+
+ private List<ArtifactDefinition> getArtifactsWithPayload(ComponentInstance resourceInstance) {
+ List<ArtifactDefinition> ret = new ArrayList<>();
+
+ List<ArtifactDefinition> deployableArtifacts = new ArrayList<>();
+ if (resourceInstance.getDeploymentArtifacts() != null) {
+ deployableArtifacts.addAll(resourceInstance.getDeploymentArtifacts().values());
+ }
+
+ for (ArtifactDefinition artifactDef : deployableArtifacts) {
+ if (artifactDef.checkEsIdExist()) {
+ ret.add(artifactDef);
+ }
+ }
+
+ return ret;
+ }
+
+ /**
+ * build the URL for resource instance artifact
+ *
+ * @param service
+ * @param resourceInstance
+ * @param artifactName
+ * @return URL string
+ */
+ public static String buildResourceInstanceArtifactUrl(Service service, ComponentInstance resourceInstance,
+ String artifactName) {
+
+ String url = String.format(RESOURCE_INSTANCE_ARTIFACT_URL, service.getSystemName(), service.getVersion(),
+ resourceInstance.getNormalizedName(), artifactName);
+
+ logger.debug("After building artifact url {}", url);
+
+ return url;
+ }
+
+ /**
+ * build the URL for resource instance artifact
+ *
+ * @param service
+ * @param artifactName
+ * @return URL string
+ */
+ public static String buildServiceArtifactUrl(Service service, String artifactName) {
+
+ String url = String.format(SERVICE_ARTIFACT_URL, service.getSystemName(), service.getVersion(), artifactName);
+
+ logger.debug("After building artifact url {}", url);
+
+ return url;
+
+ }
+
+ /**
+ * Verifies that the service or at least one of its instance contains deployment artifacts
+ *
+ * @param the service
+ * @return boolean
+ */
+ public boolean verifyServiceContainsDeploymentArtifacts(Service service) {
+ if (MapUtils.isNotEmpty(service.getDeploymentArtifacts())) {
+ return true;
+ }
+ boolean contains = false;
+ List<ComponentInstance> resourceInstances = service.getComponentInstances();
+ if (CollectionUtils.isNotEmpty(resourceInstances)) {
+ contains = resourceInstances.stream().anyMatch(i -> isContainsPayload(i.getDeploymentArtifacts()));
+ }
+ return contains;
+ }
+
+ private boolean isContainsPayload(Map<String, ArtifactDefinition> deploymentArtifacts) {
+ return deploymentArtifacts != null && deploymentArtifacts.values().stream().anyMatch(ArtifactDefinition::checkEsIdExist);
+ }
}