1616
1717package com .introproventures .graphql .jpa .query .schema .impl ;
1818
19+ import java .beans .Introspector ;
20+ import java .lang .reflect .AnnotatedElement ;
21+ import java .lang .reflect .Field ;
22+ import java .lang .reflect .Member ;
23+ import java .util .ArrayList ;
24+ import java .util .Collection ;
25+ import java .util .Collections ;
26+ import java .util .HashMap ;
27+ import java .util .LinkedHashMap ;
28+ import java .util .List ;
29+ import java .util .Map ;
30+ import java .util .Optional ;
31+ import java .util .concurrent .atomic .AtomicInteger ;
32+ import java .util .function .Supplier ;
33+ import java .util .stream .Collectors ;
34+ import java .util .stream .Stream ;
35+ import javax .persistence .Convert ;
36+ import javax .persistence .EntityManager ;
37+ import javax .persistence .metamodel .Attribute ;
38+ import javax .persistence .metamodel .EmbeddableType ;
39+ import javax .persistence .metamodel .EntityType ;
40+ import javax .persistence .metamodel .ManagedType ;
41+ import javax .persistence .metamodel .PluralAttribute ;
42+ import javax .persistence .metamodel .SingularAttribute ;
43+ import javax .persistence .metamodel .Type ;
1944import com .introproventures .graphql .jpa .query .annotation .GraphQLIgnore ;
2045import com .introproventures .graphql .jpa .query .annotation .GraphQLIgnoreFilter ;
2146import com .introproventures .graphql .jpa .query .annotation .GraphQLIgnoreOrder ;
4166import graphql .schema .GraphQLList ;
4267import graphql .schema .GraphQLObjectType ;
4368import graphql .schema .GraphQLOutputType ;
69+ import graphql .schema .GraphQLScalarType ;
4470import graphql .schema .GraphQLSchema ;
4571import graphql .schema .GraphQLType ;
4672import graphql .schema .GraphQLTypeReference ;
4975import org .slf4j .Logger ;
5076import org .slf4j .LoggerFactory ;
5177
52- import javax .persistence .Convert ;
53- import javax .persistence .EntityManager ;
54- import javax .persistence .metamodel .Attribute ;
55- import javax .persistence .metamodel .EmbeddableType ;
56- import javax .persistence .metamodel .EntityType ;
57- import javax .persistence .metamodel .ManagedType ;
58- import javax .persistence .metamodel .PluralAttribute ;
59- import javax .persistence .metamodel .SingularAttribute ;
60- import javax .persistence .metamodel .Type ;
61- import java .beans .Introspector ;
62- import java .lang .reflect .AnnotatedElement ;
63- import java .lang .reflect .Field ;
64- import java .lang .reflect .Member ;
65- import java .util .ArrayList ;
66- import java .util .Collection ;
67- import java .util .Collections ;
68- import java .util .HashMap ;
69- import java .util .List ;
70- import java .util .Map ;
71- import java .util .Optional ;
72- import java .util .concurrent .atomic .AtomicInteger ;
73- import java .util .function .Supplier ;
74- import java .util .stream .Collectors ;
75- import java .util .stream .Stream ;
76-
7778import static graphql .Scalars .GraphQLBoolean ;
7879import static graphql .schema .GraphQLArgument .newArgument ;
7980import static graphql .schema .GraphQLInputObjectField .newInputObjectField ;
@@ -133,6 +134,7 @@ public class GraphQLJpaSchemaBuilder implements GraphQLSchemaBuilder {
133134 private boolean enableResultStream = false ;
134135
135136 private RestrictedKeysProvider restrictedKeysProvider = (entityDescriptor ) -> Optional .of (Collections .emptyList ());
137+ private Map <Class <?>, GraphQLScalarType > scalars = new LinkedHashMap <>();
136138
137139 private final Relay relay = new Relay ();
138140
@@ -151,6 +153,8 @@ public GraphQLJpaSchemaBuilder(EntityManager entityManager) {
151153 */
152154 @ Override
153155 public GraphQLSchema build () {
156+ scalars .forEach ((javaType , scalarType ) -> JavaScalars .register (javaType , scalarType ));
157+
154158 GraphQLSchema .Builder schema = GraphQLSchema .newSchema ()
155159 .query (getQueryType ());
156160
@@ -165,6 +169,12 @@ public GraphQLSchema build() {
165169 return schema .build ();
166170 }
167171
172+ public GraphQLJpaSchemaBuilder scalar (Class <?> javaType , GraphQLScalarType scalarType ) {
173+ scalars .put (javaType , scalarType );
174+
175+ return this ;
176+ }
177+
168178 private GraphQLObjectType getQueryType () {
169179 GraphQLObjectType .Builder queryType =
170180 GraphQLObjectType .newObject ()
0 commit comments