skunkworks/com/danitheskunk/skunkworks/Data.java

48 lines
1.3 KiB
Java

package com.danitheskunk.skunkworks;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
public class Data {
private Runnable callback;
private String currentCategory;
private final LinkedHashMap<String, LinkedHashMap<String, String>> data;
public Data(ByteBuffer data) {
this.data = new LinkedHashMap<>();
currentCategory = "";
this.data.put("", new LinkedHashMap<>());
StandardCharsets.UTF_8.decode(data).toString().lines().forEach(this::processLine);
}
public String get(String category, String key) {
return data.get(category).get(key);
}
public void onReload(Runnable callback) {
this.callback = callback;
}
private void processLine(String line) {
if(line.contains("=")) {
var parts = line.split("=", 2);
data.get(currentCategory).put(parts[0].strip(), parts[1].strip());
} else if(line.startsWith("[") && line.endsWith("]")) {
currentCategory = line.substring(1, line.length() - 1);
if(!data.containsKey(currentCategory)) {
data.put(currentCategory, new LinkedHashMap<>());
}
}
}
public void reload(ByteBuffer data) {
this.data.clear();
this.data.put("", new LinkedHashMap<>());
StandardCharsets.UTF_8.decode(data).toString().lines().forEach(this::processLine);
if(callback != null) {
callback.run();
}
}
}