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