1 package org.openecomp.sdc.be.components.merge.input;
4 import org.openecomp.sdc.be.components.merge.instance.ComponentsMergeCommand;
5 import org.openecomp.sdc.be.dao.api.ActionStatus;
6 import org.openecomp.sdc.be.dao.utils.MapUtil;
7 import org.openecomp.sdc.be.impl.ComponentsUtils;
8 import org.openecomp.sdc.be.model.Component;
9 import org.openecomp.sdc.be.model.InputDefinition;
10 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
11 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
13 import java.util.ArrayList;
14 import java.util.Collections;
15 import java.util.List;
18 @org.springframework.stereotype.Component
19 public class ComponentInputsMergeBL implements ComponentsMergeCommand {
21 @javax.annotation.Resource
22 private InputsValuesMergingBusinessLogic inputsValuesMergingBusinessLogic;
24 @javax.annotation.Resource
25 private ToscaOperationFacade toscaOperationFacade;
27 @javax.annotation.Resource
28 private ComponentsUtils componentsUtils;
31 public ActionStatus mergeComponents(Component prevComponent, Component currentComponent) {
32 List<InputDefinition> inputsToMerge = currentComponent.getInputs() != null ? currentComponent.getInputs() : new ArrayList<>();
33 return this.mergeAndRedeclareComponentInputs(prevComponent, currentComponent, inputsToMerge);
37 public String description() {
38 return "merge component inputs";
41 public ActionStatus mergeAndRedeclareComponentInputs(Component prevComponent, Component newComponent, List<InputDefinition> inputsToMerge) {
42 mergeInputs(prevComponent, inputsToMerge);
43 List<InputDefinition> previouslyDeclaredInputs = inputsValuesMergingBusinessLogic.getPreviouslyDeclaredInputsToMerge(prevComponent, newComponent);
44 inputsToMerge.addAll(previouslyDeclaredInputs);
45 return updateInputs(newComponent.getUniqueId(), inputsToMerge);
48 public ActionStatus mergeComponentInputs(Component prevComponent, Component newComponent, List<InputDefinition> inputsToMerge) {
49 mergeInputs(prevComponent, inputsToMerge);
50 return updateInputs(newComponent.getUniqueId(), inputsToMerge);
53 public ActionStatus redeclareComponentInputsForInstance(List<InputDefinition> oldInputs, Component newComponent, String instanceId) {
54 List<InputDefinition> previouslyDeclaredInputs = inputsValuesMergingBusinessLogic.getPreviouslyDeclaredInputsToMerge(oldInputs, newComponent, instanceId);
55 return updateInputs(newComponent.getUniqueId(), previouslyDeclaredInputs);
58 private void mergeInputs(Component prevComponent, List<InputDefinition> inputsToMerge) {
59 Map<String, InputDefinition> oldInputsByName = prevComponent.getInputs() == null ? Collections.emptyMap() : MapUtil.toMap(prevComponent.getInputs(), InputDefinition::getName);
60 Map<String, InputDefinition> inputsToMergeByName = MapUtil.toMap(inputsToMerge, InputDefinition::getName);
61 inputsValuesMergingBusinessLogic.mergeComponentInputs(oldInputsByName, inputsToMergeByName);
64 private ActionStatus updateInputs(String containerId, List<InputDefinition> inputsToUpdate) {
65 Either<List<InputDefinition>, StorageOperationStatus> updateInputsEither = toscaOperationFacade.updateInputsToComponent(inputsToUpdate, containerId);
66 if (updateInputsEither.isRight()) {
67 return componentsUtils.convertFromStorageResponse(updateInputsEither.right().value());
69 return ActionStatus.OK;