48 lines
1.3 KiB
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();
|
|
}
|
|
}
|
|
}
|