diff options
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.java | 503 |
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); + } } |