Commit 5fd84411 authored by liujiahua123123's avatar liujiahua123123

YAML supported

parent 23663e58
......@@ -114,16 +114,20 @@ public class MiraiServer {
getLogger().info("ready to connect");
/*
this.qqs.put("test",new MiraiConfigSection<String>(){{
put("1","2");
put("11","2");
put("111","2");
put("1111","2");
}});
MiraiConfigSection section = new MiraiConfigSection<MiraiConfigSection<String>>(){{
put("1",new MiraiConfigSection<>(){{
put("1","0");
}});
}};
this.qqs.put("test",section);
this.qqs.save();
*/
System.out.println(this.qqs.get());
MiraiConfigSection<MiraiConfigSection> x = this.qqs.getTypedSection("test");
System.out.println(x.getSection("1").getInt("1"));
/*
System.out.println(v);
......
......@@ -8,9 +8,7 @@ import org.yaml.snakeyaml.Yaml;
import java.io.File;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.*;
/**
* YAML-TYPE CONFIG
......@@ -51,7 +49,7 @@ public class MiraiConfig extends MiraiConfigSection<Object> {
DumperOptions dumperOptions = new DumperOptions();
dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
Yaml yaml = new Yaml(dumperOptions);
String content = yaml.dump(this);
String content = yaml.dump(this.sortedMap);
try {
Utils.writeFile(this.root, content);
} catch (IOException e) {
......@@ -64,12 +62,10 @@ public class MiraiConfig extends MiraiConfigSection<Object> {
DumperOptions dumperOptions = new DumperOptions();
dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
Yaml yaml = new Yaml(dumperOptions);
this.clear();
try {
Map<String, Object> content = yaml.loadAs(Utils.readFile(this.root), LinkedHashMap.class);
LinkedHashMap<String, Object> content = yaml.loadAs(Utils.readFile(this.root), LinkedHashMap.class);
if (content != null) {
this.putAll(content);
System.out.println(this.keySet().toString());
setContent(content);
}
} catch (IOException e) {
e.printStackTrace();
......
package net.mamoe.mirai.utils.config;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.SortedMap;
import java.util.concurrent.ConcurrentSkipListMap;
public class MiraiConfigSection<T> extends MiraiAbstractConfigSection<String, T>{
public class MiraiConfigSection<T> extends MiraiSynchronizedLInkedListMap<String, T> {
public MiraiConfigSection(){
......@@ -27,20 +29,31 @@ public class MiraiConfigSection<T> extends MiraiAbstractConfigSection<String, T>
return String.valueOf(this.get(key));
}
@SuppressWarnings("unchecked")
public <D extends T> MiraiConfigSection<D> getTypedSection(String key){
var content = (SortedMap<String,D>) this.get(key);
return new MiraiConfigSection<>(){{
setContent(Collections.synchronizedSortedMap(content));
}};
@Nullable
@Override
public T put(String key, T value) {
return super.put(key, value);
}
@SuppressWarnings("unchecked")
public <D> MiraiConfigSection<D> getTypedSection(String key){
var content = this.get(key);
if(content instanceof MiraiConfigSection){
return (MiraiConfigSection<D>) content;
}
if(content instanceof Map){
return new MiraiConfigSection<>(){{
setContent((LinkedHashMap<String, D>) content);
}};
}
return null;
}
public MiraiConfigSection<Object> getSection(String key){
var content = (SortedMap<String,Object>) this.get(key);
return new MiraiConfigSection<>(){{
setContent(Collections.synchronizedSortedMap(content));
}};
return this.getTypedSection(key);
}
}
package net.mamoe.mirai.utils.config;
import lombok.Getter;
import lombok.Setter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
public class MiraiAbstractConfigSection<K,V> implements Map<K,V> {
public class MiraiSynchronizedLInkedListMap<K,V> extends AbstractMap<K,V> {
public MiraiSynchronizedLInkedListMap(){
this.sortedMap = Collections.synchronizedMap(new LinkedHashMap<>());
}
private SortedMap<K, V> sortedMap;
protected Map<K, V> sortedMap;
protected void setContent(SortedMap<K,V> map){
this.sortedMap = map;
protected void setContent(LinkedHashMap<K,V> map){
this.sortedMap = Collections.synchronizedMap(map);
}
@Override
public int size() {
return sortedMap.size();
......@@ -79,4 +82,12 @@ public class MiraiAbstractConfigSection<K,V> implements Map<K,V> {
public Set<Entry<K, V>> entrySet() {
return sortedMap.entrySet();
}
@Override
public String toString() {
return this.sortedMap.toString();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment