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 portType;
41 private String networkRole;
43 public String getNetworkRole() {
47 public void setNetworkRole(String networkRole) {
48 this.networkRole = networkRole;
51 public String getPortType() {
55 public void setPortType(String portType) {
56 this.portType = portType;
59 public boolean isPortBoundToSubInterface() {
60 return !subInterfaceConsolidationData.isEmpty();
64 * Create Sub interface template consolidation data base on given parameters - if it doesn't exist yet.
66 * @param resource resource of sub Interface
67 * @param subInterfaceNodeTemplateId template id of sub interface
68 * @param parentPortNodeTemplateId node template id of port node to which sub interface is related
69 * @return sub interface template consolidation data entity
71 public SubInterfaceTemplateConsolidationData addSubInterfaceTemplateConsolidationData(
72 Resource resource, String subInterfaceNodeTemplateId, String parentPortNodeTemplateId) {
73 String subInterfaceType = createSubInterfaceType(resource);
74 List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
75 subInterfaceConsolidationData.get(subInterfaceType);
76 SubInterfaceTemplateConsolidationData consolidationData = null;
77 if (CollectionUtils.isNotEmpty(subInterfaceTemplateConsolidationDataList)) {
78 Optional<SubInterfaceTemplateConsolidationData> optionalConsolidationData =
79 subInterfaceTemplateConsolidationDataList.stream()
80 .filter(s -> s.getNodeTemplateId().equals(subInterfaceNodeTemplateId))
82 if (optionalConsolidationData.isPresent()) {
83 consolidationData = optionalConsolidationData.get();
87 if (Objects.isNull(consolidationData)) {
89 createSubInterfaceConsolidationData(subInterfaceNodeTemplateId, parentPortNodeTemplateId);
90 addSubInterfaceConsolidationData(subInterfaceType, consolidationData);
92 return consolidationData;
95 private String createSubInterfaceType(Resource resource) {
96 return ToscaNodeType.VLAN_SUB_INTERFACE_RESOURCE_TYPE_PREFIX
97 + FileUtils.getFileWithoutExtention(
98 HeatToToscaUtil.getSubInterfaceResourceType(resource));
101 private SubInterfaceTemplateConsolidationData createSubInterfaceConsolidationData(
102 String subInterfaceNodeTemplateId, String parentPortNodeTemplateId) {
103 SubInterfaceTemplateConsolidationData data = new SubInterfaceTemplateConsolidationData();
104 data.setNodeTemplateId(subInterfaceNodeTemplateId);
105 data.setParentPortNodeTemplateId(parentPortNodeTemplateId);
109 public void addSubInterfaceConsolidationData(String subPortType,
110 SubInterfaceTemplateConsolidationData
111 subInterfaceTemplateConsolidationData) {
112 this.subInterfaceConsolidationData.put(subPortType, subInterfaceTemplateConsolidationData);
115 public boolean hasSameSubInterfaceTypes(PortTemplateConsolidationData other) {
116 return other != null && this.subInterfaceConsolidationData.keySet().equals(
117 other.subInterfaceConsolidationData.keySet());
120 public void copyMappedInto(ListMultimap<String, SubInterfaceTemplateConsolidationData> subInterfaceTypeToEntity) {
121 subInterfaceTypeToEntity.putAll(this.subInterfaceConsolidationData);
124 public void copyFlatInto(List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList) {
125 subInterfaceTemplateConsolidationDataList.addAll(subInterfaceConsolidationData.values());
128 public boolean isNumberOfSubInterfacesPerTypeSimilar(PortTemplateConsolidationData other) {
129 return isBothSubInterfaceConsolidationDataEmpty(this, other)
130 || isBothSubInterfaceConsolidationDataNotEmpty(this, other)
131 && this.subInterfaceConsolidationData.keySet().stream().allMatch(
132 subInterfaceType -> calculateSize(other.subInterfaceConsolidationData.get(subInterfaceType))
133 == calculateSize(this.subInterfaceConsolidationData.get(subInterfaceType)));
137 private boolean isBothSubInterfaceConsolidationDataEmpty(
138 PortTemplateConsolidationData object, PortTemplateConsolidationData other) {
139 return object.subInterfaceConsolidationData.isEmpty() && other.subInterfaceConsolidationData.isEmpty();
142 private boolean isBothSubInterfaceConsolidationDataNotEmpty(
143 PortTemplateConsolidationData object, PortTemplateConsolidationData other) {
144 return !object.subInterfaceConsolidationData.isEmpty() && !other.subInterfaceConsolidationData.isEmpty();
147 public boolean isSubInterfaceNodeTemplateIdParameter(String nodeTemplateType) {
148 List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
149 this.subInterfaceConsolidationData.get(nodeTemplateType);
150 return (Objects.nonNull(subInterfaceTemplateConsolidationDataList)
151 && subInterfaceTemplateConsolidationDataList.size() > 1);
154 private int calculateSize(List<SubInterfaceTemplateConsolidationData> subInterfaces) {
155 return subInterfaces == null ? 0 : subInterfaces.size();