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.ComponentInstanceAttribute;
29 import org.openecomp.sdc.be.model.ComponentInstanceInput;
30 import org.openecomp.sdc.be.model.ComponentInstanceOutput;
31 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
32 import org.openecomp.sdc.be.model.GroupDefinition;
33 import org.openecomp.sdc.be.model.InputDefinition;
34 import org.openecomp.sdc.be.model.LifecycleStateEnum;
35 import org.openecomp.sdc.be.model.OutputDefinition;
36 import org.openecomp.sdc.be.model.PolicyDefinition;
37 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
39 import java.util.ArrayList;
40 import java.util.HashMap;
41 import java.util.List;
44 public abstract class ComponentBuilder<T extends Component, B extends ComponentBuilder<T, B>> {
48 protected abstract T component();
50 protected abstract ComponentBuilder<T, B> self();
52 public ComponentBuilder() {
53 this.component = component();
56 public ComponentBuilder(T component) {
57 this.component = component;
60 public ComponentBuilder<T, B> setUniqueId(String id) {
61 component.setUniqueId(id);
65 public ComponentBuilder<T, B> setLifeCycleState(LifecycleStateEnum lifeCycleState) {
66 component.setLifecycleState(lifeCycleState);
70 public ComponentBuilder<T, B> setLastUpdaterUserId(String lastUpdater) {
71 component.setLastUpdaterUserId(lastUpdater);
75 public ComponentBuilder<T, B> setInvariantUUid(String invariantUUid) {
76 component.setInvariantUUID(invariantUUid);
80 public ComponentBuilder<T, B> setName(String name) {
81 component.setName(name);
85 public ComponentBuilder<T, B> setComponentType(ComponentTypeEnum type) {
86 component.setComponentType(type);
90 public ComponentBuilder<T, B> setSystemName(String systemName) {
91 component.setSystemName(systemName);
95 public ComponentBuilder<T, B> addComponentInstance(String instanceName) {
96 ComponentInstance instance = new ComponentInstanceBuilder()
97 .setUniqueId(instanceName)
98 .setName(instanceName)
100 return addComponentInstance(instance);
103 public ComponentBuilder<T, B> addComponentInstance(String instanceName, String uniqueId) {
104 ComponentInstance instance = new ComponentInstanceBuilder()
105 .setUniqueId(uniqueId)
106 .setName(instanceName)
108 return addComponentInstance(instance);
111 public ComponentBuilder<T, B> addComponentInstance(ComponentInstance componentInstance) {
113 component.getComponentInstances().add(componentInstance);
117 private void initInstances() {
118 if (component.getComponentInstances() == null) {
119 component.setComponentInstances(new ArrayList<>());
123 public ComponentBuilder<T, B> addInput(InputDefinition input) {
124 if (component.getInputs() == null) {
125 component.setInputs(new ArrayList<>());
127 component.getInputs().add(input);
131 public ComponentBuilder<T, B> addInput(String inputName) {
132 InputDefinition inputDefinition = new InputDefinition();
133 inputDefinition.setName(inputName);
134 inputDefinition.setUniqueId(inputName);
135 this.addInput(inputDefinition);
139 public ComponentBuilder<T, B> addOutput(final OutputDefinition output) {
140 if (component.getOutputs() == null) {
141 component.setOutputs(new ArrayList<>());
143 component.getOutputs().add(output);
147 public ComponentBuilder<T, B> addOutput(final String outputName) {
148 final OutputDefinition outputDefinition = new OutputDefinition();
149 outputDefinition.setName(outputName);
150 outputDefinition.setUniqueId(outputName);
151 this.addOutput(outputDefinition);
155 public ComponentBuilder<T, B> addInstanceProperty(String instanceId, ComponentInstanceProperty prop) {
156 if (component.getComponentInstancesProperties() == null) {
157 component.setComponentInstancesProperties(new HashMap<>());
159 component.getComponentInstancesProperties().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
163 public ComponentBuilder<T, B> addInstanceProperty(String instanceId, String propName) {
164 ComponentInstanceProperty componentInstanceProperty = new ComponentInstanceProperty();
165 componentInstanceProperty.setName(propName);
166 componentInstanceProperty.setUniqueId(propName);
167 this.addInstanceProperty(instanceId, componentInstanceProperty);
171 public ComponentBuilder<T, B> addInstanceInput(String instanceId, ComponentInstanceInput prop) {
172 if (component.getComponentInstancesInputs() == null) {
173 component.setComponentInstancesInputs(new HashMap<>());
175 component.getComponentInstancesInputs().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
179 public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName) {
180 ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
181 componentInstanceInput.setName(propName);
182 componentInstanceInput.setUniqueId(propName);
183 this.addInstanceInput(instanceId, componentInstanceInput);
187 public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName, List<GetInputValueDataDefinition> getInputValues) {
188 ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
189 componentInstanceInput.setName(propName);
190 componentInstanceInput.setUniqueId(propName);
191 componentInstanceInput.setGetInputValues(getInputValues);
192 this.addInstanceInput(instanceId, componentInstanceInput);
196 public void addInstanceAttribute(String instanceId, ComponentInstanceAttribute attribute) {
197 Map<String, List<ComponentInstanceAttribute>> compInstAttribute = component.safeGetComponentInstancesAttributes();
198 if (compInstAttribute == null || compInstAttribute.isEmpty()) {
199 component.setComponentInstancesAttributes(new HashMap<>());
201 Map<String, List<ComponentInstanceAttribute>> instAttribute = component.safeGetComponentInstancesAttributes();
202 instAttribute.computeIfAbsent(instanceId, key -> new ArrayList<>()).add(attribute);
206 public ComponentBuilder<T, B> addInstanceAttribute(String instanceId, String AttributeName) {
207 ComponentInstanceAttribute componentInstanceAttribute = new ComponentInstanceAttribute();
208 componentInstanceAttribute.setName(AttributeName);
209 componentInstanceAttribute.setUniqueId(AttributeName);
210 this.addInstanceAttribute(instanceId, componentInstanceAttribute);
214 public void addInstanceOutput(String instanceId, ComponentInstanceOutput attribute) {
215 if (component.getComponentInstancesOutputs() == null) {
216 component.setComponentInstancesOutputs(new HashMap<>());
218 component.getComponentInstancesOutputs().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(attribute);
223 public ComponentBuilder<T, B> addRelationship(RequirementCapabilityRelDef requirementCapabilityRelDef) {
224 if (component.getComponentInstancesRelations() == null) {
225 component.setComponentInstancesRelations(new ArrayList<>());
227 component.getComponentInstancesRelations().add(requirementCapabilityRelDef);
231 public ComponentBuilder<T, B> addPolicy(PolicyDefinition policyDefinition) {
232 if (component.getPolicies() == null) {
233 component.setPolicies(new HashMap<>());
235 component.getPolicies().put(policyDefinition.getUniqueId(), policyDefinition);
239 public ComponentBuilder<T, B> addPolicyProperty(String policyId, String propName){
240 PolicyDefinition policyWithProp = PolicyDefinitionBuilder.create()
241 .addProperty(propName)
242 .setUniqueId(policyId)
244 return addPolicy(policyWithProp);
247 public ComponentBuilder<T, B> addGroup(GroupDefinition groupDefinition){
249 component.getGroups().add(groupDefinition);
253 public ComponentBuilder<T, B> addGroupProperty(String groupId, String propName){
254 GroupDefinition groupWithProp = GroupDefinitionBuilder.create()
255 .addProperty(propName)
256 .setUniqueId(groupId)
258 return addGroup(groupWithProp);
261 private void initGroups() {
262 if(component.getGroups() == null){
263 component.setGroups(new ArrayList<>());
267 public ComponentBuilder<T, B> setPolicies(List<PolicyDefinition> policies) {
268 component.setPolicies(MapUtil.toMap(policies, PolicyDefinition::getUniqueId));
272 public ComponentBuilder<T, B> setGroups(List<GroupDefinition> groups) {
273 component.setGroups(groups);