+ private byte[] mergeContent(final byte[] first, final byte[] second) {
+ byte[] merged = new byte[0];
+ final Map<String, Object> firstMap = new Yaml().load(new String(first));
+ final Map<String, Object> secondMap = new Yaml().load(new String(second));
+ if (MapUtils.isNotEmpty(secondMap)) {
+ final DumperOptions options = new DumperOptions();
+ options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
+ final Yaml yaml = new Yaml(options);
+ for (final Entry<String, Object> secondMapEntry : secondMap.entrySet()) {
+ final Map<String, Object> newMap = new HashMap<>();
+ if (secondMapEntry.getKey().endsWith("_types")) {
+ if (MapUtils.isNotEmpty(firstMap) && firstMap.containsKey(secondMapEntry.getKey())) {
+ final Map<String, Object> secondMapEntryValue = (Map<String, Object>) secondMapEntry.getValue();
+ final Map<String, Object> firstMapValue = (Map<String, Object>) firstMap.get(secondMapEntry.getKey());
+ secondMapEntryValue.putAll(firstMapValue);
+ newMap.put(secondMapEntry.getKey(), secondMapEntryValue);
+ } else {
+ newMap.put(secondMapEntry.getKey(), secondMapEntry.getValue());
+ }
+ } else {
+ newMap.put(secondMapEntry.getKey(), secondMapEntry.getValue());
+ }
+ merged = Bytes.concat(merged, yaml.dumpAsMap(newMap).getBytes());
+ }
+ }
+ return merged;
+ }
+