Final commit to master merge from
[sdc.git] / common-be / src / main / java / org / openecomp / sdc / be / datatypes / tosca / ToscaDataDefinition.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdc.be.datatypes.tosca;
22
23 import java.util.HashMap;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.Map.Entry;
27 import java.util.Set;
28 import java.util.stream.Collectors;
29
30 import org.codehaus.jackson.annotate.JsonCreator;
31 import org.codehaus.jackson.annotate.JsonValue;
32 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
33
34 import fj.data.Either;
35
36 public abstract class ToscaDataDefinition {
37
38         protected Map<String, Object> toscaPresentation;
39
40         public ToscaDataDefinition() {
41                 toscaPresentation = new HashMap<String, Object>();
42         }
43
44         @JsonCreator
45         public ToscaDataDefinition(Map<String, Object> art) {
46                 toscaPresentation = art;
47         }
48
49         @JsonValue
50         public Object getToscaPresentationValue(JsonPresentationFields name) {
51                 if (toscaPresentation != null && toscaPresentation.containsKey(name.getPresentation())) {
52                         return toscaPresentation.get(name.getPresentation());
53                 }
54                 return null;
55         }
56
57         public void setToscaPresentationValue(JsonPresentationFields name, Object value) {
58                 if (toscaPresentation == null && value != null) {
59                         toscaPresentation = new HashMap<String, Object>();
60                 }
61                 toscaPresentation.put(name.getPresentation(), value);
62
63         }
64
65         public void setOwnerIdIfEmpty(String ownerId) {
66                 if (getOwnerId() == null) {
67                         setOwnerId(ownerId);
68                 }
69         }
70
71         public void setOwnerId(String ownerId) {
72                 setToscaPresentationValue(JsonPresentationFields.OWNER_ID, ownerId);
73         }
74
75         public String getOwnerId() {
76                 return (String) getToscaPresentationValue(JsonPresentationFields.OWNER_ID);
77         }
78
79         // default merge function for merging data maps - implement where needed and use mergeDataMaps method where applicable instead of map1.putAll(map2)
80         public <T extends ToscaDataDefinition> T mergeFunction(T other, boolean allowDefaultValueOverride) {
81                 other.setOwnerId(getOwnerId());
82                 return other;
83         }
84
85         public static <T extends ToscaDataDefinition> Either<Map<String, T>, String> mergeDataMaps(Map<String, T> map1, Map<String, T> map2) {
86                 return mergeDataMaps(map1, map2, false);
87         }
88
89         // return Either.right(item key) if an illegal merge was attempted (overriding data type is forbidden)
90         public static <T extends ToscaDataDefinition> Either<Map<String, T>, String> mergeDataMaps(Map<String, T> map1, Map<String, T> map2, boolean allowDefaultValueOverride) {
91                 for (Entry<String, T> entry : map2.entrySet()) {
92                         map1.merge(entry.getKey(), entry.getValue(), (item1, item2) -> item1.mergeFunction(item2, allowDefaultValueOverride));
93                         // validate merge success
94                         if (!map1.containsKey(entry.getKey()))
95                                 return Either.right(entry.getKey());
96                 }
97                 return Either.left(map1);
98         }
99
100         public static <T extends ToscaDataDefinition> Map<String, T> listToMapByName(List<T> dataList) {
101                 return null == dataList ? new HashMap<>() : dataList.stream().collect(Collectors.toMap(p -> (String) p.getToscaPresentationValue(JsonPresentationFields.NAME), p -> p));
102         }
103
104         public boolean findUidMatch(String uid) {
105                 return uid.equals(getToscaPresentationValue(JsonPresentationFields.UNIQUE_ID));
106
107         }
108         public <T extends ToscaDataDefinition>  T removeByOwnerId(Set<String> ownerIdList) {
109                 return (T) this;
110         }
111         public static <T extends ToscaDataDefinition> T removeAndCollectByOwnerId(T complexStructure, Set<String> ownerIdList) {
112                 return complexStructure.removeByOwnerId(ownerIdList);
113         }
114
115         public <T extends ToscaDataDefinition> T updateIfExist(T other, boolean allowDefaultValueOverride) {
116                 return other;
117         }
118
119         public boolean isEmpty(){
120                 return false;
121         }
122 }