re base code
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / merge / input / ComponentInputsMergeBL.java
1 package org.openecomp.sdc.be.components.merge.input;
2
3 import org.openecomp.sdc.be.components.merge.VspComponentsMergeCommand;
4 import org.openecomp.sdc.be.dao.api.ActionStatus;
5 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
6 import org.openecomp.sdc.be.impl.ComponentsUtils;
7 import org.openecomp.sdc.be.model.Component;
8 import org.openecomp.sdc.be.model.InputDefinition;
9 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
10 import org.springframework.core.annotation.Order;
11
12 import java.util.List;
13 import java.util.Map;
14 import java.util.Map.Entry;
15 import java.util.stream.Stream;
16
17 import static java.util.stream.Collectors.toMap;
18 import static org.openecomp.sdc.be.components.merge.resource.ResourceDataMergeBusinessLogic.LAST_COMMAND;
19 import static org.openecomp.sdc.be.utils.PropertyDefinitionUtils.convertListOfProperties;
20
21 @org.springframework.stereotype.Component
22 @Order(LAST_COMMAND)//must run after all properties values were merged
23 public class ComponentInputsMergeBL extends InputsMergeCommand implements VspComponentsMergeCommand {
24
25     public ComponentInputsMergeBL(InputsValuesMergingBusinessLogic inputsValuesMergingBusinessLogic, DeclaredInputsResolver declaredInputsResolver, ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils) {
26         super(inputsValuesMergingBusinessLogic, declaredInputsResolver, toscaOperationFacade, componentsUtils);
27     }
28
29     @Override
30     public ActionStatus mergeComponents(Component prevComponent, Component currentComponent) {
31         return super.redeclareAndMergeInputsValues(prevComponent, currentComponent);
32     }
33
34     @Override
35     public String description() {
36         return "merge component inputs";
37     }
38
39     @Override
40     List<InputDefinition> getInputsToMerge(Component component) {
41         return component.safeGetInputs();
42     }
43
44     @Override
45     Map<String, List<PropertyDataDefinition>> getProperties(Component component) {
46         return Stream.of(component.safeGetComponentInstancesProperties(),
47                          component.safeGetComponentInstancesInputs(),
48                          component.safeGetGroupsProperties(),
49                          component.safeGetPolicyProperties())
50                 .flatMap(map -> map.entrySet().stream())
51                 .collect(toMap(Entry::getKey, entry -> convertListOfProperties(entry.getValue())));
52     }
53
54 }