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.PolicyDefinition;
34 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
36 import java.util.ArrayList;
37 import java.util.HashMap;
38 import java.util.List;
40 public abstract class ComponentBuilder<T extends Component, B extends ComponentBuilder<T, B>> {
44 protected abstract T component();
46 protected abstract ComponentBuilder<T, B> self();
48 public ComponentBuilder() {
49 this.component = component();
52 public ComponentBuilder(T component) {
53 this.component = component;
56 public ComponentBuilder<T, B> setUniqueId(String id) {
57 component.setUniqueId(id);
61 public ComponentBuilder<T, B> setLifeCycleState(LifecycleStateEnum lifeCycleState) {
62 component.setLifecycleState(lifeCycleState);
66 public ComponentBuilder<T, B> setLastUpdaterUserId(String lastUpdater) {
67 component.setLastUpdaterUserId(lastUpdater);
71 public ComponentBuilder<T, B> setInvariantUUid(String invariantUUid) {
72 component.setInvariantUUID(invariantUUid);
76 public ComponentBuilder<T, B> setName(String name) {
77 component.setName(name);
81 public ComponentBuilder<T, B> setComponentType(ComponentTypeEnum type) {
82 component.setComponentType(type);
86 public ComponentBuilder<T, B> setSystemName(String systemName) {
87 component.setSystemName(systemName);
91 public ComponentBuilder<T, B> addComponentInstance(String instanceName) {
92 ComponentInstance instance = new ComponentInstanceBuilder()
93 .setUniqueId(instanceName)
94 .setName(instanceName)
96 return addComponentInstance(instance);
99 public ComponentBuilder<T, B> addComponentInstance(String instanceName, String uniqueId) {
100 ComponentInstance instance = new ComponentInstanceBuilder()
101 .setUniqueId(uniqueId)
102 .setName(instanceName)
104 return addComponentInstance(instance);
107 public ComponentBuilder<T, B> addComponentInstance(ComponentInstance componentInstance) {
109 component.getComponentInstances().add(componentInstance);
113 private void initInstances() {
114 if (component.getComponentInstances() == null) {
115 component.setComponentInstances(new ArrayList<>());
119 public ComponentBuilder<T, B> addInput(InputDefinition input) {
120 if (component.getInputs() == null) {
121 component.setInputs(new ArrayList<>());
123 component.getInputs().add(input);
127 public ComponentBuilder<T, B> addInput(String inputName) {
128 InputDefinition inputDefinition = new InputDefinition();
129 inputDefinition.setName(inputName);
130 inputDefinition.setUniqueId(inputName);
131 this.addInput(inputDefinition);
135 public ComponentBuilder<T, B> addInstanceProperty(String instanceId, ComponentInstanceProperty prop) {
136 if (component.getComponentInstancesProperties() == null) {
137 component.setComponentInstancesProperties(new HashMap<>());
139 component.getComponentInstancesProperties().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
143 public ComponentBuilder<T, B> addInstanceProperty(String instanceId, String propName) {
144 ComponentInstanceProperty componentInstanceProperty = new ComponentInstanceProperty();
145 componentInstanceProperty.setName(propName);
146 componentInstanceProperty.setUniqueId(propName);
147 this.addInstanceProperty(instanceId, componentInstanceProperty);
151 public ComponentBuilder<T, B> addInstanceInput(String instanceId, ComponentInstanceInput prop) {
152 if (component.getComponentInstancesInputs() == null) {
153 component.setComponentInstancesInputs(new HashMap<>());
155 component.getComponentInstancesInputs().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
159 public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName) {
160 ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
161 componentInstanceInput.setName(propName);
162 componentInstanceInput.setUniqueId(propName);
163 this.addInstanceInput(instanceId, componentInstanceInput);
167 public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName, List<GetInputValueDataDefinition> getInputValues) {
168 ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
169 componentInstanceInput.setName(propName);
170 componentInstanceInput.setUniqueId(propName);
171 componentInstanceInput.setGetInputValues(getInputValues);
172 this.addInstanceInput(instanceId, componentInstanceInput);
176 public ComponentBuilder<T, B> addRelationship(RequirementCapabilityRelDef requirementCapabilityRelDef) {
177 if (component.getComponentInstancesRelations() == null) {
178 component.setComponentInstancesRelations(new ArrayList<>());
180 component.getComponentInstancesRelations().add(requirementCapabilityRelDef);
184 public ComponentBuilder<T, B> addPolicy(PolicyDefinition policyDefinition) {
185 if (component.getPolicies() == null) {
186 component.setPolicies(new HashMap<>());
188 component.getPolicies().put(policyDefinition.getUniqueId(), policyDefinition);
192 public ComponentBuilder<T, B> addPolicyProperty(String policyId, String propName){
193 PolicyDefinition policyWithProp = PolicyDefinitionBuilder.create()
194 .addProperty(propName)
195 .setUniqueId(policyId)
197 return addPolicy(policyWithProp);
200 public ComponentBuilder<T, B> addGroup(GroupDefinition groupDefinition){
202 component.getGroups().add(groupDefinition);
206 public ComponentBuilder<T, B> addGroupProperty(String groupId, String propName){
207 GroupDefinition groupWithProp = GroupDefinitionBuilder.create()
208 .addProperty(propName)
209 .setUniqueId(groupId)
211 return addGroup(groupWithProp);
214 private void initGroups() {
215 if(component.getGroups() == null){
216 component.setGroups(new ArrayList<>());
220 public ComponentBuilder<T, B> setPolicies(List<PolicyDefinition> policies) {
221 component.setPolicies(MapUtil.toMap(policies, PolicyDefinition::getUniqueId));
225 public ComponentBuilder<T, B> setGroups(List<GroupDefinition> groups) {
226 component.setGroups(groups);