package com.oracle.svm.configure.config;
import java.io.IOException;
import java.util.Comparator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.regex.Pattern;
import com.oracle.svm.configure.json.JsonPrintable;
import com.oracle.svm.configure.json.JsonPrinter;
import com.oracle.svm.configure.json.JsonWriter;
import com.oracle.svm.core.configure.ResourcesRegistry;
public class ResourceConfiguration implements JsonPrintable {
public static class ParserAdapter implements ResourcesRegistry {
private final ResourceConfiguration configuration;
public ParserAdapter(ResourceConfiguration configuration) {
this.configuration = configuration;
}
@Override
public void addResources(String pattern) {
configuration.addResourcePattern(pattern);
}
@Override
public void ignoreResources(String pattern) {
configuration.ignoreResourcePattern(pattern);
}
@Override
public void addResourceBundles(String name) {
configuration.addBundle(name);
}
}
private final ConcurrentMap<String, Pattern> addedResources = new ConcurrentHashMap<>();
private final ConcurrentMap<String, Pattern> ignoredResources = new ConcurrentHashMap<>();
private final ConcurrentHashMap.KeySetView<String, Boolean> bundles = ConcurrentHashMap.newKeySet();
public void addResourcePattern(String pattern) {
addedResources.computeIfAbsent(pattern, Pattern::compile);
}
public void ignoreResourcePattern(String pattern) {
ignoredResources.computeIfAbsent(pattern, Pattern::compile);
}
public void addBundle(String bundle) {
bundles.add(bundle);
}
public boolean anyResourceMatches(String s) {
for (Pattern pattern : ignoredResources.values()) {
if (pattern.matcher(s).matches()) {
return false;
}
}
for (Pattern pattern : addedResources.values()) {
if (pattern.matcher(s).matches()) {
return true;
}
}
return false;
}
public boolean anyBundleMatches(String s) {
return bundles.contains(s);
}
@Override
public void printJson(JsonWriter writer) throws IOException {
writer.append('{').indent().newline();
writer.quote("resources").append(':').append('{').newline();
writer.quote("includes").append(':');
JsonPrinter.printCollection(writer, addedResources.keySet(), Comparator.naturalOrder(), (String p, JsonWriter w) -> w.append('{').quote("pattern").append(':').quote(p).append('}'));
if (!ignoredResources.isEmpty()) {
writer.append(',').newline();
writer.quote("excludes").append(':');
JsonPrinter.printCollection(writer, ignoredResources.keySet(), Comparator.naturalOrder(), (String p, JsonWriter w) -> w.append('{').quote("pattern").append(':').quote(p).append('}'));
}
writer.append('}').append(',').newline();
writer.quote("bundles").append(':');
JsonPrinter.printCollection(writer, bundles, Comparator.naturalOrder(), (String p, JsonWriter w) -> w.append('{').quote("name").append(':').quote(p).append('}'));
writer.unindent().newline().append('}').newline();
}
}