Skip to content

Commit 665f750

Browse files
committed
Do not use introspection to populate specific GlobType in source not in test.
1 parent 229c16f commit 665f750

7 files changed

Lines changed: 139 additions & 69 deletions

File tree

src/main/java/org/globsframework/graphql/GQLGlobCallerBuilder.java

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
import org.globsframework.core.functional.FunctionalKeyBuilder;
55
import org.globsframework.core.metamodel.GlobModel;
66
import org.globsframework.core.metamodel.GlobType;
7-
import org.globsframework.core.metamodel.GlobTypeLoaderFactory;
7+
import org.globsframework.core.metamodel.GlobTypeBuilder;
88
import org.globsframework.core.metamodel.fields.*;
9+
import org.globsframework.core.metamodel.impl.DefaultGlobTypeBuilder;
910
import org.globsframework.core.model.FieldValuesAccessor;
1011
import org.globsframework.core.model.Glob;
1112
import org.globsframework.core.model.MutableGlob;
@@ -189,21 +190,27 @@ public void visitDateTime(DateTimeField field, ZonedDateTime value, Ref<String>
189190
}
190191

191192
public static class CursorType {
192-
public static GlobType TYPE;
193+
public static final GlobType TYPE;
193194

194-
public static StringField lastId;
195+
public static final StringField lastId;
195196

196-
public static StringField lastOrderValue;
197+
public static final StringField lastOrderValue;
197198

198199
static {
199-
GlobTypeLoaderFactory.create(CursorType.class).load();
200+
GlobTypeBuilder typeBuilder = new DefaultGlobTypeBuilder("Cursor");
201+
TYPE = typeBuilder.unCompleteType();
202+
lastId = typeBuilder.declareStringField("lastId");
203+
lastOrderValue = typeBuilder.declareStringField("lastOrderValue");
204+
typeBuilder.complete();
205+
// GlobTypeLoaderFactory.create(CursorType.class).load();
200206
}
201207
}
202208

203209
public record SourceConnectionInfo(Optional<IntegerField> total, GlobField pageInfo, GlobType edgeType,
204210
GlobArrayField edges, GlobField node, Optional<StringField> cursor,
205211
GlobType sourceDataType, PageInfoField pageInfoField) {
206212
}
213+
207214
record PageInfoField(GlobType pageType, StringField startCursor, BooleanField hasNextPage,
208215
StringField endCursor, BooleanField hasPreviousPage) {
209216
}
@@ -358,23 +365,23 @@ private CompletableFuture<GQLGlobType> manageConnection(Field outField, GqlField
358365
Glob last = null;
359366
if (edgesField.isPresent() && edgesType.isPresent()) {
360367
final GqlField edgeGQLField = gqlField.gqlGlobType().aliasToField.get(edgesField.get());
361-
boolean withCursor = edgeCursor.isPresent();
362-
Optional<GqlField> nodeGqlField = edgeNode.map(en -> edgeGQLField.gqlGlobType().aliasToField.get(en));
363-
if (nodeGqlField.isPresent()) {
364-
nodeType = nodeGqlField.get().gqlGlobType();
365-
for (Glob value : values) {
366-
if (first == null) {
367-
first = value;
368-
}
369-
last = value;
370-
final MutableGlob edge = sourceConnectionInfo.edgeType.instantiate();
371-
Optional<StringField> sourceCursor = sourceConnectionInfo.cursor();
372-
if (withCursor && sourceCursor.isPresent()) {
373-
final MutableGlob st = getCursor(gqlField, connectionInfo, value, value.getType())
374-
.set(CursorType.lastId, value.get(connectionInfo.uuidField()));
375-
edge.set(sourceCursor.get(),
376-
Base64.getEncoder().encodeToString(GSonUtils.encode(st, true).getBytes(StandardCharsets.UTF_8)));
377-
}
368+
boolean withCursor = edgeCursor.isPresent();
369+
Optional<GqlField> nodeGqlField = edgeNode.map(en -> edgeGQLField.gqlGlobType().aliasToField.get(en));
370+
if (nodeGqlField.isPresent()) {
371+
nodeType = nodeGqlField.get().gqlGlobType();
372+
for (Glob value : values) {
373+
if (first == null) {
374+
first = value;
375+
}
376+
last = value;
377+
final MutableGlob edge = sourceConnectionInfo.edgeType.instantiate();
378+
Optional<StringField> sourceCursor = sourceConnectionInfo.cursor();
379+
if (withCursor && sourceCursor.isPresent()) {
380+
final MutableGlob st = getCursor(gqlField, connectionInfo, value, value.getType())
381+
.set(CursorType.lastId, value.get(connectionInfo.uuidField()));
382+
edge.set(sourceCursor.get(),
383+
Base64.getEncoder().encodeToString(GSonUtils.encode(st, true).getBytes(StandardCharsets.UTF_8)));
384+
}
378385
newNode.add(
379386
connectionNode
380387
.addChild(edgesField.get(), edgeGQLField.gqlGlobType(), edge)
Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
11
package org.globsframework.graphql.model;
22

33
import org.globsframework.core.metamodel.GlobType;
4-
import org.globsframework.core.metamodel.GlobTypeLoaderFactory;
4+
import org.globsframework.core.metamodel.GlobTypeBuilder;
55
import org.globsframework.core.metamodel.annotations.GlobCreateFromAnnotation;
66
import org.globsframework.core.metamodel.annotations.InitUniqueGlob;
77
import org.globsframework.core.metamodel.annotations.InitUniqueKey;
8+
import org.globsframework.core.metamodel.impl.DefaultGlobTypeBuilder;
89
import org.globsframework.core.model.Glob;
910
import org.globsframework.core.model.Key;
11+
import org.globsframework.core.model.KeyBuilder;
1012

1113
public class GQLMandatory {
12-
public static GlobType TYPE;
14+
public static final GlobType TYPE;
1315

1416
@InitUniqueKey
15-
public static Key KEY;
17+
public static final Key KEY;
1618

1719
@InitUniqueGlob
18-
public static Glob UNIQUE;
20+
public static final Glob UNIQUE;
1921

2022
static {
21-
GlobTypeLoaderFactory.create(GQLMandatory.class, "GQLMandatory")
22-
.register(GlobCreateFromAnnotation.class, annotation -> UNIQUE)
23-
.load();
23+
GlobTypeBuilder typeBuilder = new DefaultGlobTypeBuilder("GQLMandatory");
24+
TYPE = typeBuilder.unCompleteType();
25+
typeBuilder.complete();
26+
KEY = KeyBuilder.newEmptyKey(TYPE);
27+
UNIQUE = TYPE.instantiate();
28+
typeBuilder.register(GlobCreateFromAnnotation.class, annotation -> UNIQUE);
29+
// GlobTypeLoaderFactory.create(GQLMandatory.class, "GQLMandatory")
30+
// .register(GlobCreateFromAnnotation.class, annotation -> UNIQUE)
31+
// .load();
2432
}
2533
}
Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,32 @@
11
package org.globsframework.graphql.model;
22

33
import org.globsframework.core.metamodel.GlobType;
4-
import org.globsframework.core.metamodel.GlobTypeLoaderFactory;
4+
import org.globsframework.core.metamodel.GlobTypeBuilder;
55
import org.globsframework.core.metamodel.fields.BooleanField;
66
import org.globsframework.core.metamodel.fields.StringField;
7+
import org.globsframework.core.metamodel.impl.DefaultGlobTypeBuilder;
78

89
public class GQLPageInfo {
9-
public static GlobType TYPE;
10+
public static final GlobType TYPE;
1011

11-
public static StringField startCursor;
12+
public static final StringField startCursor;
1213

13-
public static StringField endCursor;
14+
public static final StringField endCursor;
1415

1516
@GQLMandatory_
16-
public static BooleanField hasNextPage;
17+
public static final BooleanField hasNextPage;
1718

1819
@GQLMandatory_
19-
public static BooleanField hasPreviousPage;
20+
public static final BooleanField hasPreviousPage;
2021

2122
static {
22-
GlobTypeLoaderFactory.create(GQLPageInfo.class, "GQLPageInfo").load();
23+
GlobTypeBuilder typeBuilder = new DefaultGlobTypeBuilder("GQLPageInfo");
24+
TYPE = typeBuilder.unCompleteType();
25+
startCursor = typeBuilder.declareStringField("startCursor");
26+
endCursor = typeBuilder.declareStringField("endCursor");
27+
hasNextPage = typeBuilder.declareBooleanField("hasNextPage", GQLMandatory.UNIQUE);
28+
hasPreviousPage = typeBuilder.declareBooleanField("hasPreviousPage", GQLMandatory.UNIQUE);
29+
typeBuilder.complete();
30+
// GlobTypeLoaderFactory.create(GQLPageInfo.class, "GQLPageInfo").load();
2331
}
2432
}
Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,51 @@
11
package org.globsframework.graphql.model;
22

33
import org.globsframework.core.metamodel.GlobType;
4-
import org.globsframework.core.metamodel.GlobTypeLoaderFactory;
4+
import org.globsframework.core.metamodel.GlobTypeBuilder;
55
import org.globsframework.core.metamodel.annotations.GlobCreateFromAnnotation;
66
import org.globsframework.core.metamodel.annotations.InitUniqueKey;
77
import org.globsframework.core.metamodel.fields.StringField;
8+
import org.globsframework.core.metamodel.impl.DefaultGlobTypeBuilder;
9+
import org.globsframework.core.model.Glob;
810
import org.globsframework.core.model.Key;
11+
import org.globsframework.core.model.KeyBuilder;
912

1013
public class GQLQueryParam {
11-
public static GlobType TYPE;
14+
public static final GlobType TYPE;
1215

13-
public static StringField name;
16+
public static final StringField name;
1417

1518
@InitUniqueKey
16-
public static Key KEY;
19+
public static final Key KEY;
1720

1821
static {
19-
GlobTypeLoaderFactory.create(GQLQueryParam.class, "GQLQueryParam")
20-
.register(GlobCreateFromAnnotation.class, annotation -> {
21-
try {
22-
return TYPE.instantiate()
23-
.set(name, ((GlobType) ((GQLQueryParam_) annotation).value().getField("TYPE").get(null)).getName());
24-
} catch (Exception e) {
25-
throw new RuntimeException("Fail to extract TYPE");
26-
}
27-
})
28-
.load();
22+
GlobTypeBuilder typeBuilder = new DefaultGlobTypeBuilder("GQLQueryParam");
23+
TYPE = typeBuilder.unCompleteType();
24+
name = typeBuilder.declareStringField("name");
25+
typeBuilder.complete();
26+
KEY = KeyBuilder.newEmptyKey(TYPE);
27+
typeBuilder.register(GlobCreateFromAnnotation.class, annotation -> {
28+
try {
29+
return TYPE.instantiate()
30+
.set(name, ((GlobType) ((GQLQueryParam_) annotation).value().getField("TYPE").get(null)).getName());
31+
} catch (Exception e) {
32+
throw new RuntimeException("Fail to extract TYPE");
33+
}
34+
})
35+
;
36+
// GlobTypeLoaderFactory.create(GQLQueryParam.class, "GQLQueryParam")
37+
// .register(GlobCreateFromAnnotation.class, annotation -> {
38+
// try {
39+
// return TYPE.instantiate()
40+
// .set(name, ((GlobType) ((GQLQueryParam_) annotation).value().getField("TYPE").get(null)).getName());
41+
// } catch (Exception e) {
42+
// throw new RuntimeException("Fail to extract TYPE");
43+
// }
44+
// })
45+
// .load();
46+
}
47+
48+
public static Glob create(GlobType type) {
49+
return TYPE.instantiate().set(name, type.getName());
2950
}
3051
}
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,27 @@
11
package org.globsframework.graphql.model;
22

33
import org.globsframework.core.metamodel.GlobType;
4-
import org.globsframework.core.metamodel.GlobTypeLoaderFactory;
4+
import org.globsframework.core.metamodel.GlobTypeBuilder;
55
import org.globsframework.core.metamodel.fields.StringField;
6+
import org.globsframework.core.metamodel.impl.DefaultGlobTypeBuilder;
7+
import org.globsframework.json.annottations.IsJsonContent;
68
import org.globsframework.json.annottations.IsJsonContent_;
79

810
public class GraphQlRequest {
9-
public static GlobType TYPE;
11+
public static final GlobType TYPE;
1012

11-
public static StringField query;
13+
public static final StringField query;
1214

1315
@IsJsonContent_
14-
public static StringField variables;
16+
public static final StringField variables;
1517

1618
static {
17-
GlobTypeLoaderFactory.create(GraphQlRequest.class).load();
19+
GlobTypeBuilder typeBuilder = new DefaultGlobTypeBuilder("GraphQlRequest");
20+
TYPE = typeBuilder.unCompleteType();
21+
query = typeBuilder.declareStringField("query");
22+
variables = typeBuilder.declareStringField("variables", IsJsonContent.UNIQUE_GLOB);
23+
typeBuilder.complete();
24+
// GlobTypeLoaderFactory.create(GraphQlRequest.class).load();
1825
}
1926
}
2027

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
11
package org.globsframework.graphql.model;
22

33
import org.globsframework.core.metamodel.GlobType;
4-
import org.globsframework.core.metamodel.GlobTypeLoaderFactory;
4+
import org.globsframework.core.metamodel.GlobTypeBuilder;
55
import org.globsframework.core.metamodel.fields.StringField;
6+
import org.globsframework.core.metamodel.impl.DefaultGlobTypeBuilder;
7+
import org.globsframework.json.annottations.IsJsonContent;
68
import org.globsframework.json.annottations.IsJsonContent_;
79

810
public class GraphQlResponse {
9-
public static GlobType TYPE;
11+
public static final GlobType TYPE;
1012

1113
@IsJsonContent_
12-
public static StringField data;
14+
public static final StringField data;
1315

14-
public static StringField errorMessage;
16+
public static final StringField errorMessage;
1517

1618
static {
17-
GlobTypeLoaderFactory.create(GraphQlResponse.class).load();
19+
GlobTypeBuilder typeBuilder = new DefaultGlobTypeBuilder("GraphQlResponse");
20+
TYPE = typeBuilder.unCompleteType();
21+
data = typeBuilder.declareStringField("data", IsJsonContent.UNIQUE_GLOB);
22+
errorMessage = typeBuilder.declareStringField("errorMessage");
23+
typeBuilder.complete();
24+
// GlobTypeLoaderFactory.create(GraphQlResponse.class).load();
1825
}
1926
}
Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,43 @@
11
package org.globsframework.graphql.model;
22

33
import org.globsframework.core.metamodel.GlobType;
4-
import org.globsframework.core.metamodel.GlobTypeLoader;
5-
import org.globsframework.core.metamodel.GlobTypeLoaderFactory;
4+
import org.globsframework.core.metamodel.GlobTypeBuilder;
65
import org.globsframework.core.metamodel.annotations.GlobCreateFromAnnotation;
76
import org.globsframework.core.metamodel.annotations.InitUniqueKey;
87
import org.globsframework.core.metamodel.fields.StringArrayField;
98
import org.globsframework.core.metamodel.fields.StringField;
9+
import org.globsframework.core.metamodel.impl.DefaultGlobTypeBuilder;
1010
import org.globsframework.core.model.Key;
11+
import org.globsframework.core.model.KeyBuilder;
1112

1213
public class GraphqlEnum {
13-
public static GlobType TYPE;
14+
public static final GlobType TYPE;
1415

15-
public static StringField name;
16+
public static final StringField name;
1617

17-
public static StringArrayField values;
18+
public static final StringArrayField values;
1819

1920
@InitUniqueKey
20-
public static Key UNIQUE_KEY;
21+
public static final Key UNIQUE_KEY;
2122

2223
static {
23-
GlobTypeLoader loader = GlobTypeLoaderFactory.create(GraphqlEnum.class, "GraphqlEnum");
24-
loader.register(GlobCreateFromAnnotation.class, annotation ->
24+
GlobTypeBuilder typeBuilder = new DefaultGlobTypeBuilder("GraphqlEnum");
25+
TYPE = typeBuilder.unCompleteType();
26+
name = typeBuilder.declareStringField("name");
27+
values = typeBuilder.declareStringArrayField("values");
28+
typeBuilder.register(GlobCreateFromAnnotation.class, annotation ->
2529
TYPE.instantiate()
2630
.set(name, ((GraphqlEnum_) annotation).name())
2731
.set(values, ((GraphqlEnum_) annotation).values())
28-
).load();
32+
);
33+
typeBuilder.complete();
34+
UNIQUE_KEY = KeyBuilder.newEmptyKey(TYPE);
35+
// GlobTypeLoader loader = GlobTypeLoaderFactory.create(GraphqlEnum.class, "GraphqlEnum");
36+
// loader.register(GlobCreateFromAnnotation.class, annotation ->
37+
// TYPE.instantiate()
38+
// .set(name, ((GraphqlEnum_) annotation).name())
39+
// .set(values, ((GraphqlEnum_) annotation).values())
40+
// ).load();
2941
}
3042

3143
}

0 commit comments

Comments
 (0)