+ 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));
+ }
+
+ public static <T extends ToscaDataDefinition> T removeAndCollectByOwnerId(T complexStructure, Set<String> ownerIdList) {
+ return complexStructure.removeByOwnerId(ownerIdList);
+ }
+