1 package org.openecomp.sdc.asdctool.impl.migration.v1707.jsonmodel;
4 import java.util.ArrayList;
5 import java.util.Arrays;
8 import java.util.stream.Collectors;
10 import javax.annotation.Resource;
12 import org.openecomp.sdc.be.datatypes.elements.ComponentInstanceDataDefinition;
13 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
14 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
15 import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition;
16 import org.openecomp.sdc.be.model.Component;
17 import org.openecomp.sdc.be.model.ComponentInstanceInput;
18 import org.openecomp.sdc.be.model.jsontitan.datamodel.TopologyTemplate;
19 import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
20 import org.openecomp.sdc.be.model.jsontitan.operations.TopologyTemplateOperation;
21 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaElementLifecycleOperation;
22 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
26 import fj.data.Either;
29 public class NodeTemplateMissingDataResolver <T extends Component> {
31 private static Logger LOGGER = LoggerFactory.getLogger(NodeTemplateMissingDataResolver.class);
33 @Resource(name = "tosca-element-lifecycle-operation")
34 private ToscaElementLifecycleOperation lifecycleOperation;
36 @Resource(name = "topology-template-operation")
37 private TopologyTemplateOperation topologyTemplateOperation;
39 public void resolveNodeTemplateInfo(ComponentInstanceDataDefinition vfInst, Map<String, ToscaElement> origCompMap, T component) {
40 lifecycleOperation.resolveToscaComponentName(vfInst, origCompMap);
41 if(OriginTypeEnum.VF == vfInst.getOriginType())
42 collectVFInstanceInputs(component.getComponentInstancesInputs(), origCompMap, vfInst);
45 private void collectVFInstanceInputs(Map<String, List<ComponentInstanceInput>> instInputs, Map<String, ToscaElement> origCompMap, ComponentInstanceDataDefinition vfInst) {
46 String ciUid = vfInst.getUniqueId();
47 String origCompUid = vfInst.getComponentUid();
48 Either<ToscaElement, StorageOperationStatus> origComp = fetchToscaElement(origCompMap, vfInst, origCompUid);
49 if(origComp.isRight())
51 Map<String, PropertyDataDefinition> origVFInputs = ((TopologyTemplate)origComp.left().value()).getInputs();
52 if (origVFInputs != null && !origVFInputs.isEmpty()) {
53 Map<String, ComponentInstanceInput> collectedVFInputs = origVFInputs.values().stream()
54 .collect(Collectors.toMap(p -> p.getName(), p -> new ComponentInstanceInput(p)));
55 List<ComponentInstanceInput> instInputList = instInputs.get(ciUid);
56 Map<String, ComponentInstanceInput> existingInstInputs = ToscaDataDefinition.listToMapByName(instInputList);
57 collectedVFInputs.putAll(existingInstInputs);
58 List<ComponentInstanceInput> mergedList = new ArrayList<>(collectedVFInputs.values());
59 instInputs.put(ciUid, mergedList);
63 private Either<ToscaElement, StorageOperationStatus> fetchToscaElement(Map<String, ToscaElement> origCompMap, ComponentInstanceDataDefinition vfInst, String origCompUid) {
64 Either<ToscaElement, StorageOperationStatus> origCompEither;
65 if (!origCompMap.containsKey(origCompUid)) {
66 origCompEither = topologyTemplateOperation.getToscaElement(origCompUid);
67 if (origCompEither.isRight()) {
68 LOGGER.error("failed to fetch Tosca element {} with id {}", vfInst.getComponentName(), origCompUid);
69 return origCompEither;
71 origCompMap.put(origCompUid, origCompEither.left().value());
73 return Either.left(origCompMap.get(origCompUid));