private void mergeWithDataTree(Map<String, Object> dataTree, Entry<String, Object> e) { String key = e.getKey(); Object value = dataTree.get(e.getKey()); if (value == null) { dataTree.put(e.getKey(), e.getValue()); } else { dataTree.put( key, ImmutableList.builder().addAll(asList(value)).addAll(asList(e.getValue())).build()); } }
@Override @SuppressWarnings("unchecked") public Object dataTree() throws IOException { Map<String, Object> dataTree = new LinkedHashMap<>(); for (Yaml yaml : yamls) { Object object = yaml.dataTree(); if (object instanceof Map<?, ?>) { Map<String, Object> subTree = (Map<String, Object>) object; for (Entry<String, Object> e : subTree.entrySet()) { mergeWithDataTree(dataTree, e); } } } return dataTree; }
@Test public void testComplexMergeRequired() throws IOException { Yaml toMerge = new YamlFile(getClass(), YAMLCONFIGURATION_YAML); Map<String, Object> baseMap = (Map) toMerge.dataTree(); MergedYaml mergedYaml = new MergedYaml(ImmutableList.of(toMerge, toMerge)); String formatted = mergedYaml.formatted(); Object dataTree = mergedYaml.dataTree(); assertTrue(dataTree instanceof Map); Map<String, Object> map = (Map) dataTree; doubledValues(formatted, baseMap, map, "annotators"); doubledValues(formatted, baseMap, map, "consumers"); madeList(formatted, map, "example"); madeList(formatted, map, "collectionreader"); }
@Test public void testNoMergeRequired() throws IOException { String yaml1 = "test1: value1"; String yaml2 = "test2: value2"; MergedYaml mergedYaml = new MergedYaml(ImmutableList.of(new YamlString(yaml1), new YamlString(yaml2))); Object dataTree = mergedYaml.dataTree(); assertTrue(dataTree instanceof Map); Map<String, Object> map = (Map) dataTree; assertTrue(map.containsKey("test1")); assertTrue(map.containsKey("test2")); assertEquals("value1", map.get("test1")); assertEquals("value2", map.get("test2")); }
return yamls.get(0); } else { return new MergedYaml(yamls);
@Test public void testSimpleMergeRequired() throws IOException { String yaml1 = "test: value1"; String yaml2 = "test: \n- value2\n- value3"; MergedYaml mergedYaml = new MergedYaml(ImmutableList.of(new YamlString(yaml1), new YamlString(yaml2))); Object dataTree = mergedYaml.dataTree(); assertTrue(dataTree instanceof Map); Map<String, Object> map = (Map) dataTree; assertTrue(map.containsKey("test")); ; assertTrue(map.get("test") instanceof List); List<Object> value = (List<Object>) map.get("test"); assertTrue(value.contains("value1")); assertTrue(value.contains("value2")); assertTrue(value.contains("value3")); }
private void mergeWithDataTree(Map<String, Object> dataTree, Entry<String, Object> e) { String key = e.getKey(); Object value = dataTree.get(e.getKey()); if (value == null) { dataTree.put(e.getKey(), e.getValue()); } else { dataTree.put( key, ImmutableList.builder().addAll(asList(value)).addAll(asList(e.getValue())).build()); } }
@Override @SuppressWarnings("unchecked") public Object dataTree() throws IOException { Map<String, Object> dataTree = new LinkedHashMap<>(); for (Yaml yaml : yamls) { Object object = yaml.dataTree(); if (object instanceof Map<?, ?>) { Map<String, Object> subTree = (Map<String, Object>) object; for (Entry<String, Object> e : subTree.entrySet()) { mergeWithDataTree(dataTree, e); } } } return dataTree; }