5
5
import graphql .schema .validation .InvalidSchemaException ;
6
6
import graphql .schema .validation .SchemaValidationError ;
7
7
import graphql .schema .validation .SchemaValidator ;
8
+ import graphql .schema .visibility .GraphqlFieldVisibility ;
8
9
9
10
import java .util .ArrayList ;
10
11
import java .util .Arrays ;
16
17
import java .util .Set ;
17
18
18
19
import static graphql .Assert .assertNotNull ;
20
+ import static graphql .schema .visibility .DefaultGraphqlFieldVisibility .DEFAULT_FIELD_VISIBILITY ;
19
21
20
22
public class GraphQLSchema {
21
23
24
+
22
25
private final GraphQLObjectType queryType ;
23
26
private final GraphQLObjectType mutationType ;
24
27
private final GraphQLObjectType subscriptionType ;
25
28
private final Map <String , GraphQLType > typeMap ;
26
- private Set <GraphQLType > additionalTypes ;
27
- private Set <GraphQLDirective > directives ;
29
+ private final Set <GraphQLType > additionalTypes ;
30
+ private final Set <GraphQLDirective > directives ;
31
+ private final GraphqlFieldVisibility fieldVisibility ;
32
+
28
33
29
34
public GraphQLSchema (GraphQLObjectType queryType ) {
30
35
this (queryType , null , Collections .emptySet ());
@@ -35,16 +40,18 @@ public GraphQLSchema(GraphQLObjectType queryType, GraphQLObjectType mutationType
35
40
}
36
41
37
42
public GraphQLSchema (GraphQLObjectType queryType , GraphQLObjectType mutationType , GraphQLObjectType subscriptionType , Set <GraphQLType > dictionary ) {
38
- this (queryType , mutationType , subscriptionType , dictionary , Collections .emptySet ());
43
+ this (queryType , mutationType , subscriptionType , dictionary , Collections .emptySet (), DEFAULT_FIELD_VISIBILITY );
39
44
}
40
45
41
- public GraphQLSchema (GraphQLObjectType queryType , GraphQLObjectType mutationType , GraphQLObjectType subscriptionType , Set <GraphQLType > dictionary , Set <GraphQLDirective > directives ) {
46
+ public GraphQLSchema (GraphQLObjectType queryType , GraphQLObjectType mutationType , GraphQLObjectType subscriptionType , Set <GraphQLType > dictionary , Set <GraphQLDirective > directives , GraphqlFieldVisibility fieldVisibility ) {
42
47
assertNotNull (dictionary , "dictionary can't be null" );
43
48
assertNotNull (queryType , "queryType can't be null" );
44
49
assertNotNull (directives , "directives can't be null" );
50
+ assertNotNull (fieldVisibility , "fieldVisibility can't be null" );
45
51
this .queryType = queryType ;
46
52
this .mutationType = mutationType ;
47
53
this .subscriptionType = subscriptionType ;
54
+ this .fieldVisibility = fieldVisibility ;
48
55
this .additionalTypes = dictionary ;
49
56
this .directives = new HashSet <>(Arrays .asList (Directives .IncludeDirective , Directives .SkipDirective ));
50
57
this .directives .addAll (directives );
@@ -75,6 +82,10 @@ public GraphQLObjectType getSubscriptionType() {
75
82
return subscriptionType ;
76
83
}
77
84
85
+ public GraphqlFieldVisibility getFieldVisibility () {
86
+ return fieldVisibility ;
87
+ }
88
+
78
89
public List <GraphQLDirective > getDirectives () {
79
90
return new ArrayList <>(directives );
80
91
}
@@ -94,14 +105,34 @@ public boolean isSupportingSubscriptions() {
94
105
return subscriptionType != null ;
95
106
}
96
107
108
+ /**
109
+ * @return a new schema builder
110
+ */
97
111
public static Builder newSchema () {
98
112
return new Builder ();
99
113
}
100
114
115
+ /**
116
+ * This allows you to build a schema from an existing schema. It copies everything from the existing
117
+ * schema and then allows you to replace them.
118
+ *
119
+ * @param existingSchema the existing schema
120
+ *
121
+ * @return a new schema builder
122
+ */
123
+ public static Builder newSchema (GraphQLSchema existingSchema ) {
124
+ return new Builder ()
125
+ .query (existingSchema .getQueryType ())
126
+ .mutation (existingSchema .getMutationType ())
127
+ .subscription (existingSchema .getSubscriptionType ())
128
+ .fieldVisibility (existingSchema .getFieldVisibility ());
129
+ }
130
+
101
131
public static class Builder {
102
132
private GraphQLObjectType queryType ;
103
133
private GraphQLObjectType mutationType ;
104
134
private GraphQLObjectType subscriptionType ;
135
+ private GraphqlFieldVisibility fieldVisibility = DEFAULT_FIELD_VISIBILITY ;
105
136
106
137
public Builder query (GraphQLObjectType .Builder builder ) {
107
138
return query (builder .build ());
@@ -130,6 +161,11 @@ public Builder subscription(GraphQLObjectType subscriptionType) {
130
161
return this ;
131
162
}
132
163
164
+ public Builder fieldVisibility (GraphqlFieldVisibility fieldVisibility ) {
165
+ this .fieldVisibility = fieldVisibility ;
166
+ return this ;
167
+ }
168
+
133
169
public GraphQLSchema build () {
134
170
return build (Collections .emptySet (), Collections .emptySet ());
135
171
}
@@ -141,7 +177,7 @@ public GraphQLSchema build(Set<GraphQLType> additionalTypes) {
141
177
public GraphQLSchema build (Set <GraphQLType > additionalTypes , Set <GraphQLDirective > additionalDirectives ) {
142
178
assertNotNull (additionalTypes , "additionalTypes can't be null" );
143
179
assertNotNull (additionalDirectives , "additionalDirectives can't be null" );
144
- GraphQLSchema graphQLSchema = new GraphQLSchema (queryType , mutationType , subscriptionType , additionalTypes , additionalDirectives );
180
+ GraphQLSchema graphQLSchema = new GraphQLSchema (queryType , mutationType , subscriptionType , additionalTypes , additionalDirectives , fieldVisibility );
145
181
new SchemaUtil ().replaceTypeReferences (graphQLSchema );
146
182
Collection <SchemaValidationError > errors = new SchemaValidator ().validateSchema (graphQLSchema );
147
183
if (errors .size () > 0 ) {
0 commit comments