1 package org.openecomp.sdc.be.datatypes.elements;
3 import java.util.ArrayList;
4 import java.util.HashMap;
7 import java.util.Map.Entry;
8 import java.util.stream.Collectors;
10 import org.codehaus.jackson.annotate.JsonCreator;
11 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
12 import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition;
15 public class ListDataDefinition<T extends ToscaDataDefinition> extends ToscaDataDefinition {
17 protected List<T> listToscaDataDefinition;
19 public ListDataDefinition(ListDataDefinition<T> cdt) {
21 listToscaDataDefinition = cdt.listToscaDataDefinition;
26 public ListDataDefinition(List<T> listToscaDataDefinition) {
28 this.listToscaDataDefinition = listToscaDataDefinition;
31 public ListDataDefinition() {
35 public List<T> getListToscaDataDefinition() {
36 return listToscaDataDefinition;
39 public void add(T value) {
40 if (listToscaDataDefinition == null) {
41 listToscaDataDefinition = new ArrayList<T>();
43 listToscaDataDefinition.add(value);
46 public void delete(T value) {
47 if (listToscaDataDefinition != null) {
48 listToscaDataDefinition.remove(value);
53 public void setOwnerIdIfEmpty(String ownerId) {
54 if (listToscaDataDefinition != null) {
55 listToscaDataDefinition.forEach(e -> e.setOwnerIdIfEmpty(ownerId));
60 public <S extends ToscaDataDefinition> S mergeFunction(S other, boolean allowDefaultValueOverride){
61 Map<String, T> mapByName = listToMapByName(listToscaDataDefinition);
62 List<T> otherList = ((ListDataDefinition)other).getListToscaDataDefinition();
63 for(T item : otherList){
64 mapByName.merge((String)item.getToscaPresentationValue(JsonPresentationFields.NAME), item, (thisItem, otherItem) -> thisItem.mergeFunction(otherItem, allowDefaultValueOverride));
66 ((ListDataDefinition)other).listToscaDataDefinition = mapByName.values().stream().collect(Collectors.toList());