aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/AbstractTemplateBusinessLogic.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/AbstractTemplateBusinessLogic.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/AbstractTemplateBusinessLogic.java187
1 files changed, 187 insertions, 0 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/AbstractTemplateBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/AbstractTemplateBusinessLogic.java
new file mode 100644
index 0000000000..95422f4cfc
--- /dev/null
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/AbstractTemplateBusinessLogic.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2020 CMCC, Inc. and others. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openecomp.sdc.be.components.impl;
+
+import fj.data.Either;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.openecomp.sdc.be.components.validation.ServiceDistributionValidation;
+import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
+import org.openecomp.sdc.be.externalapi.servlet.representation.AbstractResourceInfo;
+import org.openecomp.sdc.be.externalapi.servlet.representation.AbstractTemplateInfo;
+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.jsonjanusgraph.operations.ArtifactsOperations;
+import org.openecomp.sdc.be.model.jsonjanusgraph.operations.InterfaceOperation;
+import org.openecomp.sdc.be.model.operations.api.*;
+import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter;
+import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation;
+import org.openecomp.sdc.common.log.wrappers.Logger;
+import org.openecomp.sdc.exception.ResponseFormat;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@org.springframework.stereotype.Component("abstractTemplateBusinessLogic")
+public class AbstractTemplateBusinessLogic extends BaseBusinessLogic {
+
+ private static final String INITIAL_VERSION = "0.1";
+
+ private static final Logger log = Logger.getLogger(AbstractTemplateBusinessLogic.class);
+
+ @Autowired
+ ServiceDistributionValidation serviceDistributionValidation;
+
+ @Autowired
+ protected ServiceImportManager serviceImportManager;
+
+ @Autowired
+ protected ServiceBusinessLogic serviceBusinessLogic;
+
+ @Autowired
+ public AbstractTemplateBusinessLogic(IElementOperation elementDao, IGroupOperation groupOperation,
+ IGroupInstanceOperation groupInstanceOperation, IGroupTypeOperation groupTypeOperation,
+ InterfaceOperation interfaceOperation,
+ InterfaceLifecycleOperation interfaceLifecycleTypeOperation, ArtifactsOperations artifactToscaOperation) {
+ super(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
+ interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation);
+ }
+
+ public Either<AbstractTemplateInfo, ResponseFormat> getServiceAbstractStatus(List<? extends Component> componentList) {
+ AbstractTemplateInfo abstractTemplateInfo = new AbstractTemplateInfo();
+ if (componentList == null || componentList.isEmpty()) {
+ return Either.left(abstractTemplateInfo);
+ }
+
+ for (Component curr : componentList) {
+ Service service = (Service) curr;
+ List<ComponentInstance> componentInstances = service.getComponentInstances();
+ List<RequirementCapabilityRelDef> componentInstancesRelations = service.getComponentInstancesRelations();
+ abstractTemplateInfo.setServiceUniqueId(service.getUniqueId());
+ String serviceUniqueId = abstractTemplateInfo.getServiceUniqueId();
+ Either<Boolean, ResponseFormat> isAbstractResourceData = getEveryServiceAbstractStatus(componentInstances, abstractTemplateInfo, componentInstancesRelations, serviceUniqueId);
+ if (isAbstractResourceData.isRight()) {
+ return Either.right(isAbstractResourceData.right().value());
+ }
+ }
+
+ return Either.left(abstractTemplateInfo);
+ }
+
+ private Either<Boolean, ResponseFormat> getEveryServiceAbstractStatus(List<ComponentInstance> componentInstances, AbstractTemplateInfo abstractTemplateInfo,
+ List<RequirementCapabilityRelDef> componentInstancesRelations, String serviceUniqueId) {
+ Map<String, ImmutablePair<String, String>> uuidDuplicatesMap = new HashMap<>();
+ List<AbstractResourceInfo> abstractResourceInfoList = new ArrayList<>();
+ Boolean isContainAbstractResource = false;
+
+ for (ComponentInstance componentInstance : componentInstances) {
+ String componentUid = componentInstance.getComponentUid();
+ String invariantUUID, resourceUUID;
+ if (!uuidDuplicatesMap.containsKey(componentUid)) {
+ Either<Resource, StorageOperationStatus> eitherResource = toscaOperationFacade
+ .getToscaElement(componentInstance.getComponentUid());
+ if (eitherResource.isRight()) {
+ log.debug("getEveryServiceAbstractStatus: Failed getting resource with UUid: {}",
+ componentInstance.getComponentUid());
+ ResponseFormat responseFormat = componentsUtils.getResponseFormat(eitherResource.right().value());
+ return Either.right(responseFormat);
+ } 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);
+
+ Either<List<AbstractResourceInfo>, ResponseFormat> abstractResourceEither = getAbstractResourceInfoList(resource, componentInstancesRelations, serviceUniqueId);
+ if (abstractResourceEither.isRight()) {
+ return Either.right(abstractResourceEither.right().value());
+ }
+ abstractResourceInfoList = abstractResourceEither.left().value();
+ isContainAbstractResource = true;
+ }
+ }
+ }
+ abstractTemplateInfo.setIsAbstractTemplate(isContainAbstractResource);
+ abstractTemplateInfo.setAbstractResourceInfoList(abstractResourceInfoList);
+ return Either.left(isContainAbstractResource);
+ }
+
+ private Either<List<AbstractResourceInfo>, ResponseFormat> getAbstractResourceInfoList(Resource resource, List<RequirementCapabilityRelDef> componentInstancesRelations, String serviceUniqueId) {
+ List<AbstractResourceInfo> abstractResourceInfoList = new ArrayList<>();
+ boolean isAbstract = getIsAbstract(resource.getCategories());
+ log.debug("before if isAbstract,get resource:{}", resource);
+ if (!isAbstract) {
+ log.debug("getAbstractResourceInfoList:Resource is not Abstract");
+ ResponseFormat responseFormat = componentsUtils.getResponseFormat(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(JanusGraphOperationStatus.NOT_FOUND));
+ return Either.right(responseFormat);
+ }
+ log.debug("getAbstractResourceInfoList:Resource is Abstract");
+
+ AbstractResourceInfo abstractResourceInfo = getAbstractResourceInfo(resource, componentInstancesRelations, serviceUniqueId);
+ abstractResourceInfoList.add(abstractResourceInfo);
+ return Either.left(abstractResourceInfoList);
+ }
+
+ private AbstractResourceInfo getAbstractResourceInfo(Resource resource,List<RequirementCapabilityRelDef> componentInstancesRelations,String serviceUniqueId){
+ AbstractResourceInfo abstractResourceInfo = new AbstractResourceInfo();
+ abstractResourceInfo.setAbstractResourceUUid(resource.getUUID());
+ abstractResourceInfo.setAbstractResourceName(resource.getName());
+ abstractResourceInfo.setAbstractResourceUniqueId(resource.getUniqueId());
+ String uniqueId = serviceUniqueId + "." + resource.getUniqueId() + "." + resource.getNormalizedName();
+
+ List<RequirementCapabilityRelDef> resourceComponentInstancesRelations = new ArrayList<>();
+ log.debug("get serviceUniqueId:{},get UniqueId:{},get NormalizedName:{}",
+ serviceUniqueId, resource.getUniqueId(), resource.getNormalizedName());
+ log.debug("get is Abstract,componentInstancesRelations:{}", componentInstancesRelations);
+ for (RequirementCapabilityRelDef componentInstancesRelation : componentInstancesRelations) {
+ log.debug("for componentInstancesRelation,get componentInstancesRelation:{}", componentInstancesRelation);
+ String fromNode = componentInstancesRelation.getFromNode();
+ log.debug("for componentInstancesRelation,get fromNode:{},uniqueId:{}", fromNode,uniqueId);
+ if (fromNode.toUpperCase().contains(uniqueId.toUpperCase())) {
+ RequirementCapabilityRelDef resourceComponentInstancesRelation = new RequirementCapabilityRelDef();
+ log.debug("fromNode contains name,get componentInstancesRelation:{}", componentInstancesRelation);
+ resourceComponentInstancesRelation.setFromNode(componentInstancesRelation.getFromNode());
+ resourceComponentInstancesRelation.setOriginUI(componentInstancesRelation.isOriginUI());
+ resourceComponentInstancesRelation.setRelationships(componentInstancesRelation.getRelationships());
+ resourceComponentInstancesRelation.setToNode(componentInstancesRelation.getToNode());
+ resourceComponentInstancesRelation.setUid(componentInstancesRelation.getUid());
+ resourceComponentInstancesRelations.add(resourceComponentInstancesRelation);
+ }
+ }
+ abstractResourceInfo.setComponentInstancesRelations(resourceComponentInstancesRelations);
+ return abstractResourceInfo;
+ }
+
+ private boolean getIsAbstract(List<CategoryDefinition> categories) {
+ boolean anAbstract = false;
+ if (categories != null && !categories.isEmpty()) {
+ CategoryDefinition categoryDef = categories.get(0);
+ if (categoryDef != null && categoryDef.getName() != null && categoryDef.getName()
+ .equals(ImportUtils.Constants.ABSTRACT_CATEGORY_NAME)) {
+ SubCategoryDefinition subCategoryDef = categoryDef.getSubcategories().get(0);
+ if (subCategoryDef != null && subCategoryDef.getName().equals(ImportUtils.Constants.ABSTRACT_SUBCATEGORY)) {
+ anAbstract = true;
+ }
+ }
+ }
+ return anAbstract;
+ }
+}