1 package org.openecomp.sdc.be.components.utils;
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.*;
8 import java.util.ArrayList;
9 import java.util.HashMap;
10 import java.util.List;
12 public abstract class ComponentBuilder<T extends Component, B extends ComponentBuilder<T, B>> {
16 protected abstract T component();
18 protected abstract ComponentBuilder<T, B> self();
20 public ComponentBuilder() {
21 this.component = component();
24 public ComponentBuilder(T component) {
25 this.component = component;
28 public ComponentBuilder<T, B> setUniqueId(String id) {
29 component.setUniqueId(id);
33 public ComponentBuilder<T, B> setLifeCycleState(LifecycleStateEnum lifeCycleState) {
34 component.setLifecycleState(lifeCycleState);
38 public ComponentBuilder<T, B> setLastUpdaterUserId(String lastUpdater) {
39 component.setLastUpdaterUserId(lastUpdater);
43 public ComponentBuilder<T, B> setInvariantUUid(String invariantUUid) {
44 component.setInvariantUUID(invariantUUid);
48 public ComponentBuilder<T, B> setName(String name) {
49 component.setName(name);
53 public ComponentBuilder<T, B> setComponentType(ComponentTypeEnum type) {
54 component.setComponentType(type);
58 public ComponentBuilder<T, B> setSystemName(String systemName) {
59 component.setSystemName(systemName);
63 public ComponentBuilder<T, B> addComponentInstance(String instanceName) {
64 ComponentInstance instance = new ComponentInstanceBuilder()
65 .setUniqueId(instanceName)
66 .setName(instanceName)
68 return addComponentInstance(instance);
71 public ComponentBuilder<T, B> addComponentInstance(String instanceName, String uniqueId) {
72 ComponentInstance instance = new ComponentInstanceBuilder()
73 .setUniqueId(uniqueId)
74 .setName(instanceName)
76 return addComponentInstance(instance);
79 public ComponentBuilder<T, B> addComponentInstance(ComponentInstance componentInstance) {
81 component.getComponentInstances().add(componentInstance);
85 private void initInstances() {
86 if (component.getComponentInstances() == null) {
87 component.setComponentInstances(new ArrayList<>());
91 public ComponentBuilder<T, B> addInput(InputDefinition input) {
92 if (component.getInputs() == null) {
93 component.setInputs(new ArrayList<>());
95 component.getInputs().add(input);
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);
107 public ComponentBuilder<T, B> addInstanceProperty(String instanceId, ComponentInstanceProperty prop) {
108 if (component.getComponentInstancesProperties() == null) {
109 component.setComponentInstancesProperties(new HashMap<>());
111 component.getComponentInstancesProperties().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
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);
123 public ComponentBuilder<T, B> addInstanceInput(String instanceId, ComponentInstanceInput prop) {
124 if (component.getComponentInstancesInputs() == null) {
125 component.setComponentInstancesInputs(new HashMap<>());
127 component.getComponentInstancesInputs().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
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);
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);
148 public ComponentBuilder<T, B> addRelationship(RequirementCapabilityRelDef requirementCapabilityRelDef) {
149 if (component.getComponentInstancesRelations() == null) {
150 component.setComponentInstancesRelations(new ArrayList<>());
152 component.getComponentInstancesRelations().add(requirementCapabilityRelDef);
156 public ComponentBuilder<T, B> addPolicy(PolicyDefinition policyDefinition) {
157 if (component.getPolicies() == null) {
158 component.setPolicies(new HashMap<>());
160 component.getPolicies().put(policyDefinition.getUniqueId(), policyDefinition);
164 public ComponentBuilder<T, B> addPolicyProperty(String policyId, String propName){
165 PolicyDefinition policyWithProp = PolicyDefinitionBuilder.create()
166 .addProperty(propName)
167 .setUniqueId(policyId)
169 return addPolicy(policyWithProp);
172 public ComponentBuilder<T, B> addGroup(GroupDefinition groupDefinition){
174 component.getGroups().add(groupDefinition);
178 public ComponentBuilder<T, B> addGroupProperty(String groupId, String propName){
179 GroupDefinition groupWithProp = GroupDefinitionBuilder.create()
180 .addProperty(propName)
181 .setUniqueId(groupId)
183 return addGroup(groupWithProp);
186 private void initGroups() {
187 if(component.getGroups() == null){
188 component.setGroups(new ArrayList<>());
192 public ComponentBuilder<T, B> setPolicies(List<PolicyDefinition> policies) {
193 component.setPolicies(MapUtil.toMap(policies, PolicyDefinition::getUniqueId));
197 public ComponentBuilder<T, B> setGroups(List<GroupDefinition> groups) {
198 component.setGroups(groups);