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.HashMap;
29 import java.util.HashSet;
30 import java.util.List;
33 import java.util.stream.Collectors;
34 import org.apache.commons.collections.CollectionUtils;
35 import org.apache.commons.collections.MapUtils;
36 import org.openecomp.sdc.be.components.impl.GroupTypeBusinessLogic;
37 import org.openecomp.sdc.be.components.impl.PolicyTypeBusinessLogic;
38 import org.openecomp.sdc.be.components.validation.PolicyUtils;
39 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
40 import org.openecomp.sdc.be.datatypes.components.ServiceMetadataDataDefinition;
41 import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition;
42 import org.openecomp.sdc.be.datatypes.enums.ComponentFieldsEnum;
43 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
44 import org.openecomp.sdc.be.model.CapabilityDefinition;
45 import org.openecomp.sdc.be.model.Component;
46 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
47 import org.openecomp.sdc.be.model.GroupDefinition;
48 import org.openecomp.sdc.be.model.PolicyDefinition;
49 import org.openecomp.sdc.be.model.Resource;
50 import org.openecomp.sdc.be.model.Service;
51 import org.openecomp.sdc.be.tosca.utils.NodeFilterConverter;
52 import org.openecomp.sdc.be.tosca.utils.SubstitutionFilterConverter;
53 import org.openecomp.sdc.be.ui.model.UiComponentDataTransfer;
54 import org.openecomp.sdc.be.ui.model.UiComponentMetadata;
55 import org.openecomp.sdc.be.ui.model.UiResourceDataTransfer;
56 import org.openecomp.sdc.be.ui.model.UiResourceMetadata;
57 import org.openecomp.sdc.be.ui.model.UiServiceDataTransfer;
58 import org.openecomp.sdc.be.ui.model.UiServiceMetadata;
59 import org.openecomp.sdc.common.log.wrappers.Logger;
61 @org.springframework.stereotype.Component("uiComponentDataConverter")
62 public class UiComponentDataConverter {
64 private static final Logger log = Logger.getLogger(UiComponentDataConverter.class);
65 public static final String INVALID_INPUT_GIVEN_TO_DATA_CONVERTER = "Invalid input given to data converter: {}";
66 private final GroupTypeBusinessLogic groupTypeBusinessLogic;
67 private final PolicyTypeBusinessLogic policyTypeBusinessLogic;
69 public UiComponentDataConverter(GroupTypeBusinessLogic groupTypeBusinessLogic,
70 PolicyTypeBusinessLogic policyTypeBusinessLogic) {
71 this.groupTypeBusinessLogic = groupTypeBusinessLogic;
72 this.policyTypeBusinessLogic = policyTypeBusinessLogic;
75 private void setUiTranferDataByFieldName(UiComponentDataTransfer dataTransfer, Component component,
77 ComponentFieldsEnum field = ComponentFieldsEnum.findByValue(fieldName);
79 log.error(INVALID_INPUT_GIVEN_TO_DATA_CONVERTER, fieldName);
84 setInputs(dataTransfer, component);
86 case COMPONENT_INSTANCE_RELATION:
87 setComponentInstanceRelation(dataTransfer, component);
90 setGroups(dataTransfer, component);
92 case NON_EXCLUDED_GROUPS:
93 setNonExcludedGroups(dataTransfer, component);
95 case COMPONENT_INSTANCES:
96 setComponentInstances(dataTransfer, component);
98 case COMPONENT_INSTANCES_PROPERTIES:
99 setComponentInstanceProperties(dataTransfer, component);
102 setCapabilities(dataTransfer, component);
105 setPolicies(dataTransfer, component);
107 case NON_EXCLUDED_POLICIES:
108 setNonExcludedPolicies(dataTransfer, component);
111 setRequirements(dataTransfer, component);
113 case DEPLOYMENT_ARTIFACTS:
114 setDeploymentArtifacts(dataTransfer, component);
116 case TOSCA_ARTIFACTS:
117 setToscaArtifacts(dataTransfer, component);
120 setArtifacts(dataTransfer, component);
122 case COMPONENT_INSTANCES_ATTRIBUTES:
123 setComponentInstanceAttributes(dataTransfer, component);
125 case COMPONENT_INSTANCE_INPUTS:
126 setComponentInstanceInputs(dataTransfer, component);
129 setNodeFilter(dataTransfer, component);
131 case SUBSTITUTION_FILTER:
132 setSubstitutionFilter(dataTransfer, component);
134 case COMPONENT_INSTANCES_INTERFACES:
135 setComponentInstanceInterfaces(dataTransfer, component);
138 setProperties(dataTransfer, component);
141 setInterfaces(dataTransfer, component);
148 private void setNodeFilter(UiComponentDataTransfer dataTransfer, Component component) {
149 if (component.getNodeFilterComponents() == null) {
150 dataTransfer.setNodeFilter(null);
152 dataTransfer.setNodeFilter(component.getNodeFilterComponents());
156 private void setSubstitutionFilter(final UiComponentDataTransfer dataTransfer,
157 final Component component) {
158 if (component.getSubstitutionFilterComponents() == null) {
159 dataTransfer.setSubstitutionFilter(null);
161 dataTransfer.setSubstitutionFilter(component.getSubstitutionFilterComponents());
165 private void setPolicies(UiComponentDataTransfer dataTransfer, Component component) {
166 Map<String, PolicyDefinition> policies = component.getPolicies();
167 Set<PolicyDefinition> policyDefinitions =
168 MapUtils.isEmpty(policies) ? new HashSet<>() : new HashSet<>(policies.values());
170 policyDefinitions.addAll(getDeclaredPolicies(component.getComponentInstancesProperties()));
172 dataTransfer.setPolicies(new ArrayList<>(policyDefinitions));
175 private Set<PolicyDefinition> getDeclaredPolicies(
176 Map<String, List<ComponentInstanceProperty>> componentInstanceProperties) {
177 if (MapUtils.isEmpty(componentInstanceProperties)) {
178 return new HashSet<>();
181 Set<PolicyDefinition> declaredPolicies = new HashSet<>();
182 for (Map.Entry<String, List<ComponentInstanceProperty>> instancePropertyEntry : componentInstanceProperties
184 declaredPolicies.addAll(instancePropertyEntry.getValue().stream()
185 .filter(property -> CollectionUtils.isNotEmpty(property.getGetPolicyValues()))
186 .map(instanceProperty -> PolicyUtils
187 .getDeclaredPolicyDefinition(instancePropertyEntry.getKey(), instanceProperty))
188 .collect(Collectors.toSet()));
191 return declaredPolicies;
195 private void setComponentInstanceRelation(UiComponentDataTransfer dataTransfer, Component component) {
196 if (component.getComponentInstancesRelations() == null) {
197 dataTransfer.setComponentInstancesRelations(new ArrayList<>());
199 dataTransfer.setComponentInstancesRelations(component.getComponentInstancesRelations());
203 private void setInputs(UiComponentDataTransfer dataTransfer, Component component) {
204 if (component.getInputs() == null) {
205 dataTransfer.setInputs(new ArrayList<>());
207 dataTransfer.setInputs(component.getInputs());
211 private void setComponentInstanceInputs(UiComponentDataTransfer dataTransfer, Component component) {
212 if (component.getComponentInstancesInputs() == null) {
213 dataTransfer.setComponentInstancesInputs(new HashMap<>());
215 dataTransfer.setComponentInstancesInputs(component.getComponentInstancesInputs());
219 private void setComponentInstanceAttributes(UiComponentDataTransfer dataTransfer, Component component) {
220 if (component.getComponentInstancesAttributes() == null) {
221 dataTransfer.setComponentInstancesAttributes(new HashMap<>());
223 dataTransfer.setComponentInstancesAttributes(component.getComponentInstancesAttributes());
227 private void setArtifacts(UiComponentDataTransfer dataTransfer, Component component) {
228 if (component.getArtifacts() == null) {
229 dataTransfer.setArtifacts(new HashMap<>());
231 dataTransfer.setArtifacts(component.getArtifacts());
235 private void setToscaArtifacts(UiComponentDataTransfer dataTransfer, Component component) {
236 if (component.getToscaArtifacts() == null) {
237 dataTransfer.setToscaArtifacts(new HashMap<>());
239 dataTransfer.setToscaArtifacts(component.getToscaArtifacts());
243 private void setDeploymentArtifacts(UiComponentDataTransfer dataTransfer, Component component) {
244 if (component.getDeploymentArtifacts() == null) {
245 dataTransfer.setDeploymentArtifacts(new HashMap<>());
247 dataTransfer.setDeploymentArtifacts(component.getDeploymentArtifacts());
251 private void setRequirements(UiComponentDataTransfer dataTransfer, Component component) {
252 if (component.getRequirements() == null) {
253 dataTransfer.setRequirements(new HashMap<>());
255 dataTransfer.setRequirements(component.getRequirements());
259 private void setCapabilities(UiComponentDataTransfer dataTransfer, Component component) {
260 if (component.getCapabilities() == null) {
261 dataTransfer.setCapabilities(new HashMap<>());
263 dataTransfer.setCapabilities(getFilteredCapabilities(component));
267 private Map<String, List<CapabilityDefinition>> getFilteredCapabilities(Component component) {
268 if (component.getComponentType() != ComponentTypeEnum.SERVICE) {
269 return component.getCapabilities().values()
271 .flatMap(Collection::stream)
272 .filter(c -> c.getOwnerType() != CapabilityDataDefinition.OwnerType.GROUP)
273 .collect(groupingBy(CapabilityDefinition::getType, toList()));
275 return component.getCapabilities();
278 private void setComponentInstanceProperties(UiComponentDataTransfer dataTransfer, Component component) {
279 if (component.getComponentInstancesProperties() == null) {
280 dataTransfer.setComponentInstancesProperties(new HashMap<>());
282 dataTransfer.setComponentInstancesProperties(component.getComponentInstancesProperties());
286 private void setComponentInstances(UiComponentDataTransfer dataTransfer, Component component) {
287 if (component.getComponentInstances() == null) {
288 dataTransfer.setComponentInstances(new ArrayList<>());
290 dataTransfer.setComponentInstances(component.getComponentInstances());
294 private void setGroups(UiComponentDataTransfer dataTransfer, Component component) {
295 if (component.getGroups() == null) {
296 dataTransfer.setGroups(new ArrayList<>());
298 dataTransfer.setGroups(component.getGroups());
302 private void setProperties(UiComponentDataTransfer dataTransfer, Component component) {
303 if (component.getProperties() == null) {
304 dataTransfer.setProperties(new ArrayList<>());
306 dataTransfer.setProperties(component.getProperties());
310 private void setInterfaces(UiComponentDataTransfer dataTransfer, Component component) {
311 if (component.getInterfaces() == null) {
312 dataTransfer.setInterfaces(new HashMap<>());
314 dataTransfer.setInterfaces(component.getInterfaces());
318 private void setComponentInstanceInterfaces(UiComponentDataTransfer dataTransfer, Component component) {
319 if (component.getComponentInstancesInterfaces() == null) {
320 dataTransfer.setComponentInstancesInterfaces(new HashMap<>());
322 dataTransfer.setComponentInstancesInterfaces(component.getComponentInstancesInterfaces());
326 private void setNonExcludedGroups(UiComponentDataTransfer dataTransfer, Component component) {
327 List<GroupDefinition> groups = component.getGroups();
328 if (groups == null) {
329 dataTransfer.setGroups(new ArrayList<>());
331 Set<String> nonExcludedGroupTypes = groupTypeBusinessLogic
332 .getExcludedGroupTypes(component.getActualComponentType());
333 List<GroupDefinition> nonExcludedGroups = groups.stream()
334 .filter(gd -> !nonExcludedGroupTypes.contains(gd.getType()))
336 dataTransfer.setGroups(nonExcludedGroups);
340 private void setNonExcludedPolicies(UiComponentDataTransfer dataTransfer, Component component) {
341 List<PolicyDefinition> policyDefinitions = component.resolvePoliciesList();
342 Set<String> nonExcludedPolicyTypes = policyTypeBusinessLogic
343 .getExcludedPolicyTypes(component.getActualComponentType());
344 List<PolicyDefinition> nonExcludedPolicies = policyDefinitions.stream()
345 .filter(pd -> !nonExcludedPolicyTypes.contains(pd.getPolicyTypeName()))
347 dataTransfer.setPolicies(nonExcludedPolicies);
350 public UiComponentDataTransfer getUiDataTransferFromResourceByParams(Resource resource,
351 List<String> paramsToReturn) {
352 UiResourceDataTransfer dataTransfer = new UiResourceDataTransfer();
354 for (String fieldName : paramsToReturn) {
356 ComponentFieldsEnum field = ComponentFieldsEnum.findByValue(fieldName);
358 log.error(INVALID_INPUT_GIVEN_TO_DATA_CONVERTER, fieldName);
363 setDerivedFrom(resource, dataTransfer);
367 setAttributes(resource, dataTransfer);
370 case ADDITIONAL_INFORMATION:
371 setAdditionalInfo(resource, dataTransfer);
374 UiResourceMetadata metadata = new UiResourceMetadata(resource.getCategories(),
375 resource.getDerivedFrom(),
376 (ResourceMetadataDataDefinition) resource.getComponentMetadataDefinition()
377 .getMetadataDataDefinition());
378 dataTransfer.setMetadata(metadata);
382 setUiTranferDataByFieldName(dataTransfer, resource, fieldName);
389 private void setDerivedFrom(Resource resource, UiResourceDataTransfer dataTransfer) {
390 if (resource.getDerivedFrom() == null) {
391 dataTransfer.setDerivedFrom(new ArrayList<>());
393 dataTransfer.setDerivedFrom(resource.getDerivedFrom());
397 private void setAttributes(Resource resource, UiResourceDataTransfer dataTransfer) {
398 if (resource.getAttributes() == null) {
399 dataTransfer.setAttributes(new ArrayList<>());
401 dataTransfer.setAttributes(resource.getAttributes());
405 private void setAdditionalInfo(Resource resource, UiResourceDataTransfer dataTransfer) {
406 if (resource.getAdditionalInformation() == null) {
407 dataTransfer.setAdditionalInformation(new ArrayList<>());
409 dataTransfer.setAdditionalInformation(resource.getAdditionalInformation());
413 public UiComponentDataTransfer getUiDataTransferFromServiceByParams(Service service, List<String> paramsToReturn) {
414 UiServiceDataTransfer dataTransfer = new UiServiceDataTransfer();
415 for (String fieldName : paramsToReturn) {
416 ComponentFieldsEnum field = ComponentFieldsEnum.findByValue(fieldName);
418 log.error(INVALID_INPUT_GIVEN_TO_DATA_CONVERTER, fieldName);
422 case SERVICE_API_ARTIFACTS:
423 setServiceApiArtifacts(service, dataTransfer);
425 case FORWARDING_PATHS:
426 setForwardingPaths(service, dataTransfer);
429 UiServiceMetadata metadata = new UiServiceMetadata(service.getCategories(),
430 (ServiceMetadataDataDefinition) service.getComponentMetadataDefinition()
431 .getMetadataDataDefinition());
432 dataTransfer.setMetadata(metadata);
435 if (service.getNodeFilterComponents() == null) {
436 dataTransfer.setNodeFilterforNode(null);
438 final NodeFilterConverter nodeFilterConverter = new NodeFilterConverter();
439 dataTransfer.setNodeFilterforNode(
440 nodeFilterConverter.convertDataMapToUI(service.getNodeFilterComponents()));
443 case SUBSTITUTION_FILTER:
444 if (service.getSubstitutionFilterComponents() == null) {
445 dataTransfer.setSubstitutionFilterForTopologyTemplate(null);
447 final SubstitutionFilterConverter substitutionFilterConverter = new SubstitutionFilterConverter();
448 dataTransfer.setSubstitutionFilterForTopologyTemplate(substitutionFilterConverter
449 .convertDataMapToUI(service.getSubstitutionFilterComponents()));
453 setUiTranferDataByFieldName(dataTransfer, service, fieldName);
459 private void setServiceApiArtifacts(Service service, UiServiceDataTransfer dataTransfer) {
460 if (service.getServiceApiArtifacts() == null) {
461 dataTransfer.setServiceApiArtifacts(new org.openecomp.sdc.be.ui.model.SerializedHashMap<>());
463 dataTransfer.setServiceApiArtifacts(service.getServiceApiArtifacts());
467 private void setForwardingPaths(Service service, UiServiceDataTransfer dataTransfer) {
468 if (service.getForwardingPaths() == null) {
469 dataTransfer.setForwardingPaths(new org.openecomp.sdc.be.ui.model.SerializedHashMap<>());
471 dataTransfer.setForwardingPaths(service.getForwardingPaths());
475 public static UiComponentMetadata convertToUiComponentMetadata(Component component) {
477 UiComponentMetadata uiComponentMetadata = null;
478 switch (component.getComponentType()) {
480 Resource resource = (Resource) component;
481 uiComponentMetadata = new UiResourceMetadata(component.getCategories(), resource.getDerivedFrom(),
482 (ResourceMetadataDataDefinition) resource.getComponentMetadataDefinition()
483 .getMetadataDataDefinition());
486 uiComponentMetadata = new UiServiceMetadata(component.getCategories(),
487 (ServiceMetadataDataDefinition) component.getComponentMetadataDefinition()
488 .getMetadataDataDefinition());
493 return uiComponentMetadata;