2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 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.components.property;
23 import static org.apache.commons.collections.MapUtils.isNotEmpty;
25 import fj.data.Either;
26 import java.util.Arrays;
27 import java.util.List;
28 import org.apache.commons.lang3.tuple.Pair;
29 import org.openecomp.sdc.be.components.property.propertytopolicydeclarators.ComponentInstancePropertyToPolicyDeclarator;
30 import org.openecomp.sdc.be.components.property.propertytopolicydeclarators.ComponentPropertyToPolicyDeclarator;
31 import org.openecomp.sdc.be.model.Component;
32 import org.openecomp.sdc.be.model.ComponentInstInputsMap;
33 import org.openecomp.sdc.be.model.ComponentInstancePropInput;
34 import org.openecomp.sdc.be.model.InputDefinition;
35 import org.openecomp.sdc.be.model.PolicyDefinition;
36 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
37 import org.openecomp.sdc.common.log.wrappers.Logger;
39 @org.springframework.stereotype.Component
40 public class PropertyDeclarationOrchestrator {
42 private static final Logger log = Logger.getLogger(PropertyDeclarationOrchestrator.class);
43 private ComponentInstanceInputPropertyDeclarator componentInstanceInputPropertyDeclarator;
44 private ComponentInstancePropertyDeclarator componentInstancePropertyDeclarator;
45 private PolicyPropertyDeclarator policyPropertyDeclarator;
46 private GroupPropertyDeclarator groupPropertyDeclarator;
47 private ComponentPropertyDeclarator servicePropertyDeclarator;
48 private List<PropertyDeclarator> propertyDeclaratorsToInput;
49 private List<PropertyDeclarator> propertyDeclaratorsToPolicy;
50 private ComponentPropertyToPolicyDeclarator componentPropertyToPolicyDeclarator;
51 private ComponentInstancePropertyToPolicyDeclarator componentInstancePropertyToPolicyDeclarator;
53 public PropertyDeclarationOrchestrator(ComponentInstanceInputPropertyDeclarator componentInstanceInputPropertyDeclarator,
54 ComponentInstancePropertyDeclarator componentInstancePropertyDeclarator, PolicyPropertyDeclarator policyPropertyDeclarator,
55 GroupPropertyDeclarator groupPropertyDeclarator, ComponentPropertyDeclarator servicePropertyDeclarator,
56 ComponentPropertyToPolicyDeclarator componentPropertyToPolicyDeclarator,
57 ComponentInstancePropertyToPolicyDeclarator componentInstancePropertyToPolicyDeclarator) {
58 this.componentInstanceInputPropertyDeclarator = componentInstanceInputPropertyDeclarator;
59 this.componentInstancePropertyDeclarator = componentInstancePropertyDeclarator;
60 this.policyPropertyDeclarator = policyPropertyDeclarator;
61 this.groupPropertyDeclarator = groupPropertyDeclarator;
62 this.servicePropertyDeclarator = servicePropertyDeclarator;
63 this.componentPropertyToPolicyDeclarator = componentPropertyToPolicyDeclarator;
64 this.componentInstancePropertyToPolicyDeclarator = componentInstancePropertyToPolicyDeclarator;
65 propertyDeclaratorsToInput = Arrays.asList(componentInstanceInputPropertyDeclarator, componentInstancePropertyDeclarator, policyPropertyDeclarator, groupPropertyDeclarator, servicePropertyDeclarator);
66 propertyDeclaratorsToPolicy = Arrays.asList(componentPropertyToPolicyDeclarator, componentInstancePropertyToPolicyDeclarator);
69 public Either<List<InputDefinition>, StorageOperationStatus> declarePropertiesToInputs(Component component, ComponentInstInputsMap componentInstInputsMap) {
70 PropertyDeclarator propertyDeclarator = getPropertyDeclarator(componentInstInputsMap);
71 Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
72 return propertyDeclarator.declarePropertiesAsInputs(component, propsToDeclare.getLeft(), propsToDeclare.getRight());
75 public Either<List<PolicyDefinition>, StorageOperationStatus> declarePropertiesToPolicies(Component component, ComponentInstInputsMap componentInstInputsMap) {
76 PropertyDeclarator propertyDeclarator = getPropertyDeclarator(componentInstInputsMap);
77 Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
78 return propertyDeclarator.declarePropertiesAsPolicies(component, propsToDeclare.getLeft(), propsToDeclare.getRight());
84 * @param componentInstInputsMap
88 public Either<InputDefinition, StorageOperationStatus> declarePropertiesToListInput(Component component, ComponentInstInputsMap componentInstInputsMap, InputDefinition input) {
89 PropertyDeclarator propertyDeclarator = getPropertyDeclarator(componentInstInputsMap);
90 Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
91 log.debug("#declarePropertiesToInputs: componentId={}, propOwnerId={}", component.getUniqueId(), propsToDeclare.getLeft());
92 return propertyDeclarator.declarePropertiesAsListInput(component, propsToDeclare.getLeft(), propsToDeclare.getRight(), input);
95 public StorageOperationStatus unDeclarePropertiesAsInputs(Component component, InputDefinition inputToDelete) {
96 log.debug("#unDeclarePropertiesAsInputs - removing input declaration for input {} on component {}", inputToDelete.getName(), component.getUniqueId());
97 for (PropertyDeclarator propertyDeclarator : propertyDeclaratorsToInput) {
98 StorageOperationStatus storageOperationStatus = propertyDeclarator.unDeclarePropertiesAsInputs(component, inputToDelete);
99 if (StorageOperationStatus.OK != storageOperationStatus) {
100 log.debug("#unDeclarePropertiesAsInputs - failed to remove input declaration for input {} on component {}. reason {}", inputToDelete.getName(), component.getUniqueId(), storageOperationStatus);
101 return storageOperationStatus;
104 return StorageOperationStatus.OK;
108 * Un declare properties declared as list type input
111 * @param inputToDelete
114 public StorageOperationStatus unDeclarePropertiesAsListInputs(Component component, InputDefinition inputToDelete) {
115 log.debug("#unDeclarePropertiesAsListInputs - removing input declaration for input {} on component {}", inputToDelete.getName(), component.getUniqueId());
116 for (PropertyDeclarator propertyDeclarator : propertyDeclaratorsToInput) {
117 StorageOperationStatus storageOperationStatus = propertyDeclarator.unDeclarePropertiesAsListInputs(component, inputToDelete);
118 if (StorageOperationStatus.OK != storageOperationStatus) {
119 log.debug("#unDeclarePropertiesAsListInputs - failed to remove input declaration for input {} on component {}. reason {}", inputToDelete.getName(), component.getUniqueId(), storageOperationStatus);
120 return storageOperationStatus;
123 return StorageOperationStatus.OK;
128 * Get properties owner id
130 * @param componentInstInputsMap
133 public String getPropOwnerId(ComponentInstInputsMap componentInstInputsMap) {
134 Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
135 return propsToDeclare.getLeft();
138 public StorageOperationStatus unDeclarePropertiesAsPolicies(Component component, PolicyDefinition policyToDelete) {
139 log.debug("#unDeclarePropertiesAsInputs - removing policy declaration for input {} on component {}", policyToDelete
140 .getName(), component.getUniqueId());
141 for(PropertyDeclarator propertyDeclarator : propertyDeclaratorsToPolicy) {
142 StorageOperationStatus storageOperationStatus =
143 propertyDeclarator.unDeclarePropertiesAsPolicies(component, policyToDelete);
144 if (StorageOperationStatus.OK != storageOperationStatus) {
145 log.debug("#unDeclarePropertiesAsInputs - failed to remove policy declaration for policy {} on component {}. reason {}", policyToDelete
146 .getName(), component.getUniqueId(), storageOperationStatus);
147 return storageOperationStatus;
151 return StorageOperationStatus.OK;
155 private PropertyDeclarator getPropertyDeclarator(ComponentInstInputsMap componentInstInputsMap) {
156 if (isNotEmpty(componentInstInputsMap.getComponentInstanceInputsMap())) {
157 return componentInstanceInputPropertyDeclarator;
159 if (isNotEmpty(componentInstInputsMap.getComponentInstanceProperties())) {
160 return componentInstancePropertyDeclarator;
162 if (isNotEmpty(componentInstInputsMap.getPolicyProperties())) {
163 return policyPropertyDeclarator;
165 if (isNotEmpty(componentInstInputsMap.getGroupProperties())) {
166 return groupPropertyDeclarator;
168 if(isNotEmpty(componentInstInputsMap.getServiceProperties())) {
169 return servicePropertyDeclarator;
171 if(isNotEmpty(componentInstInputsMap.getComponentPropertiesToPolicies())) {
172 return componentPropertyToPolicyDeclarator;
174 if(isNotEmpty(componentInstInputsMap.getComponentInstancePropertiesToPolicies())) {
175 return componentInstancePropertyToPolicyDeclarator;
177 throw new IllegalStateException("there are no properties selected for declaration");