rockserver/src/main/java/it/cavallium/rockserver/core/config/ConfigParser.java

67 lines
2.1 KiB
Java

package it.cavallium.rockserver.core.config;
import it.cavallium.rockserver.core.common.RocksDBException;
import it.cavallium.rockserver.core.common.RocksDBException.RocksDBErrorType;
import it.cavallium.rockserver.core.impl.DataSizeDecoder;
import it.cavallium.rockserver.core.impl.DbCompressionDecoder;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import org.github.gestalt.config.builder.GestaltBuilder;
import org.github.gestalt.config.builder.SourceBuilder;
import org.github.gestalt.config.exceptions.GestaltException;
import org.github.gestalt.config.source.ClassPathConfigSourceBuilder;
import org.github.gestalt.config.source.FileConfigSourceBuilder;
public class ConfigParser {
private final GestaltBuilder gsb;
private final List<SourceBuilder<?, ?>> sourceBuilders = new ArrayList<>();
public ConfigParser() {
gsb = new GestaltBuilder();
gsb
.setTreatMissingArrayIndexAsError(false)
.setTreatNullValuesInClassAsErrors(false)
.setTreatMissingValuesAsErrors(false)
.addDecoder(new DataSizeDecoder())
.addDecoder(new DbCompressionDecoder())
.addDefaultConfigLoaders()
.addDefaultDecoders();
}
public static DatabaseConfig parse(Path configPath) {
var parser = new ConfigParser();
parser.addSource(configPath);
return parser.parse();
}
public static DatabaseConfig parseDefault() {
var parser = new ConfigParser();
return parser.parse();
}
public void addSource(Path path) {
if (path != null) {
sourceBuilders.add(FileConfigSourceBuilder.builder().setPath(path));
}
}
public DatabaseConfig parse() {
try {
gsb.addSource(ClassPathConfigSourceBuilder
.builder().setResource("it/cavallium/rockserver/core/resources/default.conf").build());
for (SourceBuilder<?, ?> sourceBuilder : sourceBuilders) {
gsb.addSource(sourceBuilder.build());
}
var gestalt = gsb.build();
gestalt.loadConfigs();
return gestalt.getConfig("database", DatabaseConfig.class);
} catch (GestaltException ex) {
throw RocksDBException.of(RocksDBErrorType.CONFIG_ERROR, ex);
}
}
}