[sdc] update code of sdc
[sdc.git] / common-be / src / main / java / org / openecomp / sdc / be / datatypes / elements / ListDataDefinition.java
1 package org.openecomp.sdc.be.datatypes.elements;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.Map.Entry;
8 import java.util.stream.Collectors;
9
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;
13
14
15 public class ListDataDefinition<T extends ToscaDataDefinition> extends ToscaDataDefinition {
16
17         protected List<T> listToscaDataDefinition;
18
19         public ListDataDefinition(ListDataDefinition<T> cdt) {
20                 super();
21                 listToscaDataDefinition = cdt.listToscaDataDefinition;
22
23         }
24
25         @JsonCreator
26         public ListDataDefinition(List<T> listToscaDataDefinition) {
27                 super();
28                 this.listToscaDataDefinition = listToscaDataDefinition;
29         }
30
31         public ListDataDefinition() {
32                 super();
33         }
34
35         public List<T> getListToscaDataDefinition() {
36                 return listToscaDataDefinition;
37         }
38
39         public void add(T value) {
40                 if (listToscaDataDefinition == null) {
41                         listToscaDataDefinition = new ArrayList<T>();
42                 }
43                 listToscaDataDefinition.add(value);
44         }
45
46         public void delete(T value) {
47                 if (listToscaDataDefinition != null) {
48                         listToscaDataDefinition.remove(value);
49                 }
50         }
51
52         @Override
53         public void setOwnerIdIfEmpty(String ownerId) {
54                 if (listToscaDataDefinition != null) {
55                         listToscaDataDefinition.forEach(e -> e.setOwnerIdIfEmpty(ownerId));
56                 }
57         }
58         
59         @Override
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));
65                 }
66                 ((ListDataDefinition)other).listToscaDataDefinition = mapByName.values().stream().collect(Collectors.toList());
67                 return other;   
68         }
69                 
70
71 }