Fix for radio buttons
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / merge / property / ComponentInstancePropertiesMergeBL.java
1 package org.openecomp.sdc.be.components.merge.property;
2
3 import java.util.Collections;
4 import java.util.List;
5 import java.util.Map;
6
7 import org.openecomp.sdc.be.dao.api.ActionStatus;
8 import org.openecomp.sdc.be.impl.ComponentsUtils;
9 import org.openecomp.sdc.be.model.Component;
10 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
11 import org.openecomp.sdc.be.model.InputDefinition;
12 import org.openecomp.sdc.be.model.Resource;
13 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
14 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
15
16 import fj.data.Either;
17
18 @org.springframework.stereotype.Component
19 public class ComponentInstancePropertiesMergeBL {
20
21     @javax.annotation.Resource
22     private ToscaOperationFacade toscaOperationFacade;
23
24     @javax.annotation.Resource(name = "componentUtils")
25     private ComponentsUtils componentsUtils;
26
27     @javax.annotation.Resource
28     private DataDefinitionsValuesMergingBusinessLogic propertyValuesMergingBusinessLogic;
29
30     public ActionStatus mergeComponentInstancesProperties(Component oldComponent, Resource newResource) {
31         Map<String, List<ComponentInstanceProperty>> newInstProps = newResource.getComponentInstancesProperties();
32         if (newInstProps == null) {
33             return ActionStatus.OK;
34         }
35         newInstProps.forEach((instanceId, newProps) -> mergeOldInstancePropertiesValues(oldComponent, newResource, instanceId, newProps) );
36         return updateComponentInstancesProperties(newResource, newInstProps);
37     }
38
39
40     public ActionStatus mergeComponentInstanceProperties(List<ComponentInstanceProperty> oldInstProps, List<InputDefinition> oldInputs, Component newComponent, String instanceId) {
41         List<ComponentInstanceProperty> newInstProps = newComponent.safeGetComponentInstanceProperties(instanceId);
42         if (newInstProps == null) {
43             return ActionStatus.OK;
44         }
45         propertyValuesMergingBusinessLogic.mergeInstanceDataDefinitions(oldInstProps, oldInputs, newInstProps, newComponent.getInputs());
46         return updateComponentInstanceProperties(newComponent, instanceId, newInstProps);
47     }
48
49     private void mergeOldInstancePropertiesValues(Component oldComponent, Component newComponent, String instanceId, List<ComponentInstanceProperty> newProps) {
50         List<ComponentInstanceProperty> oldInstProperties = oldComponent == null ? Collections.emptyList() : oldComponent.safeGetComponentInstanceProperties(instanceId);
51         List<InputDefinition> oldInputs = oldComponent == null ? Collections.emptyList() : oldComponent.getInputs();
52         propertyValuesMergingBusinessLogic.mergeInstanceDataDefinitions(oldInstProperties, oldInputs, newProps, newComponent.getInputs());
53     }
54
55     private ActionStatus updateComponentInstancesProperties(Component newComponent, Map<String, List<ComponentInstanceProperty>> newInstProps) {
56         Either<Map<String, List<ComponentInstanceProperty>>, StorageOperationStatus> mapStorageOperationStatusEither = toscaOperationFacade.updateComponentInstancePropsToComponent(newInstProps, newComponent.getUniqueId());
57         if (mapStorageOperationStatusEither.isRight()) {
58             return componentsUtils.convertFromStorageResponse(mapStorageOperationStatusEither.right().value());
59         }
60         return ActionStatus.OK;
61     }
62
63     private ActionStatus updateComponentInstanceProperties(Component component, String instanceId, List<ComponentInstanceProperty> newInstProps) {
64         StorageOperationStatus storageOperationStatus = toscaOperationFacade.updateComponentInstanceProperties(component, instanceId, newInstProps);
65         if (storageOperationStatus != StorageOperationStatus.OK) {
66             return componentsUtils.convertFromStorageResponse(storageOperationStatus);
67         }
68         return ActionStatus.OK;
69     }
70
71
72
73 }