1 package org.openecomp.sdc.be.components.utils;
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;
15 import java.util.ArrayList;
16 import java.util.HashMap;
17 import java.util.List;
19 public abstract class ComponentBuilder<T extends Component, B extends ComponentBuilder<T, B>> {
23 protected abstract T component();
25 protected abstract ComponentBuilder<T, B> self();
27 public ComponentBuilder() {
28 this.component = component();
31 public ComponentBuilder(T component) {
32 this.component = component;
35 public ComponentBuilder<T, B> setUniqueId(String id) {
36 component.setUniqueId(id);
40 public ComponentBuilder<T, B> setLifeCycleState(LifecycleStateEnum lifeCycleState) {
41 component.setLifecycleState(lifeCycleState);
45 public ComponentBuilder<T, B> setLastUpdaterUserId(String lastUpdater) {
46 component.setLastUpdaterUserId(lastUpdater);
50 public ComponentBuilder<T, B> setInvariantUUid(String invariantUUid) {
51 component.setInvariantUUID(invariantUUid);
55 public ComponentBuilder<T, B> setName(String name) {
56 component.setName(name);
60 public ComponentBuilder<T, B> setComponentType(ComponentTypeEnum type) {
61 component.setComponentType(type);
65 public ComponentBuilder<T, B> setSystemName(String systemName) {
66 component.setSystemName(systemName);
70 public ComponentBuilder<T, B> addComponentInstance(ComponentInstance componentInstance) {
71 if (component.getComponentInstances() == null) {
72 component.setComponentInstances(new ArrayList<>());
74 component.getComponentInstances().add(componentInstance);
78 public ComponentBuilder<T, B> addInput(InputDefinition input) {
79 if (component.getInputs() == null) {
80 component.setInputs(new ArrayList<>());
82 component.getInputs().add(input);
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);
94 public ComponentBuilder<T, B> addInstanceProperty(String instanceId, ComponentInstanceProperty prop) {
95 if (component.getComponentInstancesProperties() == null) {
96 component.setComponentInstancesProperties(new HashMap<>());
98 component.getComponentInstancesProperties().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
102 public ComponentBuilder<T, B> addInstanceProperty(String instanceId, String propName) {
103 ComponentInstanceProperty componentInstanceProperty = new ComponentInstanceProperty();
104 componentInstanceProperty.setName(propName);
105 this.addInstanceProperty(instanceId, componentInstanceProperty);
109 public ComponentBuilder<T, B> addInstanceInput(String instanceId, ComponentInstanceInput prop) {
110 if (component.getComponentInstancesInputs() == null) {
111 component.setComponentInstancesInputs(new HashMap<>());
113 component.getComponentInstancesInputs().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
117 public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName) {
118 ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
119 componentInstanceInput.setName(propName);
120 this.addInstanceInput(instanceId, componentInstanceInput);
124 public ComponentBuilder<T, B> addRelationship(RequirementCapabilityRelDef requirementCapabilityRelDef) {
125 if (component.getComponentInstancesRelations() == null) {
126 component.setComponentInstancesRelations(new ArrayList<>());
128 component.getComponentInstancesRelations().add(requirementCapabilityRelDef);
132 public ComponentBuilder<T, B> addPolicy(PolicyDefinition policyDefinition) {
133 if (component.getPolicies() == null) {
134 component.setPolicies(new HashMap<>());
136 component.getPolicies().put(policyDefinition.getUniqueId(), policyDefinition);
139 public ComponentBuilder<T, B> addGroups(GroupDefinition groupDefinition){
140 if(component.getGroups() == null){
141 component.setGroups(new ArrayList<>());
143 component.getGroups().add(groupDefinition);
147 public ComponentBuilder<T, B> setPolicies(List<PolicyDefinition> policies) {
148 component.setPolicies(MapUtil.toMap(policies, PolicyDefinition::getUniqueId));