From affb2c599b1ec7bd71c2160135755772cfcedd43 Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Wed, 4 Jan 2023 15:52:54 +0100 Subject: [PATCH] Codestarts - Fix flattening of log levels And in general keys containing a dot. --- ...nfigMergeCodestartFileStrategyHandler.java | 12 ++++++++-- ...MergeCodestartFileStrategyHandlerTest.java | 23 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/independent-projects/tools/codestarts/src/main/java/io/quarkus/devtools/codestarts/core/strategy/SmartConfigMergeCodestartFileStrategyHandler.java b/independent-projects/tools/codestarts/src/main/java/io/quarkus/devtools/codestarts/core/strategy/SmartConfigMergeCodestartFileStrategyHandler.java index e7e6439c3a628..65810b5370434 100644 --- a/independent-projects/tools/codestarts/src/main/java/io/quarkus/devtools/codestarts/core/strategy/SmartConfigMergeCodestartFileStrategyHandler.java +++ b/independent-projects/tools/codestarts/src/main/java/io/quarkus/devtools/codestarts/core/strategy/SmartConfigMergeCodestartFileStrategyHandler.java @@ -79,14 +79,22 @@ private void writePropertiesConfig(Path targetPath, Map config) static void flatten(String prefix, Map target, Map map) { for (Map.Entry entry : map.entrySet()) { if (entry.getValue() instanceof Map) { - flatten(prefix + entry.getKey() + ".", target, (Map) entry.getValue()); + flatten(prefix + quote(entry.getKey().toString()) + ".", target, (Map) entry.getValue()); } else { // TODO: handle different types of values - target.put(prefix + entry.getKey(), entry.getValue().toString()); + target.put(prefix + quote(entry.getKey().toString()), entry.getValue().toString()); } } } + private static String quote(String key) { + if (!key.contains(".")) { + return key; + } + + return "\"" + key.replaceAll("\"", "\\\"") + "\""; + } + private static String getConfigType(Map data) { final Optional config = CodestartData.getInputCodestartForType(data, CodestartType.CONFIG); return config.orElseThrow(() -> new CodestartException("Config type is required")); diff --git a/independent-projects/tools/codestarts/src/test/java/io/quarkus/devtools/codestarts/core/strategy/SmartConfigMergeCodestartFileStrategyHandlerTest.java b/independent-projects/tools/codestarts/src/test/java/io/quarkus/devtools/codestarts/core/strategy/SmartConfigMergeCodestartFileStrategyHandlerTest.java index e31232214ec98..49c7721e7e064 100644 --- a/independent-projects/tools/codestarts/src/test/java/io/quarkus/devtools/codestarts/core/strategy/SmartConfigMergeCodestartFileStrategyHandlerTest.java +++ b/independent-projects/tools/codestarts/src/test/java/io/quarkus/devtools/codestarts/core/strategy/SmartConfigMergeCodestartFileStrategyHandlerTest.java @@ -34,4 +34,27 @@ void testFlatten() { assertThat(flat).containsEntry("c.c-c.c-c-a", "1"); assertThat(flat).containsEntry("c.c-c.c-c-b", "2"); } + + @Test + void testLogLevel() { + final HashMap level = new HashMap<>(); + level.put("level", "DEBUG"); + + final HashMap categoryName = new HashMap<>(); + categoryName.put("org.hibernate", level); + + final HashMap category = new HashMap<>(); + category.put("category", categoryName); + + final HashMap log = new HashMap<>(); + log.put("log", category); + + final HashMap quarkus = new HashMap<>(); + quarkus.put("quarkus", log); + + final HashMap flat = new HashMap<>(); + SmartConfigMergeCodestartFileStrategyHandler.flatten("", flat, quarkus); + + assertThat(flat).containsEntry("quarkus.log.category.\"org.hibernate\".level", "DEBUG"); + } }