diff --git a/src/com/wentch/redkale/service/DataSourceService.java b/src/com/wentch/redkale/service/DataSourceService.java index 01ecab7dd..e92616ceb 100644 --- a/src/com/wentch/redkale/service/DataSourceService.java +++ b/src/com/wentch/redkale/service/DataSourceService.java @@ -34,12 +34,12 @@ public class DataSourceService implements DataSource, Service { } @Override - public void insert(@SncpCall(EntityCallAttribute.class) T... values) { + public void insert(@SncpCall(DataCallArrayAttribute.class) T... values) { source.insert(values); } @Override - public void insert(DataConnection conn, @SncpCall(EntityCallAttribute.class) T... values) { + public void insert(DataConnection conn, @SncpCall(DataCallArrayAttribute.class) T... values) { source.insert(conn, values); } diff --git a/src/com/wentch/redkale/source/DataCallArrayAttribute.java b/src/com/wentch/redkale/source/DataCallArrayAttribute.java new file mode 100644 index 000000000..1b792bac4 --- /dev/null +++ b/src/com/wentch/redkale/source/DataCallArrayAttribute.java @@ -0,0 +1,57 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.wentch.redkale.source; + +import com.wentch.redkale.util.*; +import java.io.*; +import java.lang.reflect.*; + +/** + * + * @author zhangjx + * @param + * @param + */ +public final class DataCallArrayAttribute implements Attribute { + + public static final DataCallArrayAttribute instance = new DataCallArrayAttribute(); + + @Override + public Class type() { + return (Class) Object.class; + } + + @Override + public Class declaringClass() { + return (Class) (Class) Object[].class; + } + + @Override + public String field() { + return ""; + } + + @Override + public F get(final T[] objs) { + if (objs == null || objs.length == 0) return null; + final Attribute attr = DataCallAttribute.load(objs[0].getClass()); + final Object keys = Array.newInstance(attr.type(), objs.length); + for (int i = 0; i < objs.length; i++) { + Array.set(keys, i, attr.get(objs[i])); + } + return (F) keys; + } + + @Override + public void set(final T[] objs, final F keys) { + if (objs == null || objs.length == 0) return; + final Attribute attr = DataCallAttribute.load(objs[0].getClass()); + for (int i = 0; i < objs.length; i++) { + attr.set(objs[i], (Serializable) Array.get(keys, i)); + } + } + +} diff --git a/src/com/wentch/redkale/source/EntityCallAttribute.java b/src/com/wentch/redkale/source/DataCallAttribute.java similarity index 54% rename from src/com/wentch/redkale/source/EntityCallAttribute.java rename to src/com/wentch/redkale/source/DataCallAttribute.java index b456e8243..3d569ae9e 100644 --- a/src/com/wentch/redkale/source/EntityCallAttribute.java +++ b/src/com/wentch/redkale/source/DataCallAttribute.java @@ -13,16 +13,14 @@ import java.util.concurrent.*; /** * * @author zhangjx - * @param - * @param */ -public final class EntityCallAttribute implements Attribute { +public class DataCallAttribute implements Attribute { - public static final EntityCallAttribute instance = new EntityCallAttribute(); + public static final DataCallAttribute instance = new DataCallAttribute(); private static final ConcurrentHashMap attributes = new ConcurrentHashMap<>(); - private static Attribute load(final Class clazz) { + static Attribute load(final Class clazz) { Attribute rs = attributes.get(clazz); if (rs != null) return rs; synchronized (attributes) { @@ -46,13 +44,13 @@ public final class EntityCallAttribute implements Attribute { } @Override - public Class type() { - return (Class) Object.class; + public Class type() { + return Serializable.class; } @Override - public Class declaringClass() { - return (Class) (Class) Object[].class; + public Class declaringClass() { + return Object.class; } @Override @@ -61,23 +59,14 @@ public final class EntityCallAttribute implements Attribute { } @Override - public F get(final T[] objs) { - if (objs == null || objs.length == 0) return null; - final Attribute attr = (Attribute) load(objs[0].getClass()); - final Object keys = Array.newInstance(attr.type(), objs.length); - for (int i = 0; i < objs.length; i++) { - Array.set(keys, i, attr.get(objs[i])); - } - return (F) keys; + public Serializable get(final Object obj) { + if (obj == null) return null; + return load(obj.getClass()).get(obj); } @Override - public void set(final T[] objs, final F keys) { - if (objs == null || objs.length == 0) return; - final Attribute attr = (Attribute) load(objs[0].getClass()); - for (int i = 0; i < objs.length; i++) { - attr.set(objs[i], (F) Array.get(keys, i)); - } + public void set(final Object obj, final Serializable key) { + if (obj == null) return; + load(obj.getClass()).set(obj, key); } - }