2 * Copyright © 2016-2018 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation;
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;
28 import java.util.List;
29 import java.util.Objects;
30 import java.util.Optional;
34 * The type Port template consolidation data.
36 public class PortTemplateConsolidationData extends EntityConsolidationData {
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());
43 private String networkRole;
45 public String getNetworkRole() {
49 public void setNetworkRole(String networkRole) {
50 this.networkRole = networkRole;
53 public boolean isPortBoundToSubInterface() {
54 return !subInterfaceConsolidationData.isEmpty();
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))
69 if (optionalConsolidationData.isPresent()) {
70 consolidationData = optionalConsolidationData.get();
74 if (Objects.isNull(consolidationData)) {
75 consolidationData = createSubInterfaceConsolidationData(subInterfaceNodeTemplateId, parentPortNodeTemplateId);
76 addSubInterfaceConsolidationData(subInterfaceType, consolidationData);
78 return consolidationData;
81 private String createSubInterfaceType(Resource resource) {
83 return ToscaNodeType.VLAN_SUB_INTERFACE_RESOURCE_TYPE_PREFIX
84 + FileUtils.getFileWithoutExtention(HeatToToscaUtil.getSubInterfaceResourceType(resource));
87 private SubInterfaceTemplateConsolidationData createSubInterfaceConsolidationData(String subInterfaceNodeTemplateId, String parentPortNodeTemplateId) {
88 SubInterfaceTemplateConsolidationData data = new SubInterfaceTemplateConsolidationData();
89 data.setNodeTemplateId(subInterfaceNodeTemplateId);
90 data.setParentPortNodeTemplateId(parentPortNodeTemplateId);
94 public void addSubInterfaceConsolidationData(String subPortType,
95 SubInterfaceTemplateConsolidationData
96 subInterfaceTemplateConsolidationData) {
97 this.subInterfaceConsolidationData.put(subPortType, subInterfaceTemplateConsolidationData);
100 public boolean hasSameSubInterfaceTypes(PortTemplateConsolidationData other) {
101 return other != null && this.subInterfaceConsolidationData.keySet().equals(
102 other.subInterfaceConsolidationData.keySet());
105 public void copyMappedInto(ListMultimap<String, SubInterfaceTemplateConsolidationData> subInterfaceTypeToEntity) {
106 subInterfaceTypeToEntity.putAll(this.subInterfaceConsolidationData);
109 public void copyFlatInto(List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList) {
110 subInterfaceTemplateConsolidationDataList.addAll(subInterfaceConsolidationData.values());
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)));
122 public boolean isSubInterfaceNodeTemplateIdParameter(String nodeTemplateType) {
123 List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
124 this.subInterfaceConsolidationData.get(nodeTemplateType);
125 return (Objects.nonNull(subInterfaceTemplateConsolidationDataList)
126 && subInterfaceTemplateConsolidationDataList.size() > 1) ;
129 private int calculateSize(List<SubInterfaceTemplateConsolidationData> subInterfaces) {
130 return subInterfaces == null ? 0 : subInterfaces.size();