Commit 5fd84411 authored by liujiahua123123's avatar liujiahua123123

YAML supported

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