2222@ PublicApi
2323public class ValidationEnvironment {
2424
25+ /**
26+ * The type of element being validated
27+ */
28+ public enum ValidatedElement {
29+ /**
30+ * A output field is being validated
31+ */
32+ FIELD ,
33+ /**
34+ * An argument on a graphql output field is being validated
35+ */
36+ ARGUMENT ,
37+ /**
38+ * A input type field is being validated
39+ */
40+ INPUT_OBJECT_FIELD
41+ }
42+
2543 private final GraphQLFieldsContainer fieldsContainer ;
2644 private final GraphQLFieldDefinition fieldDefinition ;
2745 private final GraphQLArgument argument ;
28- private final GraphQLInputType fieldOrArgumentType ;
29- private final Object validatedValue ;
30- private final ExecutionPath fieldOrArgumentPath ;
3146 private final ExecutionPath executionPath ;
47+ private final ExecutionPath validatedPath ;
3248 private final SourceLocation location ;
3349 private final MessageInterpolator interpolator ;
3450 private final Map <Class , Object > contextMap ;
3551 private final Locale locale ;
3652 private final Map <String , Object > argumentValues ;
53+ private final Object validatedValue ;
54+ private final GraphQLInputType validatedType ;
55+ private final ValidatedElement validatedElement ;
3756
3857 private ValidationEnvironment (Builder builder ) {
3958 this .argument = builder .argument ;
4059 this .argumentValues = Collections .unmodifiableMap (builder .argumentValues );
4160 this .contextMap = Collections .unmodifiableMap (builder .contextMap );
42- this .executionPath = builder .executionPath ;
4361 this .fieldDefinition = builder .fieldDefinition ;
44- this .fieldOrArgumentPath = builder .fieldOrArgumentPath ;
45- this .fieldOrArgumentType = builder .fieldOrArgumentType ;
62+ this .executionPath = builder .executionPath ;
63+ this .validatedPath = builder .validatedPath ;
64+ this .validatedType = builder .validatedType ;
4665 this .fieldsContainer = builder .fieldsContainer ;
4766 this .interpolator = builder .interpolator ;
4867 this .locale = builder .locale ;
4968 this .location = builder .location ;
5069 this .validatedValue = builder .validatedValue ;
70+ this .validatedElement = builder .validatedElement ;
5171 }
5272
5373 public static Builder newValidationEnvironment () {
@@ -71,20 +91,20 @@ public GraphQLArgument getArgument() {
7191 return argument ;
7292 }
7393
74- public ExecutionPath getExecutionPath () {
75- return executionPath ;
76- }
77-
7894 public SourceLocation getLocation () {
7995 return location ;
8096 }
8197
82- public ExecutionPath getFieldOrArgumentPath () {
83- return fieldOrArgumentPath ;
98+ public ExecutionPath getValidatedPath () {
99+ return validatedPath ;
84100 }
85101
86- public GraphQLInputType getFieldOrArgumentType () {
87- return fieldOrArgumentType ;
102+ public ExecutionPath getExecutionPath () {
103+ return executionPath ;
104+ }
105+
106+ public GraphQLInputType getValidatedType () {
107+ return validatedType ;
88108 }
89109
90110 public Object getValidatedValue () {
@@ -103,6 +123,10 @@ public Locale getLocale() {
103123 return locale ;
104124 }
105125
126+ public ValidatedElement getValidatedElement () {
127+ return validatedElement ;
128+ }
129+
106130 public ValidationEnvironment transform (Consumer <Builder > builderConsumer ) {
107131 Builder builder = newValidationEnvironment ().validationEnvironment (this );
108132 builderConsumer .accept (builder );
@@ -113,38 +137,47 @@ public static class Builder {
113137 private final Map <Class , Object > contextMap = new HashMap <>();
114138 private GraphQLArgument argument ;
115139 private Map <String , Object > argumentValues = new HashMap <>();
116- private ExecutionPath executionPath ;
117140 private GraphQLFieldDefinition fieldDefinition ;
118- private ExecutionPath fieldOrArgumentPath = ExecutionPath .rootPath ();
119- private GraphQLInputType fieldOrArgumentType ;
141+ private ExecutionPath validatedPath = ExecutionPath .rootPath ();
142+ private ExecutionPath executionPath ;
120143 private GraphQLFieldsContainer fieldsContainer ;
121144 private MessageInterpolator interpolator ;
122145 private Locale locale ;
123146 private SourceLocation location ;
124147 private Object validatedValue ;
148+ private GraphQLInputType validatedType ;
149+ private ValidatedElement validatedElement ;
125150
126151 public Builder validationEnvironment (ValidationEnvironment validationEnvironment ) {
127152 this .argument = validationEnvironment .argument ;
128153 this .argumentValues = validationEnvironment .argumentValues ;
129154 this .contextMap .putAll (validationEnvironment .contextMap );
130- this .executionPath = validationEnvironment .executionPath ;
131155 this .fieldDefinition = validationEnvironment .fieldDefinition ;
132- this .fieldOrArgumentPath = validationEnvironment .fieldOrArgumentPath ;
133- this .fieldOrArgumentType = validationEnvironment .fieldOrArgumentType ;
156+ this .executionPath = validationEnvironment .executionPath ;
157+ this .validatedPath = validationEnvironment .validatedPath ;
158+ this .validatedType = validationEnvironment .validatedType ;
134159 this .fieldsContainer = validationEnvironment .fieldsContainer ;
135160 this .interpolator = validationEnvironment .interpolator ;
136161 this .locale = validationEnvironment .locale ;
137162 this .location = validationEnvironment .location ;
138163 this .validatedValue = validationEnvironment .validatedValue ;
164+ this .validatedElement = validationEnvironment .validatedElement ;
139165 return this ;
140166 }
141167
142168 public Builder dataFetchingEnvironment (DataFetchingEnvironment dataFetchingEnvironment ) {
143169 fieldsContainer (dataFetchingEnvironment .getExecutionStepInfo ().getFieldContainer ());
144170 fieldDefinition (dataFetchingEnvironment .getFieldDefinition ());
145171 executionPath (dataFetchingEnvironment .getExecutionStepInfo ().getPath ());
172+ validatedPath (dataFetchingEnvironment .getExecutionStepInfo ().getPath ());
146173 location (dataFetchingEnvironment .getField ().getSourceLocation ());
147174 argumentValues (dataFetchingEnvironment .getArguments ());
175+ validatedElement (ValidatedElement .FIELD );
176+ return this ;
177+ }
178+
179+ public Builder argument (GraphQLArgument argument ) {
180+ this .argument = argument ;
148181 return this ;
149182 }
150183
@@ -158,30 +191,23 @@ public Builder fieldsContainer(GraphQLFieldsContainer fieldsContainer) {
158191 return this ;
159192 }
160193
161- public Builder fieldDefinition (GraphQLFieldDefinition fieldDefinition ) {
162- this .fieldDefinition = fieldDefinition ;
163- return this ;
164- }
165-
166194 public Builder executionPath (ExecutionPath executionPath ) {
167195 this .executionPath = executionPath ;
168196 return this ;
169197 }
170198
171- public Builder argument (GraphQLArgument argument ) {
172- this .argument = argument ;
173- fieldOrArgumentType (argument .getType ());
174- fieldOrArgumentPath (ExecutionPath .rootPath ().segment (argument .getName ()));
199+ public Builder fieldDefinition (GraphQLFieldDefinition fieldDefinition ) {
200+ this .fieldDefinition = fieldDefinition ;
175201 return this ;
176202 }
177203
178- public Builder fieldOrArgumentPath ( ExecutionPath fieldOrArgumentPath ) {
179- this .fieldOrArgumentPath = fieldOrArgumentPath ;
204+ public Builder validatedElement ( ValidatedElement validatedElement ) {
205+ this .validatedElement = validatedElement ;
180206 return this ;
181207 }
182208
183- public Builder fieldOrArgumentType (GraphQLInputType fieldOrArgumentType ) {
184- this .fieldOrArgumentType = fieldOrArgumentType ;
209+ public Builder validatedType (GraphQLInputType validatedType ) {
210+ this .validatedType = validatedType ;
185211 return this ;
186212 }
187213
@@ -190,6 +216,11 @@ public Builder validatedValue(Object validatedValue) {
190216 return this ;
191217 }
192218
219+ public Builder validatedPath (ExecutionPath validatedPath ) {
220+ this .validatedPath = validatedPath ;
221+ return this ;
222+ }
223+
193224 public Builder argumentValues (Map <String , Object > argumentValues ) {
194225 this .argumentValues = argumentValues ;
195226 return this ;
0 commit comments