1 package org.openecomp.sdc.be.components.merge.utils;
3 import org.openecomp.sdc.be.datatypes.elements.GroupDataDefinition;
4 import org.openecomp.sdc.be.model.ComponentInstance;
5 import org.openecomp.sdc.be.model.GroupDefinition;
7 import java.util.ArrayList;
8 import java.util.HashMap;
11 import java.util.stream.Collectors;
12 import java.util.stream.Stream;
14 import static org.openecomp.sdc.be.dao.utils.MapUtil.mergeMaps;
15 import static org.openecomp.sdc.be.dao.utils.MapUtil.toMap;
17 public class ComponentInstanceBuildingBlocks {
19 private Map<String, GroupDefinition> groups = new HashMap<>();
20 private Map<String, ComponentInstance> vfcInstances = new HashMap<>();
22 private ComponentInstanceBuildingBlocks(){}
24 private ComponentInstanceBuildingBlocks(List<GroupDefinition> groups, List<ComponentInstance> vfcInstances) {
25 this.groups = groups == null ? new HashMap<>() : toMap(groups, GroupDataDefinition::getUniqueId);
26 this.vfcInstances = vfcInstances == null ? new HashMap<>() : toMap(vfcInstances, ComponentInstance::getUniqueId);
29 private ComponentInstanceBuildingBlocks(Map<String, GroupDefinition> groups, Map<String, ComponentInstance> vfcInstances) {
30 this.groups = groups == null ? new HashMap<>() : groups;
31 this.vfcInstances = vfcInstances == null ? new HashMap<>() : vfcInstances;
34 static ComponentInstanceBuildingBlocks of(List<GroupDefinition> groups, List<ComponentInstance> instances) {
35 return new ComponentInstanceBuildingBlocks(groups, instances);
38 static ComponentInstanceBuildingBlocks empty() {
39 return new ComponentInstanceBuildingBlocks();
43 @SuppressWarnings("unchecked")
44 static ComponentInstanceBuildingBlocks merge(ComponentInstanceBuildingBlocks first, ComponentInstanceBuildingBlocks second) {
45 return new ComponentInstanceBuildingBlocks(mergeMaps(first.groups, second.groups),
46 mergeMaps(first.vfcInstances, second.vfcInstances));
49 public List<GroupDefinition> getGroups() {
50 return new ArrayList<>(groups.values());
53 public List<ComponentInstance> getVfcInstances() {
54 return new ArrayList<>(vfcInstances.values());
57 public List<CapabilityOwner> getCapabilitiesOwners() {
58 Stream<CapabilityOwner> groupsStream = groups.values().stream()
59 .map(grp -> new CapabilityOwner(grp.getUniqueId(), grp.getInvariantName(), grp.getCapabilities()));
61 Stream<CapabilityOwner> instanceStream = vfcInstances.values().stream()
62 .map(instance -> new CapabilityOwner(instance.getUniqueId(), instance.getName(), instance.getCapabilities()));
64 return Stream.concat(groupsStream, instanceStream).collect(Collectors.toList());