Catalog alignment
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / utils / ComponentBuilder.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdc.be.components.utils;
22
23 import org.openecomp.sdc.be.dao.utils.MapUtil;
24 import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
25 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
26 import org.openecomp.sdc.be.model.Component;
27 import org.openecomp.sdc.be.model.ComponentInstance;
28 import org.openecomp.sdc.be.model.ComponentInstanceInput;
29 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
30 import org.openecomp.sdc.be.model.GroupDefinition;
31 import org.openecomp.sdc.be.model.InputDefinition;
32 import org.openecomp.sdc.be.model.LifecycleStateEnum;
33 import org.openecomp.sdc.be.model.PolicyDefinition;
34 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
35
36 import java.util.ArrayList;
37 import java.util.HashMap;
38 import java.util.List;
39
40 public abstract class ComponentBuilder<T extends Component, B extends ComponentBuilder<T, B>> {
41
42     private T component;
43
44     protected abstract T component();
45
46     protected abstract ComponentBuilder<T, B> self();
47
48     public ComponentBuilder() {
49         this.component = component();
50     }
51
52     public ComponentBuilder(T component) {
53         this.component = component;
54     }
55
56     public ComponentBuilder<T, B> setUniqueId(String id) {
57         component.setUniqueId(id);
58         return self();
59     }
60
61     public ComponentBuilder<T, B> setLifeCycleState(LifecycleStateEnum lifeCycleState) {
62         component.setLifecycleState(lifeCycleState);
63         return self();
64     }
65
66     public ComponentBuilder<T, B> setLastUpdaterUserId(String lastUpdater) {
67         component.setLastUpdaterUserId(lastUpdater);
68         return self();
69     }
70
71     public ComponentBuilder<T, B> setInvariantUUid(String invariantUUid) {
72         component.setInvariantUUID(invariantUUid);
73         return self();
74     }
75
76     public ComponentBuilder<T, B> setName(String name) {
77         component.setName(name);
78         return self();
79     }
80
81     public ComponentBuilder<T, B> setComponentType(ComponentTypeEnum type) {
82         component.setComponentType(type);
83         return self();
84     }
85
86     public ComponentBuilder<T, B> setSystemName(String systemName) {
87         component.setSystemName(systemName);
88         return self();
89     }
90
91     public ComponentBuilder<T, B> addComponentInstance(String instanceName) {
92         ComponentInstance instance = new ComponentInstanceBuilder()
93                 .setUniqueId(instanceName)
94                 .setName(instanceName)
95                 .build();
96         return addComponentInstance(instance);
97     }
98     
99     public ComponentBuilder<T, B> addComponentInstance(String instanceName, String uniqueId) {
100         ComponentInstance instance = new ComponentInstanceBuilder()
101                 .setUniqueId(uniqueId)
102                 .setName(instanceName)
103                 .build();
104         return addComponentInstance(instance);
105     }
106
107     public ComponentBuilder<T, B> addComponentInstance(ComponentInstance componentInstance) {
108         initInstances();
109         component.getComponentInstances().add(componentInstance);
110         return self();
111     }
112
113     private void initInstances() {
114         if (component.getComponentInstances() == null) {
115             component.setComponentInstances(new ArrayList<>());
116         }
117     }
118
119     public ComponentBuilder<T, B> addInput(InputDefinition input) {
120         if (component.getInputs() == null) {
121             component.setInputs(new ArrayList<>());
122         }
123         component.getInputs().add(input);
124         return self();
125     }
126
127     public ComponentBuilder<T, B> addInput(String inputName) {
128         InputDefinition inputDefinition = new InputDefinition();
129         inputDefinition.setName(inputName);
130         inputDefinition.setUniqueId(inputName);
131         this.addInput(inputDefinition);
132         return self();
133     }
134
135     public ComponentBuilder<T, B> addInstanceProperty(String instanceId, ComponentInstanceProperty prop) {
136         if (component.getComponentInstancesProperties() == null) {
137             component.setComponentInstancesProperties(new HashMap<>());
138         }
139         component.getComponentInstancesProperties().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
140         return self();
141     }
142
143     public ComponentBuilder<T, B> addInstanceProperty(String instanceId, String propName) {
144         ComponentInstanceProperty componentInstanceProperty = new ComponentInstanceProperty();
145         componentInstanceProperty.setName(propName);
146         componentInstanceProperty.setUniqueId(propName);
147         this.addInstanceProperty(instanceId, componentInstanceProperty);
148         return self();
149     }
150
151     public ComponentBuilder<T, B> addInstanceInput(String instanceId, ComponentInstanceInput prop) {
152         if (component.getComponentInstancesInputs() == null) {
153             component.setComponentInstancesInputs(new HashMap<>());
154         }
155         component.getComponentInstancesInputs().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
156         return self();
157     }
158
159     public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName) {
160         ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
161         componentInstanceInput.setName(propName);
162         componentInstanceInput.setUniqueId(propName);
163         this.addInstanceInput(instanceId, componentInstanceInput);
164         return self();
165     }
166
167     public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName, List<GetInputValueDataDefinition> getInputValues) {
168         ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
169         componentInstanceInput.setName(propName);
170         componentInstanceInput.setUniqueId(propName);
171         componentInstanceInput.setGetInputValues(getInputValues);
172         this.addInstanceInput(instanceId, componentInstanceInput);
173         return self();
174     }
175
176     public ComponentBuilder<T, B> addRelationship(RequirementCapabilityRelDef requirementCapabilityRelDef) {
177         if (component.getComponentInstancesRelations() == null) {
178             component.setComponentInstancesRelations(new ArrayList<>());
179         }
180         component.getComponentInstancesRelations().add(requirementCapabilityRelDef);
181         return self();
182     }
183
184     public ComponentBuilder<T, B> addPolicy(PolicyDefinition policyDefinition) {
185         if (component.getPolicies() == null) {
186             component.setPolicies(new HashMap<>());
187         }
188         component.getPolicies().put(policyDefinition.getUniqueId(), policyDefinition);
189         return self();
190     }
191
192     public ComponentBuilder<T, B> addPolicyProperty(String policyId, String propName){
193         PolicyDefinition policyWithProp = PolicyDefinitionBuilder.create()
194                 .addProperty(propName)
195                 .setUniqueId(policyId)
196                 .build();
197         return addPolicy(policyWithProp);
198     }
199
200     public ComponentBuilder<T, B> addGroup(GroupDefinition groupDefinition){
201         initGroups();
202         component.getGroups().add(groupDefinition);
203         return self();
204     }
205
206     public ComponentBuilder<T, B> addGroupProperty(String groupId, String propName){
207         GroupDefinition groupWithProp = GroupDefinitionBuilder.create()
208                 .addProperty(propName)
209                 .setUniqueId(groupId)
210                 .build();
211         return addGroup(groupWithProp);
212     }
213
214     private void initGroups() {
215         if(component.getGroups() == null){
216             component.setGroups(new ArrayList<>());
217         }
218     }
219
220     public ComponentBuilder<T, B> setPolicies(List<PolicyDefinition> policies) {
221         component.setPolicies(MapUtil.toMap(policies, PolicyDefinition::getUniqueId));
222         return self();
223     }
224
225     public ComponentBuilder<T, B> setGroups(List<GroupDefinition> groups) {
226         component.setGroups(groups);
227         return self();
228     }
229
230     public T build() {
231         return component;
232     }
233 }