Skip to content

Commit 228e980

Browse files
committed
WIP
1 parent 472e454 commit 228e980

File tree

12 files changed

+203
-181
lines changed

12 files changed

+203
-181
lines changed

config-examples/src/main/java/io/scalecube/config/examples/ConfigRegistryExample.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import io.scalecube.config.audit.Slf4JConfigEventListener;
77
import io.scalecube.config.http.server.ConfigRegistryHttpServer;
88
import io.scalecube.config.source.ClassPathConfigSource;
9-
import io.scalecube.config.source.DirectoryConfigSource;
9+
import io.scalecube.config.source.FileDirectoryConfigSource;
1010
import java.nio.file.Path;
1111
import java.util.function.Predicate;
1212

@@ -28,7 +28,7 @@ public static void main(String[] args) {
2828
ConfigRegistrySettings.builder()
2929
.addLastSource("classpath", new ClassPathConfigSource(propsPredicate))
3030
.addLastSource(
31-
"configDirectory", new DirectoryConfigSource(basePath, propsPredicate))
31+
"configDirectory", new FileDirectoryConfigSource(basePath, propsPredicate))
3232
.addListener(new Slf4JConfigEventListener())
3333
.jmxEnabled(true)
3434
.jmxMBeanName("config.exporter:name=ConfigRegistry")

config-examples/src/main/java/io/scalecube/config/examples/DemoConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import io.scalecube.config.mongo.MongoConfigConnector;
1010
import io.scalecube.config.mongo.MongoConfigEventListener;
1111
import io.scalecube.config.mongo.MongoConfigRepository;
12-
import io.scalecube.config.source.DirectoryConfigSource;
12+
import io.scalecube.config.source.FileDirectoryConfigSource;
1313
import java.nio.file.Path;
1414
import java.util.function.Predicate;
1515

@@ -45,7 +45,7 @@ public static void main(String[] args) {
4545
ConfigRegistry.create(
4646
ConfigRegistrySettings.builder()
4747
.addLastSource(
48-
"ConfigDirectory", new DirectoryConfigSource(basePath, propsPredicate))
48+
"ConfigDirectory", new FileDirectoryConfigSource(basePath, propsPredicate))
4949
.addLastSource("MongoConfig", mongoConfigSource)
5050
.addListener(new Slf4JConfigEventListener())
5151
.addListener(new MongoConfigEventListener(connector, auditLogCollectionName))

config-examples/src/main/java/io/scalecube/config/examples/LocalResourceConfigExample.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import io.scalecube.config.ConfigRegistrySettings;
55
import io.scalecube.config.StringConfigProperty;
66
import io.scalecube.config.source.ClassPathConfigSource;
7-
import io.scalecube.config.source.DirectoryConfigSource;
7+
import io.scalecube.config.source.FileDirectoryConfigSource;
88
import java.nio.file.Path;
99
import java.util.function.Predicate;
1010

@@ -26,7 +26,7 @@ public static void main(String[] args) {
2626
ConfigRegistrySettings.builder()
2727
.addLastSource("classpath", new ClassPathConfigSource(propsPredicate))
2828
.addLastSource(
29-
"configDirectory", new DirectoryConfigSource(basePath, propsPredicate))
29+
"configDirectory", new FileDirectoryConfigSource(basePath, propsPredicate))
3030
.jmxEnabled(false)
3131
.build());
3232

config-examples/src/main/java/io/scalecube/config/examples/PredicateOrderingConfigExample.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import io.scalecube.config.source.SystemPropertiesConfigSource;
88
import java.nio.file.Path;
99
import java.util.function.Predicate;
10+
import java.util.stream.Collectors;
11+
import java.util.stream.Stream;
1012

1113
@SuppressWarnings("OptionalGetWithoutIsPresent")
1214
public class PredicateOrderingConfigExample {
@@ -38,7 +40,9 @@ public static void main(String[] args) {
3840
new SystemPropertiesConfigSource(new ClassPathConfigSource(customSysPredicate)))
3941
.addLastSource(
4042
"classpath",
41-
new ClassPathConfigSource(firstPredicate, secondPredicate, rootPredicate))
43+
new ClassPathConfigSource(
44+
Stream.of(firstPredicate, secondPredicate, rootPredicate)
45+
.collect(Collectors.toList())))
4246
.build());
4347

4448
StringConfigProperty orderedProp1 = configRegistry.stringProperty("orderedProp1");

config-examples/src/main/java/io/scalecube/config/examples/ReloadableLocalResourceConfigExample.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import io.scalecube.config.ObjectConfigProperty;
88
import io.scalecube.config.StringConfigProperty;
99
import io.scalecube.config.audit.Slf4JConfigEventListener;
10-
import io.scalecube.config.source.DirectoryConfigSource;
10+
import io.scalecube.config.source.FileDirectoryConfigSource;
1111
import java.io.BufferedWriter;
1212
import java.io.File;
1313
import java.io.FileWriter;
@@ -18,6 +18,8 @@
1818
import java.util.Map;
1919
import java.util.concurrent.TimeUnit;
2020
import java.util.function.Predicate;
21+
import java.util.stream.Collectors;
22+
import java.util.stream.Stream;
2123

2224
@SuppressWarnings("OptionalGetWithoutIsPresent")
2325
public class ReloadableLocalResourceConfigExample {
@@ -39,7 +41,10 @@ public static void main(String[] args) throws Exception {
3941
ConfigRegistrySettings.builder()
4042
.addLastSource(
4143
"configDirectory",
42-
new DirectoryConfigSource(basePath, reloadablePropsPredicate, propsPredicate))
44+
new FileDirectoryConfigSource(
45+
basePath,
46+
Stream.of(reloadablePropsPredicate, propsPredicate)
47+
.collect(Collectors.toList())))
4348
.addListener(new Slf4JConfigEventListener())
4449
.reloadIntervalSec(1)
4550
.build());

config/src/main/java/io/scalecube/config/audit/Slf4JConfigEventListener.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ public void onEvents(Collection<ConfigEvent> events) {
1414
if (!events.isEmpty()) {
1515
StringBuilder sb = new StringBuilder();
1616
sb.append("[");
17-
events
18-
.stream()
17+
events.stream()
1918
.sorted(Comparator.comparing(ConfigEvent::getName))
2019
.forEach(
2120
event -> {
@@ -30,7 +29,7 @@ public void onEvents(Collection<ConfigEvent> events) {
3029
sb.append(originAsString(event));
3130
});
3231
sb.append("\n").append("]");
33-
LOGGER.info("Config property changed: {}", sb);
32+
LOGGER.info("Config properties: {}", sb);
3433
}
3534
}
3635

config/src/main/java/io/scalecube/config/source/ClassPathConfigSource.java

Lines changed: 43 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.scalecube.config.source;
22

33
import io.scalecube.config.ConfigProperty;
4-
import io.scalecube.config.utils.ConfigCollectorUtil;
54
import io.scalecube.config.utils.ThrowableUtil;
65
import java.io.File;
76
import java.io.IOException;
@@ -13,7 +12,6 @@
1312
import java.nio.file.FileSystems;
1413
import java.nio.file.Path;
1514
import java.util.ArrayList;
16-
import java.util.Arrays;
1715
import java.util.Collection;
1816
import java.util.Collections;
1917
import java.util.Enumeration;
@@ -23,41 +21,59 @@
2321
import java.util.Map;
2422
import java.util.Objects;
2523
import java.util.Set;
24+
import java.util.StringJoiner;
2625
import java.util.TreeMap;
2726
import java.util.function.Predicate;
2827
import java.util.jar.JarEntry;
2928
import java.util.jar.JarFile;
29+
import java.util.regex.Pattern;
30+
import java.util.stream.Collectors;
3031

3132
public final class ClassPathConfigSource extends FilteredPathConfigSource {
32-
private final ClassLoader classLoader;
33-
3433
private Map<String, ConfigProperty> loadedConfig;
3534

3635
/**
37-
* Creates provider of configuration properties with classpath as source.
36+
* Constructor.
3837
*
39-
* @param classLoader class loader
40-
* @param predicates list of predicates to filter
38+
* @param predicate predicate to match configuration files
4139
*/
42-
public ClassPathConfigSource(ClassLoader classLoader, List<Predicate<Path>> predicates) {
43-
super(predicates);
44-
this.classLoader =
45-
Objects.requireNonNull(classLoader, "ClassPathConfigSource: classloader is required");
40+
public ClassPathConfigSource(Predicate<Path> predicate) {
41+
this(Collections.singletonList(predicate));
4642
}
4743

44+
/**
45+
* Constructor.
46+
*
47+
* @param predicates list of predicates to match configuration files
48+
*/
4849
public ClassPathConfigSource(List<Predicate<Path>> predicates) {
49-
this(ClassPathConfigSource.class.getClassLoader(), predicates);
50+
super(predicates);
5051
}
5152

52-
@SafeVarargs
53-
public ClassPathConfigSource(ClassLoader classLoader, Predicate<Path>... predicates) {
54-
super(Arrays.asList(predicates));
55-
this.classLoader = classLoader;
56-
}
53+
/**
54+
* Factory method to create {@code ClassPathConfigSource} instance by configuration file mask plus
55+
* its prefixes.
56+
*
57+
* @param mask mask for template of configuration property file
58+
* @param prefixes list of prefixes (comma separated list of strings)
59+
* @return new {@code ClassPathConfigSource} instance
60+
*/
61+
public static ClassPathConfigSource createWithPattern(String mask, List<String> prefixes) {
62+
Objects.requireNonNull(mask, "ClassPathConfigSource: mask is required");
63+
Objects.requireNonNull(prefixes, "ClassPathConfigSource: prefixes is required");
64+
65+
Pattern pattern = Pattern.compile(mask);
66+
67+
Predicate<Path> patternPredicate =
68+
path -> pattern.matcher(path.getFileName().toString()).matches();
5769

58-
@SafeVarargs
59-
public ClassPathConfigSource(Predicate<Path>... predicates) {
60-
this(ClassPathConfigSource.class.getClassLoader(), Arrays.asList(predicates));
70+
List<Predicate<Path>> predicates =
71+
prefixes.stream()
72+
.map(p -> (Predicate<Path>) path -> path.getFileName().startsWith(p))
73+
.map(patternPredicate::and)
74+
.collect(Collectors.toList());
75+
76+
return new ClassPathConfigSource(predicates);
6177
}
6278

6379
@Override
@@ -67,7 +83,7 @@ public Map<String, ConfigProperty> loadConfig() {
6783
}
6884

6985
Collection<Path> pathCollection = new ArrayList<>();
70-
getClassPathEntries(classLoader).stream()
86+
getClassPathEntries(getClass().getClassLoader()).stream()
7187
.filter(uri -> uri.getScheme().equals("file"))
7288
.forEach(
7389
uri -> {
@@ -85,12 +101,11 @@ public Map<String, ConfigProperty> loadConfig() {
85101
}
86102
});
87103

88-
Map<Path, Map<String, String>> configMap = loadConfigMap(pathCollection);
89-
90104
Map<String, ConfigProperty> result = new TreeMap<>();
91-
ConfigCollectorUtil.filterAndCollectInOrder(
105+
106+
filterAndCollectInOrder(
92107
predicates.iterator(),
93-
configMap,
108+
loadConfigMap(pathCollection),
94109
(path, map) ->
95110
map.entrySet()
96111
.forEach(
@@ -174,6 +189,8 @@ private void scanJar(File file, Collection<Path> collector) throws IOException {
174189

175190
@Override
176191
public String toString() {
177-
return "ClassPathConfigSource{" + "classLoader=" + classLoader + '}';
192+
return new StringJoiner(", ", ClassPathConfigSource.class.getSimpleName() + "[", "]")
193+
.add("classLoader=" + getClass().getClassLoader())
194+
.toString();
178195
}
179196
}

config/src/main/java/io/scalecube/config/source/ConfigSourceInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.scalecube.config.source;
22

3-
public class ConfigSourceInfo {
3+
public final class ConfigSourceInfo {
44
private String sourceName;
55
private int priorityOrder;
66
private String configSourceString;

config/src/main/java/io/scalecube/config/source/DirectoryConfigSource.java

Lines changed: 0 additions & 95 deletions
This file was deleted.

0 commit comments

Comments
 (0)