Skip to content

Commit b018a8e

Browse files
committed
Refactor properties v2 parser to use PropertiesSubset
The `PropertiesV1ConfigurationParser` uses the `PropertiesSubset` abstraction to pass subsets of properties between methods, while keeping track of the global name of each property. We refactor the `PropertiesV2ConfigurationParser` to use the same abstraction, which allows us to eliminate many helper methods in `PropertiesUtils`.
1 parent b71af98 commit b018a8e

16 files changed

+182
-186
lines changed

log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/PropertiesUtils.java

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,20 @@
1616
*/
1717
package org.apache.logging.converter.config.internal;
1818

19-
import java.util.Map;
19+
import java.util.Comparator;
2020
import java.util.Properties;
2121
import java.util.stream.Stream;
2222
import org.apache.logging.converter.config.ConfigurationConverterException;
23-
import org.apache.logging.converter.config.spi.v1.PropertiesSubset;
23+
import org.apache.logging.converter.config.spi.PropertiesSubset;
2424
import org.jspecify.annotations.Nullable;
2525

2626
public final class PropertiesUtils {
2727

28-
public static @Nullable String getAndRemove(Properties properties, String key) {
29-
return (String) properties.remove(key);
30-
}
31-
3228
public static String getLastComponent(String name) {
3329
int idx = name.lastIndexOf('.');
3430
return idx == -1 ? name : name.substring(idx + 1);
3531
}
3632

37-
public static Properties extractSubset(Properties properties, String prefix) {
38-
Properties subset = org.apache.logging.log4j.util.PropertiesUtil.extractSubset(properties, prefix);
39-
String value = getAndRemove(properties, prefix);
40-
if (value != null) {
41-
subset.setProperty("", value);
42-
}
43-
return subset;
44-
}
45-
4633
public static @Nullable String extractProperty(PropertiesSubset subset, String key) {
4734
return (String) subset.getProperties().remove(key);
4835
}
@@ -51,25 +38,24 @@ public static PropertiesSubset extractSubset(PropertiesSubset parentSubset, Stri
5138
Properties parentProperties = parentSubset.getProperties();
5239
Properties properties =
5340
org.apache.logging.log4j.util.PropertiesUtil.extractSubset(parentProperties, childPrefix);
54-
String value = getAndRemove(parentProperties, childPrefix);
41+
String value = (String) parentProperties.remove(childPrefix);
5542
if (value != null) {
5643
properties.setProperty("", value);
5744
}
5845
return PropertiesSubset.of(addPrefixes(parentSubset.getPrefix(), childPrefix), properties);
5946
}
6047

61-
public static Map<String, Properties> partitionOnCommonPrefixes(Properties properties) {
62-
return org.apache.logging.log4j.util.PropertiesUtil.partitionOnCommonPrefixes(properties, true);
63-
}
64-
6548
public static Stream<PropertiesSubset> partitionOnCommonPrefixes(PropertiesSubset parentSubset) {
6649
String parentPrefix = parentSubset.getPrefix();
6750
String effectivePrefix = parentPrefix.isEmpty() ? parentPrefix : parentPrefix + ".";
68-
return org.apache.logging.log4j.util.PropertiesUtil.partitionOnCommonPrefixes(
51+
Stream<PropertiesSubset> partitioned = org.apache.logging.log4j.util.PropertiesUtil.partitionOnCommonPrefixes(
6952
parentSubset.getProperties(), true)
7053
.entrySet()
7154
.stream()
72-
.map(entry -> PropertiesSubset.of(effectivePrefix + entry.getKey(), entry.getValue()));
55+
.map(entry -> PropertiesSubset.of(effectivePrefix + entry.getKey(), entry.getValue()))
56+
.sorted(Comparator.comparing(PropertiesSubset::getPrefix));
57+
parentSubset.getProperties().clear();
58+
return partitioned;
7359
}
7460

7561
private static String addPrefixes(String left, String right) {
@@ -94,5 +80,19 @@ public static void throwIfNotEmpty(PropertiesSubset subset) {
9480
}
9581
}
9682

83+
/**
84+
* @return {@code true} if the subset contains no properties.
85+
*/
86+
public static boolean isEmpty(PropertiesSubset subset) {
87+
return subset.getProperties().isEmpty();
88+
}
89+
90+
/**
91+
* @return {@code true} if the subset contains some properties.
92+
*/
93+
public static boolean isNotEmpty(PropertiesSubset subset) {
94+
return !isEmpty(subset);
95+
}
96+
9797
private PropertiesUtils() {}
9898
}

log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v1/AbstractComponentParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@
3232
import org.apache.logging.converter.config.internal.StringUtils;
3333
import org.apache.logging.converter.config.internal.XmlUtils;
3434
import org.apache.logging.converter.config.spi.ConfigurationNode;
35+
import org.apache.logging.converter.config.spi.PropertiesSubset;
3536
import org.apache.logging.converter.config.spi.v1.Log4j1ComponentParser;
3637
import org.apache.logging.converter.config.spi.v1.Log4j1ParserContext;
37-
import org.apache.logging.converter.config.spi.v1.PropertiesSubset;
3838
import org.w3c.dom.Element;
3939
import org.w3c.dom.Node;
4040

log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v1/PropertiesV1ConfigurationParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import org.apache.logging.converter.config.internal.PropertiesUtils;
3636
import org.apache.logging.converter.config.spi.ConfigurationNode;
3737
import org.apache.logging.converter.config.spi.ConfigurationParser;
38-
import org.apache.logging.converter.config.spi.v1.PropertiesSubset;
38+
import org.apache.logging.converter.config.spi.PropertiesSubset;
3939

4040
@ServiceProvider(value = ConfigurationParser.class, resolution = Resolution.MANDATORY)
4141
public class PropertiesV1ConfigurationParser extends AbstractV1ConfigurationParser {

log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v1/appender/AbstractAppenderParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
import org.apache.logging.converter.config.internal.PropertiesUtils;
2828
import org.apache.logging.converter.config.internal.v1.AbstractComponentParser;
2929
import org.apache.logging.converter.config.spi.ConfigurationNode;
30+
import org.apache.logging.converter.config.spi.PropertiesSubset;
3031
import org.apache.logging.converter.config.spi.v1.Log4j1ParserContext;
31-
import org.apache.logging.converter.config.spi.v1.PropertiesSubset;
3232
import org.jspecify.annotations.Nullable;
3333
import org.w3c.dom.Element;
3434

log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v1/filter/DenyAllFilterParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
import org.apache.logging.converter.config.internal.ComponentUtils;
2525
import org.apache.logging.converter.config.internal.v1.AbstractComponentParser;
2626
import org.apache.logging.converter.config.spi.ConfigurationNode;
27+
import org.apache.logging.converter.config.spi.PropertiesSubset;
2728
import org.apache.logging.converter.config.spi.v1.Log4j1ComponentParser;
28-
import org.apache.logging.converter.config.spi.v1.PropertiesSubset;
2929
import org.w3c.dom.Element;
3030

3131
/**

log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v1/filter/LevelMatchFilterParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
import org.apache.logging.converter.config.internal.ComponentUtils;
2626
import org.apache.logging.converter.config.internal.ComponentUtils.ConfigurationNodeBuilder;
2727
import org.apache.logging.converter.config.spi.ConfigurationNode;
28+
import org.apache.logging.converter.config.spi.PropertiesSubset;
2829
import org.apache.logging.converter.config.spi.v1.Log4j1ComponentParser;
29-
import org.apache.logging.converter.config.spi.v1.PropertiesSubset;
3030
import org.w3c.dom.Element;
3131

3232
/**

log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v1/filter/LevelRangeFilterParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
import org.apache.logging.converter.config.internal.ComponentUtils;
2626
import org.apache.logging.converter.config.internal.ComponentUtils.ConfigurationNodeBuilder;
2727
import org.apache.logging.converter.config.spi.ConfigurationNode;
28+
import org.apache.logging.converter.config.spi.PropertiesSubset;
2829
import org.apache.logging.converter.config.spi.v1.Log4j1ComponentParser;
29-
import org.apache.logging.converter.config.spi.v1.PropertiesSubset;
3030
import org.w3c.dom.Element;
3131

3232
/**

log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v1/filter/StringMatchFilterParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
import org.apache.logging.converter.config.internal.ComponentUtils;
2727
import org.apache.logging.converter.config.internal.ComponentUtils.ConfigurationNodeBuilder;
2828
import org.apache.logging.converter.config.spi.ConfigurationNode;
29+
import org.apache.logging.converter.config.spi.PropertiesSubset;
2930
import org.apache.logging.converter.config.spi.v1.Log4j1ComponentParser;
30-
import org.apache.logging.converter.config.spi.v1.PropertiesSubset;
3131
import org.jspecify.annotations.Nullable;
3232
import org.w3c.dom.Element;
3333

log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v1/layout/EnhancedPatternLayoutParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
import java.lang.invoke.MethodHandle;
2121
import java.util.Map;
2222
import org.apache.logging.converter.config.internal.v1.AbstractComponentParser;
23+
import org.apache.logging.converter.config.spi.PropertiesSubset;
2324
import org.apache.logging.converter.config.spi.v1.Log4j1ComponentParser;
24-
import org.apache.logging.converter.config.spi.v1.PropertiesSubset;
2525
import org.w3c.dom.Element;
2626

2727
/**

log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v1/layout/HtmlLayoutParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
import org.apache.logging.converter.config.internal.StringUtils;
2525
import org.apache.logging.converter.config.internal.v1.AbstractComponentParser;
2626
import org.apache.logging.converter.config.spi.ConfigurationNode;
27+
import org.apache.logging.converter.config.spi.PropertiesSubset;
2728
import org.apache.logging.converter.config.spi.v1.Log4j1ComponentParser;
28-
import org.apache.logging.converter.config.spi.v1.PropertiesSubset;
2929
import org.w3c.dom.Element;
3030

3131
/**

0 commit comments

Comments
 (0)