From a56c4e0072e24ee2ff61dbc4adb1f32769d0f532 Mon Sep 17 00:00:00 2001 From: godotg Date: Mon, 17 Jun 2024 16:44:14 +0800 Subject: [PATCH] chore[orm]: simplify MapCodec --- .../java/com/zfoo/orm/codec/BaseTypeEnum.java | 63 ------------------- ...BaseTypeKeyMapCodec.java => MapCodec.java} | 9 +-- .../com/zfoo/orm/codec/MapCodecProvider.java | 4 +- .../java/com/zfoo/orm/codec/MapKeyCodec.java | 13 ---- .../com/zfoo/orm/codec/MapKeyCodecEnum.java | 62 ++++++++++++++++++ .../orm/codec/basetype/BooleanMapCodec.java | 15 ----- .../zfoo/orm/codec/basetype/ByteMapCodec.java | 15 ----- .../orm/codec/basetype/CharacterMapCodec.java | 17 ----- .../orm/codec/basetype/DoubleMapCodec.java | 15 ----- .../orm/codec/basetype/FloatMapCodec.java | 15 ----- .../zfoo/orm/codec/basetype/IntMapCodec.java | 17 ----- .../zfoo/orm/codec/basetype/LongMapCodec.java | 17 ----- .../orm/codec/basetype/ShortMapCodec.java | 14 ----- 13 files changed, 69 insertions(+), 207 deletions(-) delete mode 100644 orm/src/main/java/com/zfoo/orm/codec/BaseTypeEnum.java rename orm/src/main/java/com/zfoo/orm/codec/{BaseTypeKeyMapCodec.java => MapCodec.java} (83%) delete mode 100644 orm/src/main/java/com/zfoo/orm/codec/MapKeyCodec.java create mode 100644 orm/src/main/java/com/zfoo/orm/codec/MapKeyCodecEnum.java delete mode 100644 orm/src/main/java/com/zfoo/orm/codec/basetype/BooleanMapCodec.java delete mode 100644 orm/src/main/java/com/zfoo/orm/codec/basetype/ByteMapCodec.java delete mode 100644 orm/src/main/java/com/zfoo/orm/codec/basetype/CharacterMapCodec.java delete mode 100644 orm/src/main/java/com/zfoo/orm/codec/basetype/DoubleMapCodec.java delete mode 100644 orm/src/main/java/com/zfoo/orm/codec/basetype/FloatMapCodec.java delete mode 100644 orm/src/main/java/com/zfoo/orm/codec/basetype/IntMapCodec.java delete mode 100644 orm/src/main/java/com/zfoo/orm/codec/basetype/LongMapCodec.java delete mode 100644 orm/src/main/java/com/zfoo/orm/codec/basetype/ShortMapCodec.java diff --git a/orm/src/main/java/com/zfoo/orm/codec/BaseTypeEnum.java b/orm/src/main/java/com/zfoo/orm/codec/BaseTypeEnum.java deleted file mode 100644 index db0a42ac..00000000 --- a/orm/src/main/java/com/zfoo/orm/codec/BaseTypeEnum.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.zfoo.orm.codec; - -import com.zfoo.orm.codec.basetype.*; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 基础类型枚举 - * @Author:lqh - * @Date:2024/6/17 11:41 - */ -public enum BaseTypeEnum { - - Character(Character.class, new CharacterMapCodec()), - - Boolean(Boolean.class, new BooleanMapCodec()), - - Byte(Byte.class, new ByteMapCodec()), - - Short(Short.class, new ShortMapCodec()), - - Integer(Integer.class, new IntMapCodec()), - - Long(Long.class, new LongMapCodec()), - - Float(Float.class, new FloatMapCodec()), - - Double(Double.class, new DoubleMapCodec()), - - ; - - private final Class clazz; - - private final MapKeyCodec mapKeyCodec; - - - BaseTypeEnum(Class clazz, MapKeyCodec mapKeyCodec) { - this.clazz = clazz; - this.mapKeyCodec = mapKeyCodec; - } - - public static final Map, MapKeyCodec> baseTypeMap = Arrays.stream(values()).collect(Collectors.toMap(BaseTypeEnum::getClazz, BaseTypeEnum::getMapKeyCodec)); - - - public Class getClazz() { - return clazz; - } - - public MapKeyCodec getMapKeyCodec() { - return mapKeyCodec; - } - - public static boolean containsKeyType(Class keyClass){ - return baseTypeMap.containsKey(keyClass); - } - - public static MapKeyCodec getCodec(Class clazz) { - return baseTypeMap.get(clazz); - } -} diff --git a/orm/src/main/java/com/zfoo/orm/codec/BaseTypeKeyMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/MapCodec.java similarity index 83% rename from orm/src/main/java/com/zfoo/orm/codec/BaseTypeKeyMapCodec.java rename to orm/src/main/java/com/zfoo/orm/codec/MapCodec.java index 776d8ca1..0e15dbc0 100644 --- a/orm/src/main/java/com/zfoo/orm/codec/BaseTypeKeyMapCodec.java +++ b/orm/src/main/java/com/zfoo/orm/codec/MapCodec.java @@ -9,19 +9,20 @@ import org.bson.codecs.EncoderContext; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; /** * 基础类型作为key的map解析器 (key 默认不能为null) * @Author:lqh * @Date:2024/6/17 13:55 */ -public class BaseTypeKeyMapCodec implements Codec> { +public class MapCodec implements Codec> { private final Class> encoderClass; private final Codec keyCodec; private final Codec valueCodec; - BaseTypeKeyMapCodec(final Class> encoderClass, final Codec keyCodec, final Codec valueCodec) { + MapCodec(final Class> encoderClass, final Codec keyCodec, final Codec valueCodec) { this.encoderClass = encoderClass; this.keyCodec = keyCodec; this.valueCodec = valueCodec; @@ -50,8 +51,8 @@ public class BaseTypeKeyMapCodec implements Codec> { reader.readStartDocument(); var map = new HashMap(); while (BsonType.END_OF_DOCUMENT != reader.readBsonType()) { - MapKeyCodec codec = (MapKeyCodec) BaseTypeEnum.getCodec(keyCodec.getEncoderClass()); - K key = codec.decode(reader.readName()); + var keyDecodeFunction = (Function) MapKeyCodecEnum.keyDecode(keyCodec.getEncoderClass()); + K key = keyDecodeFunction.apply(reader.readName()); V value = null; if (BsonType.NULL == reader.getCurrentBsonType()) { reader.readNull(); diff --git a/orm/src/main/java/com/zfoo/orm/codec/MapCodecProvider.java b/orm/src/main/java/com/zfoo/orm/codec/MapCodecProvider.java index 63d8475e..8c9af37b 100644 --- a/orm/src/main/java/com/zfoo/orm/codec/MapCodecProvider.java +++ b/orm/src/main/java/com/zfoo/orm/codec/MapCodecProvider.java @@ -25,8 +25,8 @@ public class MapCodecProvider implements PropertyCodecProvider { } var keyType = typeParameters.get(0); var valueType = typeParameters.get(1); - if (BaseTypeEnum.containsKeyType(keyType.getType())){ - return new BaseTypeKeyMapCodec(type.getType(), registry.get(keyType), registry.get(valueType)); + if (MapKeyCodecEnum.containsKeyDecode(keyType.getType())) { + return new MapCodec(type.getType(), registry.get(keyType), registry.get(valueType)); } return null; } diff --git a/orm/src/main/java/com/zfoo/orm/codec/MapKeyCodec.java b/orm/src/main/java/com/zfoo/orm/codec/MapKeyCodec.java deleted file mode 100644 index a9c4bbca..00000000 --- a/orm/src/main/java/com/zfoo/orm/codec/MapKeyCodec.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.zfoo.orm.codec; - -/** - * map key编码接口 - * @Author:lqh - * @Date:2024/6/17 13:51 - */ -public interface MapKeyCodec { - /** - * 解析 - */ - K decode(String key); -} diff --git a/orm/src/main/java/com/zfoo/orm/codec/MapKeyCodecEnum.java b/orm/src/main/java/com/zfoo/orm/codec/MapKeyCodecEnum.java new file mode 100644 index 00000000..2f174490 --- /dev/null +++ b/orm/src/main/java/com/zfoo/orm/codec/MapKeyCodecEnum.java @@ -0,0 +1,62 @@ +package com.zfoo.orm.codec; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 基础类型枚举 + * + * @Author:lqh + * @Date:2024/6/17 11:41 + */ +public enum MapKeyCodecEnum { + + char_key(Character.class, (Function) key -> key.charAt(0)), + + bool_key(Boolean.class, (Function) Boolean::valueOf), + + byte_key(Byte.class, (Function) Byte::valueOf), + + short_key(Short.class, (Function) Short::valueOf), + + int_key(Integer.class, (Function) Integer::valueOf), + + long_key(Long.class, (Function) Long::valueOf), + + float_key(Float.class, (Function) Float::valueOf), + + double_key(Double.class, (Function) Double::valueOf), + + ; + + private final Class keyType; + + private final Function keyDecodeFunction; + + + MapKeyCodecEnum(Class keyType, Function keyDecodeFunction) { + this.keyType = keyType; + this.keyDecodeFunction = keyDecodeFunction; + } + + public static final Map, Function> keyDecodeMap = Arrays.stream(values()).collect(Collectors.toMap(MapKeyCodecEnum::getKeyType, MapKeyCodecEnum::getKeyDecodeFunction)); + + + public Class getKeyType() { + return keyType; + } + + public Function getKeyDecodeFunction() { + return keyDecodeFunction; + } + + public static boolean containsKeyDecode(Class keyClass) { + return keyDecodeMap.containsKey(keyClass); + } + + public static Function keyDecode(Class clazz) { + return keyDecodeMap.get(clazz); + } +} diff --git a/orm/src/main/java/com/zfoo/orm/codec/basetype/BooleanMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/basetype/BooleanMapCodec.java deleted file mode 100644 index e5a49d22..00000000 --- a/orm/src/main/java/com/zfoo/orm/codec/basetype/BooleanMapCodec.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.zfoo.orm.codec.basetype; - -import com.zfoo.orm.codec.MapKeyCodec; - -/** - * @Author:lqh - * @Date:2024/6/17 11:32 - */ -public class BooleanMapCodec implements MapKeyCodec { - @Override - public Boolean decode(String key) { - return Boolean.valueOf(key); - } - -} diff --git a/orm/src/main/java/com/zfoo/orm/codec/basetype/ByteMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/basetype/ByteMapCodec.java deleted file mode 100644 index 73408df4..00000000 --- a/orm/src/main/java/com/zfoo/orm/codec/basetype/ByteMapCodec.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.zfoo.orm.codec.basetype; - - -import com.zfoo.orm.codec.MapKeyCodec; - -/** - * @Author:lqh - * @Date:2024/6/17 11:39 - */ -public class ByteMapCodec implements MapKeyCodec { - @Override - public Byte decode(String key) { - return Byte.valueOf(key); - } -} diff --git a/orm/src/main/java/com/zfoo/orm/codec/basetype/CharacterMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/basetype/CharacterMapCodec.java deleted file mode 100644 index 0b11b90c..00000000 --- a/orm/src/main/java/com/zfoo/orm/codec/basetype/CharacterMapCodec.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.zfoo.orm.codec.basetype; - -import com.zfoo.orm.codec.MapKeyCodec; - - -/** - * @Author:lqh - * @Date:2024/6/17 11:34 - */ -public class CharacterMapCodec implements MapKeyCodec { - - @Override - public Character decode(String key) { - return key.charAt(0); - } - -} diff --git a/orm/src/main/java/com/zfoo/orm/codec/basetype/DoubleMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/basetype/DoubleMapCodec.java deleted file mode 100644 index e6743974..00000000 --- a/orm/src/main/java/com/zfoo/orm/codec/basetype/DoubleMapCodec.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.zfoo.orm.codec.basetype; - -import com.zfoo.orm.codec.MapKeyCodec; - -/** - * @Author:lqh - * @Date:2024/6/17 11:35 - */ -public class DoubleMapCodec implements MapKeyCodec { - - @Override - public Double decode(String key) { - return Double.valueOf(key); - } -} diff --git a/orm/src/main/java/com/zfoo/orm/codec/basetype/FloatMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/basetype/FloatMapCodec.java deleted file mode 100644 index 5b6f1778..00000000 --- a/orm/src/main/java/com/zfoo/orm/codec/basetype/FloatMapCodec.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.zfoo.orm.codec.basetype; - -import com.zfoo.orm.codec.MapKeyCodec; - -/** - * @Author:lqh - * @Date:2024/6/17 11:38 - */ -public class FloatMapCodec implements MapKeyCodec { - - @Override - public Float decode(String key) { - return Float.valueOf(key); - } -} diff --git a/orm/src/main/java/com/zfoo/orm/codec/basetype/IntMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/basetype/IntMapCodec.java deleted file mode 100644 index f5d54f48..00000000 --- a/orm/src/main/java/com/zfoo/orm/codec/basetype/IntMapCodec.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.zfoo.orm.codec.basetype; - -import com.zfoo.orm.codec.MapKeyCodec; - -/** - * map解析器 - * - * @Author:lqh - * @Date:2024/6/14 10:32 - */ -public class IntMapCodec implements MapKeyCodec { - - @Override - public Integer decode(String key) { - return Integer.valueOf(key); - } -} diff --git a/orm/src/main/java/com/zfoo/orm/codec/basetype/LongMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/basetype/LongMapCodec.java deleted file mode 100644 index d0f0f5cc..00000000 --- a/orm/src/main/java/com/zfoo/orm/codec/basetype/LongMapCodec.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.zfoo.orm.codec.basetype; - -import com.zfoo.orm.codec.MapKeyCodec; - -/** - * map解析器 - * - * @Author:lqh - * @Date:2024/6/14 10:32 - */ -public class LongMapCodec implements MapKeyCodec { - - @Override - public Long decode(String key) { - return Long.valueOf(key); - } -} diff --git a/orm/src/main/java/com/zfoo/orm/codec/basetype/ShortMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/basetype/ShortMapCodec.java deleted file mode 100644 index cdad2085..00000000 --- a/orm/src/main/java/com/zfoo/orm/codec/basetype/ShortMapCodec.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zfoo.orm.codec.basetype; - -import com.zfoo.orm.codec.MapKeyCodec; - -/** - * @Author:lqh - * @Date:2024/6/17 11:38 - */ -public class ShortMapCodec implements MapKeyCodec { - @Override - public Short decode(String key) { - return Short.valueOf(key); - } -}