summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ProductBusinessLogic.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ProductBusinessLogic.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ProductBusinessLogic.java245
1 files changed, 99 insertions, 146 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ProductBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ProductBusinessLogic.java
index c643d9f937..aca253682c 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ProductBusinessLogic.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ProductBusinessLogic.java
@@ -7,9 +7,9 @@
* 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.
@@ -19,10 +19,16 @@
* Modifications copyright (c) 2019 Nokia
* ================================================================================
*/
-
package org.openecomp.sdc.be.components.impl;
import fj.data.Either;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
import org.openecomp.sdc.be.components.validation.component.ComponentContactIdValidator;
@@ -61,14 +67,6 @@ import org.openecomp.sdc.common.util.ValidationUtils;
import org.openecomp.sdc.exception.ResponseFormat;
import org.springframework.beans.factory.annotation.Autowired;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
@org.springframework.stereotype.Component("productBusinessLogic")
public class ProductBusinessLogic extends ComponentBusinessLogic {
@@ -80,37 +78,24 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
private static List<Role> creationRoles;
private static List<Role> updateRoles;
private static List<Role> contactsRoles;
-
private final ComponentInstanceBusinessLogic componentInstanceBusinessLogic;
@Autowired
- public ProductBusinessLogic(IElementOperation elementDao,
- IGroupOperation groupOperation,
- IGroupInstanceOperation groupInstanceOperation,
- IGroupTypeOperation groupTypeOperation,
- GroupBusinessLogic groupBusinessLogic,
- InterfaceOperation interfaceOperation,
- InterfaceLifecycleOperation interfaceLifecycleTypeOperation,
- ArtifactsBusinessLogic artifactsBusinessLogic,
- ComponentInstanceBusinessLogic componentInstanceBusinessLogic,
- ArtifactsOperations artifactToscaOperation,
- ComponentContactIdValidator componentContactIdValidator,
- ComponentNameValidator componentNameValidator,
- ComponentTagsValidator componentTagsValidator,
- ComponentValidator componentValidator,
- ComponentIconValidator componentIconValidator,
- ComponentProjectCodeValidator componentProjectCodeValidator,
- ComponentDescriptionValidator componentDescriptionValidator){
- super(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic,
- interfaceOperation, interfaceLifecycleTypeOperation, artifactsBusinessLogic, artifactToscaOperation,
- componentContactIdValidator, componentNameValidator, componentTagsValidator, componentValidator,
- componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator);
+ public ProductBusinessLogic(IElementOperation elementDao, IGroupOperation groupOperation, IGroupInstanceOperation groupInstanceOperation,
+ IGroupTypeOperation groupTypeOperation, GroupBusinessLogic groupBusinessLogic, InterfaceOperation interfaceOperation,
+ InterfaceLifecycleOperation interfaceLifecycleTypeOperation, ArtifactsBusinessLogic artifactsBusinessLogic,
+ ComponentInstanceBusinessLogic componentInstanceBusinessLogic, ArtifactsOperations artifactToscaOperation,
+ ComponentContactIdValidator componentContactIdValidator, ComponentNameValidator componentNameValidator,
+ ComponentTagsValidator componentTagsValidator, ComponentValidator componentValidator,
+ ComponentIconValidator componentIconValidator, ComponentProjectCodeValidator componentProjectCodeValidator,
+ ComponentDescriptionValidator componentDescriptionValidator) {
+ super(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic, interfaceOperation,
+ interfaceLifecycleTypeOperation, artifactsBusinessLogic, artifactToscaOperation, componentContactIdValidator, componentNameValidator,
+ componentTagsValidator, componentValidator, componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator);
this.componentInstanceBusinessLogic = componentInstanceBusinessLogic;
-
creationRoles = new ArrayList<>();
updateRoles = new ArrayList<>();
contactsRoles = new ArrayList<>();
-
// only PM is allowed to create/update products
creationRoles.add(Role.PRODUCT_MANAGER);
updateRoles.add(Role.PRODUCT_MANAGER);
@@ -121,61 +106,49 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
public Either<Product, ResponseFormat> createProduct(Product product, User user) {
AuditingActionEnum actionEnum = AuditingActionEnum.CREATE_RESOURCE;
ComponentTypeEnum typeEnum = ComponentTypeEnum.PRODUCT;
-
// validate user - should be first to get the maximum auditing info in
+
// case of subsequent failures
log.debug("get user from DB");
user = validateUser(user, CREATE_PRODUCT, product, actionEnum, false);
// validate user role
validateUserRole(user, product, creationRoles, actionEnum, null);
-
if (product == null) {
log.debug("Invalid product json. Check product servlet log for createProduct entry params");
ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_CONTENT);
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, typeEnum);
return Either.right(responseFormat);
}
-
// warn about non-updatable fields
checkUnupdatableProductFields(product);
-
Either<Product, ResponseFormat> validateProductResponse = validateProductBeforeCreate(product, user, actionEnum);
if (validateProductResponse.isRight()) {
return Either.right(validateProductResponse.right().value());
}
-
log.debug("send product {} to dao for create", product.getComponentMetadataDefinition().getMetadataDataDefinition().getName());
-
Either<Boolean, ResponseFormat> lockResult = lockComponentByName(product.getSystemName(), product, CREATE_PRODUCT);
if (lockResult.isRight()) {
ResponseFormat responseFormat = lockResult.right().value();
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
-
log.debug("Product name locked is {}, status = {}", product.getSystemName(), lockResult);
-
try {
Either<Product, StorageOperationStatus> createProductEither = toscaOperationFacade.createToscaComponent(product);
-
if (createProductEither.isRight()) {
- ResponseFormat responseFormat = componentsUtils.getResponseFormatByComponent(componentsUtils.convertFromStorageResponse(createProductEither.right().value()), product, typeEnum);
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormatByComponent(componentsUtils.convertFromStorageResponse(createProductEither.right().value()), product, typeEnum);
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, typeEnum);
return Either.right(responseFormat);
}
-
log.debug("Product created successfully");
ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.CREATED);
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, typeEnum);
-
Product createdProduct = createProductEither.left().value();
-
return Either.left(createdProduct);
-
} finally {
graphLockOperation.unlockComponentByName(product.getSystemName(), product.getUniqueId(), NodeTypeEnum.Product);
}
-
}
private void checkUnupdatableProductFields(Product product) {
@@ -186,60 +159,53 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
}
private Either<Product, ResponseFormat> validateProductBeforeCreate(Product product, User user, AuditingActionEnum actionEnum) {
-
Either<Boolean, ResponseFormat> validateProductFields = validateProductFieldsBeforeCreate(user, product, actionEnum);
if (validateProductFields.isRight()) {
return Either.right(validateProductFields.right().value());
}
-
if (product.getIsActive() == null) {
log.debug("no isActive value was provided, setting to default: false");
product.setIsActive(false);
}
-
product.setCreatorUserId(user.getUserId());
-
// enrich object
log.debug("enrich product with version and state");
product.setState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
product.setVersion(INITIAL_VERSION);
-
// Generate invariant UUID - must be here and not in operation since it
+
// should stay constant during clone
String invariantUUID = UniqueIdBuilder.buildInvariantUUID();
product.setInvariantUUID(invariantUUID);
-
return Either.left(product);
}
private Either<Boolean, ResponseFormat> validateProductFieldsBeforeCreate(User user, Product product, AuditingActionEnum actionEnum) {
-
// To be removed in 1607
+
// See below
String oldName = product.getName();
-
Either<Boolean, ResponseFormat> componentNameValidation = validateProductNameAndCleanup(user, product, actionEnum);
if (componentNameValidation.isRight()) {
return componentNameValidation;
}
-
try {
componentNameValidator.validateComponentNameUnique(user, product, actionEnum);
} catch (ComponentException exp) {
return Either.right(exp.getResponseFormat());
}
-
// To be removed in 1607 and replaced with generic
+
// validateTagsListAndRemoveDuplicates()
+
// See comments on the validateTagsListAndRemoveDuplicates(user,
+
// product, oldName, actionEnum) function
Either<Boolean, ResponseFormat> tagsValidation = validateTagsListAndRemoveDuplicates(user, product, oldName, actionEnum);
if (tagsValidation.isRight()) {
return tagsValidation;
}
-
componentTagsValidator.validateAndCorrectField(user, product, actionEnum);
-
try {
componentProjectCodeValidator.validateAndCorrectField(user, product, actionEnum);
} catch (ComponentException exp) {
@@ -249,38 +215,32 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
if (categoryValidation.isRight()) {
return categoryValidation;
}
-
Either<Boolean, ResponseFormat> contactsListValidation = validateAndUpdateProductContactsList(user, product, actionEnum);
if (contactsListValidation.isRight()) {
return contactsListValidation;
}
-
Either<Boolean, ResponseFormat> productFullNameValidation = validateProductFullNameAndCleanup(user, product, actionEnum);
if (productFullNameValidation.isRight()) {
return productFullNameValidation;
}
-
componentDescriptionValidator.validateAndCorrectField(user, product, actionEnum);
-
return Either.left(true);
}
public Either<Map<String, Boolean>, ResponseFormat> validateProductNameExists(String productName, String userId) {
-
validateUserExists(userId);
- Either<Boolean, StorageOperationStatus> dataModelResponse = toscaOperationFacade.validateComponentNameUniqueness(productName, null, ComponentTypeEnum.PRODUCT);
+ Either<Boolean, StorageOperationStatus> dataModelResponse = toscaOperationFacade
+ .validateComponentNameUniqueness(productName, null, ComponentTypeEnum.PRODUCT);
// DE242223
janusGraphDao.commit();
-
if (dataModelResponse.isLeft()) {
Map<String, Boolean> result = new HashMap<>();
result.put("isValid", dataModelResponse.left().value());
log.debug("validation was successfully performed.");
return Either.left(result);
}
-
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(dataModelResponse.right().value()));
-
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormat(componentsUtils.convertFromStorageResponse(dataModelResponse.right().value()));
return Either.right(responseFormat);
}
@@ -292,7 +252,6 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
-
boolean isProductCreatorInContacts = false;
String modifierUserId = user.getUserId();
for (String contact : contacts) {
@@ -304,35 +263,30 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
}
if (!ValidationUtils.validateContactId(contact)) {
log.debug("Product contacts has invalid userId {} for product {}", contact, product.getName());
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.COMPONENT_INVALID_CONTACT, ComponentTypeEnum.PRODUCT.getValue());
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormat(ActionStatus.COMPONENT_INVALID_CONTACT, ComponentTypeEnum.PRODUCT.getValue());
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
-
User contactUser;
- try{
+ try {
contactUser = validateUserExists(contact);
validateUserRole(contactUser, contactsRoles);
- } catch(ByActionStatusComponentException e){
+ } catch (ByActionStatusComponentException e) {
log.debug("Cannot set contact with userId {} as product contact, error: {}", contact, e.getActionStatus());
ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_PRODUCT_CONTACT, contact);
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
throw new ByActionStatusComponentException(e.getActionStatus(), e.getParams());
}
}
-
if (!isProductCreatorInContacts) {
log.debug("modifier userId {} not found in product contacts - adding it", modifierUserId);
contacts.add(modifierUserId);
}
-
// passed - setting all contacts userIds to lowercase
- List<String> tempContacts = contacts.stream()
- .map(String::toLowerCase)
- .collect(Collectors.toList());
+ List<String> tempContacts = contacts.stream().map(String::toLowerCase).collect(Collectors.toList());
ValidationUtils.removeDuplicateFromList(tempContacts);
product.setContacts(tempContacts);
-
return Either.left(true);
}
@@ -349,7 +303,8 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
if (!ValidationUtils.validateStringNotEmpty(catName)) {
// error missing cat name
log.debug("Missing category name for product: {}", product.getName());
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.COMPONENT_MISSING_CATEGORY, ComponentTypeEnum.PRODUCT.getValue());
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormat(ActionStatus.COMPONENT_MISSING_CATEGORY, ComponentTypeEnum.PRODUCT.getValue());
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
@@ -372,7 +327,7 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
// error missing sub cat name for cat
log.debug("Missing or empty sub-category for category {} in product {}", catName, product.getName());
ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.COMPONENT_MISSING_SUBCATEGORY);
- componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
+ componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
Set<String> subcatEntry = catEntry.get(subCatName);
@@ -385,7 +340,8 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
String groupName = group.getName();
if (!ValidationUtils.validateStringNotEmpty(groupName)) {
// error missing grouping for sub cat name and cat
- log.debug("Missing or empty groupng name for sub-category: {} for categor: {} in product: {}", subCatName, catName, product.getName());
+ log.debug("Missing or empty groupng name for sub-category: {} for categor: {} in product: {}", subCatName, catName,
+ product.getName());
ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.COMPONENT_MISSING_SUBCATEGORY);
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
@@ -398,9 +354,9 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
}
}
} // for end of checking duplicated
- // validate existence
- Either<List<CategoryDefinition>, ActionStatus> allProductCategories = elementDao.getAllProductCategories();
+ // validate existence
+ Either<List<CategoryDefinition>, ActionStatus> allProductCategories = elementDao.getAllProductCategories();
if (allProductCategories.isRight()) {
log.debug("No product categories {}", allProductCategories.right().value());
ResponseFormat responseFormat = componentsUtils.getResponseFormat(allProductCategories.right().value());
@@ -409,9 +365,9 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
}
boolean catExist;
// convert non-duplicated to data modeling format and update in the
+
// input object
List<CategoryDefinition> newCatList = new ArrayList<>();
-
// over all categories from request
for (Map.Entry<String, Map<String, Set<String>>> entry : nonDuplicatedCategories.entrySet()) {
catExist = false;
@@ -426,7 +382,6 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
// copy data
categoryDefinition = new CategoryDefinition(catInDb);
SubCategoryDefinition subCategory = null;
-
Map<String, Set<String>> subcats = entry.getValue();
for (Map.Entry<String, Set<String>> subcat : subcats.entrySet()) {
subcatExist = false;
@@ -453,9 +408,13 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
}
if (!groupExist) {
// error grouping isn't defined
+
// in JanusGraph
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_GROUP_ASSOCIATION, CategoryTypeEnum.GROUPING.getValue(), group);
- componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormat(ActionStatus.INVALID_GROUP_ASSOCIATION, CategoryTypeEnum.GROUPING.getValue(),
+ group);
+ componentsUtils
+ .auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
subCategory.addGrouping(groupingDefinition);
@@ -465,7 +424,9 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
}
if (!subcatExist) {
// error sub category isn't defined in JanusGraph
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_GROUP_ASSOCIATION, CategoryTypeEnum.SUBCATEGORY.getValue(), subcat.getKey());
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormat(ActionStatus.INVALID_GROUP_ASSOCIATION, CategoryTypeEnum.SUBCATEGORY.getValue(),
+ subcat.getKey());
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
@@ -476,7 +437,8 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
}
if (!catExist) {
// error category isn't defined in JanusGraph
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_GROUP_ASSOCIATION, CategoryTypeEnum.CATEGORY.getValue(), entry.getKey());
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormat(ActionStatus.INVALID_GROUP_ASSOCIATION, CategoryTypeEnum.CATEGORY.getValue(), entry.getKey());
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
@@ -490,16 +452,15 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
String ecompErrorContext = "Get product";
validateUserNotEmpty(user, ecompErrorContext);
validateUserExists(user);
-
Either<Product, StorageOperationStatus> storageStatus = toscaOperationFacade.getToscaElement(productId);
-
if (storageStatus.isRight()) {
log.debug("failed to get resource by id {}", productId);
if (storageStatus.right().value() == StorageOperationStatus.NOT_FOUND) {
// TODO check error
return Either.right(componentsUtils.getResponseFormat(ActionStatus.PRODUCT_NOT_FOUND, ComponentTypeEnum.PRODUCT.getValue()));
} else {
- return Either.right(componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus.right().value()), ""));
+ return Either.right(
+ componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus.right().value()), ""));
}
}
return Either.left(storageStatus.left().value());
@@ -509,12 +470,11 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
String ecompErrorContext = "Delete product";
validateUserNotEmpty(user, ecompErrorContext);
validateUserExists(user);
-
Either<Product, StorageOperationStatus> storageStatus = toscaOperationFacade.deleteToscaComponent(productId);
-
if (storageStatus.isRight()) {
log.debug("failed to delete resource by id {}", productId);
- return Either.right(componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus.right().value()), ""));
+ return Either
+ .right(componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus.right().value()), ""));
}
return Either.left(storageStatus.left().value());
}
@@ -522,28 +482,27 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
private Either<Boolean, ResponseFormat> validateProductFullNameAndCleanup(User user, Product product, AuditingActionEnum actionEnum) {
String fullName = product.getFullName();
if (!ValidationUtils.validateStringNotEmpty(fullName)) {
- ResponseFormat errorResponse = componentsUtils.getResponseFormat(ActionStatus.MISSING_ONE_OF_COMPONENT_NAMES, ComponentTypeEnum.PRODUCT.getValue(), PRODUCT_FULL_NAME);
+ ResponseFormat errorResponse = componentsUtils
+ .getResponseFormat(ActionStatus.MISSING_ONE_OF_COMPONENT_NAMES, ComponentTypeEnum.PRODUCT.getValue(), PRODUCT_FULL_NAME);
componentsUtils.auditComponentAdmin(errorResponse, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(errorResponse);
}
-
fullName = ValidationUtils.removeNoneUtf8Chars(fullName);
fullName = ValidationUtils.removeHtmlTags(fullName);
fullName = ValidationUtils.normaliseWhitespace(fullName);
fullName = ValidationUtils.stripOctets(fullName);
-
if (!ValidationUtils.validateProductFullNameLength(fullName)) {
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.COMPONENT_ELEMENT_INVALID_NAME_LENGTH, ComponentTypeEnum.PRODUCT.getValue(), PRODUCT_FULL_NAME);
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormat(ActionStatus.COMPONENT_ELEMENT_INVALID_NAME_LENGTH, ComponentTypeEnum.PRODUCT.getValue(), PRODUCT_FULL_NAME);
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
-
if (!ValidationUtils.validateIsEnglish(fullName)) {
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.COMPONENT_ELEMENT_INVALID_NAME_FORMAT, ComponentTypeEnum.PRODUCT.getValue(), PRODUCT_FULL_NAME);
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormat(ActionStatus.COMPONENT_ELEMENT_INVALID_NAME_FORMAT, ComponentTypeEnum.PRODUCT.getValue(), PRODUCT_FULL_NAME);
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
-
product.setFullName(fullName);
return Either.left(true);
}
@@ -551,49 +510,55 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
private Either<Boolean, ResponseFormat> validateProductNameAndCleanup(User user, Product product, AuditingActionEnum actionEnum) {
String name = product.getName();
if (!ValidationUtils.validateStringNotEmpty(name)) {
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_ONE_OF_COMPONENT_NAMES, ComponentTypeEnum.PRODUCT.getValue(), PRODUCT_ABBREVIATED_NAME);
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormat(ActionStatus.MISSING_ONE_OF_COMPONENT_NAMES, ComponentTypeEnum.PRODUCT.getValue(), PRODUCT_ABBREVIATED_NAME);
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
-
// Product name is required to have same validation and normalization as
+
// category
if (!ValidationUtils.validateCategoryDisplayNameFormat(name)) {
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.COMPONENT_ELEMENT_INVALID_NAME_FORMAT, ComponentTypeEnum.PRODUCT.getValue(), PRODUCT_ABBREVIATED_NAME);
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormat(ActionStatus.COMPONENT_ELEMENT_INVALID_NAME_FORMAT, ComponentTypeEnum.PRODUCT.getValue(),
+ PRODUCT_ABBREVIATED_NAME);
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
-
String normalizedName4Display = ValidationUtils.normalizeCategoryName4Display(name);
-
if (!ValidationUtils.validateCategoryDisplayNameLength(normalizedName4Display)) {
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.COMPONENT_ELEMENT_INVALID_NAME_LENGTH, ComponentTypeEnum.PRODUCT.getValue(), PRODUCT_ABBREVIATED_NAME);
+ ResponseFormat responseFormat = componentsUtils
+ .getResponseFormat(ActionStatus.COMPONENT_ELEMENT_INVALID_NAME_LENGTH, ComponentTypeEnum.PRODUCT.getValue(),
+ PRODUCT_ABBREVIATED_NAME);
componentsUtils.auditComponentAdmin(responseFormat, user, product, actionEnum, ComponentTypeEnum.PRODUCT);
return Either.right(responseFormat);
}
-
product.setName(normalizedName4Display);
String normalizedName4Uniqueness = ValidationUtils.normaliseComponentName(normalizedName4Display);
product.setNormalizedName(normalizedName4Uniqueness);
-
return Either.left(true);
}
-
// This is a workaround for a current tag--->product name behaviour, which
+
// will be changed in 1607.
+
// It was agreed with Ella on 23/2/16 that the tag validation of product
+
// will be made against the old product name (before normalization),
+
// and in 1607 US will be defined where UI will no longer pass tag of
+
// component name, and BE will add it by itself after all needed
+
// normalizations.
- private Either<Boolean, ResponseFormat> validateTagsListAndRemoveDuplicates(User user, Product product, String oldProductName, AuditingActionEnum actionEnum) {
+ private Either<Boolean, ResponseFormat> validateTagsListAndRemoveDuplicates(User user, Product product, String oldProductName,
+ AuditingActionEnum actionEnum) {
componentTagsValidator.validateAndCorrectField(user, product, actionEnum);
return Either.left(true);
}
@Override
public void setDeploymentArtifactsPlaceHolder(org.openecomp.sdc.be.model.Component component, User user) {
-
}
public Either<Product, ResponseFormat> updateProductMetadata(String productId, Product updatedProduct, User user) {
@@ -606,28 +571,25 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_CONTENT);
return Either.right(responseFormat);
}
-
Either<Product, StorageOperationStatus> storageStatus = toscaOperationFacade.getToscaElement(productId);
if (storageStatus.isRight()) {
if (storageStatus.right().value() == StorageOperationStatus.NOT_FOUND) {
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.PRODUCT_NOT_FOUND, ComponentTypeEnum.PRODUCT.name().toLowerCase()));
+ return Either
+ .right(componentsUtils.getResponseFormat(ActionStatus.PRODUCT_NOT_FOUND, ComponentTypeEnum.PRODUCT.name().toLowerCase()));
}
- return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(storageStatus.right().value(), typeEnum), ""));
+ return Either
+ .right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(storageStatus.right().value(), typeEnum), ""));
}
-
Product currentProduct = storageStatus.left().value();
-
if (!ComponentValidationUtils.canWorkOnComponent(productId, toscaOperationFacade, user.getUserId())) {
- log.info("Restricted operation for user: {}, on product: {}" , user.getUserId(), currentProduct.getCreatorUserId());
+ log.info("Restricted operation for user: {}, on product: {}", user.getUserId(), currentProduct.getCreatorUserId());
return Either.right(componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION));
}
-
Either<Product, ResponseFormat> validationRsponse = validateAndUpdateProductMetadata(user, currentProduct, updatedProduct);
if (validationRsponse.isRight()) {
log.info("product update metadata: validations field.");
return validationRsponse;
}
-
Product productToUpdate = validationRsponse.left().value();
// lock resource
lockComponent(currentProduct.getUniqueId(), currentProduct, "Update Product Metadata");
@@ -646,69 +608,57 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
}
private Either<Product, ResponseFormat> validateAndUpdateProductMetadata(User user, Product currentProduct, Product updatedProduct) {
-
boolean hasBeenCertified = ValidationUtils.hasBeenCertified(currentProduct.getVersion());
Either<Boolean, ResponseFormat> response = validateAndUpdateProductName(user, currentProduct, updatedProduct);
if (response.isRight()) {
ResponseFormat errorResponse = response.right().value();
return Either.right(errorResponse);
}
-
response = validateAndUpdateFullName(user, currentProduct, updatedProduct);
if (response.isRight()) {
ResponseFormat errorResponse = response.right().value();
return Either.right(errorResponse);
}
-
response = validateAndUpdateDescription(user, currentProduct, updatedProduct, null);
if (response.isRight()) {
ResponseFormat errorResponse = response.right().value();
return Either.right(errorResponse);
}
-
response = validateAndUpdateCategory(user, currentProduct, updatedProduct);
if (response.isRight()) {
ResponseFormat errorResponse = response.right().value();
return Either.right(errorResponse);
}
-
response = validateAndUpdateContactList(user, currentProduct, updatedProduct);
if (response.isRight()) {
ResponseFormat errorResponse = response.right().value();
return Either.right(errorResponse);
}
-
response = validateAndUpdateTags(user, currentProduct, updatedProduct);
if (response.isRight()) {
ResponseFormat errorResponse = response.right().value();
return Either.right(errorResponse);
}
-
response = validateAndUpdateProjectCode(user, currentProduct, updatedProduct);
if (response.isRight()) {
ResponseFormat errorResponse = response.right().value();
return Either.right(errorResponse);
}
-
if (updatedProduct.getIsActive() != null) {
currentProduct.setIsActive(updatedProduct.getIsActive());
}
-
response = validateAndUpdateIcon(user, currentProduct, updatedProduct, hasBeenCertified);
if (response.isRight()) {
ResponseFormat errorResponse = response.right().value();
return Either.right(errorResponse);
}
-
String currentInvariantUuid = currentProduct.getInvariantUUID();
String updatedInvariantUuid = updatedProduct.getInvariantUUID();
-
if ((updatedInvariantUuid != null) && (!updatedInvariantUuid.equals(currentInvariantUuid))) {
log.warn("Product invariant UUID is automatically set and cannot be updated");
updatedProduct.setInvariantUUID(currentInvariantUuid);
}
return Either.left(currentProduct);
-
}
private Either<Boolean, ResponseFormat> validateAndUpdateProductName(User user, Product currentProduct, Product updatedProduct) {
@@ -731,9 +681,11 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
currentProduct.setName(updatedProductName);
tags = updatedProductName;
updatedProductName = ValidationUtils.normalizeCategoryName4Display(updatedProductName);
- currentProduct.getComponentMetadataDefinition().getMetadataDataDefinition().setNormalizedName(ValidationUtils.normaliseComponentName(updatedProductName));
+ currentProduct.getComponentMetadataDefinition().getMetadataDataDefinition()
+ .setNormalizedName(ValidationUtils.normaliseComponentName(updatedProductName));
List<String> updatedTags = updatedProduct.getTags();
// As discussed with Ella currently (1604) we are not removing
+
// the old name from tags.
if (updatedTags == null) {
updatedTags = currentProduct.getTags();
@@ -759,13 +711,11 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
}
private Either<Boolean, ResponseFormat> validateAndUpdateCategory(User user, Product currentProduct, Product updatedProduct) {
-
Either<Boolean, ResponseFormat> validateCategoryResponse = validateGrouping(user, updatedProduct, null);
if (validateCategoryResponse.isRight()) {
ResponseFormat errorResponse = validateCategoryResponse.right().value();
return Either.right(errorResponse);
}
-
List<CategoryDefinition> categoryUpdated = updatedProduct.getCategories();
if (categoryUpdated != null) {
currentProduct.setCategories(categoryUpdated);
@@ -794,7 +744,8 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
List<String> tagsCurrent = currentProduct.getTags();
if (tagsUpdated != null) {
if (!(tagsCurrent.containsAll(tagsUpdated) && tagsUpdated.containsAll(tagsCurrent))) {
- Either<Boolean, ResponseFormat> validatResponse = validateTagsListAndRemoveDuplicates(user, updatedProduct, currentProduct.getName(), null);
+ Either<Boolean, ResponseFormat> validatResponse = validateTagsListAndRemoveDuplicates(user, updatedProduct, currentProduct.getName(),
+ null);
if (validatResponse.isRight()) {
ResponseFormat errorRespons = validatResponse.right().value();
return Either.right(errorRespons);
@@ -813,10 +764,13 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
public Either<Product, ResponseFormat> getProductByNameAndVersion(String productName, String productVersion, String userId) {
validateUserExists(userId);
- Either<Product, StorageOperationStatus> storageStatus = toscaOperationFacade.getComponentByNameAndVersion(ComponentTypeEnum.PRODUCT, productName, productVersion);
+ Either<Product, StorageOperationStatus> storageStatus = toscaOperationFacade
+ .getComponentByNameAndVersion(ComponentTypeEnum.PRODUCT, productName, productVersion);
if (storageStatus.isRight()) {
log.debug("failed to get service by name {} and version {}", productName, productVersion);
- return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(storageStatus.right().value(), ComponentTypeEnum.PRODUCT), productName));
+ return Either.right(componentsUtils
+ .getResponseFormat(componentsUtils.convertFromStorageResponse(storageStatus.right().value(), ComponentTypeEnum.PRODUCT),
+ productName));
}
Product product = storageStatus.left().value();
return Either.left(product);
@@ -834,9 +788,8 @@ public class ProductBusinessLogic extends ComponentBusinessLogic {
@Override
public Either<UiComponentDataTransfer, ResponseFormat> getUiComponentDataTransferByComponentId(String componentId,
- List<String> dataParamsToReturn) {
+ List<String> dataParamsToReturn) {
// TODO Auto-generated method stub
return null;
}
-
}