Build AsminVoicechat / prepare-release (push) Successful in 14s
Build AsminVoicechat / build-and-test (17) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (18) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (19) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (20) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (21) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (22) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (23) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (24) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (25) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (26) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (27-ea) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (16) (push) Canceled after 38s
145 lines
4.0 KiB
Java
145 lines
4.0 KiB
Java
/*
|
|
* Decompiled with CFR 0.152.
|
|
*
|
|
* Could not load the following classes:
|
|
* javax.annotation.Nullable
|
|
*/
|
|
package de.maxhenkel.voicechat.configbuilder;
|
|
|
|
import de.maxhenkel.voicechat.configbuilder.CommentedProperties;
|
|
import de.maxhenkel.voicechat.configbuilder.Config;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.LinkOption;
|
|
import java.nio.file.OpenOption;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.StandardOpenOption;
|
|
import java.nio.file.attribute.FileAttribute;
|
|
import java.util.Collections;
|
|
import java.util.Map;
|
|
import java.util.concurrent.ExecutorService;
|
|
import java.util.concurrent.Executors;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
import javax.annotation.Nullable;
|
|
|
|
public class CommentedPropertyConfig
|
|
implements Config {
|
|
private static final Logger LOGGER = Logger.getLogger(CommentedPropertyConfig.class.getName());
|
|
private static final ExecutorService SAVE_EXECUTOR_SERVICE = Executors.newSingleThreadExecutor(runnable -> {
|
|
Thread thread = new Thread(runnable);
|
|
thread.setName("ConfigSaver");
|
|
thread.setDaemon(true);
|
|
return thread;
|
|
});
|
|
protected CommentedProperties properties;
|
|
@Nullable
|
|
protected Path path;
|
|
|
|
protected CommentedPropertyConfig(CommentedProperties properties) {
|
|
this.properties = properties;
|
|
}
|
|
|
|
public static Builder builder() {
|
|
return new Builder();
|
|
}
|
|
|
|
public String get(String key) {
|
|
return this.properties.get(key);
|
|
}
|
|
|
|
public boolean has(String key) {
|
|
return this.properties.containsKey(key);
|
|
}
|
|
|
|
public void set(String key, String value, String ... comments) {
|
|
this.properties.set(key, value, comments);
|
|
}
|
|
|
|
public CommentedProperties getProperties() {
|
|
return this.properties;
|
|
}
|
|
|
|
public void load() throws IOException {
|
|
if (this.path == null) {
|
|
return;
|
|
}
|
|
if (Files.exists(this.path, new LinkOption[0])) {
|
|
try (InputStream inputStream = Files.newInputStream(this.path, new OpenOption[0]);){
|
|
this.properties.load(inputStream);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void reload() {
|
|
this.properties.clear();
|
|
try {
|
|
this.load();
|
|
}
|
|
catch (IOException e) {
|
|
LOGGER.log(Level.SEVERE, "Failed to reload config", e);
|
|
}
|
|
}
|
|
|
|
public synchronized void saveSync() {
|
|
if (this.path == null) {
|
|
return;
|
|
}
|
|
try {
|
|
Files.createDirectories(this.path.getParent(), new FileAttribute[0]);
|
|
}
|
|
catch (Exception e) {
|
|
LOGGER.log(Level.SEVERE, "Failed to create parent directories of config", e);
|
|
}
|
|
try (OutputStream stream = Files.newOutputStream(this.path, StandardOpenOption.CREATE, StandardOpenOption.SYNC, StandardOpenOption.TRUNCATE_EXISTING);){
|
|
this.properties.save(stream);
|
|
}
|
|
catch (Exception e) {
|
|
LOGGER.log(Level.SEVERE, "Failed to save config", e);
|
|
}
|
|
}
|
|
|
|
public void save() {
|
|
if (this.path == null) {
|
|
return;
|
|
}
|
|
SAVE_EXECUTOR_SERVICE.execute(this::saveSync);
|
|
}
|
|
|
|
@Override
|
|
public Map<String, String> getEntries() {
|
|
return Collections.unmodifiableMap(this.properties);
|
|
}
|
|
|
|
public static class Builder {
|
|
@Nullable
|
|
private Path path;
|
|
private boolean strict = true;
|
|
|
|
private Builder() {
|
|
}
|
|
|
|
public Builder path(Path path) {
|
|
this.path = path;
|
|
return this;
|
|
}
|
|
|
|
public Builder strict(boolean strict) {
|
|
this.strict = strict;
|
|
return this;
|
|
}
|
|
|
|
public CommentedPropertyConfig build() {
|
|
CommentedPropertyConfig config = new CommentedPropertyConfig(new CommentedProperties(this.strict));
|
|
if (this.path != null) {
|
|
config.path = this.path.toAbsolutePath();
|
|
}
|
|
config.reload();
|
|
return config;
|
|
}
|
|
}
|
|
}
|
|
|