Maintain VFC instance attribute outputs on instance version change
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / utils / ComponentBuilder.java
index f3cf208..b9e181f 100644 (file)
@@ -1,21 +1,46 @@
-package org.openecomp.sdc.be.components.utils;
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
+package org.openecomp.sdc.be.components.utils;
 
 import org.openecomp.sdc.be.dao.utils.MapUtil;
+import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
 import org.openecomp.sdc.be.model.Component;
 import org.openecomp.sdc.be.model.ComponentInstance;
+import org.openecomp.sdc.be.model.ComponentInstanceAttribute;
 import org.openecomp.sdc.be.model.ComponentInstanceInput;
+import org.openecomp.sdc.be.model.ComponentInstanceOutput;
 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
 import org.openecomp.sdc.be.model.GroupDefinition;
 import org.openecomp.sdc.be.model.InputDefinition;
 import org.openecomp.sdc.be.model.LifecycleStateEnum;
+import org.openecomp.sdc.be.model.OutputDefinition;
 import org.openecomp.sdc.be.model.PolicyDefinition;
 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 public abstract class ComponentBuilder<T extends Component, B extends ComponentBuilder<T, B>> {
 
     private T component;
@@ -67,12 +92,32 @@ public abstract class ComponentBuilder<T extends Component, B extends ComponentB
         return self();
     }
 
+    public ComponentBuilder<T, B> addComponentInstance(String instanceName) {
+        ComponentInstance instance = new ComponentInstanceBuilder()
+                .setUniqueId(instanceName)
+                .setName(instanceName)
+                .build();
+        return addComponentInstance(instance);
+    }
+    
+    public ComponentBuilder<T, B> addComponentInstance(String instanceName, String uniqueId) {
+        ComponentInstance instance = new ComponentInstanceBuilder()
+                .setUniqueId(uniqueId)
+                .setName(instanceName)
+                .build();
+        return addComponentInstance(instance);
+    }
+
     public ComponentBuilder<T, B> addComponentInstance(ComponentInstance componentInstance) {
+        initInstances();
+        component.getComponentInstances().add(componentInstance);
+        return self();
+    }
+
+    private void initInstances() {
         if (component.getComponentInstances() == null) {
             component.setComponentInstances(new ArrayList<>());
         }
-        component.getComponentInstances().add(componentInstance);
-        return self();
     }
 
     public ComponentBuilder<T, B> addInput(InputDefinition input) {
@@ -91,6 +136,22 @@ public abstract class ComponentBuilder<T extends Component, B extends ComponentB
         return self();
     }
 
+    public ComponentBuilder<T, B> addOutput(final OutputDefinition output) {
+        if (component.getOutputs() == null) {
+            component.setOutputs(new ArrayList<>());
+        }
+        component.getOutputs().add(output);
+        return self();
+    }
+
+    public ComponentBuilder<T, B> addOutput(final String outputName) {
+        final OutputDefinition outputDefinition = new OutputDefinition();
+        outputDefinition.setName(outputName);
+        outputDefinition.setUniqueId(outputName);
+        this.addOutput(outputDefinition);
+        return self();
+    }
+
     public ComponentBuilder<T, B> addInstanceProperty(String instanceId, ComponentInstanceProperty prop) {
         if (component.getComponentInstancesProperties() == null) {
             component.setComponentInstancesProperties(new HashMap<>());
@@ -102,6 +163,7 @@ public abstract class ComponentBuilder<T extends Component, B extends ComponentB
     public ComponentBuilder<T, B> addInstanceProperty(String instanceId, String propName) {
         ComponentInstanceProperty componentInstanceProperty = new ComponentInstanceProperty();
         componentInstanceProperty.setName(propName);
+        componentInstanceProperty.setUniqueId(propName);
         this.addInstanceProperty(instanceId, componentInstanceProperty);
         return self();
     }
@@ -117,10 +179,47 @@ public abstract class ComponentBuilder<T extends Component, B extends ComponentB
     public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName) {
         ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
         componentInstanceInput.setName(propName);
+        componentInstanceInput.setUniqueId(propName);
         this.addInstanceInput(instanceId, componentInstanceInput);
         return self();
     }
 
+    public ComponentBuilder<T, B> addInstanceInput(String instanceId, String propName, List<GetInputValueDataDefinition> getInputValues) {
+        ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
+        componentInstanceInput.setName(propName);
+        componentInstanceInput.setUniqueId(propName);
+        componentInstanceInput.setGetInputValues(getInputValues);
+        this.addInstanceInput(instanceId, componentInstanceInput);
+        return self();
+    }
+
+    public void addInstanceAttribute(String instanceId, ComponentInstanceAttribute attribute) {
+        Map<String, List<ComponentInstanceAttribute>> compInstAttribute = component.safeGetComponentInstancesAttributes();
+        if (compInstAttribute == null || compInstAttribute.isEmpty()) {
+            component.setComponentInstancesAttributes(new HashMap<>());
+        }
+        Map<String, List<ComponentInstanceAttribute>> instAttribute = component.safeGetComponentInstancesAttributes();
+        instAttribute.computeIfAbsent(instanceId, key -> new ArrayList<>()).add(attribute);
+        self();
+    }
+
+    public ComponentBuilder<T, B> addInstanceAttribute(String instanceId, String AttributeName) {
+        ComponentInstanceAttribute componentInstanceAttribute = new ComponentInstanceAttribute();
+        componentInstanceAttribute.setName(AttributeName);
+        componentInstanceAttribute.setUniqueId(AttributeName);
+        this.addInstanceAttribute(instanceId, componentInstanceAttribute);
+        return self();
+    }
+
+    public void addInstanceOutput(String instanceId, ComponentInstanceOutput attribute) {
+        if (component.getComponentInstancesOutputs() == null) {
+            component.setComponentInstancesOutputs(new HashMap<>());
+        }
+        component.getComponentInstancesOutputs().computeIfAbsent(instanceId, key -> new ArrayList<>()).add(attribute);
+        self();
+    }
+
+
     public ComponentBuilder<T, B> addRelationship(RequirementCapabilityRelDef requirementCapabilityRelDef) {
         if (component.getComponentInstancesRelations() == null) {
             component.setComponentInstancesRelations(new ArrayList<>());
@@ -136,12 +235,33 @@ public abstract class ComponentBuilder<T extends Component, B extends ComponentB
         component.getPolicies().put(policyDefinition.getUniqueId(), policyDefinition);
         return self();
     }
-    public ComponentBuilder<T, B> addGroups(GroupDefinition groupDefinition){
+
+    public ComponentBuilder<T, B> addPolicyProperty(String policyId, String propName){
+        PolicyDefinition policyWithProp = PolicyDefinitionBuilder.create()
+                .addProperty(propName)
+                .setUniqueId(policyId)
+                .build();
+        return addPolicy(policyWithProp);
+    }
+
+    public ComponentBuilder<T, B> addGroup(GroupDefinition groupDefinition){
+        initGroups();
+        component.getGroups().add(groupDefinition);
+        return self();
+    }
+
+    public ComponentBuilder<T, B> addGroupProperty(String groupId, String propName){
+        GroupDefinition groupWithProp = GroupDefinitionBuilder.create()
+                .addProperty(propName)
+                .setUniqueId(groupId)
+                .build();
+        return addGroup(groupWithProp);
+    }
+
+    private void initGroups() {
         if(component.getGroups() == null){
             component.setGroups(new ArrayList<>());
         }
-        component.getGroups().add(groupDefinition);
-        return self();
     }
 
     public ComponentBuilder<T, B> setPolicies(List<PolicyDefinition> policies) {
@@ -149,6 +269,11 @@ public abstract class ComponentBuilder<T extends Component, B extends ComponentB
         return self();
     }
 
+    public ComponentBuilder<T, B> setGroups(List<GroupDefinition> groups) {
+        component.setGroups(groups);
+        return self();
+    }
+
     public T build() {
         return component;
     }