Config import: add support for environment variables

This commit is contained in:
Roel Spilker committed 2020-01-20 14:12:03 +01:00
1 parent df4501a648
commit 0e583c0122
8 files changed
+61 -10

No files matched your search

@@ -27,13 +27,19 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public abstract class ConfigurationFile {
private static final Pattern VARIABLE = Pattern.compile("\\<(.+?)\\>");
private static final String LOMBOK_CONFIG_FILENAME = "lombok.config";
private static final Map<String, String> ENV = new HashMap<String, String>(System.getenv());;
private static final ThreadLocal<byte[]> buffers = new ThreadLocal<byte[]>() {
protected byte[] initialValue() {
@@ -41,6 +47,10 @@ public abstract class ConfigurationFile {
}
};
static void setEnvironment(String key, String value) {
ENV.put(key, value);
}
private final String identifier;
public static ConfigurationFile forFile(File file) {
@@ -48,7 +58,7 @@ public abstract class ConfigurationFile {
}
public static ConfigurationFile forDirectory(File directory) {
return ConfigurationFile.forFile(new File(directory, LOMBOK_CONFIG_FILENAME));
return forFile(new File(directory, LOMBOK_CONFIG_FILENAME));
}
public static ConfigurationFile fromCharSequence(String identifier, CharSequence contents, long lastModified) {
@@ -117,7 +127,7 @@ public abstract class ConfigurationFile {
if (parts.length > 2) return null;
String realFileName = parts[0];
File file = resolveFile(realFileName);
File file = resolveFile(replaceEnvironmentVariables(realFileName));
if (realFileName.endsWith(".zip") || realFileName.endsWith(".jar")) {
try {
return ArchivedConfigurationFile.create(file, URI.create(parts.length == 1 ? LOMBOK_CONFIG_FILENAME : parts[1]));
@@ -166,6 +176,24 @@ public abstract class ConfigurationFile {
File parent = file.getParentFile().getParentFile();
return parent == null ? null : forDirectory(parent);
}
private static String replaceEnvironmentVariables(String fileName) {
int start = 0;;
StringBuffer result = new StringBuffer();
if (fileName.startsWith("~")) {
start = 1;
result.append(System.getProperty("user.home", "~"));
}
Matcher matcher = VARIABLE.matcher(fileName.substring(start));
while (matcher.find()) {
String key = matcher.group(1);
String value = ENV.get(key);
if (value == null) value = "<" + key + ">";
matcher.appendReplacement(result, value);
}
matcher.appendTail(result);
return result.toString();
}
}
private static class ArchivedConfigurationFile extends ConfigurationFile {