Skip to content

Commit 724a1b6

Browse files
committed
AdaptiveRecordCodec: now will not output transient fields
1 parent ae45fc1 commit 724a1b6

5 files changed

Lines changed: 37 additions & 12 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@
321321
<dependency>
322322
<groupId>org.osgl</groupId>
323323
<artifactId>genie</artifactId>
324-
<version>[0.3.0-SNAPSHOT,)</version>
324+
<version>[0.4.0-SNAPSHOT,)</version>
325325
</dependency>
326326

327327
<dependency>

src/main/java/act/db/AdaptiveRecord.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
import org.osgl.$;
77
import org.osgl.Osgl;
88
import org.osgl.exception.NotAppliedException;
9+
import org.osgl.inject.BeanSpec;
10+
import org.osgl.inject.Injector;
911
import org.osgl.util.E;
1012
import org.osgl.util.S;
1113

14+
import java.beans.Transient;
1215
import java.lang.annotation.Annotation;
1316
import java.lang.reflect.Field;
1417
import java.lang.reflect.InvocationTargetException;
@@ -78,6 +81,16 @@ public interface AdaptiveRecord<ID_TYPE, MODEL_TYPE extends AdaptiveRecord> exte
7881
*/
7982
Set<Map.Entry<String, Object>> entrySet();
8083

84+
/**
85+
* Returns a set of entries stored in the active record. For
86+
* field entries, use the field filter specified to check
87+
* if it needs to be added into the return set
88+
* @param fieldFilter the function that returns `true` or `false` for
89+
* bean spec of a certain field declared in the class
90+
* @return the entry set with field filter applied
91+
*/
92+
Set<Map.Entry<String, Object>> entrySet($.Function<BeanSpec, Boolean> fieldFilter);
93+
8194
/**
8295
* Returns a Map typed object backed by this active record
8396
* @return a Map backed by this active record
@@ -88,13 +101,14 @@ public interface AdaptiveRecord<ID_TYPE, MODEL_TYPE extends AdaptiveRecord> exte
88101
* Returns the meta info of this AdaptiveRecord
89102
* @return
90103
*/
104+
@Transient
91105
MetaInfo metaInfo();
92106

93107
class MetaInfo {
94108
private Class<? extends AdaptiveRecord> arClass;
95109
public String className;
96110
private Class<? extends Annotation> transientAnnotationType;
97-
public Set<Field> fields;
111+
public Map<String, BeanSpec> fieldSpecs;
98112
public Map<String, Type> fieldTypes;
99113
public Map<String, $.Function> fieldGetters;
100114
public Map<String, $.Func2> fieldSetters;
@@ -112,13 +126,14 @@ public Type fieldType(String fieldName) {
112126

113127
private void discoverFields(Class<? extends AdaptiveRecord> clazz) {
114128
List<Field> list = $.fieldsOf(arClass, $.F.NON_STATIC_FIELD/*.and($.F.fieldWithAnnotation(transientAnnotationType)).negate()*/);
115-
fields = new HashSet<Field>();
116-
fieldTypes = new HashMap<String, Type>();
117-
fieldGetters = new HashMap<String, Osgl.Function>();
118-
fieldSetters = new HashMap<String, Osgl.Func2>();
129+
fieldSpecs = new HashMap<>();
130+
fieldTypes = new HashMap<>();
131+
fieldGetters = new HashMap<>();
132+
fieldSetters = new HashMap<>();
133+
Injector injector = Act.app().injector();
119134
for (Field f : list) {
120135
//if (!f.isAnnotationPresent(transientAnnotationType)) {
121-
fields.add(f);
136+
fieldSpecs.put(f.getName(), BeanSpec.of(f, injector));
122137
fieldTypes.put(f.getName(), f.getGenericType());
123138
fieldGetters.put(f.getName(), fieldGetter(f, clazz));
124139
fieldSetters.put(f.getName(), fieldSetter(f, clazz));
@@ -211,7 +226,7 @@ public static class Repository extends AppServicePlugin {
211226
protected void applyTo(App app) {
212227
}
213228

214-
private ConcurrentMap<Class<?>, MetaInfo> map = new ConcurrentHashMap<Class<?>, MetaInfo>();
229+
private ConcurrentMap<Class<?>, MetaInfo> map = new ConcurrentHashMap<>();
215230

216231
public MetaInfo get(Class<? extends AdaptiveRecord> clazz, $.Function<Class<? extends AdaptiveRecord>, MetaInfo> factory) {
217232
MetaInfo info = map.get(clazz);

src/main/java/act/db/ModelBase.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.osgl.$;
66
import org.osgl.util.Generics;
77

8+
import java.beans.Transient;
89
import java.lang.reflect.Type;
910
import java.util.List;
1011

@@ -13,13 +14,11 @@
1314
* @param <MODEL_TYPE> the generic type of Model class
1415
* @param <ID_TYPE> the generic type of the ID (Key)
1516
*/
17+
@NoBind
1618
public abstract class ModelBase<ID_TYPE, MODEL_TYPE extends ModelBase>
1719
implements Model<ID_TYPE, MODEL_TYPE> {
1820

19-
@NoBind
2021
protected transient Type idType;
21-
22-
@NoBind
2322
protected transient Type modelType;
2423

2524
public ModelBase() {

src/main/java/act/db/TimeTrackingModelBase.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package act.db;
22

33
import act.data.Timestamped;
4+
import act.inject.param.NoBind;
45
import org.osgl.$;
56

7+
@NoBind
68
public abstract class TimeTrackingModelBase<
79
ID_TYPE, MODEL_TYPE extends ModelBase,
810
TIMESTAMP_TYPE, TIMESTAMP_TYPE_RESOLVER extends $.Function<TIMESTAMP_TYPE, Long>

src/main/java/act/util/AdaptiveRecordCodec.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import com.alibaba.fastjson.parser.*;
99
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
1010
import com.alibaba.fastjson.serializer.*;
11+
import org.osgl.$;
12+
import org.osgl.inject.BeanSpec;
1113
import org.osgl.util.KVStore;
1214

1315
import java.io.IOException;
@@ -143,6 +145,13 @@ public static AdaptiveRecord parseActiveRecord(DefaultJSONParser parser, Adaptiv
143145

144146
}
145147

148+
private static $.Predicate<BeanSpec> fieldFilter = new $.Predicate<BeanSpec>() {
149+
@Override
150+
public boolean test(BeanSpec beanSpec) {
151+
return !beanSpec.isTransient();
152+
}
153+
};
154+
146155
@Override
147156
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
148157
SerializeWriter out = serializer.out;
@@ -183,7 +192,7 @@ public void write(JSONSerializer serializer, Object object, Object fieldName, Ty
183192
}
184193
}
185194

186-
for (Map.Entry<String, Object> entry : ar.entrySet()) {
195+
for (Map.Entry<String, Object> entry : ar.entrySet(fieldFilter)) {
187196
Object value = entry.getValue();
188197

189198
String entryKey = entry.getKey();

0 commit comments

Comments
 (0)