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 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))
65 if (optionalConsolidationData.isPresent()) {
66 consolidationData = optionalConsolidationData.get();
70 if (Objects.isNull(consolidationData)) {
71 consolidationData = createSubInterfaceConsolidationData(subInterfaceNodeTemplateId, parentPortNodeTemplateId);
72 addSubInterfaceConsolidationData(subInterfaceType, consolidationData);
74 return consolidationData;
77 private String createSubInterfaceType(Resource resource) {
79 return ToscaNodeType.VLAN_SUB_INTERFACE_RESOURCE_TYPE_PREFIX
80 + FileUtils.getFileWithoutExtention(HeatToToscaUtil.getSubInterfaceResourceType(resource));
83 private SubInterfaceTemplateConsolidationData createSubInterfaceConsolidationData(String subInterfaceNodeTemplateId, String parentPortNodeTemplateId) {
84 SubInterfaceTemplateConsolidationData data = new SubInterfaceTemplateConsolidationData();
85 data.setNodeTemplateId(subInterfaceNodeTemplateId);
86 data.setParentPortNodeTemplateId(parentPortNodeTemplateId);
90 public void addSubInterfaceConsolidationData(String subPortType,
91 SubInterfaceTemplateConsolidationData
92 subInterfaceTemplateConsolidationData) {
93 this.subInterfaceConsolidationData.put(subPortType, subInterfaceTemplateConsolidationData);
96 public boolean hasSameSubInterfaceTypes(PortTemplateConsolidationData other) {
97 return other != null && this.subInterfaceConsolidationData.keySet().equals(
98 other.subInterfaceConsolidationData.keySet());
101 public void copyMappedInto(ListMultimap<String, SubInterfaceTemplateConsolidationData> subInterfaceTypeToEntity) {
102 subInterfaceTypeToEntity.putAll(this.subInterfaceConsolidationData);
105 public void copyFlatInto(List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList) {
106 subInterfaceTemplateConsolidationDataList.addAll(subInterfaceConsolidationData.values());
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)));
118 public boolean isSubInterfaceNodeTemplateIdParameter(String nodeTemplateType) {
119 List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
120 this.subInterfaceConsolidationData.get(nodeTemplateType);
121 return (Objects.nonNull(subInterfaceTemplateConsolidationDataList)
122 && subInterfaceTemplateConsolidationDataList.size() > 1) ;
125 private int calculateSize(List<SubInterfaceTemplateConsolidationData> subInterfaces) {
126 return subInterfaces == null ? 0 : subInterfaces.size();