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.*;
28 import java.util.ArrayList;
29 import java.util.HashMap;
30 import java.util.List;
32 public abstract class ComponentBuilder<T extends Component, B extends ComponentBuilder<T, B>> {
36 protected abstract T component();
38 protected abstract ComponentBuilder<T, B> self();
40 public ComponentBuilder() {
41 this.component = component();
44 public ComponentBuilder(T component) {
45 this.component = component;
48 public ComponentBuilder<T, B> setUniqueId(String id) {
49 component.setUniqueId(id);
53 public ComponentBuilder<T, B> setLifeCycleState(LifecycleStateEnum lifeCycleState) {
54 component.setLifecycleState(lifeCycleState);
58 public ComponentBuilder<T, B> setLastUpdaterUserId(String lastUpdater) {
59 component.setLastUpdaterUserId(lastUpdater);
63 public ComponentBuilder<T, B> setInvariantUUid(String invariantUUid) {
64 component.setInvariantUUID(invariantUUid);
68 public ComponentBuilder<T, B> setName(String name) {
69 component.setName(name);
73 public ComponentBuilder<T, B> setComponentType(ComponentTypeEnum type) {
74 component.setComponentType(type);
78 public ComponentBuilder<T, B> setSystemName(String systemName) {
79 component.setSystemName(systemName);
83 public ComponentBuilder<T, B> addComponentInstance(String instanceName) {
84 ComponentInstance instance = new ComponentInstanceBuilder()
85 .setUniqueId(instanceName)
86 .setName(instanceName)
88 return addComponentInstance(instance);
91 public ComponentBuilder<T, B> addComponentInstance(String instanceName, String uniqueId) {
92 ComponentInstance instance = new ComponentInstanceBuilder()
93 .setUniqueId(uniqueId)
94 .setName(instanceName)
96 return addComponentInstance(instance);
99 public ComponentBuilder<T, B> addComponentInstance(ComponentInstance componentInstance) {
101 component.getComponentInstances().add(componentInstance);
105 private void initInstances() {
106 if (component.getComponentInstances() == null) {
107 component.setComponentInstances(new ArrayList<>());
111 public ComponentBuilder<T, B> addInput(InputDefinition input) {
112 if (component.getInputs() == null) {
113 component.setInputs(new ArrayList<>());
115 component.getInputs().add(input);
119 public ComponentBuilder<T, B> addInput(String inputName) {
120 InputDefinition inputDefinition = new InputDefinition();
121 inputDefinition.setName(inputName);
122 inputDefinition.setUniqueId(inputName);
123 this.addInput(inputDefinition);
127 public ComponentBuilder<T, B> addInstanceProperty(String instanceId, ComponentInstanceProperty prop) {
128 if (component.getComponentInstancesProperties() == null) {
129 component.setComponentInstancesProperties(new HashMap<>());
131 component.getComponentInstancesProperties().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
135 public ComponentBuilder<T, B> addInstanceProperty(String instanceId, String propName) {
136 ComponentInstanceProperty componentInstanceProperty = new ComponentInstanceProperty();
137 componentInstanceProperty.setName(propName);
138 componentInstanceProperty.setUniqueId(propName);
139 this.addInstanceProperty(instanceId, componentInstanceProperty);
143 public ComponentBuilder<T, B> addInstanceInput(String instanceId, ComponentInstanceInput prop) {
144 if (component.getComponentInstancesInputs() == null) {
145 component.setComponentInstancesInputs(new HashMap<>());
147 component.getComponentInstancesInputs().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(prop);
151 public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName) {
152 ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
153 componentInstanceInput.setName(propName);
154 componentInstanceInput.setUniqueId(propName);
155 this.addInstanceInput(instanceId, componentInstanceInput);
159 public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName, List<GetInputValueDataDefinition> getInputValues) {
160 ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
161 componentInstanceInput.setName(propName);
162 componentInstanceInput.setUniqueId(propName);
163 componentInstanceInput.setGetInputValues(getInputValues);
164 this.addInstanceInput(instanceId, componentInstanceInput);
168 public ComponentBuilder<T, B> addRelationship(RequirementCapabilityRelDef requirementCapabilityRelDef) {
169 if (component.getComponentInstancesRelations() == null) {
170 component.setComponentInstancesRelations(new ArrayList<>());
172 component.getComponentInstancesRelations().add(requirementCapabilityRelDef);
176 public ComponentBuilder<T, B> addPolicy(PolicyDefinition policyDefinition) {
177 if (component.getPolicies() == null) {
178 component.setPolicies(new HashMap<>());
180 component.getPolicies().put(policyDefinition.getUniqueId(), policyDefinition);
184 public ComponentBuilder<T, B> addPolicyProperty(String policyId, String propName){
185 PolicyDefinition policyWithProp = PolicyDefinitionBuilder.create()
186 .addProperty(propName)
187 .setUniqueId(policyId)
189 return addPolicy(policyWithProp);
192 public ComponentBuilder<T, B> addGroup(GroupDefinition groupDefinition){
194 component.getGroups().add(groupDefinition);
198 public ComponentBuilder<T, B> addGroupProperty(String groupId, String propName){
199 GroupDefinition groupWithProp = GroupDefinitionBuilder.create()
200 .addProperty(propName)
201 .setUniqueId(groupId)
203 return addGroup(groupWithProp);
206 private void initGroups() {
207 if(component.getGroups() == null){
208 component.setGroups(new ArrayList<>());
212 public ComponentBuilder<T, B> setPolicies(List<PolicyDefinition> policies) {
213 component.setPolicies(MapUtil.toMap(policies, PolicyDefinition::getUniqueId));
217 public ComponentBuilder<T, B> setGroups(List<GroupDefinition> groups) {
218 component.setGroups(groups);