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 org.apache.commons.collections.CollectionUtils;
24 import org.apache.commons.collections.MapUtils;
25 import org.openecomp.sdc.be.components.impl.GroupTypeBusinessLogic;
26 import org.openecomp.sdc.be.components.impl.PolicyTypeBusinessLogic;
27 import org.openecomp.sdc.be.components.validation.PolicyUtils;
28 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
29 import org.openecomp.sdc.be.datatypes.components.ServiceMetadataDataDefinition;
30 import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition;
31 import org.openecomp.sdc.be.datatypes.enums.ComponentFieldsEnum;
32 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
33 import org.openecomp.sdc.be.model.CapabilityDefinition;
34 import org.openecomp.sdc.be.model.Component;
35 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
36 import org.openecomp.sdc.be.model.GroupDefinition;
37 import org.openecomp.sdc.be.model.PolicyDefinition;
38 import org.openecomp.sdc.be.model.Resource;
39 import org.openecomp.sdc.be.model.Service;
40 import org.openecomp.sdc.be.tosca.utils.NodeFilterConverter;
41 import org.openecomp.sdc.be.ui.model.UiComponentDataTransfer;
42 import org.openecomp.sdc.be.ui.model.UiComponentMetadata;
43 import org.openecomp.sdc.be.ui.model.UiResourceDataTransfer;
44 import org.openecomp.sdc.be.ui.model.UiResourceMetadata;
45 import org.openecomp.sdc.be.ui.model.UiServiceDataTransfer;
46 import org.openecomp.sdc.be.ui.model.UiServiceMetadata;
47 import org.openecomp.sdc.common.log.wrappers.Logger;
49 import java.util.ArrayList;
50 import java.util.Collection;
51 import java.util.HashMap;
52 import java.util.HashSet;
53 import java.util.List;
56 import java.util.stream.Collectors;
58 import static java.util.stream.Collectors.groupingBy;
59 import static java.util.stream.Collectors.toList;
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, PolicyTypeBusinessLogic policyTypeBusinessLogic) {
70 this.groupTypeBusinessLogic = groupTypeBusinessLogic;
71 this.policyTypeBusinessLogic = policyTypeBusinessLogic;
74 private void setUiTranferDataByFieldName(UiComponentDataTransfer dataTransfer, Component component, String fieldName) {
75 ComponentFieldsEnum field = ComponentFieldsEnum.findByValue(fieldName);
77 log.error(INVALID_INPUT_GIVEN_TO_DATA_CONVERTER, fieldName);
82 setInputs(dataTransfer, component);
84 case COMPONENT_INSTANCE_RELATION:
85 setComponentInstanceRelation(dataTransfer, component);
88 setGroups(dataTransfer, component);
90 case NON_EXCLUDED_GROUPS:
91 setNonExcludedGroups(dataTransfer, component);
93 case COMPONENT_INSTANCES:
94 setComponentInstances(dataTransfer, component);
96 case COMPONENT_INSTANCES_PROPERTIES:
97 setComponentInstanceProperties(dataTransfer, component);
100 setCapabilities(dataTransfer, component);
103 setPolicies(dataTransfer, component);
105 case NON_EXCLUDED_POLICIES:
106 setNonExcludedPolicies(dataTransfer, component);
109 setRequirements(dataTransfer, component);
111 case DEPLOYMENT_ARTIFACTS:
112 setDeploymentArtifacts(dataTransfer, component);
114 case TOSCA_ARTIFACTS:
115 setToscaArtifacts(dataTransfer, component);
118 setArtifacts(dataTransfer, component);
120 case COMPONENT_INSTANCES_ATTRIBUTES:
121 setComponentInstanceAttributes(dataTransfer, component);
123 case COMPONENT_INSTANCE_INPUTS:
124 setComponentInstanceInputs(dataTransfer, component);
127 setNodeFilter(dataTransfer, component);
129 case COMPONENT_INSTANCES_INTERFACES:
130 setComponentInstanceInterfaces(dataTransfer, component);
133 setProperties(dataTransfer, component);
136 setInterfaces(dataTransfer, component);
143 private void setNodeFilter(UiComponentDataTransfer dataTransfer, Component component) {
144 if(component.getNodeFilterComponents() == null) {
145 dataTransfer.setNodeFilter(null);
147 dataTransfer.setNodeFilter(component.getNodeFilterComponents());
151 private void setPolicies(UiComponentDataTransfer dataTransfer, Component component) {
152 Map<String, PolicyDefinition> policies = component.getPolicies();
153 Set<PolicyDefinition> policyDefinitions =
154 MapUtils.isEmpty(policies) ? new HashSet<>() : new HashSet<>(policies.values());
156 policyDefinitions.addAll(getDeclaredPolicies(component.getComponentInstancesProperties()));
158 dataTransfer.setPolicies(new ArrayList<>(policyDefinitions));
161 private Set<PolicyDefinition> getDeclaredPolicies(Map<String, List<ComponentInstanceProperty>> componentInstanceProperties) {
162 if(MapUtils.isEmpty(componentInstanceProperties)) {
163 return new HashSet<>();
166 Set<PolicyDefinition> declaredPolicies = new HashSet<>();
167 for(Map.Entry<String, List<ComponentInstanceProperty>> instancePropertyEntry : componentInstanceProperties.entrySet()) {
168 declaredPolicies.addAll(instancePropertyEntry.getValue().stream()
169 .filter(property -> CollectionUtils.isNotEmpty(property.getGetPolicyValues()))
170 .map(instanceProperty -> PolicyUtils.getDeclaredPolicyDefinition(instancePropertyEntry.getKey(), instanceProperty))
171 .collect(Collectors.toSet()));
174 return declaredPolicies;
178 private void setComponentInstanceRelation(UiComponentDataTransfer dataTransfer, Component component) {
179 if (component.getComponentInstancesRelations() == null) {
180 dataTransfer.setComponentInstancesRelations(new ArrayList<>());
182 dataTransfer.setComponentInstancesRelations(component.getComponentInstancesRelations());
186 private void setInputs(UiComponentDataTransfer dataTransfer, Component component) {
187 if (component.getInputs() == null) {
188 dataTransfer.setInputs(new ArrayList<>());
190 dataTransfer.setInputs(component.getInputs());
194 private void setComponentInstanceInputs(UiComponentDataTransfer dataTransfer, Component component) {
195 if (component.getComponentInstancesInputs() == null) {
196 dataTransfer.setComponentInstancesInputs(new HashMap<>());
198 dataTransfer.setComponentInstancesInputs(component.getComponentInstancesInputs());
201 private void setComponentInstanceAttributes(UiComponentDataTransfer dataTransfer, Component component) {
202 if (component.getComponentInstancesAttributes() == null) {
203 dataTransfer.setComponentInstancesAttributes(new HashMap<>());
205 dataTransfer.setComponentInstancesAttributes(component.getComponentInstancesAttributes());
208 private void setArtifacts(UiComponentDataTransfer dataTransfer, Component component) {
209 if (component.getArtifacts() == null) {
210 dataTransfer.setArtifacts(new HashMap<>());
212 dataTransfer.setArtifacts(component.getArtifacts());
215 private void setToscaArtifacts(UiComponentDataTransfer dataTransfer, Component component) {
216 if (component.getToscaArtifacts() == null) {
217 dataTransfer.setToscaArtifacts(new HashMap<>());
219 dataTransfer.setToscaArtifacts(component.getToscaArtifacts());
223 private void setDeploymentArtifacts(UiComponentDataTransfer dataTransfer, Component component) {
224 if (component.getDeploymentArtifacts() == null) {
225 dataTransfer.setDeploymentArtifacts(new HashMap<>());
227 dataTransfer.setDeploymentArtifacts(component.getDeploymentArtifacts());
231 private void setRequirements(UiComponentDataTransfer dataTransfer, Component component) {
232 if (component.getRequirements() == null) {
233 dataTransfer.setRequirements(new HashMap<>());
235 dataTransfer.setRequirements(component.getRequirements());
239 private void setCapabilities(UiComponentDataTransfer dataTransfer, Component component) {
240 if (component.getCapabilities() == null) {
241 dataTransfer.setCapabilities(new HashMap<>());
243 dataTransfer.setCapabilities(getFilteredCapabilities(component));
247 private Map<String,List<CapabilityDefinition>> getFilteredCapabilities(Component component) {
248 if(component.getComponentType() != ComponentTypeEnum.SERVICE){
249 return component.getCapabilities().values()
251 .flatMap(Collection::stream)
252 .filter(c -> c.getOwnerType() != CapabilityDataDefinition.OwnerType.GROUP)
253 .collect(groupingBy(CapabilityDefinition::getType, toList()));
255 return component.getCapabilities();
258 private void setComponentInstanceProperties(UiComponentDataTransfer dataTransfer, Component component) {
259 if (component.getComponentInstancesProperties() == null) {
260 dataTransfer.setComponentInstancesProperties(new HashMap<>());
262 dataTransfer.setComponentInstancesProperties(component.getComponentInstancesProperties());
266 private void setComponentInstances(UiComponentDataTransfer dataTransfer, Component component) {
267 if (component.getComponentInstances() == null) {
268 dataTransfer.setComponentInstances(new ArrayList<>());
270 dataTransfer.setComponentInstances(component.getComponentInstances());
274 private void setGroups(UiComponentDataTransfer dataTransfer, Component component) {
275 if (component.getGroups() == null) {
276 dataTransfer.setGroups(new ArrayList<>());
278 dataTransfer.setGroups(component.getGroups());
282 private void setProperties(UiComponentDataTransfer dataTransfer, Component component) {
283 if (component.getProperties() == null) {
284 dataTransfer.setProperties(new ArrayList<>());
286 dataTransfer.setProperties(component.getProperties());
290 private void setInterfaces(UiComponentDataTransfer dataTransfer, Component component) {
291 if (component.getInterfaces() == null) {
292 dataTransfer.setInterfaces(new HashMap<>());
294 dataTransfer.setInterfaces(component.getInterfaces());
298 private void setComponentInstanceInterfaces(UiComponentDataTransfer dataTransfer, Component component) {
299 if (component.getComponentInstancesInterfaces() == null) {
300 dataTransfer.setComponentInstancesInterfaces(new HashMap<>());
302 dataTransfer.setComponentInstancesInterfaces(component.getComponentInstancesInterfaces());
306 private void setNonExcludedGroups(UiComponentDataTransfer dataTransfer, Component component) {
307 List<GroupDefinition> groups = component.getGroups();
308 if (groups == null) {
309 dataTransfer.setGroups(new ArrayList<>());
311 Set<String> nonExcludedGroupTypes = groupTypeBusinessLogic.getExcludedGroupTypes(component.getActualComponentType());
312 List<GroupDefinition> nonExcludedGroups = groups.stream()
313 .filter(gd -> !nonExcludedGroupTypes.contains(gd.getType()))
315 dataTransfer.setGroups(nonExcludedGroups);
319 private void setNonExcludedPolicies(UiComponentDataTransfer dataTransfer, Component component) {
320 List<PolicyDefinition> policyDefinitions = component.resolvePoliciesList();
321 Set<String> nonExcludedPolicyTypes = policyTypeBusinessLogic.getExcludedPolicyTypes(component.getActualComponentType());
322 List<PolicyDefinition> nonExcludedPolicies = policyDefinitions.stream()
323 .filter(pd -> !nonExcludedPolicyTypes.contains(pd.getPolicyTypeName()))
325 dataTransfer.setPolicies(nonExcludedPolicies);
328 public UiComponentDataTransfer getUiDataTransferFromResourceByParams(Resource resource, List<String> paramsToReturn) {
329 UiResourceDataTransfer dataTransfer = new UiResourceDataTransfer();
331 for (String fieldName : paramsToReturn) {
333 ComponentFieldsEnum field = ComponentFieldsEnum.findByValue(fieldName);
335 log.error(INVALID_INPUT_GIVEN_TO_DATA_CONVERTER, fieldName);
340 setDerivedFrom(resource, dataTransfer);
344 setAttributes(resource, dataTransfer);
347 case ADDITIONAL_INFORMATION:
348 setAdditionalInfo(resource, dataTransfer);
351 UiResourceMetadata metadata = new UiResourceMetadata(resource.getCategories(), resource.getDerivedFrom(), (ResourceMetadataDataDefinition) resource.getComponentMetadataDefinition().getMetadataDataDefinition());
352 dataTransfer.setMetadata(metadata);
356 setUiTranferDataByFieldName(dataTransfer, resource, fieldName);
363 private void setDerivedFrom(Resource resource, UiResourceDataTransfer dataTransfer) {
364 if (resource.getDerivedFrom() == null) {
365 dataTransfer.setDerivedFrom(new ArrayList<>());
367 dataTransfer.setDerivedFrom(resource.getDerivedFrom());
371 private void setAttributes(Resource resource, UiResourceDataTransfer dataTransfer) {
372 if (resource.getAttributes() == null) {
373 dataTransfer.setAttributes(new ArrayList<>());
375 dataTransfer.setAttributes(resource.getAttributes());
379 private void setAdditionalInfo(Resource resource, UiResourceDataTransfer dataTransfer) {
380 if (resource.getAdditionalInformation() == null) {
381 dataTransfer.setAdditionalInformation(new ArrayList<>());
383 dataTransfer.setAdditionalInformation(resource.getAdditionalInformation());
387 public UiComponentDataTransfer getUiDataTransferFromServiceByParams(Service service, List<String> paramsToReturn) {
388 UiServiceDataTransfer dataTransfer = new UiServiceDataTransfer();
389 for (String fieldName : paramsToReturn) {
390 ComponentFieldsEnum field = ComponentFieldsEnum.findByValue(fieldName);
392 log.error(INVALID_INPUT_GIVEN_TO_DATA_CONVERTER, fieldName);
396 case SERVICE_API_ARTIFACTS:
397 setServiceApiArtifacts(service, dataTransfer);
399 case FORWARDING_PATHS:
400 setForwardingPaths(service, dataTransfer);
403 UiServiceMetadata metadata = new UiServiceMetadata(service.getCategories(), (ServiceMetadataDataDefinition) service.getComponentMetadataDefinition().getMetadataDataDefinition());
404 dataTransfer.setMetadata(metadata);
407 if(service.getNodeFilterComponents() == null) {
408 dataTransfer.setNodeFilterData(null);
410 NodeFilterConverter nodeFilterConverter = new NodeFilterConverter();
411 dataTransfer.setNodeFilterData(nodeFilterConverter.convertDataMapToUI(service.getNodeFilterComponents()));
416 setUiTranferDataByFieldName(dataTransfer, service, fieldName);
422 private void setServiceApiArtifacts(Service service, UiServiceDataTransfer dataTransfer) {
423 if (service.getServiceApiArtifacts() == null) {
424 dataTransfer.setServiceApiArtifacts(new org.openecomp.sdc.be.ui.model.SerializedHashMap<>());
426 dataTransfer.setServiceApiArtifacts(service.getServiceApiArtifacts());
430 private void setForwardingPaths(Service service, UiServiceDataTransfer dataTransfer) {
431 if (service.getForwardingPaths() == null) {
432 dataTransfer.setForwardingPaths(new org.openecomp.sdc.be.ui.model.SerializedHashMap<>());
434 dataTransfer.setForwardingPaths(service.getForwardingPaths());
438 public static UiComponentMetadata convertToUiComponentMetadata(Component component) {
440 UiComponentMetadata uiComponentMetadata = null;
441 switch (component.getComponentType()) {
443 Resource resource = (Resource) component;
444 uiComponentMetadata = new UiResourceMetadata(component.getCategories(), resource.getDerivedFrom(), (ResourceMetadataDataDefinition) resource.getComponentMetadataDefinition().getMetadataDataDefinition());
447 uiComponentMetadata = new UiServiceMetadata(component.getCategories(), (ServiceMetadataDataDefinition) component.getComponentMetadataDefinition().getMetadataDataDefinition());
452 return uiComponentMetadata;