2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.datamodel.utils;
23 import static java.util.stream.Collectors.groupingBy;
24 import static java.util.stream.Collectors.toList;
26 import java.util.ArrayList;
27 import java.util.Collection;
28 import java.util.Collections;
29 import java.util.HashMap;
30 import java.util.HashSet;
31 import java.util.List;
34 import java.util.stream.Collectors;
35 import org.apache.commons.collections.CollectionUtils;
36 import org.apache.commons.collections.MapUtils;
37 import org.openecomp.sdc.be.components.impl.GroupTypeBusinessLogic;
38 import org.openecomp.sdc.be.components.impl.PolicyTypeBusinessLogic;
39 import org.openecomp.sdc.be.components.validation.PolicyUtils;
40 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
41 import org.openecomp.sdc.be.datatypes.components.ServiceMetadataDataDefinition;
42 import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition;
43 import org.openecomp.sdc.be.datatypes.enums.ComponentFieldsEnum;
44 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
45 import org.openecomp.sdc.be.model.CapabilityDefinition;
46 import org.openecomp.sdc.be.model.Component;
47 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
48 import org.openecomp.sdc.be.model.GroupDefinition;
49 import org.openecomp.sdc.be.model.PolicyDefinition;
50 import org.openecomp.sdc.be.model.Resource;
51 import org.openecomp.sdc.be.model.Service;
52 import org.openecomp.sdc.be.tosca.utils.NodeFilterConverter;
53 import org.openecomp.sdc.be.tosca.utils.SubstitutionFilterConverter;
54 import org.openecomp.sdc.be.ui.model.UINodeFilter;
55 import org.openecomp.sdc.be.ui.model.UiComponentDataTransfer;
56 import org.openecomp.sdc.be.ui.model.UiComponentMetadata;
57 import org.openecomp.sdc.be.ui.model.UiResourceDataTransfer;
58 import org.openecomp.sdc.be.ui.model.UiResourceMetadata;
59 import org.openecomp.sdc.be.ui.model.UiServiceDataTransfer;
60 import org.openecomp.sdc.be.ui.model.UiServiceMetadata;
61 import org.openecomp.sdc.common.log.wrappers.Logger;
63 @org.springframework.stereotype.Component("uiComponentDataConverter")
64 public class UiComponentDataConverter {
66 private static final Logger log = Logger.getLogger(UiComponentDataConverter.class);
67 public static final String INVALID_INPUT_GIVEN_TO_DATA_CONVERTER = "Invalid input given to data converter: {}";
68 private final GroupTypeBusinessLogic groupTypeBusinessLogic;
69 private final PolicyTypeBusinessLogic policyTypeBusinessLogic;
71 public UiComponentDataConverter(GroupTypeBusinessLogic groupTypeBusinessLogic,
72 PolicyTypeBusinessLogic policyTypeBusinessLogic) {
73 this.groupTypeBusinessLogic = groupTypeBusinessLogic;
74 this.policyTypeBusinessLogic = policyTypeBusinessLogic;
77 private void setUiTranferDataByFieldName(UiComponentDataTransfer dataTransfer, Component component,
79 ComponentFieldsEnum field = ComponentFieldsEnum.findByValue(fieldName);
81 log.error(INVALID_INPUT_GIVEN_TO_DATA_CONVERTER, fieldName);
86 setInputs(dataTransfer, component);
89 setOutputs(dataTransfer, component);
91 case COMPONENT_INSTANCE_RELATION:
92 setComponentInstanceRelation(dataTransfer, component);
95 setGroups(dataTransfer, component);
97 case NON_EXCLUDED_GROUPS:
98 setNonExcludedGroups(dataTransfer, component);
100 case COMPONENT_INSTANCES:
101 setComponentInstances(dataTransfer, component);
103 case COMPONENT_INSTANCES_PROPERTIES:
104 setComponentInstanceProperties(dataTransfer, component);
107 setCapabilities(dataTransfer, component);
110 setPolicies(dataTransfer, component);
112 case NON_EXCLUDED_POLICIES:
113 setNonExcludedPolicies(dataTransfer, component);
116 setRequirements(dataTransfer, component);
118 case DEPLOYMENT_ARTIFACTS:
119 setDeploymentArtifacts(dataTransfer, component);
121 case TOSCA_ARTIFACTS:
122 setToscaArtifacts(dataTransfer, component);
125 setArtifacts(dataTransfer, component);
127 case COMPONENT_INSTANCES_ATTRIBUTES:
128 setComponentInstanceAttributes(dataTransfer, component);
130 case COMPONENT_INSTANCE_INPUTS:
131 setComponentInstanceInputs(dataTransfer, component);
134 setNodeFilter(dataTransfer, component);
136 case SUBSTITUTION_FILTER:
137 setSubstitutionFilter(dataTransfer, component);
139 case COMPONENT_INSTANCES_INTERFACES:
140 setComponentInstanceInterfaces(dataTransfer, component);
143 setProperties(dataTransfer, component);
146 setAttributes(dataTransfer, component);
149 setInterfaces(dataTransfer, component);
156 private void setNodeFilter(UiComponentDataTransfer dataTransfer, Component component) {
157 if (component.getNodeFilterComponents() == null) {
158 dataTransfer.setNodeFilter(null);
160 dataTransfer.setNodeFilter(component.getNodeFilterComponents());
164 private void setSubstitutionFilter(final UiComponentDataTransfer dataTransfer,
165 final Component component) {
166 if (component.getSubstitutionFilterComponents() == null) {
167 dataTransfer.setSubstitutionFilter(null);
169 dataTransfer.setSubstitutionFilter(component.getSubstitutionFilterComponents());
173 private void setPolicies(UiComponentDataTransfer dataTransfer, Component component) {
174 Map<String, PolicyDefinition> policies = component.getPolicies();
175 Set<PolicyDefinition> policyDefinitions =
176 MapUtils.isEmpty(policies) ? new HashSet<>() : new HashSet<>(policies.values());
178 policyDefinitions.addAll(getDeclaredPolicies(component.getComponentInstancesProperties()));
180 dataTransfer.setPolicies(new ArrayList<>(policyDefinitions));
183 private Set<PolicyDefinition> getDeclaredPolicies(
184 Map<String, List<ComponentInstanceProperty>> componentInstanceProperties) {
185 if (MapUtils.isEmpty(componentInstanceProperties)) {
186 return new HashSet<>();
189 Set<PolicyDefinition> declaredPolicies = new HashSet<>();
190 for (Map.Entry<String, List<ComponentInstanceProperty>> instancePropertyEntry : componentInstanceProperties
192 declaredPolicies.addAll(instancePropertyEntry.getValue().stream()
193 .filter(property -> CollectionUtils.isNotEmpty(property.getGetPolicyValues()))
194 .map(instanceProperty -> PolicyUtils
195 .getDeclaredPolicyDefinition(instancePropertyEntry.getKey(), instanceProperty))
196 .collect(Collectors.toSet()));
199 return declaredPolicies;
203 private void setComponentInstanceRelation(UiComponentDataTransfer dataTransfer, Component component) {
204 if (component.getComponentInstancesRelations() == null) {
205 dataTransfer.setComponentInstancesRelations(new ArrayList<>());
207 dataTransfer.setComponentInstancesRelations(component.getComponentInstancesRelations());
211 private void setInputs(UiComponentDataTransfer dataTransfer, Component component) {
212 if (component.getInputs() == null) {
213 dataTransfer.setInputs(new ArrayList<>());
215 dataTransfer.setInputs(component.getInputs());
219 private void setOutputs(final UiComponentDataTransfer dataTransfer, final Component component) {
220 dataTransfer.setOutputs(component.getOutputs() == null ? Collections.emptyList() : component.getOutputs());
223 private void setComponentInstanceInputs(UiComponentDataTransfer dataTransfer, Component component) {
224 if (component.getComponentInstancesInputs() == null) {
225 dataTransfer.setComponentInstancesInputs(new HashMap<>());
227 dataTransfer.setComponentInstancesInputs(component.getComponentInstancesInputs());
231 private void setComponentInstanceAttributes(UiComponentDataTransfer dataTransfer, Component component) {
232 if (component.getComponentInstancesAttributes() == null) {
233 dataTransfer.setComponentInstancesAttributes(new HashMap<>());
235 dataTransfer.setComponentInstancesAttributes(component.getComponentInstancesAttributes());
239 private void setArtifacts(UiComponentDataTransfer dataTransfer, Component component) {
240 if (component.getArtifacts() == null) {
241 dataTransfer.setArtifacts(new HashMap<>());
243 dataTransfer.setArtifacts(component.getArtifacts());
247 private void setToscaArtifacts(UiComponentDataTransfer dataTransfer, Component component) {
248 if (component.getToscaArtifacts() == null) {
249 dataTransfer.setToscaArtifacts(new HashMap<>());
251 dataTransfer.setToscaArtifacts(component.getToscaArtifacts());
255 private void setDeploymentArtifacts(UiComponentDataTransfer dataTransfer, Component component) {
256 if (component.getDeploymentArtifacts() == null) {
257 dataTransfer.setDeploymentArtifacts(new HashMap<>());
259 dataTransfer.setDeploymentArtifacts(component.getDeploymentArtifacts());
263 private void setRequirements(UiComponentDataTransfer dataTransfer, Component component) {
264 if (component.getRequirements() == null) {
265 dataTransfer.setRequirements(new HashMap<>());
267 dataTransfer.setRequirements(component.getRequirements());
271 private void setCapabilities(UiComponentDataTransfer dataTransfer, Component component) {
272 if (component.getCapabilities() == null) {
273 dataTransfer.setCapabilities(new HashMap<>());
275 dataTransfer.setCapabilities(getFilteredCapabilities(component));
279 private Map<String, List<CapabilityDefinition>> getFilteredCapabilities(Component component) {
280 if (component.getComponentType() != ComponentTypeEnum.SERVICE) {
281 return component.getCapabilities().values()
283 .flatMap(Collection::stream)
284 .filter(c -> c.getOwnerType() != CapabilityDataDefinition.OwnerType.GROUP)
285 .collect(groupingBy(CapabilityDefinition::getType, toList()));
287 return component.getCapabilities();
290 private void setComponentInstanceProperties(UiComponentDataTransfer dataTransfer, Component component) {
291 if (component.getComponentInstancesProperties() == null) {
292 dataTransfer.setComponentInstancesProperties(new HashMap<>());
294 dataTransfer.setComponentInstancesProperties(component.getComponentInstancesProperties());
298 private void setComponentInstances(UiComponentDataTransfer dataTransfer, Component component) {
299 if (component.getComponentInstances() == null) {
300 dataTransfer.setComponentInstances(new ArrayList<>());
302 dataTransfer.setComponentInstances(component.getComponentInstances());
306 private void setGroups(UiComponentDataTransfer dataTransfer, Component component) {
307 if (component.getGroups() == null) {
308 dataTransfer.setGroups(new ArrayList<>());
310 dataTransfer.setGroups(component.getGroups());
314 private void setProperties(UiComponentDataTransfer dataTransfer, Component component) {
315 if (component.getProperties() == null) {
316 dataTransfer.setProperties(new ArrayList<>());
318 dataTransfer.setProperties(component.getProperties());
322 private void setAttributes(final UiComponentDataTransfer dataTransfer, final Component component) {
323 if (component.getAttributes() == null) {
324 dataTransfer.setAttributes(new ArrayList<>());
326 dataTransfer.setAttributes(component.getAttributes());
330 private void setInterfaces(UiComponentDataTransfer dataTransfer, Component component) {
331 if (component.getInterfaces() == null) {
332 dataTransfer.setInterfaces(new HashMap<>());
334 dataTransfer.setInterfaces(component.getInterfaces());
338 private void setComponentInstanceInterfaces(UiComponentDataTransfer dataTransfer, Component component) {
339 if (component.getComponentInstancesInterfaces() == null) {
340 dataTransfer.setComponentInstancesInterfaces(new HashMap<>());
342 dataTransfer.setComponentInstancesInterfaces(component.getComponentInstancesInterfaces());
346 private void setNonExcludedGroups(UiComponentDataTransfer dataTransfer, Component component) {
347 List<GroupDefinition> groups = component.getGroups();
348 if (groups == null) {
349 dataTransfer.setGroups(new ArrayList<>());
351 Set<String> nonExcludedGroupTypes = groupTypeBusinessLogic
352 .getExcludedGroupTypes(component.getActualComponentType());
353 List<GroupDefinition> nonExcludedGroups = groups.stream()
354 .filter(gd -> !nonExcludedGroupTypes.contains(gd.getType()))
356 dataTransfer.setGroups(nonExcludedGroups);
360 private void setNonExcludedPolicies(UiComponentDataTransfer dataTransfer, Component component) {
361 List<PolicyDefinition> policyDefinitions = component.resolvePoliciesList();
362 Set<String> nonExcludedPolicyTypes = policyTypeBusinessLogic
363 .getExcludedPolicyTypes(component.getActualComponentType());
364 List<PolicyDefinition> nonExcludedPolicies = policyDefinitions.stream()
365 .filter(pd -> !nonExcludedPolicyTypes.contains(pd.getPolicyTypeName()))
367 dataTransfer.setPolicies(nonExcludedPolicies);
370 public UiComponentDataTransfer getUiDataTransferFromResourceByParams(Resource resource,
371 List<String> paramsToReturn) {
372 UiResourceDataTransfer dataTransfer = new UiResourceDataTransfer();
374 for (String fieldName : paramsToReturn) {
376 ComponentFieldsEnum field = ComponentFieldsEnum.findByValue(fieldName);
378 log.error(INVALID_INPUT_GIVEN_TO_DATA_CONVERTER, fieldName);
383 setDerivedFrom(resource, dataTransfer);
385 case ADDITIONAL_INFORMATION:
386 setAdditionalInfo(resource, dataTransfer);
389 UiResourceMetadata metadata = new UiResourceMetadata(resource.getCategories(),
390 resource.getDerivedFrom(),
391 (ResourceMetadataDataDefinition) resource.getComponentMetadataDefinition()
392 .getMetadataDataDefinition());
393 dataTransfer.setMetadata(metadata);
395 case SUBSTITUTION_FILTER:
396 if (resource.getSubstitutionFilter() == null) {
397 dataTransfer.setSubstitutionFilterForTopologyTemplate(null);
399 final SubstitutionFilterConverter substitutionFilterConverter = new SubstitutionFilterConverter();
400 final Map<String, UINodeFilter> filterUiMap = new HashMap<>();
401 filterUiMap.put(resource.getUniqueId(),
402 substitutionFilterConverter.convertToUi(resource.getSubstitutionFilter()));
403 dataTransfer.setSubstitutionFilterForTopologyTemplate(filterUiMap);
408 if (resource.getNodeFilterComponents() == null) {
409 dataTransfer.setNodeFilterforNode(null);
411 final NodeFilterConverter nodeFilterConverter = new NodeFilterConverter();
412 dataTransfer.setNodeFilterforNode(
413 nodeFilterConverter.convertDataMapToUI(resource.getNodeFilterComponents()));
418 setUiTranferDataByFieldName(dataTransfer, resource, fieldName);
425 private void setDerivedFrom(Resource resource, UiResourceDataTransfer dataTransfer) {
426 if (resource.getDerivedFrom() == null) {
427 dataTransfer.setDerivedFrom(new ArrayList<>());
429 dataTransfer.setDerivedFrom(resource.getDerivedFrom());
433 private void setAdditionalInfo(Resource resource, UiResourceDataTransfer dataTransfer) {
434 if (resource.getAdditionalInformation() == null) {
435 dataTransfer.setAdditionalInformation(new ArrayList<>());
437 dataTransfer.setAdditionalInformation(resource.getAdditionalInformation());
441 public UiComponentDataTransfer getUiDataTransferFromServiceByParams(Service service, List<String> paramsToReturn) {
442 UiServiceDataTransfer dataTransfer = new UiServiceDataTransfer();
443 for (String fieldName : paramsToReturn) {
444 ComponentFieldsEnum field = ComponentFieldsEnum.findByValue(fieldName);
446 log.error(INVALID_INPUT_GIVEN_TO_DATA_CONVERTER, fieldName);
450 case SERVICE_API_ARTIFACTS:
451 setServiceApiArtifacts(service, dataTransfer);
453 case FORWARDING_PATHS:
454 setForwardingPaths(service, dataTransfer);
457 UiServiceMetadata metadata = new UiServiceMetadata(service.getCategories(),
458 (ServiceMetadataDataDefinition) service.getComponentMetadataDefinition()
459 .getMetadataDataDefinition());
460 dataTransfer.setMetadata(metadata);
463 if (service.getNodeFilterComponents() == null) {
464 dataTransfer.setNodeFilterforNode(null);
466 final NodeFilterConverter nodeFilterConverter = new NodeFilterConverter();
467 dataTransfer.setNodeFilterforNode(
468 nodeFilterConverter.convertDataMapToUI(service.getNodeFilterComponents()));
471 case SUBSTITUTION_FILTER:
472 if (service.getSubstitutionFilter() == null) {
473 dataTransfer.setSubstitutionFilterForTopologyTemplate(null);
475 final SubstitutionFilterConverter substitutionFilterConverter = new SubstitutionFilterConverter();
476 final Map<String, UINodeFilter> filterUiMap = new HashMap<>();
477 filterUiMap.put(service.getUniqueId(),
478 substitutionFilterConverter.convertToUi(service.getSubstitutionFilter()));
479 dataTransfer.setSubstitutionFilterForTopologyTemplate(filterUiMap);
483 setUiTranferDataByFieldName(dataTransfer, service, fieldName);
489 private void setServiceApiArtifacts(Service service, UiServiceDataTransfer dataTransfer) {
490 if (service.getServiceApiArtifacts() == null) {
491 dataTransfer.setServiceApiArtifacts(new org.openecomp.sdc.be.ui.model.SerializedHashMap<>());
493 dataTransfer.setServiceApiArtifacts(service.getServiceApiArtifacts());
497 private void setForwardingPaths(Service service, UiServiceDataTransfer dataTransfer) {
498 if (service.getForwardingPaths() == null) {
499 dataTransfer.setForwardingPaths(new org.openecomp.sdc.be.ui.model.SerializedHashMap<>());
501 dataTransfer.setForwardingPaths(service.getForwardingPaths());
505 public static UiComponentMetadata convertToUiComponentMetadata(Component component) {
507 UiComponentMetadata uiComponentMetadata = null;
508 switch (component.getComponentType()) {
510 Resource resource = (Resource) component;
511 uiComponentMetadata = new UiResourceMetadata(component.getCategories(), resource.getDerivedFrom(),
512 (ResourceMetadataDataDefinition) resource.getComponentMetadataDefinition()
513 .getMetadataDataDefinition());
516 uiComponentMetadata = new UiServiceMetadata(component.getCategories(),
517 (ServiceMetadataDataDefinition) component.getComponentMetadataDefinition()
518 .getMetadataDataDefinition());
523 return uiComponentMetadata;