Fix bugs in attribute outputs page
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / attribute / ComponentInstanceAttributeDeclarator.java
index 8981515..4fb8bb7 100644 (file)
@@ -28,29 +28,24 @@ import java.util.Optional;
 import org.apache.commons.collections4.CollectionUtils;
 import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
 import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition;
-import org.openecomp.sdc.be.impl.ComponentsUtils;
+import org.openecomp.sdc.be.datatypes.elements.GetOutputValueDataDefinition;
 import org.openecomp.sdc.be.model.Component;
 import org.openecomp.sdc.be.model.ComponentInstance;
 import org.openecomp.sdc.be.model.ComponentInstanceAttribute;
 import org.openecomp.sdc.be.model.OutputDefinition;
 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
-import org.openecomp.sdc.be.model.operations.impl.AttributeOperation;
 import org.openecomp.sdc.common.log.wrappers.Logger;
 
 @org.springframework.stereotype.Component
-public class ComponentInstanceAttributeDeclarator extends
-    DefaultAttributeDeclarator<ComponentInstance, ComponentInstanceAttribute> {
+public class ComponentInstanceAttributeDeclarator extends DefaultAttributeDeclarator<ComponentInstance, ComponentInstanceAttribute> {
 
     private static final Logger log = Logger.getLogger(ComponentInstanceAttributeDeclarator.class);
     private ToscaOperationFacade toscaOperationFacade;
     private ComponentInstanceBusinessLogic componentInstanceBusinessLogic;
 
-    public ComponentInstanceAttributeDeclarator(final ComponentsUtils componentsUtils,
-                                                final AttributeOperation attributeOperation,
-                                                final ToscaOperationFacade toscaOperationFacade,
+    public ComponentInstanceAttributeDeclarator(final ToscaOperationFacade toscaOperationFacade,
                                                 final ComponentInstanceBusinessLogic componentInstanceBusinessLogic) {
-//        super(componentsUtils, attributeOperation);
         this.toscaOperationFacade = toscaOperationFacade;
         this.componentInstanceBusinessLogic = componentInstanceBusinessLogic;
     }
@@ -61,8 +56,7 @@ public class ComponentInstanceAttributeDeclarator extends
     }
 
     @Override
-    public Either<?, StorageOperationStatus> updateAttributesValues(final Component component,
-                                                                    final String cmptInstanceId,
+    public Either<?, StorageOperationStatus> updateAttributesValues(final Component component, final String cmptInstanceId,
                                                                     final List<ComponentInstanceAttribute> attributetypeList) {
         log.debug("#updateAttributesValues - updating component instance attributes for instance {} on component {}", cmptInstanceId,
             component.getUniqueId());
@@ -78,17 +72,25 @@ public class ComponentInstanceAttributeDeclarator extends
 
     @Override
     public StorageOperationStatus unDeclareAttributesAsOutputs(final Component component, final OutputDefinition output) {
-
-        final List<ComponentInstanceAttribute> componentInstancePropertiesDeclaredAsInput
-            = componentInstanceBusinessLogic.getComponentInstanceAttributesByOutputId(component, output.getUniqueId());
-        if (CollectionUtils.isEmpty(componentInstancePropertiesDeclaredAsInput)) {
+        final List<ComponentInstanceAttribute> componentInstanceAttributesDeclaredAsOutput = componentInstanceBusinessLogic
+            .getComponentInstanceAttributesByOutputId(component, output.getUniqueId());
+        if (CollectionUtils.isEmpty(componentInstanceAttributesDeclaredAsOutput)) {
             return StorageOperationStatus.OK;
         }
-        componentInstancePropertiesDeclaredAsInput.forEach(cmptInstanceProperty -> prepareValueBeforeDelete(output,
-            cmptInstanceProperty, cmptInstanceProperty.getPath()));
-        return toscaOperationFacade.updateComponentInstanceAttributes(component,
-            componentInstancePropertiesDeclaredAsInput.get(0).getComponentInstanceId(),
-            componentInstancePropertiesDeclaredAsInput);
+        unDeclareOutput(output, componentInstanceAttributesDeclaredAsOutput);
+        return toscaOperationFacade
+            .updateComponentInstanceAttributes(component, componentInstanceAttributesDeclaredAsOutput.get(0).getComponentInstanceId(),
+                componentInstanceAttributesDeclaredAsOutput);
     }
 
+    private void unDeclareOutput(OutputDefinition output,
+                                 List<ComponentInstanceAttribute> componentInstanceAttributesDeclaredAsOutput) {
+        componentInstanceAttributesDeclaredAsOutput.forEach(attribute -> {
+            Optional<GetOutputValueDataDefinition> attributeOutput =
+                attribute.getGetOutputValues().stream().filter(attOut -> output.getUniqueId().equals(attOut.getOutputId())).findFirst();
+            if (attributeOutput.isPresent()) {
+                attribute.getGetOutputValues().remove(attributeOutput.get());
+            }
+        });
+    }
 }