Skip to content

Commit 3ca0e04

Browse files
committed
Update pom and code to glob v5 to managed removal of GlobTypeLoader (introspection) and GlobTypeBuilder init change (no more incomplete GlobType)
1 parent db1faf6 commit 3ca0e04

6 files changed

Lines changed: 82 additions & 45 deletions

File tree

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<packaging>jar</packaging>
77
<artifactId>globs-bin-serialisation</artifactId>
88
<name>Generic Lightweight ObjectS binary serialisation</name>
9-
<version>4.9-SNAPSHOT</version>
9+
<version>5.0-SNAPSHOT</version>
1010

1111
<developers>
1212
<developer>
@@ -131,7 +131,7 @@
131131
<dependency>
132132
<groupId>org.globsframework</groupId>
133133
<artifactId>globs</artifactId>
134-
<version>4.15.0</version>
134+
<version>5.0-SNAPSHOT</version>
135135
</dependency>
136136
<dependency>
137137
<groupId>org.jspecify</groupId>

src/main/java/org/globsframework/serialisation/BinWriterFactory.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
11
package org.globsframework.serialisation;
22

3-
import org.globsframework.core.metamodel.GlobType;
43
import org.globsframework.core.utils.serialization.SerializedOutput;
54
import org.globsframework.serialisation.glob.GlobBinWriter;
6-
import org.globsframework.serialisation.glob.type.GlobTypeFieldWriters;
75
import org.globsframework.serialisation.glob.type.factory.DefaultGlobTypeFieldWritersFactory;
86
import org.globsframework.serialisation.glob.type.manager.DefaultGlobTypeFieldWritersManager;
97
import org.globsframework.serialisation.glob.type.manager.GlobTypeFieldWritersManager;
108

119
import java.io.OutputStream;
1210
import java.util.HashMap;
13-
import java.util.concurrent.ConcurrentHashMap;
11+
import java.util.Map;
1412

1513
public class BinWriterFactory {
1614
private final GlobTypeFieldWritersManager globTypeFieldWritersManager;
1715

18-
private BinWriterFactory(GlobTypeFieldWritersManager globTypeFieldWritersManager1) {
19-
this.globTypeFieldWritersManager = globTypeFieldWritersManager1;
16+
private BinWriterFactory(GlobTypeFieldWritersManager globTypeFieldWritersManager) {
17+
this.globTypeFieldWritersManager = globTypeFieldWritersManager;
2018
}
2119

2220
public static BinWriterFactory create() {
23-
final ConcurrentHashMap<GlobType, GlobTypeFieldWriters> containers = new ConcurrentHashMap<>();
24-
return new BinWriterFactory(new DefaultGlobTypeFieldWritersManager(containers,
25-
new DefaultGlobTypeFieldWritersFactory(containers)));
21+
return new BinWriterFactory(new DefaultGlobTypeFieldWritersManager(Map.of(),
22+
new DefaultGlobTypeFieldWritersFactory(new HashMap<>())));
2623
}
2724

2825
public static BinWriterFactory create(GlobTypeFieldWritersManager globTypeFieldWritersManager) {

src/main/java/org/globsframework/serialisation/model/FieldNumber.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.globsframework.core.model.Glob;
1010
import org.globsframework.core.model.Key;
1111
import org.globsframework.core.model.KeyBuilder;
12+
import org.globsframework.core.model.MutableGlob;
1213

1314
public class FieldNumber {
1415
public static final GlobType TYPE;
@@ -20,17 +21,10 @@ public class FieldNumber {
2021

2122
static {
2223
GlobTypeBuilder typeBuilder = new DefaultGlobTypeBuilder("FieldNumber");
23-
TYPE = typeBuilder.unCompleteType();
2424
fieldNumber = typeBuilder.declareIntegerField("fieldNumber");
25-
typeBuilder.complete();
25+
typeBuilder.register(GlobCreateFromAnnotation.class, annotation -> create(((FieldNumber_) annotation).value()));
26+
TYPE = typeBuilder.build();
2627
KEY = KeyBuilder.newEmptyKey(TYPE);
27-
typeBuilder.register(GlobCreateFromAnnotation.class, annotation -> TYPE.instantiate()
28-
.set(fieldNumber, ((FieldNumber_) annotation).value()));
29-
30-
// GlobTypeLoaderFactory.create(FieldNumber.class, "FieldNumber")
31-
// .register(GlobCreateFromAnnotation.class, annotation -> TYPE.instantiate()
32-
// .set(fieldNumber, ((FieldNumber_) annotation).value()))
33-
// .load();
3428
}
3529

3630
public static Glob create(int index) {

src/main/java/org/globsframework/serialisation/model/UnionType.java

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.globsframework.core.model.Glob;
1212
import org.globsframework.core.model.Key;
1313
import org.globsframework.core.model.KeyBuilder;
14+
import org.globsframework.core.model.MutableGlob;
1415
import org.globsframework.core.utils.exceptions.InvalidParameter;
1516

1617
import java.lang.reflect.Field;
@@ -25,19 +26,26 @@ public class UnionType {
2526

2627
static {
2728
final GlobTypeBuilder globTypeBuilder = GlobTypeBuilderFactory.create("Union");
28-
TYPE = globTypeBuilder.unCompleteType();
29-
mapping = globTypeBuilder.declareGlobArrayField("mapping", ChoiceType.TYPE);
30-
globTypeBuilder.complete();
29+
mapping = globTypeBuilder.declareGlobArrayField("mapping", () -> ChoiceType.TYPE);
30+
globTypeBuilder.register(GlobCreateFromAnnotation.class, annotation -> createAnnotation((UnionType_) annotation));
31+
TYPE = globTypeBuilder.build();
3132
UNIQUE_KEY = KeyBuilder.newEmptyKey(TYPE);
32-
globTypeBuilder.register(GlobCreateFromAnnotation.class, annotation -> {
33-
final UnionType_.ChoiceType_[] value = ((UnionType_) annotation).value();
34-
Glob[] choices = new Glob[value.length];
35-
for (int i = 0; i < choices.length; i++) {
36-
choices[i] = readChoice(value[i]);
37-
}
38-
return TYPE.instantiate()
39-
.set(mapping, choices);
40-
});
33+
}
34+
35+
36+
static public Glob create(Glob... choices) {
37+
return TYPE.instantiate()
38+
.set(mapping, choices);
39+
}
40+
41+
private static MutableGlob createAnnotation(UnionType_ annotation) {
42+
final UnionType_.ChoiceType_[] value = annotation.value();
43+
Glob[] choices = new Glob[value.length];
44+
for (int i = 0; i < choices.length; i++) {
45+
choices[i] = readChoice(value[i]);
46+
}
47+
return TYPE.instantiate()
48+
.set(mapping, choices);
4149
}
4250

4351
public static Glob readChoice(UnionType_.ChoiceType_ choiceType){
@@ -66,12 +74,17 @@ public static class ChoiceType {
6674

6775
public static final StringField typeName;
6876

77+
public static Glob create(String typeName, int index) {
78+
return TYPE.instantiate()
79+
.set(ChoiceType.index, index)
80+
.set(ChoiceType.typeName, typeName);
81+
}
82+
6983
static {
7084
final GlobTypeBuilder globTypeBuilder = GlobTypeBuilderFactory.create("Choice");
71-
TYPE = globTypeBuilder.unCompleteType();
7285
index = globTypeBuilder.declareIntegerField("index");
7386
typeName = globTypeBuilder.declareStringField("type");
74-
globTypeBuilder.complete();
87+
TYPE = globTypeBuilder.build();
7588
}
7689
}
7790
}

src/test/java/org/globsframework/serialisation/BinReaderTest.java

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import junit.framework.TestCase;
44
import org.globsframework.core.metamodel.GlobType;
5+
import org.globsframework.core.metamodel.GlobTypeBuilder;
56
import org.globsframework.core.metamodel.GlobTypeBuilderFactory;
6-
import org.globsframework.core.metamodel.GlobTypeLoaderFactory;
77
import org.globsframework.core.metamodel.annotations.Target;
88
import org.globsframework.core.metamodel.annotations.Targets;
99
import org.globsframework.core.metamodel.fields.*;
@@ -23,6 +23,7 @@
2323
import java.time.Month;
2424
import java.time.ZonedDateTime;
2525
import java.util.List;
26+
import java.util.function.Supplier;
2627

2728
public class BinReaderTest extends TestCase {
2829

@@ -213,7 +214,7 @@ public void testDateTime() throws IOException {
213214
}
214215

215216
private static GlobType createEmptyProto1Type() {
216-
return GlobTypeBuilderFactory.create(Proto1.TYPE.getName()).get();
217+
return GlobTypeBuilderFactory.create(Proto1.TYPE.getName()).build();
217218
}
218219

219220
private static GlobType createPartialProto1Type() {
@@ -226,8 +227,8 @@ private static GlobType createPartialProto1Type() {
226227
.set(UnionType.ChoiceType.index, 2)
227228
.set(UnionType.ChoiceType.index, 2)
228229
.set(UnionType.ChoiceType.typeName, Proto2.TYPE.getName())
229-
})), List.of(Proto2.TYPE))
230-
.get();
230+
})), new Supplier[]{() -> Proto2.TYPE})
231+
.build();
231232
}
232233

233234
public void testBytes() throws IOException {
@@ -423,7 +424,8 @@ public void testUsingBuilder() {
423424
}
424425

425426
public static class Proto1 {
426-
public static GlobType TYPE;
427+
public static final GlobType TYPE;
428+
public static final String NAME = "Proto1";
427429

428430
@FieldNumber_(1)
429431
public static BooleanField booleanField;
@@ -479,18 +481,43 @@ public static class Proto1 {
479481
public static GlobArrayUnionField globArrayUnionField;
480482

481483
static {
482-
GlobTypeLoaderFactory.create(Proto1.class).load();
484+
GlobTypeBuilder typeBuilder = GlobTypeBuilderFactory.create(NAME);
485+
booleanField = typeBuilder.declareBooleanField("booleanField", FieldNumber.create(1));
486+
booleanArrayField = typeBuilder.declareBooleanArrayField("booleanArrayField", FieldNumber.create(2));
487+
intField = typeBuilder.declareIntegerField("intField", FieldNumber.create(3));
488+
intArrayField = typeBuilder.declareIntegerArrayField("intArrayField", FieldNumber.create(4));
489+
longField = typeBuilder.declareLongField("longField", FieldNumber.create(5));
490+
longArrayField = typeBuilder.declareLongArrayField("longArrayField", FieldNumber.create(6));
491+
doubleField = typeBuilder.declareDoubleField("doubleField", FieldNumber.create(7));
492+
doubleArrayField = typeBuilder.declareDoubleArrayField("doubleArrayField", FieldNumber.create(8));
493+
bigDecimalField = typeBuilder.declareBigDecimalField("bigDecimalField", FieldNumber.create(9));
494+
bigDecimalArrayField = typeBuilder.declareBigDecimalArrayField("bigDecimalArrayField", FieldNumber.create(10));
495+
strField = typeBuilder.declareStringField("strField", FieldNumber.create(11));
496+
strArrayField = typeBuilder.declareStringArrayField("strArrayField", FieldNumber.create(12));
497+
dateField = typeBuilder.declareDateField("dateField", FieldNumber.create(13));
498+
dateTimeField = typeBuilder.declareDateTimeField("dateTimeField", FieldNumber.create(14));
499+
BytesField = typeBuilder.declareBytesField("BytesField", FieldNumber.create(15));
500+
globField = typeBuilder.declareGlobField("globField", () -> Proto1.TYPE, FieldNumber.create(16));
501+
globArrayField = typeBuilder.declareGlobArrayField("globArrayField", () -> Proto1.TYPE, FieldNumber.create(17));
502+
globUnionField = typeBuilder.declareGlobUnionField("globUnionField", new Supplier[]{() -> Proto1.TYPE, () -> Proto2.TYPE}, FieldNumber.create(18),
503+
UnionType.create(UnionType.ChoiceType.create(NAME, 1), UnionType.ChoiceType.create(Proto2.NAME, 2)));
504+
globArrayUnionField = typeBuilder.declareGlobUnionArrayField("globArrayUnionField", new Supplier[]{() -> Proto1.TYPE, () -> Proto2.TYPE}, FieldNumber.create(19),
505+
UnionType.create(UnionType.ChoiceType.create(NAME, 1), UnionType.ChoiceType.create(Proto2.NAME, 2)));
506+
TYPE = typeBuilder.build();
483507
}
484508
}
485509

486510
public static class Proto2 {
487-
public static GlobType TYPE;
511+
public static final GlobType TYPE;
512+
public static final String NAME = "Proto2";
488513

489514
@FieldNumber_(1)
490515
public static BooleanField booleanField;
491516

492517
static {
493-
GlobTypeLoaderFactory.create(Proto2.class).load();
518+
GlobTypeBuilder globTypeBuilder = GlobTypeBuilderFactory.create(NAME);
519+
booleanField = globTypeBuilder.declareBooleanField("booleanField", FieldNumber.create(1));
520+
TYPE = globTypeBuilder.build();
494521
}
495522
}
496523
}

src/test/java/org/globsframework/serialisation/PerfReadWriteTest.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void perfStandard() throws IOException {
3838
IntegerField anInt = globTypeBuilder.declareIntegerField("anInt", FieldNumber.create(3));
3939
DoubleField aDouble = globTypeBuilder.declareDoubleField("aDouble", FieldNumber.create(4));
4040

41-
GlobType globType = globTypeBuilder.get();
41+
GlobType globType = globTypeBuilder.build();
4242

4343
List<Glob> collect = IntStream.range(0, 1000)
4444
.mapToObj(i ->
@@ -114,7 +114,7 @@ public void perf() {
114114
IntegerField anInt = globTypeBuilder.declareIntegerField("anInt", FieldNumber.create(3));
115115
DoubleField aDouble = globTypeBuilder.declareDoubleField("aDouble", FieldNumber.create(4));
116116

117-
GlobType globType = globTypeBuilder.get();
117+
GlobType globType = globTypeBuilder.build();
118118

119119
List<Glob> collect = IntStream.range(0, 1000)
120120
.mapToObj(i ->
@@ -124,8 +124,14 @@ public void perf() {
124124
.set(anInt, i)
125125
.set(aDouble, i))
126126
.collect(Collectors.toList());
127-
final BinReaderFactory binReaderFactory = BinReaderFactory.create();
128-
BinWriterFactory binWriterFactory = BinWriterFactory.create();
127+
final GlobTypeFieldReadersManager fieldReadersManager = GlobTypeFieldReadersManager.Builder.init()
128+
.add(globType)
129+
.build();
130+
final BinReaderFactory binReaderFactory = BinReaderFactory.create(fieldReadersManager);
131+
132+
final GlobTypeFieldWritersManager fieldWritersManager = GlobTypeFieldWritersManager.Builder.init()
133+
.add(globType).build();
134+
BinWriterFactory binWriterFactory = BinWriterFactory.create(fieldWritersManager);
129135
byte[] s;
130136
write(collect, binWriterFactory);
131137
write(collect, binWriterFactory);

0 commit comments

Comments
 (0)