diff options
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ElementBusinessLogic.java')
-rw-r--r-- | catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ElementBusinessLogic.java | 356 |
1 files changed, 164 insertions, 192 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ElementBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ElementBusinessLogic.java index ca2e4a8078..711e6648ed 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ElementBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ElementBusinessLogic.java @@ -28,11 +28,13 @@ import org.apache.http.NameValuePair; import org.apache.http.client.utils.URLEncodedUtils; import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException; import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException; -import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; +import org.openecomp.sdc.be.config.Configuration; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge; import org.openecomp.sdc.be.dao.graph.datatype.GraphNode; import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus; +import org.openecomp.sdc.be.dao.jsongraph.GraphVertex; +import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum; import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum; import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels; import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary; @@ -40,14 +42,33 @@ import org.openecomp.sdc.be.datamodel.api.CategoryTypeEnum; import org.openecomp.sdc.be.datamodel.utils.NodeTypeConvertUtils; import org.openecomp.sdc.be.datatypes.components.ComponentMetadataDataDefinition; import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition; -import org.openecomp.sdc.be.datatypes.enums.*; -import org.openecomp.sdc.be.model.*; +import org.openecomp.sdc.be.datatypes.enums.AssetTypeEnum; +import org.openecomp.sdc.be.datatypes.enums.ComponentFieldsEnum; +import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; +import org.openecomp.sdc.be.datatypes.enums.FilterKeyEnum; +import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum; +import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum; +import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum; +import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum; +import org.openecomp.sdc.be.model.ArtifactType; +import org.openecomp.sdc.be.model.CatalogUpdateTimestamp; +import org.openecomp.sdc.be.model.Component; +import org.openecomp.sdc.be.model.ComponentParametersView; +import org.openecomp.sdc.be.model.DistributionStatusEnum; +import org.openecomp.sdc.be.model.LifecycleStateEnum; +import org.openecomp.sdc.be.model.Product; +import org.openecomp.sdc.be.model.PropertyScope; +import org.openecomp.sdc.be.model.Resource; +import org.openecomp.sdc.be.model.Service; +import org.openecomp.sdc.be.model.Tag; +import org.openecomp.sdc.be.model.User; import org.openecomp.sdc.be.model.catalog.CatalogComponent; import org.openecomp.sdc.be.model.category.CategoryDefinition; import org.openecomp.sdc.be.model.category.GroupingDefinition; 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.jsonjanusgraph.utils.ModelConverter; import org.openecomp.sdc.be.model.operations.api.IElementOperation; import org.openecomp.sdc.be.model.operations.api.IGroupInstanceOperation; import org.openecomp.sdc.be.model.operations.api.IGroupOperation; @@ -56,9 +77,6 @@ import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter; import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation; import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder; -import org.openecomp.sdc.be.resources.data.ComponentMetadataData; -import org.openecomp.sdc.be.resources.data.ResourceMetadataData; -import org.openecomp.sdc.be.resources.data.ServiceMetadataData; import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum; import org.openecomp.sdc.be.resources.data.category.CategoryData; import org.openecomp.sdc.be.resources.data.category.SubCategoryData; @@ -69,14 +87,25 @@ import org.openecomp.sdc.common.datastructure.Wrapper; import org.openecomp.sdc.common.log.wrappers.Logger; import org.openecomp.sdc.common.util.ValidationUtils; import org.openecomp.sdc.exception.ResponseFormat; +import org.springframework.beans.factory.annotation.Autowired; import java.nio.charset.StandardCharsets; -import java.util.*; +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.Objects; +import java.util.Optional; +import java.util.Set; import java.util.function.Predicate; import java.util.stream.Collectors; -import org.springframework.beans.factory.annotation.Autowired; import static org.apache.commons.lang.BooleanUtils.isTrue; +import static org.openecomp.sdc.be.components.impl.ImportUtils.Constants.DEFAULT_ICON; @org.springframework.stereotype.Component("elementsBusinessLogic") public class ElementBusinessLogic extends BaseBusinessLogic { @@ -106,7 +135,6 @@ public class ElementBusinessLogic extends BaseBusinessLogic { this.elementOperation = elementOperation; this.userAdminManager = userAdminManager; } - /** * * @param user @@ -121,37 +149,25 @@ public class ElementBusinessLogic extends BaseBusinessLogic { Role currentRole = Role.valueOf(role); switch (currentRole) { - case DESIGNER: - response = handleDesigner(userId); - break; - - case TESTER: - response = handleTester(); - break; + case DESIGNER: + response = handleDesigner(userId); + break; - case GOVERNOR: - response = handleGovernor(); - break; + case PRODUCT_STRATEGIST: + response = handleProductStrategist(); + break; - case OPS: - response = handleOps(); - break; + case PRODUCT_MANAGER: + response = handleProductManager(userId); + break; - case PRODUCT_STRATEGIST: - response = handleProductStrategist(); - break; + case ADMIN: + response = handleAdmin(); + break; - case PRODUCT_MANAGER: - response = handleProductManager(userId); - break; - - case ADMIN: - response = handleAdmin(); - break; - - default: - response = Either.right(componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION)); - break; + default: + response = Either.right(componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION)); + break; } // converting the Set to List so the rest of the code will handle it normally (Was changed because the same element with the same uuid was returned twice) return convertedToListResponse(response); @@ -174,9 +190,8 @@ public class ElementBusinessLogic extends BaseBusinessLogic { Either<Map<String, Set<? extends Component>>, ResponseFormat> response; // userId should stay null Set<LifecycleStateEnum> lifecycleStates = new HashSet<>(); - Set<LifecycleStateEnum> lastStateStates = new HashSet<>(); lifecycleStates.add(LifecycleStateEnum.CERTIFIED); - response = getFollowedResourcesAndServices(null, lifecycleStates, lastStateStates); + response = getFollowedResourcesAndServices(null, lifecycleStates, new HashSet<>()); return response; } @@ -186,11 +201,9 @@ public class ElementBusinessLogic extends BaseBusinessLogic { Either<Map<String, Set<? extends Component>>, ResponseFormat> response; lifecycleStates.add(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN); lifecycleStates.add(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT); - lifecycleStates.add(LifecycleStateEnum.READY_FOR_CERTIFICATION); - lifecycleStates.add(LifecycleStateEnum.CERTIFICATION_IN_PROGRESS); lifecycleStates.add(LifecycleStateEnum.CERTIFIED); // more states - lastStateStates.add(LifecycleStateEnum.READY_FOR_CERTIFICATION); + lastStateStates.add(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN); response = getFollowedResourcesAndServices(userId, lifecycleStates, lastStateStates); return response; } @@ -212,23 +225,13 @@ public class ElementBusinessLogic extends BaseBusinessLogic { Either<Map<String, Set<? extends Component>>, ResponseFormat> response; lifecycleStates.add(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN); lifecycleStates.add(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT); - lifecycleStates.add(LifecycleStateEnum.READY_FOR_CERTIFICATION); - lifecycleStates.add(LifecycleStateEnum.CERTIFICATION_IN_PROGRESS); lifecycleStates.add(LifecycleStateEnum.CERTIFIED); // more states - lastStateStates.add(LifecycleStateEnum.READY_FOR_CERTIFICATION); + lastStateStates.add(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN); response = getFollowedProducts(userId, lifecycleStates, lastStateStates); return response; } - private Either<Map<String, Set<? extends Component>>, ResponseFormat> handleOps() { - Set<DistributionStatusEnum> distStatus = new HashSet<>(); - distStatus.add(DistributionStatusEnum.DISTRIBUTION_APPROVED); - distStatus.add(DistributionStatusEnum.DISTRIBUTED); - - return handleFollowedCertifiedServices(distStatus); - } - private Either<Map<String, Set<? extends Component>>, ResponseFormat> handleFollowedCertifiedServices(Set<DistributionStatusEnum> distStatus) { Either<List<Service>, StorageOperationStatus> services = toscaOperationFacade.getCertifiedServicesWithDistStatus(distStatus); @@ -243,14 +246,6 @@ public class ElementBusinessLogic extends BaseBusinessLogic { } } - private Either<Map<String, Set<? extends Component>>, ResponseFormat> handleTester() { - Set<LifecycleStateEnum> lifecycleStates = new HashSet<>(); - lifecycleStates.add(LifecycleStateEnum.CERTIFICATION_IN_PROGRESS); - lifecycleStates.add(LifecycleStateEnum.READY_FOR_CERTIFICATION); - - return getFollowedResourcesAndServices(null, lifecycleStates, null); - } - private Either<Map<String, Set<? extends Component>>, ResponseFormat> getFollowedResourcesAndServices(String userId, Set<LifecycleStateEnum> lifecycleStates, Set<LifecycleStateEnum> lastStateStates) { try { @@ -303,20 +298,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { String componentType = componentTypeEnum == null ? componentTypeParamName : componentTypeEnum.getValue(); CategoryTypeEnum categoryType = CategoryTypeEnum.CATEGORY; - User user; - Either<User, ResponseFormat> validateUser = validateUser(userId); - if (validateUser.isRight()) { - log.debug(VALIDATION_OF_USER_FAILED_USER_ID, userId); - ResponseFormat responseFormat = validateUser.right().value(); - user = new User(); - user.setUserId(userId); - String currCategoryName = (category == null ? null : category.getName()); - handleCategoryAuditing(responseFormat, user, currCategoryName, auditingAction, componentType); - return Either.right(responseFormat); - } - - user = validateUser.left().value(); - + User user = validateUserExists(userId); if (category == null) { log.debug("Category json is invalid"); ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_CONTENT); @@ -363,6 +345,11 @@ public class ElementBusinessLogic extends BaseBusinessLogic { String normalizedName = ValidationUtils.normalizeCategoryName4Uniqueness(categoryName); category.setNormalizedName(normalizedName); + if (ValidationUtils.validateCategoryIconNotEmpty(category.getIcons())){ + log.debug("createCategory: setting category icon to default icon since service category was created without an icon "); + category.setIcons(Arrays.asList(DEFAULT_ICON)); + } + NodeTypeEnum nodeType = NodeTypeConvertUtils.getCategoryNodeTypeByComponentParam(componentTypeEnum, categoryType); Either<Boolean, ActionStatus> categoryUniqueEither = elementOperation.isCategoryUniqueForType(nodeType, normalizedName); @@ -416,7 +403,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { String origSubCategoryName = subCategoryName; User user; try{ - user = validateUserExists(userId, "createSubCategory", false); + user = validateUserExists(userId); } catch(ByActionStatusComponentException e){ ResponseFormat responseFormat = componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams()); handleComponentException(userId, auditingAction, componentType, parentCategoryName, origSubCategoryName, @@ -579,7 +566,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { User user; try{ - user = validateUserExists(userId, "create Grouping", false); + user = validateUserExists(userId); } catch(ByResponseFormatComponentException e){ ResponseFormat responseFormat = e.getResponseFormat(); handleComponentException(grouping, userId, auditingAction, componentType, parentCategoryName, @@ -741,7 +728,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { return Either.right(responseFormat); } try { - user = validateUserExists(userId, "get All Categories", false); + user = validateUserExists(userId); } catch (ByActionStatusComponentException e){ responseFormat = componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams()); handleComponentException(componentType, userId, responseFormat); @@ -778,7 +765,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { ResponseFormat responseFormat; UiCategories categories = new UiCategories(); - User user = validateUserExists(userId, "get all categories", false); + User user = validateUserExists(userId); // GET resource categories Either<List<CategoryDefinition>, ActionStatus> getResourceCategoriesByType = elementOperation.getAllCategories(NodeTypeEnum.ResourceNewCategory, false); @@ -797,23 +784,13 @@ public class ElementBusinessLogic extends BaseBusinessLogic { return Either.right(responseFormat); } categories.setServiceCategories(getServiceCategoriesByType.left().value()); - - // GET product categories - Either<List<CategoryDefinition>, ActionStatus> getProductCategoriesByType = elementOperation.getAllCategories(NodeTypeEnum.ProductCategory, false); - if (getProductCategoriesByType.isRight()) { - responseFormat = componentsUtils.getResponseFormat(getProductCategoriesByType.right().value()); - componentsUtils.auditGetCategoryHierarchy(user, ComponentTypeEnum.PRODUCT.getValue(), responseFormat); - return Either.right(responseFormat); - } - - categories.setProductCategories(getProductCategoriesByType.left().value()); + categories.setProductCategories(new ArrayList<>()); return Either.left(categories); - } public Either<CategoryDefinition, ResponseFormat> deleteCategory(String categoryId, String componentTypeParamName, String userId) { - validateUserExists(userId, "delete Category", false); + validateUserExists(userId); ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.findByParamName(componentTypeParamName); if (componentTypeEnum == null) { @@ -835,7 +812,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { public Either<SubCategoryDefinition, ResponseFormat> deleteSubCategory(String parentSubCategoryId, String componentTypeParamName, String userId) { - validateUserExists(userId, "delete Sub Category", false); + validateUserExists(userId); ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.findByParamName(componentTypeParamName); if (componentTypeEnum == null) { @@ -857,7 +834,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { public Either<GroupingDefinition, ResponseFormat> deleteGrouping(String groupingId, String componentTypeParamName, String userId) { - validateUserExists(userId, "delete Grouping", false); + validateUserExists(userId); ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.findByParamName(componentTypeParamName); if (componentTypeEnum == null) { @@ -877,31 +854,6 @@ public class ElementBusinessLogic extends BaseBusinessLogic { return Either.left(deletedGrouping); } - private Either<User, ResponseFormat> validateUser(String userId) { - - // validate user exists - if (userId == null) { - log.debug("UserId is null"); - return Either.right(componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION)); - } - - Either<User, ActionStatus> userResult = userAdminManager.getUser(userId, false); - if (userResult.isRight()) { - ResponseFormat responseFormat; - if (userResult.right().value().equals(ActionStatus.USER_NOT_FOUND)) { - log.debug("Not authorized user, userId = {}", userId); - responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION); - } else { - log.debug("Failed to authorize user, userId = {}", userId); - responseFormat = componentsUtils.getResponseFormat(userResult.right().value()); - } - - return Either.right(responseFormat); - } - return Either.left(userResult.left().value()); - // ========================================- - } - private Either<Boolean, ResponseFormat> validateUserRole(User user, ComponentTypeEnum componentTypeEnum) { String role = user.getRole(); boolean validAdminAction = role.equals(Role.ADMIN.name()) && (componentTypeEnum == ComponentTypeEnum.SERVICE || componentTypeEnum == ComponentTypeEnum.RESOURCE); @@ -919,10 +871,10 @@ public class ElementBusinessLogic extends BaseBusinessLogic { boolean validResourceAction = componentType == ComponentTypeEnum.RESOURCE && (categoryType == CategoryTypeEnum.CATEGORY || categoryType == CategoryTypeEnum.SUBCATEGORY); boolean validServiceAction = componentType == ComponentTypeEnum.SERVICE && categoryType == CategoryTypeEnum.CATEGORY; boolean validProductAction = componentType == ComponentTypeEnum.PRODUCT; // can - // be - // any - // category - // type + // be + // any + // category + // type if (!(validResourceAction || validServiceAction || validProductAction)) { ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_CONTENT); @@ -981,25 +933,25 @@ public class ElementBusinessLogic extends BaseBusinessLogic { */ public Either<List<Tag>, ActionStatus> getAllTags(String userId) { - Either<User, ActionStatus> resp = validateUserExistsActionStatus(userId, "get All Tags"); - if (resp.isRight()) { - return Either.right(resp.right().value()); + ActionStatus status = validateUserExistsActionStatus(userId); + if (ActionStatus.OK != status) { + return Either.right(status); } return elementOperation.getAllTags(); } public Either<List<PropertyScope>, ActionStatus> getAllPropertyScopes(String userId) { - Either<User, ActionStatus> resp = validateUserExistsActionStatus(userId, "get All Property Scopes"); - if (resp.isRight()) { - return Either.right(resp.right().value()); + ActionStatus status = validateUserExistsActionStatus(userId); + if (ActionStatus.OK != status) { + return Either.right(status); } return elementOperation.getAllPropertyScopes(); } public Either<List<ArtifactType>, ActionStatus> getAllArtifactTypes(String userId) { - Either<User, ActionStatus> resp = validateUserExistsActionStatus(userId, "get All Artifact Types"); - if (resp.isRight()) { - return Either.right(resp.right().value()); + ActionStatus status = validateUserExistsActionStatus(userId); + if (ActionStatus.OK != status) { + return Either.right(status); } return elementOperation.getAllArtifactTypes(); } @@ -1008,13 +960,12 @@ public class ElementBusinessLogic extends BaseBusinessLogic { return elementOperation.getAllDeploymentArtifactTypes(); } - public Either<Integer, ActionStatus> getDefaultHeatTimeout() { + public Either<Configuration.HeatDeploymentArtifactTimeout, ActionStatus> getDefaultHeatTimeout() { return elementOperation.getDefaultHeatTimeout(); } - public Either<Map<String, List<CatalogComponent>>, ResponseFormat> getCatalogComponents(String userId, List<OriginTypeEnum> excludeTypes) { + public Either<Map<String, List<CatalogComponent>>, ResponseFormat> getCatalogComponents(String userId, List<OriginTypeEnum> excludeTypes) { try { - validateUserExists(userId, "get Catalog Components", true); return toscaOperationFacade.getCatalogOrArchiveComponents(true, excludeTypes) .bimap(this::groupByComponentType, err -> componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(err))); @@ -1030,23 +981,19 @@ public class ElementBusinessLogic extends BaseBusinessLogic { if (map == null) { map = new HashMap<>(); } - if (map.get(RESOURCES) == null) { - map.put(RESOURCES, new ArrayList()); - } - if (map.get(SERVICES) == null) { - map.put(SERVICES, new ArrayList()); - } + map.computeIfAbsent(RESOURCES, k -> new ArrayList()); + map.computeIfAbsent(SERVICES, k -> new ArrayList()); return map; } private String cmptTypeToString(ComponentTypeEnum componentTypeEnum) { switch (componentTypeEnum) { - case RESOURCE: - return RESOURCES; - case SERVICE: - return SERVICES; - default: - throw new IllegalStateException("resources or services only"); + case RESOURCE: + return RESOURCES; + case SERVICE: + return SERVICES; + default: + throw new IllegalStateException("resources or services only"); } } @@ -1077,7 +1024,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(result.right().value()), params.get(0), params.get(1), params.get(2))); } if (result.left().value().isEmpty()) {// no assets found for requested - // criteria + // criteria return Either.right(componentsUtils.getResponseFormat(ActionStatus.NO_ASSETS_FOUND, assetType, query)); } return Either.left(result.left().value()); @@ -1087,7 +1034,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { Either<List<Component>, StorageOperationStatus> assetResult = Either.left(new LinkedList<>()); if (assetType == ComponentTypeEnum.RESOURCE) { - assetResult = getFilteredResouces(filters, inTransaction); + assetResult = getFilteredResources(filters, inTransaction); } else if (assetType == ComponentTypeEnum.SERVICE) { @@ -1096,7 +1043,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { return assetResult; } - private <T> Either<List<T>, StorageOperationStatus> getFilteredServices(Map<FilterKeyEnum, String> filters, boolean inTransaction) { + private <T extends Component> Either<List<T>, StorageOperationStatus> getFilteredServices(Map<FilterKeyEnum, String> filters, boolean inTransaction) { Either<List<T>, StorageOperationStatus> components = null; @@ -1109,9 +1056,9 @@ public class ElementBusinessLogic extends BaseBusinessLogic { } if (categoryName != null) { // primary filter - components = fetchByCategoryOrSubCategoryName(categoryName, NodeTypeEnum.ServiceNewCategory, NodeTypeEnum.Service, inTransaction, ServiceMetadataData.class, null); + components = fetchByCategoryOrSubCategoryName(categoryName, NodeTypeEnum.ServiceNewCategory, NodeTypeEnum.Service, inTransaction, null); if (components.isLeft() && distEnum != null) {// secondary filter - Predicate<T> statusFilter = p -> ((Service) p).getDistributionStatus().equals(distEnum); + Predicate<T> statusFilter = p -> ((Service) p).getDistributionStatus() == distEnum; return Either.left(components.left().value().stream().filter(statusFilter).collect(Collectors.toList())); } filters.remove(FilterKeyEnum.DISTRIBUTION_STATUS); @@ -1145,15 +1092,15 @@ public class ElementBusinessLogic extends BaseBusinessLogic { Map<GraphPropertyEnum, Object> additionalPropertiesToMatch = new EnumMap<>(GraphPropertyEnum.class); switch (assetTypeEnum) { - case RESOURCE: - additionalPropertiesToMatch.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.RESOURCE.name()); - break; - case SERVICE: - additionalPropertiesToMatch.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name()); - break; - default: - log.debug("getCatalogComponentsByUuidAndAssetType: Corresponding ComponentTypeEnum not allowed for this API"); - return Either.right(componentsUtils.getResponseFormat(ActionStatus.INVALID_CONTENT)); + case RESOURCE: + additionalPropertiesToMatch.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.RESOURCE.name()); + break; + case SERVICE: + additionalPropertiesToMatch.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name()); + break; + default: + log.debug("getCatalogComponentsByUuidAndAssetType: Corresponding ComponentTypeEnum not allowed for this API"); + return Either.right(componentsUtils.getResponseFormat(ActionStatus.INVALID_CONTENT)); } Either<List<Component>, StorageOperationStatus> componentsListByUuid = toscaOperationFacade.getComponentListByUuid(uuid, additionalPropertiesToMatch); @@ -1209,7 +1156,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { return params; } - public Either<List<Component>, StorageOperationStatus> getFilteredResouces(Map<FilterKeyEnum, String> filters, boolean inTransaction) { + public Either<List<Component>, StorageOperationStatus> getFilteredResources(Map<FilterKeyEnum, String> filters, boolean inTransaction) { String subCategoryName = filters.get(FilterKeyEnum.SUB_CATEGORY); String categoryName = filters.get(FilterKeyEnum.CATEGORY); @@ -1230,11 +1177,10 @@ public class ElementBusinessLogic extends BaseBusinessLogic { if (!subCategoryData.isPresent()) { return Either.right(StorageOperationStatus.MATCH_NOT_FOUND); } - return fetchByCategoryOrSubCategoryUid((String) subCategoryData.get().getLeft().getUniqueId(), NodeTypeEnum.ResourceSubcategory, NodeTypeEnum.Resource, inTransaction, - ResourceMetadataData.class, resourceType); + return fetchByCategoryOrSubCategoryUid(subCategoryData.get().getLeft().getUniqueId(), NodeTypeEnum.Resource, inTransaction, resourceType); } - return fetchByCategoryOrSubCategoryName(subCategoryName, NodeTypeEnum.ResourceSubcategory, NodeTypeEnum.Resource, inTransaction, ResourceMetadataData.class, resourceType); + return fetchByCategoryOrSubCategoryName(subCategoryName, NodeTypeEnum.ResourceSubcategory, NodeTypeEnum.Resource, inTransaction, resourceType); } if (subcategories != null) { return fetchByMainCategory(subcategories.left().value(), inTransaction, resourceType); @@ -1263,10 +1209,9 @@ public class ElementBusinessLogic extends BaseBusinessLogic { return childNodes.stream().filter(matchName).findAny(); } - protected <T, S extends ComponentMetadataData> Either<List<T>, StorageOperationStatus> fetchByCategoryOrSubCategoryUid(String categoryUid, NodeTypeEnum categoryType, NodeTypeEnum neededType, boolean inTransaction, - Class<S> clazz, ResourceTypeEnum resourceType) { + protected <T extends Component> Either<List<T>, StorageOperationStatus> fetchByCategoryOrSubCategoryUid(String categoryUid, NodeTypeEnum categoryType, boolean inTransaction, ResourceTypeEnum resourceType) { try { - return collectComponents(neededType, categoryUid, categoryType, clazz, resourceType); + return collectComponents(categoryType, categoryUid, resourceType); } finally { if (!inTransaction) { janusGraphDao.commit(); @@ -1274,8 +1219,7 @@ public class ElementBusinessLogic extends BaseBusinessLogic { } } - protected <T, S extends ComponentMetadataData> Either<List<T>, StorageOperationStatus> fetchByCategoryOrSubCategoryName(String categoryName, NodeTypeEnum categoryType, NodeTypeEnum neededType, boolean inTransaction, - Class<S> clazz, ResourceTypeEnum resourceType) { + protected <T extends Component> Either<List<T>, StorageOperationStatus> fetchByCategoryOrSubCategoryName(String categoryName, NodeTypeEnum categoryType, NodeTypeEnum neededType, boolean inTransaction, ResourceTypeEnum resourceType) { List<T> components = new ArrayList<>(); try { Class categoryClazz = categoryType == NodeTypeEnum.ServiceNewCategory ? CategoryData.class : SubCategoryData.class; @@ -1286,13 +1230,16 @@ public class ElementBusinessLogic extends BaseBusinessLogic { return Either.right(StorageOperationStatus.CATEGORY_NOT_FOUND); } for (GraphNode category : getCategory.left().value()) { - Either<List<T>, StorageOperationStatus> result = collectComponents(neededType, (String) category.getUniqueId(), categoryType, clazz, resourceType); - if (result.isRight()) { + Either<List<T>, StorageOperationStatus> result = collectComponents(neededType, category.getUniqueId(), resourceType); + if (result.isRight() && result.right().value() != StorageOperationStatus.NOT_FOUND) { return result; + } else if (result.isLeft()){ + components.addAll(result.left().value()); } - components.addAll(result.left().value()); } - + if (components.isEmpty()){ + return Either.right(StorageOperationStatus.NOT_FOUND); + } return Either.left(components); } finally { if (!inTransaction) { @@ -1302,25 +1249,38 @@ public class ElementBusinessLogic extends BaseBusinessLogic { } - private <T, S extends ComponentMetadataData> Either<List<T>, StorageOperationStatus> collectComponents(NodeTypeEnum neededType, String categoryUid, NodeTypeEnum categoryType, Class<S> clazz, ResourceTypeEnum resourceType) { + private <T extends Component> Either<List<T>, StorageOperationStatus> collectComponents(NodeTypeEnum neededType, String categoryUid, ResourceTypeEnum resourceType) { List<T> components = new ArrayList<>(); - Either<List<ImmutablePair<S, GraphEdge>>, JanusGraphOperationStatus> parentNodes = janusGraphGenericDao - .getParentNodes(UniqueIdBuilder.getKeyByNodeType(categoryType), categoryUid, GraphEdgeLabels.CATEGORY, neededType, clazz); - if (parentNodes.isLeft()) { - for (ImmutablePair<S, GraphEdge> component : parentNodes.left().value()) { - ComponentMetadataDataDefinition componentData = component.getLeft().getMetadataDataDefinition(); - Boolean isHighest = componentData.isHighestVersion(); - boolean isMatchingResourceType = isMatchingByResourceType(neededType, resourceType, componentData); - boolean isDeleted = isTrue(componentData.isDeleted()); - boolean isArchived = isTrue(componentData.isArchived()); - - if (isHighest && isMatchingResourceType && !isDeleted && !isArchived) { - Either<T, StorageOperationStatus> result = (Either<T, StorageOperationStatus>) toscaOperationFacade.getToscaElement(componentData.getUniqueId(), JsonParseFlagEnum.ParseMetadata); - if (result.isRight()) { - return Either.right(result.right().value()); - } - components.add(result.left().value()); + Either<GraphVertex, JanusGraphOperationStatus> categoryVertexById = janusGraphDao.getVertexById(categoryUid, JsonParseFlagEnum.NoParse); + if (categoryVertexById.isRight()){ + JanusGraphOperationStatus status = categoryVertexById.right().value(); + log.debug("#collectComponents Failed to get category vertex with uid {}, status is {}.", categoryUid, status); + return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status)); + } + GraphVertex categoryVertex = categoryVertexById.left().value(); + Either<List<GraphVertex>, JanusGraphOperationStatus> componentsVertices = janusGraphDao.getParentVertices(categoryVertex, EdgeLabelEnum.CATEGORY, JsonParseFlagEnum.ParseMetadata); + if (componentsVertices.isRight()){ + JanusGraphOperationStatus status = componentsVertices.right().value(); + log.debug("#collectComponents Failed to get components vertices of category {}, status is {}.", categoryVertex, status); + return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status)); + } + List<ComponentMetadataDataDefinition> componentsMetadataDataDefinition = componentsVertices.left().value() + .stream() + .filter(Objects::nonNull) + .filter(componentsVertex -> Objects.nonNull(componentsVertex.getType())) + .map(ModelConverter::convertToComponentMetadataDataDefinition) + .collect(Collectors.toList()); + for (ComponentMetadataDataDefinition component : componentsMetadataDataDefinition) { + boolean isHighest = isTrue(component.isHighestVersion()); + boolean isMatchingResourceType = isMatchingByResourceType(neededType, resourceType, component); + boolean isDeleted = isTrue(component.isDeleted()); + boolean isArchived = isTrue(component.isArchived()); + if (isHighest && isMatchingResourceType && !isDeleted && !isArchived) { + Either<T, StorageOperationStatus> result = toscaOperationFacade.getToscaElement(component.getUniqueId(), JsonParseFlagEnum.ParseMetadata); + if (result.isRight()) { + return Either.right(result.right().value()); } + components.add(result.left().value()); } } return Either.left(components); @@ -1341,12 +1301,12 @@ public class ElementBusinessLogic extends BaseBusinessLogic { return isMatching; } - private <T> Either<List<T>, StorageOperationStatus> fetchByMainCategory(List<ImmutablePair<SubCategoryData, GraphEdge>> subcategories, boolean inTransaction, ResourceTypeEnum resourceType) { + private <T extends Component> Either<List<T>, StorageOperationStatus> fetchByMainCategory(List<ImmutablePair<SubCategoryData, GraphEdge>> subcategories, boolean inTransaction, ResourceTypeEnum resourceType) { List<T> components = new ArrayList<>(); for (ImmutablePair<SubCategoryData, GraphEdge> subCategory : subcategories) { - Either<List<T>, StorageOperationStatus> fetched = fetchByCategoryOrSubCategoryUid((String) subCategory.getLeft().getUniqueId(), NodeTypeEnum.ResourceSubcategory, NodeTypeEnum.Resource, - inTransaction, ResourceMetadataData.class, resourceType); + Either<List<T>, StorageOperationStatus> fetched = fetchByCategoryOrSubCategoryUid(subCategory.getLeft().getUniqueId(), NodeTypeEnum.Resource, + inTransaction, resourceType); if (fetched.isRight()) { continue; } @@ -1385,4 +1345,16 @@ public class ElementBusinessLogic extends BaseBusinessLogic { } } } + + + public CatalogUpdateTimestamp getCatalogUpdateTime(String userId) { + + try{ + return toscaOperationFacade.getCatalogTimes(); + + } finally { + janusGraphDao.commit(); + } + + } } |