Skip to content

Commit 7c25ce5

Browse files
committed
multiple prefixes support, prefix stripping
1 parent 7ddb68a commit 7c25ce5

File tree

6 files changed

+39
-10
lines changed

6 files changed

+39
-10
lines changed

src/main/java/com/github/joschi/jadconfig/AggregatedParameter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,10 @@
1717
* as defined. So if you want to match opensearch.path.repo and opensearch.node.roles, your prefix should be
1818
* {@code opensearch.}
1919
*/
20-
String prefix();
20+
String[] prefix();
21+
22+
/**
23+
* Should the prefix be removed from collected property names?
24+
*/
25+
boolean stripPrefix() default false;
2126
}

src/main/java/com/github/joschi/jadconfig/JadConfig.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Map;
2121
import java.util.Objects;
2222
import java.util.Optional;
23+
import java.util.Set;
2324
import java.util.function.Function;
2425
import java.util.stream.Collectors;
2526

@@ -211,7 +212,7 @@ private void processPrefixParameter(Object configurationBean, Field field) {
211212
AggregatedParameter parameter = field.getAnnotation(AggregatedParameter.class);
212213
if (parameter != null) {
213214
LOG.debug("Processing prefixed field {}", field);
214-
final Map<String, String> params = repositories.stream().flatMap(r -> collectPrefixedParams(r, parameter.prefix()).entrySet().stream()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
215+
final Map<String, String> params = repositories.stream().flatMap(r -> collectPrefixedParams(r, parameter.prefix()).entrySet().stream()).collect(Collectors.toMap(entry -> stripPrefix(entry.getKey(), parameter), Map.Entry::getValue));
215216
try {
216217
field.setAccessible(true);
217218
field.set(configurationBean, params);
@@ -221,8 +222,20 @@ private void processPrefixParameter(Object configurationBean, Field field) {
221222
}
222223
}
223224

224-
private Map<String, String> collectPrefixedParams(Repository repository, String prefix) {
225-
final Collection<String> names = repository.readNames(prefix);
225+
private String stripPrefix(String key, AggregatedParameter parameter) {
226+
if (parameter.stripPrefix()) {
227+
return Arrays.stream(parameter.prefix())
228+
.filter(key::startsWith)
229+
.map(prefix -> key.replaceFirst(prefix, ""))
230+
.findFirst()
231+
.orElse(key);
232+
} else {
233+
return key;
234+
}
235+
}
236+
237+
private Map<String, String> collectPrefixedParams(Repository repository, String[] prefixes) {
238+
final Set<String> names = Arrays.stream(prefixes).flatMap(prefix -> repository.readNames(prefix).stream()).collect(Collectors.toSet());
226239
return names.stream().collect(Collectors.toMap(Function.identity(), repository::read));
227240
}
228241

src/test/java/com/github/joschi/jadconfig/AggregatedPropertiesTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ public void testPrefixProperties() throws ValidationException, RepositoryExcepti
1818
jadConfig.process();
1919

2020
Assert.assertNotNull(configurationBean.getOpensearchProperties());
21-
Assert.assertEquals(3, configurationBean.getOpensearchProperties().size());
21+
Assert.assertEquals(4, configurationBean.getOpensearchProperties().size());
2222

23-
Assert.assertEquals("search,cluster_manager", configurationBean.getOpensearchProperties().get("opensearch.node.roles"));
24-
Assert.assertEquals("10gb", configurationBean.getOpensearchProperties().get("opensearch.node.search.cache.size"));
25-
Assert.assertEquals("/tmp", configurationBean.getOpensearchProperties().get("opensearch.path.repo"));
23+
Assert.assertEquals("search,cluster_manager", configurationBean.getOpensearchProperties().get("node.roles"));
24+
Assert.assertEquals("10gb", configurationBean.getOpensearchProperties().get("node.search.cache.size"));
25+
Assert.assertEquals("/tmp", configurationBean.getOpensearchProperties().get("path.repo"));
26+
Assert.assertEquals("debug", configurationBean.getOpensearchProperties().get("logger.reindex.level"));
2627
}
2728
}

src/test/java/com/github/joschi/jadconfig/repositories/EnvironmentRepositoryTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import org.junit.Before;
66
import org.junit.Test;
77

8+
import java.util.Collection;
9+
810
/**
911
* Unit tests for {@link EnvironmentRepository}
1012
*
@@ -40,6 +42,13 @@ public void testRead() throws RepositoryException {
4042
Assert.assertEquals(System.getenv("JAVA_HOME"), repository.read("JAVA_HOME"));
4143
}
4244

45+
@Test
46+
public void testReadPrefixNames() {
47+
final Collection<String> names = repository.readNames("LC_");
48+
Assert.assertNotNull(names);
49+
Assert.assertTrue(names.contains("LC_NAME"));
50+
}
51+
4352
@Test
4453
public void testUpperCaseEnabledRead() throws RepositoryException {
4554
final EnvironmentRepository testRepository = new EnvironmentRepository(true);

src/test/java/com/github/joschi/jadconfig/testbeans/SimpleConfigurationBean.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public class SimpleConfigurationBean {
6060
@Parameter(value = "test.Nonexistent3", fallbackPropertyName = "test.fallback.secondary")
6161
private String myHardcodedDefaultString = "foobar";
6262

63-
@AggregatedParameter(prefix = "opensearch.")
63+
@AggregatedParameter(prefix = {"opensearch.", "opensearch_"}, stripPrefix = true)
6464
private Map<String, String> opensearchProperties;
6565

6666
public String getMyString() {

src/test/resources/testConfiguration.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ test.fallback.primary=prim
1818
test.fallback.secondary=sec
1919
opensearch.node.roles=search,cluster_manager
2020
opensearch.node.search.cache.size=10gb
21-
opensearch.path.repo=/tmp
21+
opensearch.path.repo=/tmp
22+
opensearch_logger.reindex.level=debug

0 commit comments

Comments
 (0)