c2de58fd5acc01f46f25a40f8fc52a270b433cf1
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / main / java / org / openecomp / sdc / translator / services / heattotosca / ConsolidationEntityType.java
1 package org.openecomp.sdc.translator.services.heattotosca;
2
3 import static org.openecomp.sdc.translator.services.heattotosca.ConsolidationDataUtil.isComputeResource;
4 import static org.openecomp.sdc.translator.services.heattotosca.ConsolidationDataUtil.isPortResource;
5 import static org.openecomp.sdc.translator.services.heattotosca.ConsolidationDataUtil.isVolumeResource;
6
7 import org.apache.commons.lang3.ObjectUtils;
8 import org.openecomp.core.utilities.yaml.YamlUtil;
9 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
10 import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
11 import org.openecomp.sdc.heat.datatypes.model.Resource;
12 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
13
14 import java.util.Collection;
15 import java.util.Objects;
16 import java.util.Optional;
17
18 /**
19  * The enum Entity type.
20  */
21 public enum ConsolidationEntityType {
22   COMPUTE,
23   PORT,
24   VOLUME,
25   NESTED,
26   VFC_NESTED,
27   SUB_PORT,
28   OTHER;
29
30   private ConsolidationEntityType sourceEntityType;
31   private ConsolidationEntityType targetEntityType;
32
33   public ConsolidationEntityType getSourceEntityType() {
34     return sourceEntityType;
35   }
36
37   public ConsolidationEntityType getTargetEntityType() {
38     return targetEntityType;
39   }
40
41   /**
42    * Sets entity type.
43    *
44    * @param heatOrchestrationTemplate the heat orchestration template
45    * @param sourceResource          the source resource
46    * @param targetResource          the target resource
47    */
48   public void setEntityType(HeatOrchestrationTemplate heatOrchestrationTemplate,
49                             Resource sourceResource,
50                             Resource targetResource,
51                             TranslationContext context) {
52     targetEntityType =
53         getEntityType(heatOrchestrationTemplate, targetResource, context);
54     sourceEntityType =
55         getEntityType(heatOrchestrationTemplate, sourceResource, context);
56   }
57
58   private ConsolidationEntityType getEntityType(HeatOrchestrationTemplate heatOrchestrationTemplate,
59                                                 Resource resource, TranslationContext context) {
60     if (isComputeResource(resource)) {
61       return ConsolidationEntityType.COMPUTE;
62     } else if (isPortResource(resource)) {
63       return ConsolidationEntityType.PORT;
64     } else if (isVolumeResource(resource)) {
65       return ConsolidationEntityType.VOLUME;
66     } else if (HeatToToscaUtil.isNestedResource(resource)) {
67       Optional<String> nestedHeatFileName = HeatToToscaUtil.getNestedHeatFileName(resource);
68       if (nestedHeatFileName.isPresent()) {
69         HeatOrchestrationTemplate nestedHeatOrchestrationTemplate = new YamlUtil()
70             .yamlToObject(context.getFileContent(nestedHeatFileName.get()),
71                 HeatOrchestrationTemplate.class);
72         if (Objects.nonNull(nestedHeatOrchestrationTemplate.getResources())) {
73           for (String innerResourceId : nestedHeatOrchestrationTemplate.getResources().keySet()) {
74             if (ConsolidationDataUtil
75                 .isComputeResource(nestedHeatOrchestrationTemplate, innerResourceId)) {
76               return ConsolidationEntityType.VFC_NESTED;
77             }
78           }
79         }
80       }
81       return ConsolidationEntityType.NESTED;
82     } else {
83       return ConsolidationEntityType.OTHER;
84     }
85   }
86 }