487771b12de3af1617076a7639062df48826fcf6
[sdc.git] /
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation;
18
19 import com.google.common.collect.ArrayListMultimap;
20 import com.google.common.collect.ListMultimap;
21 import com.google.common.collect.Multimaps;
22 import org.apache.commons.collections4.CollectionUtils;
23 import org.openecomp.core.utilities.file.FileUtils;
24 import org.openecomp.sdc.heat.datatypes.model.Resource;
25 import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
26 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
27
28 import java.util.List;
29 import java.util.Objects;
30 import java.util.Optional;
31
32
33 /**
34  * The type Port template consolidation data.
35  */
36 public class PortTemplateConsolidationData extends EntityConsolidationData {
37
38   // key - sub-interface type - for ResourceGroup it is the nested file name
39   // value - List of sub-interfaces of that type in the port
40   private final ListMultimap<String, SubInterfaceTemplateConsolidationData> subInterfaceConsolidationData =
41           Multimaps.synchronizedListMultimap(ArrayListMultimap.create());
42
43   private String networkRole;
44
45   public String getNetworkRole() {
46     return networkRole;
47   }
48
49   public void setNetworkRole(String networkRole) {
50     this.networkRole = networkRole;
51   }
52
53   public SubInterfaceTemplateConsolidationData getSubInterfaceResourceTemplateConsolidationData(Resource resource,
54                                                                                     String subInterfaceNodeTemplateId,
55                                                                                     String parentPortNodeTemplateId) {
56     String subInterfaceType = createSubInterfaceType(resource);
57     List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
58               subInterfaceConsolidationData.get(subInterfaceType);
59     SubInterfaceTemplateConsolidationData consolidationData = null;
60     if (CollectionUtils.isNotEmpty(subInterfaceTemplateConsolidationDataList)) {
61       Optional<SubInterfaceTemplateConsolidationData> optionalConsolidationData =
62           subInterfaceTemplateConsolidationDataList.stream()
63               .filter(s -> s.getNodeTemplateId().equals(subInterfaceNodeTemplateId))
64               .findFirst();
65       if (optionalConsolidationData.isPresent()) {
66         consolidationData = optionalConsolidationData.get();
67       }
68     }
69
70     if (Objects.isNull(consolidationData)) {
71       consolidationData = createSubInterfaceConsolidationData(subInterfaceNodeTemplateId, parentPortNodeTemplateId);
72       addSubInterfaceConsolidationData(subInterfaceType, consolidationData);
73     }
74     return consolidationData;
75   }
76
77   private String createSubInterfaceType(Resource resource) {
78
79     return ToscaNodeType.VLAN_SUB_INTERFACE_RESOURCE_TYPE_PREFIX
80             + FileUtils.getFileWithoutExtention(HeatToToscaUtil.getSubInterfaceResourceType(resource));
81   }
82
83   private SubInterfaceTemplateConsolidationData createSubInterfaceConsolidationData(String subInterfaceNodeTemplateId, String parentPortNodeTemplateId) {
84     SubInterfaceTemplateConsolidationData data = new SubInterfaceTemplateConsolidationData();
85     data.setNodeTemplateId(subInterfaceNodeTemplateId);
86     data.setParentPortNodeTemplateId(parentPortNodeTemplateId);
87     return data;
88   }
89
90   public void addSubInterfaceConsolidationData(String subPortType,
91                                                SubInterfaceTemplateConsolidationData
92                                                    subInterfaceTemplateConsolidationData) {
93     this.subInterfaceConsolidationData.put(subPortType, subInterfaceTemplateConsolidationData);
94   }
95
96   public boolean hasSameSubInterfaceTypes(PortTemplateConsolidationData other) {
97     return other != null && this.subInterfaceConsolidationData.keySet().equals(
98         other.subInterfaceConsolidationData.keySet());
99   }
100
101   public void copyMappedInto(ListMultimap<String, SubInterfaceTemplateConsolidationData> subInterfaceTypeToEntity) {
102     subInterfaceTypeToEntity.putAll(this.subInterfaceConsolidationData);
103   }
104
105   public void copyFlatInto(List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList) {
106     subInterfaceTemplateConsolidationDataList.addAll(subInterfaceConsolidationData.values());
107   }
108
109   public boolean isNumberOfSubInterfacesPerTypeSimilar(PortTemplateConsolidationData other) {
110     return this.subInterfaceConsolidationData.isEmpty() && other.subInterfaceConsolidationData.isEmpty()
111         || !this.subInterfaceConsolidationData.isEmpty() && !other.subInterfaceConsolidationData.isEmpty()
112           &&  this.subInterfaceConsolidationData.keySet().stream().allMatch(
113               subInterfaceType -> calculateSize(other.subInterfaceConsolidationData.get(subInterfaceType))
114                   ==  calculateSize(this.subInterfaceConsolidationData.get(subInterfaceType)));
115
116   }
117
118   public boolean isSubInterfaceNodeTemplateIdParameter(String nodeTemplateType) {
119     List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
120         this.subInterfaceConsolidationData.get(nodeTemplateType);
121     return (Objects.nonNull(subInterfaceTemplateConsolidationDataList)
122         && subInterfaceTemplateConsolidationDataList.size() > 1) ;
123   }
124
125   private int calculateSize(List<SubInterfaceTemplateConsolidationData> subInterfaces) {
126     return subInterfaces == null ? 0 : subInterfaces.size();
127   }
128
129
130 }