fix capabilities
[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.JsonIgnore;
32 import org.codehaus.jackson.annotate.JsonValue;
33 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
34 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
35
36 import fj.data.Either;
37
38 public abstract class ToscaDataDefinition {
39         
40         protected Map<String, Object> toscaPresentation;
41
42         
43         public ToscaDataDefinition(){
44                 toscaPresentation = new HashMap<String, Object>();
45         }
46         @JsonCreator
47         public ToscaDataDefinition(Map<String, Object> art){
48                 toscaPresentation = art;
49         }
50         @JsonValue
51         public Object getToscaPresentationValue(JsonPresentationFields name) {
52                 if (toscaPresentation != null && toscaPresentation.containsKey(name.getPresentation())) {
53                         return toscaPresentation.get(name.getPresentation());
54                 }
55                 return null;
56         }
57         
58         public void setToscaPresentationValue(JsonPresentationFields name, Object value) {
59                 if (toscaPresentation == null && value !=null) {
60                         toscaPresentation = new HashMap<String, Object>();                      
61                 }
62                 toscaPresentation.put(name.getPresentation(), value);
63                 
64         }
65         public void setOwnerIdIfEmpty(String ownerId){
66                 if (  getOwnerId() == null ){
67                         setOwnerId(ownerId);
68                 }
69         }
70         public void setOwnerId(String ownerId){
71                 setToscaPresentationValue(JsonPresentationFields.OWNER_ID, ownerId);
72         }
73
74         public String getOwnerId(){
75                 return (String) getToscaPresentationValue(JsonPresentationFields.OWNER_ID);
76         }
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()
102                 .collect(Collectors.toMap(p -> (String)p.getToscaPresentationValue(JsonPresentationFields.NAME), p -> p));
103         }
104
105         public boolean findUidMatch(String uid){
106                 return uid.equals(getToscaPresentationValue(JsonPresentationFields.UNIQUE_ID));
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         public boolean isEmpty(){
115                 return false;
116         }
117 }