2dfa3c90f7f8ff4bec5cdca74632dd084332061f
[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 boolean isPortBoundToSubInterface() {
54     return !subInterfaceConsolidationData.isEmpty();
55   }
56
57   public SubInterfaceTemplateConsolidationData getSubInterfaceResourceTemplateConsolidationData(Resource resource,
58                                                                                     String subInterfaceNodeTemplateId,
59                                                                                     String parentPortNodeTemplateId) {
60     String subInterfaceType = createSubInterfaceType(resource);
61     List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
62               subInterfaceConsolidationData.get(subInterfaceType);
63     SubInterfaceTemplateConsolidationData consolidationData = null;
64     if (CollectionUtils.isNotEmpty(subInterfaceTemplateConsolidationDataList)) {
65       Optional<SubInterfaceTemplateConsolidationData> optionalConsolidationData =
66           subInterfaceTemplateConsolidationDataList.stream()
67               .filter(s -> s.getNodeTemplateId().equals(subInterfaceNodeTemplateId))
68               .findFirst();
69       if (optionalConsolidationData.isPresent()) {
70         consolidationData = optionalConsolidationData.get();
71       }
72     }
73
74     if (Objects.isNull(consolidationData)) {
75       consolidationData = createSubInterfaceConsolidationData(subInterfaceNodeTemplateId, parentPortNodeTemplateId);
76       addSubInterfaceConsolidationData(subInterfaceType, consolidationData);
77     }
78     return consolidationData;
79   }
80
81   private String createSubInterfaceType(Resource resource) {
82
83     return ToscaNodeType.VLAN_SUB_INTERFACE_RESOURCE_TYPE_PREFIX
84             + FileUtils.getFileWithoutExtention(HeatToToscaUtil.getSubInterfaceResourceType(resource));
85   }
86
87   private SubInterfaceTemplateConsolidationData createSubInterfaceConsolidationData(String subInterfaceNodeTemplateId, String parentPortNodeTemplateId) {
88     SubInterfaceTemplateConsolidationData data = new SubInterfaceTemplateConsolidationData();
89     data.setNodeTemplateId(subInterfaceNodeTemplateId);
90     data.setParentPortNodeTemplateId(parentPortNodeTemplateId);
91     return data;
92   }
93
94   public void addSubInterfaceConsolidationData(String subPortType,
95                                                SubInterfaceTemplateConsolidationData
96                                                    subInterfaceTemplateConsolidationData) {
97     this.subInterfaceConsolidationData.put(subPortType, subInterfaceTemplateConsolidationData);
98   }
99
100   public boolean hasSameSubInterfaceTypes(PortTemplateConsolidationData other) {
101     return other != null && this.subInterfaceConsolidationData.keySet().equals(
102         other.subInterfaceConsolidationData.keySet());
103   }
104
105   public void copyMappedInto(ListMultimap<String, SubInterfaceTemplateConsolidationData> subInterfaceTypeToEntity) {
106     subInterfaceTypeToEntity.putAll(this.subInterfaceConsolidationData);
107   }
108
109   public void copyFlatInto(List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList) {
110     subInterfaceTemplateConsolidationDataList.addAll(subInterfaceConsolidationData.values());
111   }
112
113   public boolean isNumberOfSubInterfacesPerTypeSimilar(PortTemplateConsolidationData other) {
114     return this.subInterfaceConsolidationData.isEmpty() && other.subInterfaceConsolidationData.isEmpty()
115         || !this.subInterfaceConsolidationData.isEmpty() && !other.subInterfaceConsolidationData.isEmpty()
116           &&  this.subInterfaceConsolidationData.keySet().stream().allMatch(
117               subInterfaceType -> calculateSize(other.subInterfaceConsolidationData.get(subInterfaceType))
118                   ==  calculateSize(this.subInterfaceConsolidationData.get(subInterfaceType)));
119
120   }
121
122   public boolean isSubInterfaceNodeTemplateIdParameter(String nodeTemplateType) {
123     List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
124         this.subInterfaceConsolidationData.get(nodeTemplateType);
125     return (Objects.nonNull(subInterfaceTemplateConsolidationDataList)
126         && subInterfaceTemplateConsolidationDataList.size() > 1) ;
127   }
128
129   private int calculateSize(List<SubInterfaceTemplateConsolidationData> subInterfaces) {
130     return subInterfaces == null ? 0 : subInterfaces.size();
131   }
132
133
134 }