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