import com.google.common.io.Files;
import java.io.*;
-import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Configuration {
+ public static final String FALLBACK_CATEGORY = "features";
private final File file;
Configuration(File file) {
}
}
- private Map<String, Map<String, Setting<?>>> settingsGroup = new HashMap<>();
+ private final Map<String, Map<String, Setting<?>>> settingsGroup = new HashMap<>();
void load() {
try {
- List<String> lines = Files.readLines(file, Charset.forName("utf-8"));
+ List<String> lines = Files.readLines(file, StandardCharsets.UTF_8);
String category = null;
String lastCommentLine = null;
for (String line : lines) {
}
Map<String, Setting<?>> settings = settingsGroup.get(category);
Setting<?> setting = settings.get(settingName);
- if(setting != null && setting.getType() != type) {
+ if (setting == null && !category.equals(FALLBACK_CATEGORY))
+ setting = getFallbackSetting(settingName, settings);
+ if (setting != null && setting.getType() != type) {
setting = null;
}
if (setting == null) {
return (Setting<T>) setting;
}
+ private Setting<?> getFallbackSetting(String settingName, Map<String, Setting<?>> settings) {
+ Map<String, Setting<?>> fallbackSettings = settingsGroup.get(FALLBACK_CATEGORY);
+ if (fallbackSettings == null) return null;
+
+ Setting<?> setting = fallbackSettings.get(settingName);
+ if (setting != null) {
+ fallbackSettings.remove(settingName);
+ settings.put(settingName, setting);
+ }
+ return setting;
+ }
+
private <T> char getType(T defaultValue) {
String[] typeNames = defaultValue.getClass().getName().split("[.]");
- return typeNames[typeNames.length-1].charAt(0);
+ return typeNames[typeNames.length - 1].charAt(0);
}
void put(Setting<?> setting) {