Fix 'Unable to delete declared outputs'
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / attribute / ComponentAttributeDeclarator.java
index 56dec5d..47fd74e 100644 (file)
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-
 package org.openecomp.sdc.be.components.attribute;
 
 import fj.data.Either;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import org.apache.commons.collections.CollectionUtils;
-import org.openecomp.sdc.be.components.impl.AttributeBusinessLogic;
 import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.GetOutputValueDataDefinition;
-import org.openecomp.sdc.be.impl.ComponentsUtils;
 import org.openecomp.sdc.be.model.AttributeDefinition;
 import org.openecomp.sdc.be.model.Component;
 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;
 
 @org.springframework.stereotype.Component
 public class ComponentAttributeDeclarator extends DefaultAttributeDeclarator<Component, AttributeDataDefinition> {
 
-  private final ToscaOperationFacade toscaOperationFacade;
-  private final AttributeBusinessLogic attributeBusinessLogic;
-
-  public ComponentAttributeDeclarator(final ComponentsUtils componentsUtils,
-                                      final AttributeOperation attributeOperation,
-                                      final ToscaOperationFacade toscaOperationFacade,
-                                      final AttributeBusinessLogic attributeBusinessLogic) {
-//    super(componentsUtils, attributeOperation);
-    this.toscaOperationFacade = toscaOperationFacade;
-    this.attributeBusinessLogic = attributeBusinessLogic;
-  }
-
-  @Override
-  public AttributeDataDefinition createDeclaredAttribute(final AttributeDataDefinition attributeDataDefinition) {
-    return new AttributeDataDefinition(attributeDataDefinition);
-  }
+    private final ToscaOperationFacade toscaOperationFacade;
 
-  @Override
-  public Either<?, StorageOperationStatus> updateAttributesValues(final Component component,
-                                                                  final String propertiesOwnerId,
-                                                                  final List<AttributeDataDefinition> attributetypeList) {
-    if (CollectionUtils.isNotEmpty(attributetypeList)) {
-      for (AttributeDataDefinition attribute : attributetypeList) {
-        Either<AttributeDefinition, StorageOperationStatus>
-            storageStatus = toscaOperationFacade
-            .updateAttributeOfComponent(component, new AttributeDefinition(attribute));
-        if (storageStatus.isRight()) {
-          return Either.right(storageStatus.right().value());
-        }
-      }
+    public ComponentAttributeDeclarator(final ToscaOperationFacade toscaOperationFacade) {
+        this.toscaOperationFacade = toscaOperationFacade;
     }
-    return Either.left(attributetypeList);
-  }
-
-  @Override
-  public Optional<Component> resolvePropertiesOwner(final Component component, final String propertiesOwnerId) {
-    return Optional.of(component);
-  }
 
-  @Override
-  public StorageOperationStatus unDeclareAttributesAsOutputs(final Component component,
-                                                             final OutputDefinition output) {
-    AttributeDefinition attributeDefinition = new AttributeDefinition(output);
-
-    // TODO - do we need this one
-    if (attributeBusinessLogic.isAttributeUsedByOperation(component, attributeDefinition)) {
-      return StorageOperationStatus.DECLARED_INPUT_USED_BY_OPERATION;
+    @Override
+    public AttributeDataDefinition createDeclaredAttribute(final AttributeDataDefinition attributeDataDefinition) {
+        return new AttributeDataDefinition(attributeDataDefinition);
     }
 
-    Optional<AttributeDefinition> attributeToUpdateCandidate =
-        getDeclaredAttributeByOutputId(component, output.getUniqueId());
-
-    if (attributeToUpdateCandidate.isPresent()) {
-      AttributeDefinition attributeToUpdate = attributeToUpdateCandidate.get();
-      return unDeclareOutput(component, output, attributeToUpdate);
+    @Override
+    public Either<?, StorageOperationStatus> updateAttributesValues(final Component component, final String propertiesOwnerId,
+                                                                    final List<AttributeDataDefinition> attributetypeList) {
+        if (CollectionUtils.isNotEmpty(attributetypeList)) {
+            for (AttributeDataDefinition attribute : attributetypeList) {
+                Either<AttributeDefinition, StorageOperationStatus> storageStatus = toscaOperationFacade
+                    .updateAttributeOfComponent(component, new AttributeDefinition(attribute));
+                if (storageStatus.isRight()) {
+                    return Either.right(storageStatus.right().value());
+                }
+            }
+        }
+        return Either.left(attributetypeList);
     }
 
-    return StorageOperationStatus.OK;
-  }
-
-  private StorageOperationStatus unDeclareOutput(final Component component,
-                                                 final OutputDefinition output,
-                                                 final AttributeDefinition attributeToUpdate) {
-    prepareValueBeforeDelete(output, attributeToUpdate, Collections.emptyList());
-    attributeToUpdate.setValue(output.getDefaultValue());
-    Either<AttributeDefinition, StorageOperationStatus> status = toscaOperationFacade
-        .updateAttributeOfComponent(component, attributeToUpdate);
-    if (status.isRight()) {
-      return status.right().value();
+    @Override
+    public Optional<Component> resolvePropertiesOwner(final Component component, final String propertiesOwnerId) {
+        return Optional.of(component);
     }
 
-    return StorageOperationStatus.OK;
-  }
-
-  private Optional<AttributeDefinition> getDeclaredAttributeByOutputId(final Component component, final String outputId) {
-    List<AttributeDefinition> attributes = component.getAttributes();
-
-    if (CollectionUtils.isEmpty(attributes)) {
-      return Optional.empty();
+    @Override
+    public StorageOperationStatus unDeclareAttributesAsOutputs(final Component component, final OutputDefinition output) {
+        final Optional<AttributeDefinition> attributeToUpdateCandidate = getDeclaredAttributeByOutputId(component, output.getUniqueId());
+        if (attributeToUpdateCandidate.isPresent()) {
+            AttributeDefinition attributeToUpdate = attributeToUpdateCandidate.get();
+            return unDeclareOutput(component, output, attributeToUpdate);
+        }
+        return StorageOperationStatus.OK;
     }
 
-    for (AttributeDefinition attributeDefinition : attributes) {
-      List<GetOutputValueDataDefinition> getOutputValues = attributeDefinition.getGetOutputValues();
-      if (CollectionUtils.isEmpty(getOutputValues)) {
-        continue;
-      }
-
-      Optional<GetOutputValueDataDefinition> getOutputCandidate =
-          getOutputValues.stream().filter(getOutput -> getOutput.getOutputId().equals(outputId)).findAny();
-
-      if (getOutputCandidate.isPresent()) {
-        return Optional.of(attributeDefinition);
-      }
+    private StorageOperationStatus unDeclareOutput(final Component component, final OutputDefinition output,
+                                                   final AttributeDefinition attributeToUpdate) {
+        attributeToUpdate.setValue(output.getDefaultValue());
+        Either<AttributeDefinition, StorageOperationStatus> status = toscaOperationFacade.updateAttributeOfComponent(component, attributeToUpdate);
+        if (status.isRight()) {
+            return status.right().value();
+        }
+        return StorageOperationStatus.OK;
     }
 
-    return Optional.empty();
-  }
-
+    private Optional<AttributeDefinition> getDeclaredAttributeByOutputId(final Component component, final String outputId) {
+        List<AttributeDefinition> attributes = component.getAttributes();
+        if (CollectionUtils.isEmpty(attributes)) {
+            return Optional.empty();
+        }
+        for (AttributeDefinition attributeDefinition : attributes) {
+            List<GetOutputValueDataDefinition> getOutputValues = attributeDefinition.getGetOutputValues();
+            if (CollectionUtils.isEmpty(getOutputValues)) {
+                continue;
+            }
+            Optional<GetOutputValueDataDefinition> getOutputCandidate = getOutputValues.stream()
+                .filter(getOutput -> getOutput.getOutputId().equals(outputId)).findAny();
+            if (getOutputCandidate.isPresent()) {
+                return Optional.of(attributeDefinition);
+            }
+        }
+        return Optional.empty();
+    }
 }