Skip to content

Commit

Permalink
Improve yaml property access (#21)
Browse files Browse the repository at this point in the history
* Improve yaml property access

 Date:      Sun Sep 9 10:07:13 2018 +0530
	modified:   src/main/java/com/uber/profiling/YamlConfigProvider.java
	modified:   src/test/java/com/uber/profiling/YamlConfigProviderTest.java

* YAML property - keep array backward compatible

* YAML property - refactor and check for Map type inside addConfig method

* YAML property - Do not add OVERRIDE_KEY in key name

* Yaml property - handle empty list
  • Loading branch information
baghelamit authored and Bo Yang committed Sep 28, 2018
1 parent a1813c8 commit 020bd25
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 5 deletions.
12 changes: 11 additions & 1 deletion src/main/java/com/uber/profiling/YamlConfigProvider.java
Expand Up @@ -158,17 +158,27 @@ private static Map<String, Map<String, List<String>>> getConfig(String configFil

private static void addConfig(Map<String, Map<String, List<String>>> config, String override, String key, Object value) {
Map<String, List<String>> configMap = config.computeIfAbsent(override, k -> new HashMap<>());
List<String> configValueList = configMap.computeIfAbsent(key, k -> new ArrayList<>());

if (value instanceof List) {
List<String> configValueList = configMap.computeIfAbsent(key, k -> new ArrayList<>());
for (Object entry : (List)value) {
configValueList.add(entry.toString());
}
} else if (value instanceof Object[]) {
List<String> configValueList = configMap.computeIfAbsent(key, k -> new ArrayList<>());
for (Object entry : (Object[])value) {
configValueList.add(entry.toString());
}
} else if (value instanceof Map) {
for (Object mapKey : ((Map)value).keySet()) {
String propKey = mapKey.toString();
Object propValue = ((Map)value).get(propKey);
if (propValue != null) {
addConfig(config, override, key + "." + propKey, propValue);
}
}
} else {
List<String> configValueList = configMap.computeIfAbsent(key, k -> new ArrayList<>());
configValueList.add(value.toString());
}
}
Expand Down
27 changes: 23 additions & 4 deletions src/test/java/com/uber/profiling/YamlConfigProviderTest.java
Expand Up @@ -62,12 +62,19 @@ public void getConfig() throws IOException {
"key2:\n" +
"- value2a\n" +
"- value2b\n" +
"key3:\n" +
" key3a: value3a\n" +
" key3b:\n" +
" - value3b\n" +
" - value3c\n" +
"override:\n" +
" override1: \n" +
" key1: value11\n" +
" key2:\n" +
" - value22a\n" +
" - value22b\n" +
" key3:\n" +
" key3a: value33a\n" +
"";
Files.write(file.toPath(), content.getBytes(), StandardOpenOption.CREATE);

Expand All @@ -76,14 +83,17 @@ public void getConfig() throws IOException {
Assert.assertEquals(2, config.size());

Map<String, List<String>> rootConfig = config.get("");
Assert.assertEquals(2, rootConfig.size());
Assert.assertEquals(4, rootConfig.size());
Assert.assertEquals(Arrays.asList("value1"), rootConfig.get("key1"));
Assert.assertEquals(Arrays.asList("value2a", "value2b"), rootConfig.get("key2"));
Assert.assertEquals(Arrays.asList("value3a"), rootConfig.get("key3.key3a"));
Assert.assertEquals(Arrays.asList("value3b", "value3c"), rootConfig.get("key3.key3b"));

Map<String, List<String>> override1Config = config.get("override1");
Assert.assertEquals(2, override1Config.size());
Assert.assertEquals(3, override1Config.size());
Assert.assertEquals(Arrays.asList("value11"), override1Config.get("key1"));
Assert.assertEquals(Arrays.asList("value22a", "value22b"), override1Config.get("key2"));
Assert.assertEquals(Arrays.asList("value33a"), override1Config.get("key3.key3a"));
}
}

Expand All @@ -100,12 +110,19 @@ public void getConfigFromFile() throws IOException {
"key2:\n" +
"- value2a\n" +
"- value2b\n" +
"key3:\n" +
" key3a: value3a\n" +
" key3b:\n" +
" - value3b\n" +
" - value3c\n" +
"override:\n" +
" override1: \n" +
" key1: value11\n" +
" key2:\n" +
" - value22a\n" +
" - value22b\n" +
" key3:\n" +
" key3a: value33a\n" +
"";

Path path = Files.createTempFile("jvm-profiler_", ".yaml");
Expand All @@ -117,13 +134,15 @@ public void getConfigFromFile() throws IOException {
Assert.assertEquals(2, config.size());

Map<String, List<String>> rootConfig = config.get("");
Assert.assertEquals(2, rootConfig.size());
Assert.assertEquals(4, rootConfig.size());
Assert.assertEquals(Arrays.asList("value1"), rootConfig.get("key1"));
Assert.assertEquals(Arrays.asList("value2a", "value2b"), rootConfig.get("key2"));
Assert.assertEquals(Arrays.asList("value3b", "value3c"), rootConfig.get("key3.key3b"));

Map<String, List<String>> override1Config = config.get("override1");
Assert.assertEquals(2, override1Config.size());
Assert.assertEquals(3, override1Config.size());
Assert.assertEquals(Arrays.asList("value11"), override1Config.get("key1"));
Assert.assertEquals(Arrays.asList("value22a", "value22b"), override1Config.get("key2"));
Assert.assertEquals(Arrays.asList("value33a"), override1Config.get("key3.key3a"));
}
}

0 comments on commit 020bd25

Please sign in to comment.