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;
32 public class PortTemplateConsolidationData extends EntityConsolidationData {
34 // key - sub-interface type - for ResourceGroup it is the nested file name
35 // value - List of sub-interfaces of that type in the port
36 private final ListMultimap<String, SubInterfaceTemplateConsolidationData> subInterfaceConsolidationData =
37 Multimaps.synchronizedListMultimap(ArrayListMultimap.create());
39 private String networkRole;
41 public String getNetworkRole() {
45 public void setNetworkRole(String networkRole) {
46 this.networkRole = networkRole;
49 public boolean isPortBoundToSubInterface() {
50 return !subInterfaceConsolidationData.isEmpty();
54 * Create Sub interface template consolidation data base on given parameters - if it doesn't exist yet.
56 * @param resource resource of sub Interface
57 * @param subInterfaceNodeTemplateId template id of sub interface
58 * @param parentPortNodeTemplateId node template id of port node to which sub interface is related
59 * @return sub interface template consolidation data entity
61 public SubInterfaceTemplateConsolidationData addSubInterfaceTemplateConsolidationData(
62 Resource resource, String subInterfaceNodeTemplateId, String parentPortNodeTemplateId) {
63 String subInterfaceType = createSubInterfaceType(resource);
64 List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
65 subInterfaceConsolidationData.get(subInterfaceType);
66 SubInterfaceTemplateConsolidationData consolidationData = null;
67 if (CollectionUtils.isNotEmpty(subInterfaceTemplateConsolidationDataList)) {
68 Optional<SubInterfaceTemplateConsolidationData> optionalConsolidationData =
69 subInterfaceTemplateConsolidationDataList.stream()
70 .filter(s -> s.getNodeTemplateId().equals(subInterfaceNodeTemplateId))
72 if (optionalConsolidationData.isPresent()) {
73 consolidationData = optionalConsolidationData.get();
77 if (Objects.isNull(consolidationData)) {
79 createSubInterfaceConsolidationData(subInterfaceNodeTemplateId, parentPortNodeTemplateId);
80 addSubInterfaceConsolidationData(subInterfaceType, consolidationData);
82 return consolidationData;
85 private String createSubInterfaceType(Resource resource) {
86 return ToscaNodeType.VLAN_SUB_INTERFACE_RESOURCE_TYPE_PREFIX
87 + FileUtils.getFileWithoutExtention(
88 HeatToToscaUtil.getSubInterfaceResourceType(resource));
91 private SubInterfaceTemplateConsolidationData createSubInterfaceConsolidationData(
92 String subInterfaceNodeTemplateId, String parentPortNodeTemplateId) {
93 SubInterfaceTemplateConsolidationData data = new SubInterfaceTemplateConsolidationData();
94 data.setNodeTemplateId(subInterfaceNodeTemplateId);
95 data.setParentPortNodeTemplateId(parentPortNodeTemplateId);
99 public void addSubInterfaceConsolidationData(String subPortType,
100 SubInterfaceTemplateConsolidationData
101 subInterfaceTemplateConsolidationData) {
102 this.subInterfaceConsolidationData.put(subPortType, subInterfaceTemplateConsolidationData);
105 public boolean hasSameSubInterfaceTypes(PortTemplateConsolidationData other) {
106 return other != null && this.subInterfaceConsolidationData.keySet().equals(
107 other.subInterfaceConsolidationData.keySet());
110 public void copyMappedInto(ListMultimap<String, SubInterfaceTemplateConsolidationData> subInterfaceTypeToEntity) {
111 subInterfaceTypeToEntity.putAll(this.subInterfaceConsolidationData);
114 public void copyFlatInto(List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList) {
115 subInterfaceTemplateConsolidationDataList.addAll(subInterfaceConsolidationData.values());
118 public boolean isNumberOfSubInterfacesPerTypeSimilar(PortTemplateConsolidationData other) {
119 return isBothSubInterfaceConsolidationDataEmpty(this, other)
120 || isBothSubInterfaceConsolidationDataNotEmpty(this, other)
121 && this.subInterfaceConsolidationData.keySet().stream().allMatch(
122 subInterfaceType -> calculateSize(other.subInterfaceConsolidationData.get(subInterfaceType))
123 == calculateSize(this.subInterfaceConsolidationData.get(subInterfaceType)));
127 private boolean isBothSubInterfaceConsolidationDataEmpty(
128 PortTemplateConsolidationData object, PortTemplateConsolidationData other) {
129 return object.subInterfaceConsolidationData.isEmpty() && other.subInterfaceConsolidationData.isEmpty();
132 private boolean isBothSubInterfaceConsolidationDataNotEmpty(
133 PortTemplateConsolidationData object, PortTemplateConsolidationData other) {
134 return !object.subInterfaceConsolidationData.isEmpty() && !other.subInterfaceConsolidationData.isEmpty();
137 public boolean isSubInterfaceNodeTemplateIdParameter(String nodeTemplateType) {
138 List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
139 this.subInterfaceConsolidationData.get(nodeTemplateType);
140 return (Objects.nonNull(subInterfaceTemplateConsolidationDataList)
141 && subInterfaceTemplateConsolidationDataList.size() > 1);
144 private int calculateSize(List<SubInterfaceTemplateConsolidationData> subInterfaces) {
145 return subInterfaces == null ? 0 : subInterfaces.size();