re base code
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / merge / GlobalInputsFilteringBusinessLogic.java
1 package org.openecomp.sdc.be.components.merge;
2
3 import fj.data.Either;
4 import org.openecomp.sdc.be.components.impl.generic.GenericTypeBusinessLogic;
5 import org.openecomp.sdc.be.dao.api.ActionStatus;
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.Resource;
10 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
11 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
12
13 import java.util.List;
14 import java.util.Set;
15 import java.util.stream.Collectors;
16
17 @org.springframework.stereotype.Component
18 public class GlobalInputsFilteringBusinessLogic {
19
20     private GenericTypeBusinessLogic genericTypeBusinessLogic;
21     private ToscaOperationFacade toscaOperationFacade;
22     private ComponentsUtils componentsUtils;
23
24     public GlobalInputsFilteringBusinessLogic(GenericTypeBusinessLogic genericTypeBusinessLogic, ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils) {
25         this.genericTypeBusinessLogic = genericTypeBusinessLogic;
26         this.toscaOperationFacade = toscaOperationFacade;
27         this.componentsUtils = componentsUtils;
28     }
29
30     public Either<List<InputDefinition>, ActionStatus> filterGlobalInputs(Component newResource) {
31             Either<Resource, StorageOperationStatus> genericComp = toscaOperationFacade.getLatestCertifiedNodeTypeByToscaResourceName(newResource.fetchGenericTypeToscaNameFromConfig());
32             return genericComp.bimap(genericResource -> findCommonInputs(genericResource, newResource),
33                                      storageOperationStatus -> componentsUtils.convertFromStorageResponse(storageOperationStatus));
34     }
35
36     private List<InputDefinition> findCommonInputs(Resource genericResource, Component resource) {
37         List<InputDefinition> resourceInputs = resource.getInputs();
38         List<InputDefinition> genericInputs = genericTypeBusinessLogic.generateInputsFromGenericTypeProperties(genericResource);
39         Set<String> genericInputsNames = genericInputs.stream().map(InputDefinition::getName).collect(Collectors.toSet());
40         return resourceInputs.stream().filter(input -> genericInputsNames.contains(input.getName())).collect(Collectors.toList());
41     }
42
43 }