11package graphql .validation .constraints .standard ;
22
3+ import static graphql .schema .GraphQLTypeUtil .isList ;
4+
35import graphql .GraphQLError ;
46import graphql .Scalars ;
57import graphql .schema .GraphQLDirective ;
810import graphql .validation .constraints .Documentation ;
911import graphql .validation .rules .ValidationEnvironment ;
1012
13+ import java .util .Arrays ;
1114import java .util .Collections ;
1215import java .util .List ;
1316
@@ -26,7 +29,7 @@ public Documentation getDocumentation() {
2629
2730 .example ("updateAccident( accidentNotes : String @NotBlank) : DriverDetails" )
2831
29- .applicableTypeNames (Scalars .GraphQLString .getName (), Scalars .GraphQLID .getName ())
32+ .applicableTypeNames (Scalars .GraphQLString .getName (), Scalars .GraphQLID .getName (), "Lists" )
3033
3134 .directiveSDL ("directive @NotBlank(message : String = \" %s\" ) " +
3235 "on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION" ,
@@ -36,19 +39,38 @@ public Documentation getDocumentation() {
3639
3740 @ Override
3841 public boolean appliesToType (GraphQLInputType inputType ) {
39- return isStringOrID (inputType );
42+ return isStringOrIDOrList (inputType );
4043 }
4144
4245 @ Override
4346 protected List <GraphQLError > runConstraint (ValidationEnvironment validationEnvironment ) {
4447 Object validatedValue = validationEnvironment .getValidatedValue ();
48+ GraphQLInputType argumentType = validationEnvironment .getValidatedType ();
4549
4650 GraphQLDirective directive = validationEnvironment .getContextObject (GraphQLDirective .class );
4751
48- if (validatedValue == null || isBlank (validatedValue )) {
52+ if (validatedValue == null ) {
53+ return mkError (validationEnvironment , directive , mkMessageParams (validatedValue , validationEnvironment ));
54+ }
55+
56+ List <Object > validatedValues ;
57+
58+ if (isList (argumentType )) {
59+ validatedValues = (List )validatedValue ;
60+ } else {
61+ validatedValues = Arrays .asList (validatedValue );
62+ }
63+
64+ if (validatedValues .size () <= 0 ) {
4965 return mkError (validationEnvironment , directive , mkMessageParams (validatedValue , validationEnvironment ));
66+ }
5067
68+ for (Object value : validatedValues ) {
69+ if (isBlank (value )) {
70+ return mkError (validationEnvironment , directive , mkMessageParams (validatedValue , validationEnvironment ));
71+ }
5172 }
73+
5274 return Collections .emptyList ();
5375 }
5476
0 commit comments