aboutsummaryrefslogtreecommitdiffstats
path: root/vid-automation/src/main/java/org/onap/sdc/ci/tests/devObjects/ToscaDataDefinition.java
blob: c4fa53b5deac4987b9b89dfb777d9e4de0274351 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package org.onap.sdc.ci.tests.devObjects;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import fj.data.Either;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;

public abstract class ToscaDataDefinition {
	
	protected Map<String, Object> toscaPresentation;

	
	public ToscaDataDefinition(){
		toscaPresentation = new HashMap<String, Object>();
	}
	@JsonCreator
	public ToscaDataDefinition(Map<String, Object> art){
		toscaPresentation = art;
	}
	@JsonValue
	public Object getToscaPresentationValue(JsonPresentationFields name) {
		if (toscaPresentation != null && toscaPresentation.containsKey(name.getPresentation())) {
			return toscaPresentation.get(name.getPresentation());
		}
		return null;
	}
	
	public void setToscaPresentationValue(JsonPresentationFields name, Object value) {
		if (toscaPresentation == null && value !=null) {
			toscaPresentation = new HashMap<String, Object>();			
		}
		toscaPresentation.put(name.getPresentation(), value);
		
	}
	public void setOwnerIdIfEmpty(String ownerId){
		if (  getOwnerId() == null ){
			setOwnerId(ownerId);
		}
	}
	public void setOwnerId(String ownerId){
		setToscaPresentationValue(JsonPresentationFields.OWNER_ID, ownerId);
	}

	public String getOwnerId(){
		return (String) getToscaPresentationValue(JsonPresentationFields.OWNER_ID);
	}
	
	
	//default merge function for merging data maps - implement where needed and use mergeDataMaps method where applicable instead of map1.putAll(map2) 
	public <T extends ToscaDataDefinition> T mergeFunction(T other, boolean allowDefaultValueOverride){
		other.setOwnerId(getOwnerId());
		return other;
	}
	
	public static <T extends ToscaDataDefinition> Either<Map<String, T>, String> mergeDataMaps(Map<String, T> map1, Map<String, T> map2){
		return mergeDataMaps(map1, map2, false);
	}
	
	//return Either.right(item key) if an illegal merge was attempted (overriding data type is forbidden)
	public static <T extends ToscaDataDefinition> Either<Map<String, T>, String> mergeDataMaps(Map<String, T> map1, Map<String, T> map2, boolean allowDefaultValueOverride){
		for(Entry<String, T> entry : map2.entrySet()){
			map1.merge(entry.getKey(), entry.getValue(), (item1, item2) -> item1.mergeFunction(item2, allowDefaultValueOverride));
		    //validate merge success
		    if(!map1.containsKey(entry.getKey()))
		    	return Either.right(entry.getKey());
		}
		return Either.left(map1);
	}
	
	public static <T extends ToscaDataDefinition> Map<String, T> listToMapByName(List<T> dataList) {
		return null == dataList? new HashMap<>() : dataList.stream()
		.collect(Collectors.toMap(p -> (String)p.getToscaPresentationValue(JsonPresentationFields.NAME), p -> p));
	}
}