Change to enable SDC list type input
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / property / propertytopolicydeclarators / ComponentInstancePropertyToPolicyDeclarator.java
1 package org.openecomp.sdc.be.components.property.propertytopolicydeclarators;
2
3 import fj.data.Either;
4 import java.util.Collections;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.Optional;
8 import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
9 import org.openecomp.sdc.be.components.impl.PropertyBusinessLogic;
10 import org.openecomp.sdc.be.components.property.DefaultPropertyDeclarator;
11 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
12 import org.openecomp.sdc.be.impl.ComponentsUtils;
13 import org.openecomp.sdc.be.model.Component;
14 import org.openecomp.sdc.be.model.ComponentInstance;
15 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
16 import org.openecomp.sdc.be.model.InputDefinition;
17 import org.openecomp.sdc.be.model.PolicyDefinition;
18 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
19 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
20 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
21
22 @org.springframework.stereotype.Component
23 public class ComponentInstancePropertyToPolicyDeclarator extends
24         DefaultPropertyDeclarator<ComponentInstance, ComponentInstanceProperty> {
25
26     private ToscaOperationFacade toscaOperationFacade;
27     PropertyBusinessLogic propertyBl;
28     private ComponentInstanceBusinessLogic componentInstanceBl;
29
30     public ComponentInstancePropertyToPolicyDeclarator(ComponentsUtils componentsUtils,
31             PropertyOperation propertyOperation, ToscaOperationFacade toscaOperationFacade,
32             PropertyBusinessLogic propertyBl, ComponentInstanceBusinessLogic componentInstanceBl) {
33         super(componentsUtils, propertyOperation);
34         this.toscaOperationFacade = toscaOperationFacade;
35         this.propertyBl = propertyBl;
36         this.componentInstanceBl = componentInstanceBl;
37     }
38
39     @Override
40     protected ComponentInstanceProperty createDeclaredProperty(PropertyDataDefinition prop) {
41         return new ComponentInstanceProperty(prop);
42     }
43
44     @Override
45     protected Either<?, StorageOperationStatus> updatePropertiesValues(Component component, String componentInstanceId,
46             List<ComponentInstanceProperty> properties) {
47         Map<String, List<ComponentInstanceProperty>>
48                 instProperties = Collections.singletonMap(componentInstanceId, properties);
49         return toscaOperationFacade.addComponentInstancePropertiesToComponent(component, instProperties);
50     }
51
52     @Override
53     protected Optional<ComponentInstance> resolvePropertiesOwner(Component component, String componentInstanceId) {
54         return component.getComponentInstanceById(componentInstanceId);
55     }
56
57     @Override
58     protected void addPropertiesListToInput(ComponentInstanceProperty declaredProp, InputDefinition input) {
59         return;
60     }
61
62     @Override
63     public StorageOperationStatus unDeclarePropertiesAsInputs(Component component, InputDefinition input) {
64         return StorageOperationStatus.OK;
65     }
66
67     @Override
68     public StorageOperationStatus unDeclarePropertiesAsListInputs(Component component, InputDefinition input) {
69         return StorageOperationStatus.OK;
70     }
71
72     @Override
73     public StorageOperationStatus unDeclarePropertiesAsPolicies(Component component, PolicyDefinition policy) {
74
75         Optional<ComponentInstanceProperty> propertyCandidate =
76                 componentInstanceBl.getComponentInstancePropertyByPolicyId(component, policy);
77
78
79         if(propertyCandidate.isPresent()) {
80             return toscaOperationFacade
81                            .updateComponentInstanceProperty(component, policy.getInstanceUniqueId(), propertyCandidate.get());
82         }
83
84         return StorageOperationStatus.OK;
85     }
86 }