User is unable to modify name of VF 33/67633/5
authormojahidi <mojahidul.islam@amdocs.com>
Wed, 19 Sep 2018 07:24:50 +0000 (12:54 +0530)
committerAvi Gaffa <avi.gaffa@amdocs.com>
Thu, 27 Sep 2018 08:20:25 +0000 (08:20 +0000)
User is unable to modify name of VF having operations which was created via Heat Flow

Change-Id: I42b666137b26755cccf71028b220560f42b0c0f7
Issue-ID: SDC-1771
Signed-off-by: mojahidi <mojahidul.islam@amdocs.com>
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/BaseBusinessLogic.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/InterfaceOperationBusinessLogic.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogic.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogic.java
catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogicTest.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/utils/InterfaceUtils.java

index fee386a..453564e 100644 (file)
@@ -166,6 +166,10 @@ public abstract class BaseBusinessLogic {
     public void setInterfaceOperation(InterfaceOperation interfaceOperation) {
         this.interfaceOperation = interfaceOperation;
     }
+    public void setInterfaceOperationBusinessLogic(InterfaceOperationBusinessLogic interfaceOperationBusinessLogic) {
+        this.interfaceOperationBusinessLogic = interfaceOperationBusinessLogic;
+    }
+
 
     User validateUserNotEmpty(User user, String ecompErrorContext) {
         return userValidations.validateUserNotEmpty(user, ecompErrorContext);
index 792e23a..6f822fd 100644 (file)
 package org.openecomp.sdc.be.components.impl;
 
 import fj.data.Either;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Optional;
-import java.util.UUID;
 import org.openecomp.sdc.be.components.validation.InterfaceOperationValidation;
 import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
 import org.openecomp.sdc.be.model.ArtifactDefinition;
 import org.openecomp.sdc.be.model.InterfaceDefinition;
@@ -39,6 +36,12 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Optional;
+import java.util.UUID;
+
 @Component("interfaceOperationBusinessLogic")
 public class InterfaceOperationBusinessLogic extends BaseBusinessLogic {
 
@@ -273,4 +276,43 @@ public class InterfaceOperationBusinessLogic extends BaseBusinessLogic {
         }
         return Either.left(true);
     }
+
+    public Either<Boolean, ResponseFormat> validateComponentNameAndUpdateInterfaces(org.openecomp.sdc.be.model.Component oldComponent,
+                                                                                    org.openecomp.sdc.be.model.Component newComponent) {
+        if(!oldComponent.getName().equals(newComponent.getName()) ) {
+            Collection<InterfaceDefinition> interfaceDefinitionListFromToscaName = InterfaceUtils
+                    .getInterfaceDefinitionListFromToscaName(oldComponent.getInterfaces().values(),
+                            oldComponent.getName());
+            for (InterfaceDefinition interfaceDefinition : interfaceDefinitionListFromToscaName) {
+
+                Either<InterfaceDefinition, ResponseFormat> interfaceDefinitionResponseEither = updateInterfaceDefinition(oldComponent,
+                                                                    newComponent, interfaceDefinition);
+                if(interfaceDefinitionResponseEither.isRight()) {
+                    return Either.right(interfaceDefinitionResponseEither.right().value());
+                }
+            }
+        }
+        return  Either.left(Boolean.TRUE);
+    }
+    private Either<InterfaceDefinition, ResponseFormat > updateInterfaceDefinition(org.openecomp.sdc.be.model.Component oldComponent,
+                                        org.openecomp.sdc.be.model.Component newComponent,
+                                        InterfaceDefinition interfaceDefinition) {
+                        InterfaceUtils.createInterfaceToscaResourceName(newComponent.getName());
+                interfaceDefinition.setToscaResourceName(InterfaceUtils
+                        .createInterfaceToscaResourceName(newComponent.getName()));
+        try {
+            Either<InterfaceDefinition, StorageOperationStatus> interfaceUpdate = interfaceOperation
+                    .updateInterface(oldComponent.getUniqueId(), interfaceDefinition);
+            if (interfaceUpdate.isRight()) {
+                LOGGER.error("Failed to Update interface {}. Response is {}. ", newComponent.getName(), interfaceUpdate.right().value());
+                titanDao.rollback();
+                return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(interfaceUpdate.right().value(), ComponentTypeEnum.RESOURCE)));
+            }
+        } catch (Exception e) {
+            LOGGER.error("Exception occurred during update interface toscaResourceName  : {}", e);
+            titanDao.rollback();
+            return Either.right(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR));
+        }
+        return Either.left( interfaceDefinition);
+    }
 }
index 492f5bf..6bb8c5c 100644 (file)
@@ -63,8 +63,6 @@ import org.openecomp.sdc.be.model.*;
 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
 import org.openecomp.sdc.be.model.category.CategoryDefinition;
 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
-import org.openecomp.sdc.be.model.jsontitan.operations.InterfaceOperation;
-import org.openecomp.sdc.be.model.jsontitan.utils.InterfaceUtils;
 import org.openecomp.sdc.be.model.jsontitan.utils.ModelConverter;
 import org.openecomp.sdc.be.model.operations.StorageException;
 import org.openecomp.sdc.be.model.operations.api.*;
@@ -171,13 +169,6 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
     @Autowired
     private CsarBusinessLogic csarBusinessLogic;
 
-    @Autowired
-    private InterfaceOperation interfaceOperation;
-       
-    public void setInterfaceOperation(InterfaceOperation interfaceOperation) {
-        this.interfaceOperation = interfaceOperation;
-    }
-
     public LifecycleBusinessLogic getLifecycleBusinessLogic() {
         return lifecycleBusinessLogic;
     }
@@ -3987,7 +3978,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
                 newResource.setDerivedFrom(null);
             }
 
-            Either<Boolean, ResponseFormat> validateAndUpdateInterfacesEither = validateAndUpdateInterfaces(resourceIdToUpdate, newResource);
+            Either<Boolean, ResponseFormat> validateAndUpdateInterfacesEither =
+                    interfaceOperationBusinessLogic.validateComponentNameAndUpdateInterfaces(currentResource, newResource);
             if (validateAndUpdateInterfacesEither.isRight()) {
                 log.error("failed to validate and update Interfaces");
                 rollbackNeeded = true;
@@ -5172,65 +5164,4 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
             return super.shouldUpgradeToLatestDerived(clonedComponent);
         }
     }
-
-    private Either<Boolean, ResponseFormat> validateAndUpdateInterfaces(String resourceId, Resource resourceUpdate) {
-      Either<Resource, StorageOperationStatus> resourceStorageOperationStatusEither =
-          toscaOperationFacade.getToscaElement(resourceId);
-      if (resourceStorageOperationStatusEither.isRight()) {
-        StorageOperationStatus errorStatus = resourceStorageOperationStatusEither.right().value();
-        log.error("Failed to fetch resource information by resource id {}, error {}", resourceId, errorStatus);
-        return Either.right(componentsUtils
-            .getResponseFormat(componentsUtils.convertFromStorageResponse(errorStatus)));
-      }
-    
-      Resource storedResource = resourceStorageOperationStatusEither.left().value();
-      Map<String, InterfaceDefinition> storedResourceInterfaces = storedResource.getInterfaces();
-    
-      if(!storedResource.getName().equals(resourceUpdate.getName()) ) {
-        Collection<InterfaceDefinition> interfaceDefinitionListFromToscaName = InterfaceUtils
-            .getInterfaceDefinitionListFromToscaName(storedResource.getInterfaces().values(),
-                storedResource.getName());
-    
-        for (InterfaceDefinition interfaceDefinition : storedResourceInterfaces.values()) {
-          Either<InterfaceDefinition, ResponseFormat> updateInterfaceDefinitionEither = updateInterfaceDefinition(resourceUpdate,
-              interfaceDefinition,
-              interfaceDefinitionListFromToscaName);
-          if(updateInterfaceDefinitionEither.isRight()) {
-            return Either.right(updateInterfaceDefinitionEither.right().value());
-          }
-        }
-      }
-    
-      return  Either.left(Boolean.TRUE);
-    }
-    
-    private Either<InterfaceDefinition, ResponseFormat > updateInterfaceDefinition(Resource resourceUpdate,
-        InterfaceDefinition interfaceDefinition,
-        Collection<InterfaceDefinition> interfaceDefinitionListFromToscaName) {
-      interfaceDefinitionListFromToscaName.forEach(interfaceDefinitionFromList -> {
-        if(interfaceDefinitionFromList.getToscaResourceName().equals(interfaceDefinition.getToscaResourceName())) {
-          log.info("Going to Update interface definition toscaResourceName {} to {}",
-              interfaceDefinitionFromList.getToscaResourceName(),
-              InterfaceUtils.createInterfaceToscaResourceName(resourceUpdate.getName()));
-          interfaceDefinition.setToscaResourceName(InterfaceUtils
-              .createInterfaceToscaResourceName(resourceUpdate.getName()));
-        }
-      } );
-      try {
-        Either<InterfaceDefinition, StorageOperationStatus> interfaceUpdate = interfaceOperation
-            .updateInterface(resourceUpdate.getUniqueId(), interfaceDefinition);
-        if (interfaceUpdate.isRight()) {
-          log.error("Failed to Update interface {}. Response is {}. ", resourceUpdate.getName(), interfaceUpdate.right().value());
-          titanDao.rollback();
-          return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(interfaceUpdate.right().value(), ComponentTypeEnum.RESOURCE)));
-        }
-      } catch (Exception e) {
-        log.error("Exception occurred during update interface toscaResourceName  : {}", e);
-        titanDao.rollback();
-        return Either.right(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR));
-      }
-    
-      return Either.left( interfaceDefinition);
-    }
-    
 }
\ No newline at end of file
index f30088c..e85afdc 100644 (file)
@@ -518,7 +518,11 @@ public class ServiceBusinessLogic extends ComponentBusinessLogic {
             log.info("Restricted operation for user: {}, on service: {}", user.getUserId(), currentService.getCreatorUserId());
             return Either.right(componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION));
         }
-
+        Either<Boolean, ResponseFormat> validateAndUpdateInterfacesEither = interfaceOperationBusinessLogic.validateComponentNameAndUpdateInterfaces(currentService, serviceUpdate);
+        if (validateAndUpdateInterfacesEither.isRight()) {
+            log.info("failed to validate and update Interfaces on service {}", currentService.getCreatorUserId());
+            return Either.right(validateAndUpdateInterfacesEither.right().value());
+        }
         Either<Service, ResponseFormat> validationRsponse = validateAndUpdateServiceMetadata(user, currentService, serviceUpdate);
         if (validationRsponse.isRight()) {
             log.info("service update metadata: validations field.");
@@ -789,7 +793,6 @@ public class ServiceBusinessLogic extends ComponentBusinessLogic {
             validateAndUpdateEcompNaming(currentService, serviceUpdate);
 
             currentService.setEnvironmentContext(serviceUpdate.getEnvironmentContext());
-
             return Either.left(currentService);
 
         } catch (ComponentException exception) {
index f7e9586..13d0665 100644 (file)
@@ -154,6 +154,7 @@ public class ResourceBusinessLogicTest {
     WebApplicationContext webAppContext = Mockito.mock(WebApplicationContext.class);
     IInterfaceLifecycleOperation interfaceTypeOperation = Mockito.mock(IInterfaceLifecycleOperation.class);
     InterfaceOperation interfaceOperation = Mockito.mock(InterfaceOperation.class);
+    InterfaceOperationBusinessLogic interfaceOperationBl = Mockito.mock(InterfaceOperationBusinessLogic.class);
 
     @InjectMocks
     ResourceBusinessLogic bl = new ResourceBusinessLogic();
@@ -239,6 +240,7 @@ public class ResourceBusinessLogicTest {
         Map<String, DataTypeDefinition> emptyDataTypes = new HashMap<>();
         when(applicationDataTypeCache.getAll()).thenReturn(Either.left(emptyDataTypes));
         when(mockTitanDao.commit()).thenReturn(TitanOperationStatus.OK);
+        when(interfaceOperationBl.validateComponentNameAndUpdateInterfaces(any(Component.class), any(Component.class))).thenReturn(Either.left(true));
 
         // BL object
         artifactManager.setNodeTemplateOperation(nodeTemplateOperation);
@@ -261,6 +263,7 @@ public class ResourceBusinessLogicTest {
         bl.setUserValidations(userValidations);
         bl.setInterfaceTypeOperation(interfaceTypeOperation);
         bl.setInterfaceOperation(interfaceOperation);
+        bl.setInterfaceOperationBusinessLogic(interfaceOperationBl);
 
         csarBusinessLogic.setCsarOperation(csarOperation);
         Resource resourceCsar = createResourceObjectCsar(true);
index 7a36d92..feef31c 100644 (file)
  */
 package org.openecomp.sdc.be.model.jsontitan.utils;
 
+import org.apache.commons.collections.CollectionUtils;
+import org.openecomp.sdc.be.model.InterfaceDefinition;
+
 import java.util.Collection;
 import java.util.Formatter;
-import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
-import org.apache.commons.collections.CollectionUtils;
-import org.openecomp.sdc.be.datatypes.elements.InputDataDefinition;
-import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
-import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition;
-import org.openecomp.sdc.be.datatypes.elements.OperationOutputDefinition;
-import org.openecomp.sdc.be.model.InputDefinition;
-import org.openecomp.sdc.be.model.InterfaceDefinition;
-import org.openecomp.sdc.be.model.Operation;
 import org.openecomp.sdc.common.util.ValidationUtils;
 
 public class InterfaceUtils {
@@ -35,80 +29,34 @@ public class InterfaceUtils {
     public static final String INTERFACE_TOSCA_RESOURCE_NAME = "org.openecomp.interfaces.node.lifecycle.%s";
 
     public static final Optional<InterfaceDefinition> getInterfaceDefinitionFromToscaName(
-        Collection<InterfaceDefinition> interfaces,
-        String resourceName) {
+            Collection<InterfaceDefinition> interfaces,
+            String componentName) {
         if (CollectionUtils.isEmpty(interfaces)) {
             return Optional.empty();
         }
 
-        String toscaName = createInterfaceToscaResourceName(resourceName);
+        String toscaName = createInterfaceToscaResourceName(componentName);
         return interfaces.stream().filter(
-            interfaceDefinition -> interfaceDefinition.getToscaResourceName() != null && interfaceDefinition
-                .getToscaResourceName().equals(toscaName)).findAny();
+                interfaceDefinition -> interfaceDefinition.getToscaResourceName() != null && interfaceDefinition
+                        .getToscaResourceName().equals(toscaName)).findAny();
     }
 
     public static Collection<InterfaceDefinition> getInterfaceDefinitionListFromToscaName(Collection<InterfaceDefinition> interfaces,
-        String resourceName) {
-        if(CollectionUtils.isEmpty(interfaces)){
+                                                                                          String componentName) {
+        if (CollectionUtils.isEmpty(interfaces)) {
             return CollectionUtils.EMPTY_COLLECTION;
         }
 
-        String toscaName = createInterfaceToscaResourceName(resourceName);
+        String toscaName = createInterfaceToscaResourceName(componentName);
         return interfaces.stream().filter(
-            interfaceDefinition -> interfaceDefinition.getToscaResourceName() != null && interfaceDefinition
-                .getToscaResourceName().equals(toscaName)).collect(Collectors.toList());
+                interfaceDefinition -> interfaceDefinition.getToscaResourceName() != null && interfaceDefinition
+                        .getToscaResourceName().equals(toscaName)).collect(Collectors.toList());
     }
 
-    public static String createInterfaceToscaResourceName(String resourceName) {
+    public static String createInterfaceToscaResourceName(String componentName) {
         StringBuilder sb = new StringBuilder();
-        try(Formatter formatter = new Formatter(sb)){
-            return formatter.format(INTERFACE_TOSCA_RESOURCE_NAME, ValidationUtils.convertToSystemName(resourceName)).toString();
+        try (Formatter formatter = new Formatter(sb)) {
+            return formatter.format(INTERFACE_TOSCA_RESOURCE_NAME, ValidationUtils.convertToSystemName(componentName)).toString();
         }
     }
-
-    public static void createInputOutput(Operation operation, List<InputDefinition> inputs, List<InputDefinition> outputs) throws IllegalStateException {
-        ListDataDefinition<OperationInputDefinition> inputDefinitionListDataDefinition = operation.getInputs();
-        if (inputDefinitionListDataDefinition != null) {
-            return;
-        }
-        List<OperationInputDefinition> inputListToscaDataDefinition = inputDefinitionListDataDefinition.getListToscaDataDefinition();
-        List<OperationInputDefinition> convertedInputs = inputListToscaDataDefinition.stream()
-            .map(input -> convertInput(input, inputs))
-            .collect(Collectors.toList());
-
-        ListDataDefinition<OperationOutputDefinition> outputDefinitionListDataDefinition = operation.getOutputs();
-        if (outputDefinitionListDataDefinition != null) {
-            return;
-        }
-        List<OperationOutputDefinition> outputListToscaDataDefinition = outputDefinitionListDataDefinition.getListToscaDataDefinition();
-        List<OperationOutputDefinition> convertedOutputs = outputListToscaDataDefinition.stream()
-            .map(output -> convertOutput(output, outputs) )
-            .collect(Collectors.toList());
-
-        inputDefinitionListDataDefinition.getListToscaDataDefinition().clear();
-        inputDefinitionListDataDefinition.getListToscaDataDefinition().addAll(convertedInputs);
-        outputDefinitionListDataDefinition.getListToscaDataDefinition().clear();
-        outputDefinitionListDataDefinition.getListToscaDataDefinition().addAll(convertedOutputs);
-    }
-
-    private static OperationInputDefinition convertInput(OperationInputDefinition input,
-        List<InputDefinition> inputs) throws IllegalStateException {
-        Optional<InputDefinition> anyInputDefinition = inputs.stream()
-            .filter(inp -> inp.getUniqueId().equals(input.getUniqueId())).findAny();
-        if (anyInputDefinition.isPresent()) {
-            return new OperationInputDefinition(input.getLabel(),new InputDataDefinition(anyInputDefinition.get()));
-        }
-        throw new IllegalStateException("Could not find input :"+ input.getLabel());
-    }
-
-    private static OperationOutputDefinition convertOutput(OperationOutputDefinition output,
-        List<InputDefinition> outputs) throws IllegalStateException {
-        Optional<InputDefinition> anyOutputDefinition = outputs.stream()
-            .filter(op -> op.getUniqueId().equals(output.getUniqueId())).findAny();
-        if (anyOutputDefinition.isPresent()) {
-            return new OperationOutputDefinition(output.getLabel(),new InputDataDefinition(anyOutputDefinition.get()));
-        }
-        throw new IllegalStateException("Could not find output :"+ output.getLabel());
-    }
-
 }