package openeye.config;
import com.google.common.base.Preconditions;
import com.google.common.collect.Table;
import com.google.common.collect.TreeBasedTable;
import java.io.File;
import java.util.Collection;
import java.util.List;
import openeye.Log;
public class ConfigProcessing {
public static final IConfigProcessingEngine GSON = new GsonConfigProcessingEngine();
private static Table<String, String, IConfigPropertyHolder> categorizeProperties(Collection<IConfigPropertyHolder> properties) {
Table<String, String, IConfigPropertyHolder> result = TreeBasedTable.create();
for (IConfigPropertyHolder property : properties) {
IConfigPropertyHolder prev = result.put(property.category(), property.name(), property);
Preconditions.checkState(prev == null, "Duplicated property %s:%s", property.category(), property.name());
}
return result;
}
private static void loadAndDump(File configFile, IConfigProcessingEngine engine, final List<IConfigPropertyHolder> holders) {
final Table<String, String, IConfigPropertyHolder> properties = categorizeProperties(holders);
final boolean modified = engine.loadConfig(configFile, properties);
if (modified) {
Log.info("Detected missing/malformed fields in file %s, updating", configFile);
engine.dumpConfig(configFile, properties);
}
}
public static void processConfig(File configFile, Class<?> cls, IConfigProcessingEngine engine) {
final List<IConfigPropertyHolder> holders = ConfigPropertyCollector.collectFromClass(cls);
loadAndDump(configFile, engine, holders);
}
public static void processConfig(File configFile, Object target, boolean excludeStatic, IConfigProcessingEngine engine) {
Preconditions.checkNotNull(target);
final List<IConfigPropertyHolder> holders = ConfigPropertyCollector.collectFromInstance(target, excludeStatic);
loadAndDump(configFile, engine, holders);
}
}