Skip to content

Commit 3b29b59

Browse files
authored
#141 Change CoreConfigurationBuilder to set appropriate source for files and resources (#147)
1 parent b237077 commit 3b29b59

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed

avaje-config/src/main/java/io/avaje/config/CoreConfigurationBuilder.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.io.FileReader;
77
import java.io.IOException;
88
import java.io.UncheckedIOException;
9-
import java.util.LinkedHashMap;
109
import java.util.Map;
1110
import java.util.Properties;
1211
import java.util.ServiceLoader;
@@ -18,7 +17,7 @@
1817
final class CoreConfigurationBuilder implements Configuration.Builder {
1918

2019
private final Parsers parsers = new Parsers();
21-
private final Map<String, String> sourceMap = new LinkedHashMap<>();
20+
private final CoreEntry.CoreMap sourceMap = CoreEntry.newMap();
2221
private ResourceLoader resourceLoader = initialiseResourceLoader();
2322
private ModificationEventRunner eventRunner;
2423
private ConfigurationLog configurationLog;
@@ -47,7 +46,7 @@ public Configuration.Builder resourceLoader(ResourceLoader resourceLoader) {
4746
public Configuration.Builder put(String key, String value) {
4847
requireNonNull(key);
4948
requireNonNull(value);
50-
sourceMap.put(key, value);
49+
sourceMap.put(key, value, "initial");
5150
return this;
5251
}
5352

@@ -56,7 +55,7 @@ public Configuration.Builder putAll(Map<String, ?> source) {
5655
requireNonNull(source);
5756
source.forEach((key, value) -> {
5857
if (key != null && value != null) {
59-
put(key, value.toString());
58+
sourceMap.put(key, value.toString(), "initial");
6059
}
6160
});
6261
return this;
@@ -67,7 +66,7 @@ public Configuration.Builder putAll(Properties source) {
6766
requireNonNull(source);
6867
source.forEach((key, value) -> {
6968
if (key != null && value != null) {
70-
put(key.toString(), value.toString());
69+
sourceMap.put(key.toString(), value.toString(), "initial");
7170
}
7271
});
7372
return this;
@@ -79,7 +78,8 @@ public Configuration.Builder load(String resource) {
7978
try {
8079
try (var inputStream = resourceLoader.getResourceAsStream(resource)) {
8180
if (inputStream != null) {
82-
putAll(configParser.load(inputStream));
81+
var source = "resource:" + resource;
82+
configParser.load(inputStream).forEach((k, v) -> sourceMap.put(k, v, source));
8383
}
8484
return this;
8585
}
@@ -96,7 +96,8 @@ public Configuration.Builder load(File file) {
9696
final var configParser = parser(file.getName());
9797
try {
9898
try (var reader = new FileReader(file)) {
99-
putAll(configParser.load(reader));
99+
var source = "file:" + file.getName();
100+
configParser.load(reader).forEach((k, v) -> sourceMap.put(k, v, source));
100101
return this;
101102
}
102103
} catch (IOException e) {
@@ -144,7 +145,7 @@ public Configuration build() {
144145

145146
private CoreEntry.CoreMap initEntries() {
146147
final var entries = initEntryMap();
147-
sourceMap.forEach((key, value) -> entries.put(key, value, "initial"));
148+
entries.addAll(sourceMap);
148149
return CoreExpressionEval.evalFor(entries);
149150
}
150151

avaje-config/src/main/java/io/avaje/config/CoreEntry.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,13 @@ static class CoreMap {
119119
});
120120
}
121121

122+
/**
123+
* Add all the entries from another source.
124+
*/
125+
void addAll(CoreMap source) {
126+
entryMap.putAll(source.entryMap);
127+
}
128+
122129
int size() {
123130
return entryMap.size();
124131
}

avaje-config/src/test/java/io/avaje/config/CoreConfigurationTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,16 @@ void builder() {
181181
assertEquals(conf.get("myExtraOne"), "baz");
182182
assertEquals(conf.get("my.name"), "Nom");
183183
assertEquals(conf.get("hi.iAmInProps"), "There it is");
184+
var entry = conf.entry("hi.iAmInProps");
185+
assertThat(entry).isPresent().get().satisfies(e -> {
186+
assertThat(e.source()).isEqualTo("resource:hi.properties");
187+
assertThat(e.value()).isEqualTo("There it is");
188+
});
189+
var entryFile = conf.entry("my.name");
190+
assertThat(entryFile).isPresent().get().satisfies(e -> {
191+
assertThat(e.source()).isEqualTo("file:minimal.yaml");
192+
assertThat(e.value()).isEqualTo("Nom");
193+
});
184194

185195
String userHome = System.getProperty("user.home");
186196
assertEquals(conf.get("myHome"), "my/" + userHome + "/home");

0 commit comments

Comments
 (0)