2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.be.components.utils;
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.Component;
27 import org.openecomp.sdc.be.model.ComponentInstance;
28 import org.openecomp.sdc.be.model.ComponentInstanceInput;
29 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
30 import org.openecomp.sdc.be.model.GroupDefinition;
31 import org.openecomp.sdc.be.model.InputDefinition;
32 import org.openecomp.sdc.be.model.LifecycleStateEnum;
33 import org.openecomp.sdc.be.model.OutputDefinition;
34 import org.openecomp.sdc.be.model.PolicyDefinition;
35 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
37 import java.util.ArrayList;
38 import java.util.HashMap;
39 import java.util.List;
41 public abstract class ComponentBuilder<T extends Component, B extends ComponentBuilder<T, B>> {
45 protected abstract T component();
47 protected abstract ComponentBuilder<T, B> self();
49 public ComponentBuilder() {
50 this.component = component();
53 public ComponentBuilder(T component) {
54 this.component = component;
57 public ComponentBuilder<T, B> setUniqueId(String id) {
58 component.setUniqueId(id);
62 public ComponentBuilder<T, B> setLifeCycleState(LifecycleStateEnum lifeCycleState) {
63 component.setLifecycleState(lifeCycleState);
67 public ComponentBuilder<T, B> setLastUpdaterUserId(String lastUpdater) {
68 component.setLastUpdaterUserId(lastUpdater);
72 public ComponentBuilder<T, B> setInvariantUUid(String invariantUUid) {
73 component.setInvariantUUID(invariantUUid);
77 public ComponentBuilder<T, B> setName(String name) {
78 component.setName(name);
82 public ComponentBuilder<T, B> setComponentType(ComponentTypeEnum type) {
83 component.setComponentType(type);
87 public ComponentBuilder<T, B> setSystemName(String systemName) {
88 component.setSystemName(systemName);
92 public ComponentBuilder<T, B> addComponentInstance(String instanceName) {
93 ComponentInstance instance = new ComponentInstanceBuilder()
94 .setUniqueId(instanceName)
95 .setName(instanceName)
97 return addComponentInstance(instance);
100 public ComponentBuilder<T, B> addComponentInstance(String instanceName, String uniqueId) {
101 ComponentInstance instance = new ComponentInstanceBuilder()
102 .setUniqueId(uniqueId)
103 .setName(instanceName)
105 return addComponentInstance(instance);
108 public ComponentBuilder<T, B> addComponentInstance(ComponentInstance componentInstance) {
110 component.getComponentInstances().add(componentInstance);
114 private void initInstances() {
115 if (component.getComponentInstances() == null) {
116 component.setComponentInstances(new ArrayList<>());
120 public ComponentBuilder<T, B> addInput(InputDefinition input) {
121 if (component.getInputs() == null) {
122 component.setInputs(new ArrayList<>());
124 component.getInputs().add(input);
128 public ComponentBuilder<T, B> addInput(String inputName) {
129 InputDefinition inputDefinition = new InputDefinition();
130 inputDefinition.setName(inputName);
131 inputDefinition.setUniqueId(inputName);
132 this.addInput(inputDefinition);
136 public ComponentBuilder<T, B> addOutput(final OutputDefinition output) {
137 if (component.getOutputs() == null) {
138 component.setOutputs(new ArrayList<>());
140 component.getOutputs().add(output);
144 public ComponentBuilder<T, B> addOutput(final String outputName) {
145 final OutputDefinition outputDefinition = new OutputDefinition();
146 outputDefinition.setName(outputName);
147 outputDefinition.setUniqueId(outputName);
148 this.addOutput(outputDefinition);
152 public ComponentBuilder<T, B> addInstanceProperty(String instanceId, ComponentInstanceProperty prop) {
153 if (component.getComponentInstancesProperties() == null) {
154 component.setComponentInstancesProperties(new HashMap<>());
156 component.getComponentInstancesProperties().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
160 public ComponentBuilder<T, B> addInstanceProperty(String instanceId, String propName) {
161 ComponentInstanceProperty componentInstanceProperty = new ComponentInstanceProperty();
162 componentInstanceProperty.setName(propName);
163 componentInstanceProperty.setUniqueId(propName);
164 this.addInstanceProperty(instanceId, componentInstanceProperty);
168 public ComponentBuilder<T, B> addInstanceInput(String instanceId, ComponentInstanceInput prop) {
169 if (component.getComponentInstancesInputs() == null) {
170 component.setComponentInstancesInputs(new HashMap<>());
172 component.getComponentInstancesInputs().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
176 public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName) {
177 ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
178 componentInstanceInput.setName(propName);
179 componentInstanceInput.setUniqueId(propName);
180 this.addInstanceInput(instanceId, componentInstanceInput);
184 public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName, List<GetInputValueDataDefinition> getInputValues) {
185 ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
186 componentInstanceInput.setName(propName);
187 componentInstanceInput.setUniqueId(propName);
188 componentInstanceInput.setGetInputValues(getInputValues);
189 this.addInstanceInput(instanceId, componentInstanceInput);
193 public ComponentBuilder<T, B> addRelationship(RequirementCapabilityRelDef requirementCapabilityRelDef) {
194 if (component.getComponentInstancesRelations() == null) {
195 component.setComponentInstancesRelations(new ArrayList<>());
197 component.getComponentInstancesRelations().add(requirementCapabilityRelDef);
201 public ComponentBuilder<T, B> addPolicy(PolicyDefinition policyDefinition) {
202 if (component.getPolicies() == null) {
203 component.setPolicies(new HashMap<>());
205 component.getPolicies().put(policyDefinition.getUniqueId(), policyDefinition);
209 public ComponentBuilder<T, B> addPolicyProperty(String policyId, String propName){
210 PolicyDefinition policyWithProp = PolicyDefinitionBuilder.create()
211 .addProperty(propName)
212 .setUniqueId(policyId)
214 return addPolicy(policyWithProp);
217 public ComponentBuilder<T, B> addGroup(GroupDefinition groupDefinition){
219 component.getGroups().add(groupDefinition);
223 public ComponentBuilder<T, B> addGroupProperty(String groupId, String propName){
224 GroupDefinition groupWithProp = GroupDefinitionBuilder.create()
225 .addProperty(propName)
226 .setUniqueId(groupId)
228 return addGroup(groupWithProp);
231 private void initGroups() {
232 if(component.getGroups() == null){
233 component.setGroups(new ArrayList<>());
237 public ComponentBuilder<T, B> setPolicies(List<PolicyDefinition> policies) {
238 component.setPolicies(MapUtil.toMap(policies, PolicyDefinition::getUniqueId));
242 public ComponentBuilder<T, B> setGroups(List<GroupDefinition> groups) {
243 component.setGroups(groups);