Sync Integ to Master
[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.enums.ComponentTypeEnum;
5 import org.openecomp.sdc.be.model.Component;
6 import org.openecomp.sdc.be.model.ComponentInstance;
7 import org.openecomp.sdc.be.model.ComponentInstanceInput;
8 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
9 import org.openecomp.sdc.be.model.GroupDefinition;
10 import org.openecomp.sdc.be.model.InputDefinition;
11 import org.openecomp.sdc.be.model.LifecycleStateEnum;
12 import org.openecomp.sdc.be.model.PolicyDefinition;
13 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
14
15 import java.util.ArrayList;
16 import java.util.HashMap;
17 import java.util.List;
18
19 public abstract class ComponentBuilder<T extends Component, B extends ComponentBuilder<T, B>> {
20
21     private T component;
22
23     protected abstract T component();
24
25     protected abstract ComponentBuilder<T, B> self();
26
27     public ComponentBuilder() {
28         this.component = component();
29     }
30
31     public ComponentBuilder(T component) {
32         this.component = component;
33     }
34
35     public ComponentBuilder<T, B> setUniqueId(String id) {
36         component.setUniqueId(id);
37         return self();
38     }
39
40     public ComponentBuilder<T, B> setLifeCycleState(LifecycleStateEnum lifeCycleState) {
41         component.setLifecycleState(lifeCycleState);
42         return self();
43     }
44
45     public ComponentBuilder<T, B> setLastUpdaterUserId(String lastUpdater) {
46         component.setLastUpdaterUserId(lastUpdater);
47         return self();
48     }
49
50     public ComponentBuilder<T, B> setInvariantUUid(String invariantUUid) {
51         component.setInvariantUUID(invariantUUid);
52         return self();
53     }
54
55     public ComponentBuilder<T, B> setName(String name) {
56         component.setName(name);
57         return self();
58     }
59
60     public ComponentBuilder<T, B> setComponentType(ComponentTypeEnum type) {
61         component.setComponentType(type);
62         return self();
63     }
64
65     public ComponentBuilder<T, B> setSystemName(String systemName) {
66         component.setSystemName(systemName);
67         return self();
68     }
69
70     public ComponentBuilder<T, B> addComponentInstance(ComponentInstance componentInstance) {
71         if (component.getComponentInstances() == null) {
72             component.setComponentInstances(new ArrayList<>());
73         }
74         component.getComponentInstances().add(componentInstance);
75         return self();
76     }
77
78     public ComponentBuilder<T, B> addInput(InputDefinition input) {
79         if (component.getInputs() == null) {
80             component.setInputs(new ArrayList<>());
81         }
82         component.getInputs().add(input);
83         return self();
84     }
85
86     public ComponentBuilder<T, B> addInput(String inputName) {
87         InputDefinition inputDefinition = new InputDefinition();
88         inputDefinition.setName(inputName);
89         inputDefinition.setUniqueId(inputName);
90         this.addInput(inputDefinition);
91         return self();
92     }
93
94     public ComponentBuilder<T, B> addInstanceProperty(String instanceId, ComponentInstanceProperty prop) {
95         if (component.getComponentInstancesProperties() == null) {
96             component.setComponentInstancesProperties(new HashMap<>());
97         }
98         component.getComponentInstancesProperties().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
99         return self();
100     }
101
102     public ComponentBuilder<T, B> addInstanceProperty(String instanceId, String propName) {
103         ComponentInstanceProperty componentInstanceProperty = new ComponentInstanceProperty();
104         componentInstanceProperty.setName(propName);
105         this.addInstanceProperty(instanceId, componentInstanceProperty);
106         return self();
107     }
108
109     public ComponentBuilder<T, B> addInstanceInput(String instanceId, ComponentInstanceInput prop) {
110         if (component.getComponentInstancesInputs() == null) {
111             component.setComponentInstancesInputs(new HashMap<>());
112         }
113         component.getComponentInstancesInputs().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
114         return self();
115     }
116
117     public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName) {
118         ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
119         componentInstanceInput.setName(propName);
120         this.addInstanceInput(instanceId, componentInstanceInput);
121         return self();
122     }
123
124     public ComponentBuilder<T, B> addRelationship(RequirementCapabilityRelDef requirementCapabilityRelDef) {
125         if (component.getComponentInstancesRelations() == null) {
126             component.setComponentInstancesRelations(new ArrayList<>());
127         }
128         component.getComponentInstancesRelations().add(requirementCapabilityRelDef);
129         return self();
130     }
131
132     public ComponentBuilder<T, B> addPolicy(PolicyDefinition policyDefinition) {
133         if (component.getPolicies() == null) {
134             component.setPolicies(new HashMap<>());
135         }
136         component.getPolicies().put(policyDefinition.getUniqueId(), policyDefinition);
137         return self();
138     }
139     public ComponentBuilder<T, B> addGroups(GroupDefinition groupDefinition){
140         if(component.getGroups() == null){
141             component.setGroups(new ArrayList<>());
142         }
143         component.getGroups().add(groupDefinition);
144         return self();
145     }
146
147     public ComponentBuilder<T, B> setPolicies(List<PolicyDefinition> policies) {
148         component.setPolicies(MapUtil.toMap(policies, PolicyDefinition::getUniqueId));
149         return self();
150     }
151
152     public T build() {
153         return component;
154     }
155 }