diff --git a/src/org/redkale/convert/ConvertFactory.java b/src/org/redkale/convert/ConvertFactory.java index 2ff1aae4c..e9af152fc 100644 --- a/src/org/redkale/convert/ConvertFactory.java +++ b/src/org/redkale/convert/ConvertFactory.java @@ -105,6 +105,7 @@ public abstract class ConvertFactory { this.register(double[].class, DoubleArraySimpledCoder.instance); this.register(String[].class, StringArraySimpledCoder.instance); //--------------------------------------------------------- + this.register(AnyValue.class, Creator.create(AnyValue.DefaultAnyValue.class)); this.register(HttpCookie.class, new Creator() { @Override @Creator.ConstructorParameters({"name", "value"}) diff --git a/src/org/redkale/convert/ObjectDecoder.java b/src/org/redkale/convert/ObjectDecoder.java index 50ba2e3bd..1cd91cf42 100644 --- a/src/org/redkale/convert/ObjectDecoder.java +++ b/src/org/redkale/convert/ObjectDecoder.java @@ -13,7 +13,7 @@ import java.util.Set; import org.redkale.util.*; /** - * 自定义对象的反序列化操作类 + * 自定义对象的反序列化操作类 * *

* 详情见: https://redkale.org @@ -86,6 +86,7 @@ public final class ObjectDecoder implements Decodeable implements Encodeable { static { instance.register(Serializable.class, objectDecoder); instance.register(Serializable.class, objectEncoder); + + instance.register(AnyValue.class, instance.loadDecoder(AnyValue.DefaultAnyValue.class)); + instance.register(AnyValue.class, instance.loadEncoder(AnyValue.DefaultAnyValue.class)); } private BsonFactory(BsonFactory parent, boolean tiny) { diff --git a/src/org/redkale/convert/json/JsonFactory.java b/src/org/redkale/convert/json/JsonFactory.java index ac12404d0..bf1a7011a 100644 --- a/src/org/redkale/convert/json/JsonFactory.java +++ b/src/org/redkale/convert/json/JsonFactory.java @@ -10,7 +10,7 @@ import java.math.BigInteger; import java.net.*; import org.redkale.convert.*; import org.redkale.convert.ext.*; -import org.redkale.util.DLong; +import org.redkale.util.*; /** * @@ -29,6 +29,9 @@ public final class JsonFactory extends ConvertFactory { instance.register(DLong.class, DLongSimpledCoder.DLongJsonSimpledCoder.instance); instance.register(BigInteger.class, BigIntegerSimpledCoder.BigIntegerJsonSimpledCoder.instance); instance.register(Serializable.class, instance.loadEncoder(Object.class)); + + instance.register(AnyValue.class, instance.loadDecoder(AnyValue.DefaultAnyValue.class)); + instance.register(AnyValue.class, instance.loadEncoder(AnyValue.DefaultAnyValue.class)); } private JsonFactory(JsonFactory parent, boolean tiny) { diff --git a/src/org/redkale/util/AnyValue.java b/src/org/redkale/util/AnyValue.java index 3954256cb..4f1025de4 100644 --- a/src/org/redkale/util/AnyValue.java +++ b/src/org/redkale/util/AnyValue.java @@ -39,11 +39,13 @@ public abstract class AnyValue { */ public static final BiPredicate EQUALSIGNORE = (name1, name2) -> name1.equalsIgnoreCase(name2); - private final BiPredicate predicate; + private boolean ignoreCase; - private Entry[] stringValues = new Entry[0]; + private BiPredicate predicate; - private Entry[] entityValues = new Entry[0]; + private Entry[] stringEntrys = new Entry[0]; + + private Entry[] anyEntrys = new Entry[0]; /** * 创建空的DefaultAnyValue对象 @@ -96,27 +98,19 @@ public abstract class AnyValue { * @param ignoreCase name是否不区分大小写 */ public DefaultAnyValue(boolean ignoreCase) { + this.ignoreCase = ignoreCase; this.predicate = ignoreCase ? EQUALSIGNORE : EQUALS; } - /** - * 创建DefaultAnyValue对象 - * - * @param predicate name比较策略 - */ - public DefaultAnyValue(BiPredicate predicate) { - this.predicate = predicate; - } - /** * 创建共享此内容的DefaultAnyValue对象 * * @return DefaultAnyValue对象 */ public DefaultAnyValue duplicate() { - DefaultAnyValue rs = new DefaultAnyValue(this.predicate); - rs.stringValues = this.stringValues; - rs.entityValues = this.entityValues; + DefaultAnyValue rs = new DefaultAnyValue(this.ignoreCase); + rs.stringEntrys = this.stringEntrys; + rs.anyEntrys = this.anyEntrys; return rs; } @@ -124,13 +118,13 @@ public abstract class AnyValue { if (av == null) return this; if (av instanceof DefaultAnyValue) { final DefaultAnyValue adv = (DefaultAnyValue) av; - if (adv.stringValues != null) { - for (Entry en : adv.stringValues) { + if (adv.stringEntrys != null) { + for (Entry en : adv.stringEntrys) { this.addValue(en.name, en.value); } } - if (adv.entityValues != null) { - for (Entry en : adv.entityValues) { + if (adv.anyEntrys != null) { + for (Entry en : adv.anyEntrys) { this.addValue(en.name, en.value); } } @@ -155,13 +149,13 @@ public abstract class AnyValue { if (av == null) return this; if (av instanceof DefaultAnyValue) { final DefaultAnyValue adv = (DefaultAnyValue) av; - if (adv.stringValues != null) { - for (Entry en : adv.stringValues) { + if (adv.stringEntrys != null) { + for (Entry en : adv.stringEntrys) { this.setValue(en.name, en.value); } } - if (adv.entityValues != null) { - for (Entry en : adv.entityValues) { + if (adv.anyEntrys != null) { + for (Entry en : adv.anyEntrys) { this.setValue(en.name, en.value); } } @@ -184,21 +178,41 @@ public abstract class AnyValue { @Override public Entry[] getStringEntrys() { - return stringValues; + return stringEntrys; + } + + public void setStringEntrys(Entry[] stringEntrys) { + this.stringEntrys = stringEntrys; } @Override public Entry[] getAnyEntrys() { - return entityValues; + return anyEntrys; + } + + public void setAnyEntrys(Entry[] anyEntrys) { + this.anyEntrys = anyEntrys; + } + + public boolean isIgnoreCase() { + return ignoreCase; + } + + public void setIgnoreCase(boolean ignoreCase) { + this.ignoreCase = ignoreCase; + if (this.predicate == null) { + this.predicate = ignoreCase ? EQUALSIGNORE : EQUALS; + } } @Override + @java.beans.Transient public String[] getNames() { Set set = new LinkedHashSet<>(); - for (Entry en : this.stringValues) { + for (Entry en : this.stringEntrys) { set.add(en.name); } - for (Entry en : this.entityValues) { + for (Entry en : this.anyEntrys) { set.add(en.name); } return set.toArray(new String[set.size()]); @@ -206,12 +220,12 @@ public abstract class AnyValue { @Override public String[] getValues(String... names) { - return Entry.getValues(this.predicate, String.class, this.stringValues, names); + return Entry.getValues(this.predicate, String.class, this.stringEntrys, names); } @Override public AnyValue[] getAnyValues(String... names) { - return Entry.getValues(this.predicate, AnyValue.class, this.entityValues, names); + return Entry.getValues(this.predicate, AnyValue.class, this.anyEntrys, names); } @Override @@ -220,8 +234,8 @@ public abstract class AnyValue { } public DefaultAnyValue clear() { - this.stringValues = new Entry[0]; - this.entityValues = new Entry[0]; + this.stringEntrys = new Entry[0]; + this.anyEntrys = new Entry[0]; return this; } @@ -230,7 +244,7 @@ public abstract class AnyValue { if (getValue(name) == null) { this.addValue(name, value); } else { - for (Entry en : this.stringValues) { + for (Entry en : this.stringEntrys) { if (predicate.test(en.name, name)) { en.value = value; return this; @@ -245,7 +259,7 @@ public abstract class AnyValue { if (getValue(name) == null) { this.addValue(name, value); } else { - for (Entry en : this.entityValues) { + for (Entry en : this.anyEntrys) { if (predicate.test(en.name, name)) { en.value = value; return this; @@ -264,19 +278,19 @@ public abstract class AnyValue { } public DefaultAnyValue addValue(String name, String value) { - this.stringValues = Utility.append(this.stringValues, new Entry(name, value)); + this.stringEntrys = Utility.append(this.stringEntrys, new Entry(name, value)); return this; } public DefaultAnyValue addValue(String name, AnyValue value) { if (name == null || value == null) return this; - this.entityValues = Utility.append(this.entityValues, new Entry(name, value)); + this.anyEntrys = Utility.append(this.anyEntrys, new Entry(name, value)); return this; } @Override public AnyValue getAnyValue(String name) { - for (Entry en : this.entityValues) { + for (Entry en : this.anyEntrys) { if (predicate.test(en.name, name)) { return en.value; } @@ -286,7 +300,7 @@ public abstract class AnyValue { @Override public String getValue(String name) { - for (Entry en : this.stringValues) { + for (Entry en : this.stringEntrys) { if (predicate.test(en.name, name)) { return en.value; } @@ -296,12 +310,12 @@ public abstract class AnyValue { @Override public String[] getValues(String name) { - return Entry.getValues(this.predicate, String.class, this.stringValues, name); + return Entry.getValues(this.predicate, String.class, this.stringEntrys, name); } @Override public AnyValue[] getAnyValues(String name) { - return Entry.getValues(this.predicate, AnyValue.class, this.entityValues, name); + return Entry.getValues(this.predicate, AnyValue.class, this.anyEntrys, name); } } @@ -312,11 +326,16 @@ public abstract class AnyValue { T value; + @java.beans.ConstructorProperties({"name", "value"}) public Entry(String name0, T value0) { this.name = name0; this.value = value0; } + public String getName() { + return name; + } + public T getValue() { return value; }