Class GraphQLArgument
- java.lang.Object
-
- graphql.schema.GraphQLArgument
-
- All Implemented Interfaces:
GraphQLDirectiveContainer
,GraphQLInputSchemaElement
,GraphQLInputValueDefinition
,GraphQLNamedSchemaElement
,GraphQLSchemaElement
@PublicApi public class GraphQLArgument extends java.lang.Object implements GraphQLNamedSchemaElement, GraphQLInputValueDefinition
This defines an argument that can be supplied to a graphql field (viaGraphQLFieldDefinition
.Fields can be thought of as "functions" that take arguments and return a value.
See https://graphql.org/learn/queries/#arguments for more details on the concept.
GraphQLArgument
is used in two contexts, one context is graphql queries where it represents the arguments that can be set on a field and the other is in Schema Definition Language (SDL) where it can be used to represent the argument value instances that have been supplied on aGraphQLDirective
.The difference is the 'value' and 'defaultValue' properties. In a query argument, the 'value' is never in the GraphQLArgument object but rather in the AST direct or in the query variables map and the 'defaultValue' represents a value to use if both of these are not present. You can think of them like a descriptor of what shape an argument might have.
However, with directives on SDL elements, the value is specified in AST only and transferred into the GraphQLArgument object and the 'defaultValue' comes instead from the directive definition elsewhere in the SDL. You can think of them as 'instances' of arguments, their shape and their specific value on that directive.
Originally graphql-java re-used the
GraphQLDirective
andGraphQLArgument
classes to do both purposes. This was a modelling mistake. NewGraphQLAppliedDirective
andGraphQLAppliedDirectiveArgument
classes have been introduced to better model when a directive is applied to a schema element, as opposed to its schema definition itself.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
GraphQLArgument.Builder
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
CHILD_TYPE
-
Fields inherited from interface graphql.schema.GraphQLDirectiveContainer
CHILD_APPLIED_DIRECTIVES, CHILD_DIRECTIVES
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description TraversalControl
accept(TraverserContext<GraphQLSchemaElement> context, GraphQLTypeVisitor visitor)
GraphQLSchemaElement
copy()
Each GraphQLSchemaElement should make a copy of itself when this is called.boolean
equals(java.lang.Object o)
No GraphQLSchemaElement implements `equals` because we need object identity to treat a GraphQLSchema as an abstract graph.java.util.Map<java.lang.String,java.util.List<GraphQLAppliedDirective>>
getAllAppliedDirectivesByName()
This will return a Map of the all directives that are associated with aGraphQLNamedSchemaElement
, including both repeatable and non-repeatable directives.java.util.Map<java.lang.String,java.util.List<GraphQLDirective>>
getAllDirectivesByName()
This will return a Map of the all directives that are associated with aGraphQLNamedSchemaElement
, including both repeatable and non repeatable directives.GraphQLAppliedDirective
getAppliedDirective(java.lang.String directiveName)
Returns a non-repeatable directive with the provided name.java.util.List<GraphQLAppliedDirective>
getAppliedDirectives()
This will return a list of all the directives that have been put onGraphQLNamedSchemaElement
as a flat list, which may contain repeatable and non-repeatable directives.@NotNull InputValueWithState
getArgumentDefaultValue()
The default value of this argument.static <T> T
getArgumentDefaultValue(GraphQLArgument argument)
This static helper method will give out a java value based on the semantics captured in theInputValueWithState
fromgetArgumentDefaultValue()
Note : You MUST only call this on aGraphQLArgument
that is part of a fully formed schema.@NotNull InputValueWithState
getArgumentValue()
Deprecated.useGraphQLAppliedDirectiveArgument
insteadstatic <T> T
getArgumentValue(GraphQLArgument argument)
Deprecated.useGraphQLAppliedDirectiveArgument
insteadjava.util.List<GraphQLSchemaElement>
getChildren()
SchemaElementChildrenContainer
getChildrenWithTypeReferences()
InputValueDefinition
getDefinition()
The ASTNode
this schema element is based on.java.lang.String
getDeprecationReason()
java.lang.String
getDescription()
GraphQLDirective
getDirective(java.lang.String directiveName)
Returns a non-repeatable directive with the provided name.java.util.List<GraphQLDirective>
getDirectives()
This will return a list of all the directives that have been put onGraphQLNamedSchemaElement
as a flat list, which may contain repeatable and non-repeatable directives.java.util.Map<java.lang.String,GraphQLDirective>
getDirectivesByName()
This will return a Map of the non repeatable directives that are associated with aGraphQLNamedSchemaElement
.java.lang.String
getName()
GraphQLInputType
getType()
int
hashCode()
No GraphQLSchemaElement implements `equals/hashCode` because we need object identity to treat a GraphQLSchema as an abstract graph.boolean
hasSetDefaultValue()
boolean
hasSetValue()
boolean
isDeprecated()
static GraphQLArgument.Builder
newArgument()
static GraphQLArgument.Builder
newArgument(GraphQLArgument existing)
GraphQLAppliedDirectiveArgument
toAppliedArgument()
This method can be used to turn an argument that was being use as an applied argument into one.java.lang.String
toString()
GraphQLArgument
transform(java.util.function.Consumer<GraphQLArgument.Builder> builderConsumer)
This helps you transform the current GraphQLArgument into another one by starting a builder with all the current values and allows you to transform it how you want.GraphQLArgument
withNewChildren(SchemaElementChildrenContainer newChildren)
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface graphql.schema.GraphQLDirectiveContainer
getAppliedDirectives, getDirectives, hasAppliedDirective, hasDirective
-
-
-
-
Field Detail
-
CHILD_TYPE
public static final java.lang.String CHILD_TYPE
- See Also:
- Constant Field Values
-
-
Method Detail
-
getName
public java.lang.String getName()
- Specified by:
getName
in interfaceGraphQLNamedSchemaElement
- Returns:
- the name of this element. This cant be null
-
getType
public GraphQLInputType getType()
- Specified by:
getType
in interfaceGraphQLInputValueDefinition
-
getArgumentDefaultValue
@NotNull public @NotNull InputValueWithState getArgumentDefaultValue()
The default value of this argument.- Returns:
- a
InputValueWithState
that represents the arguments default value
-
hasSetDefaultValue
public boolean hasSetDefaultValue()
-
hasSetValue
public boolean hasSetValue()
-
getArgumentValue
@Deprecated @NotNull public @NotNull InputValueWithState getArgumentValue()
Deprecated.useGraphQLAppliedDirectiveArgument
insteadThis is only used for applied directives, that is when this argument is on aGraphQLDirective
applied to a schema or query element- Returns:
- an input value with state for an applied directive
-
getArgumentValue
@Deprecated public static <T> T getArgumentValue(GraphQLArgument argument)
Deprecated.useGraphQLAppliedDirectiveArgument
insteadThis static helper method will give out a java value based on the semantics captured in theInputValueWithState
fromgetArgumentValue()
Note : You MUST only call this on aGraphQLArgument
that is part of a fully formed schema. We need all of the types to be resolved in order for this work correctly. Note: This method will return null if the value is not set or explicitly set to null. If you you to know the difference when "not set" and "set to null" then you cant use this method. Rather you should usegetArgumentValue()
and use theInputValueWithState.isNotSet()
methods to decide how to handle those values.- Type Parameters:
T
- the type you want it cast as- Parameters:
argument
- the fully formedGraphQLArgument
- Returns:
- a value of type T which is the java value of the argument
-
getArgumentDefaultValue
public static <T> T getArgumentDefaultValue(GraphQLArgument argument)
This static helper method will give out a java value based on the semantics captured in theInputValueWithState
fromgetArgumentDefaultValue()
Note : You MUST only call this on aGraphQLArgument
that is part of a fully formed schema. We need all of the types to be resolved in order for this work correctly. Note: This method will return null if the value is not set or explicitly set to null. If you you to know the difference when "not set" and "set to null" then you cant use this method. Rather you should usegetArgumentDefaultValue()
and use theInputValueWithState.isNotSet()
methods to decide how to handle those values.- Type Parameters:
T
- the type you want it cast as- Parameters:
argument
- the fully formedGraphQLArgument
- Returns:
- a value of type T which is the java value of the argument default
-
getDescription
public java.lang.String getDescription()
- Specified by:
getDescription
in interfaceGraphQLNamedSchemaElement
- Returns:
- the description of this element. This can be null
-
getDeprecationReason
public java.lang.String getDeprecationReason()
-
isDeprecated
public boolean isDeprecated()
-
getDefinition
public InputValueDefinition getDefinition()
Description copied from interface:GraphQLNamedSchemaElement
The ASTNode
this schema element is based on. Is null if the GraphQLSchema is not based on a SDL document. Some elements also have additional extension Nodes. See for exampleGraphQLObjectType.getExtensionDefinitions()
- Specified by:
getDefinition
in interfaceGraphQLNamedSchemaElement
- Returns:
- Node which this element is based on. Can be null.
-
getDirectives
public java.util.List<GraphQLDirective> getDirectives()
Description copied from interface:GraphQLDirectiveContainer
This will return a list of all the directives that have been put onGraphQLNamedSchemaElement
as a flat list, which may contain repeatable and non-repeatable directives.- Specified by:
getDirectives
in interfaceGraphQLDirectiveContainer
- Returns:
- a list of all the directives associated with this named schema element
-
getDirectivesByName
public java.util.Map<java.lang.String,GraphQLDirective> getDirectivesByName()
Description copied from interface:GraphQLDirectiveContainer
This will return a Map of the non repeatable directives that are associated with aGraphQLNamedSchemaElement
. Any repeatable directives will be filtered out of this map.- Specified by:
getDirectivesByName
in interfaceGraphQLDirectiveContainer
- Returns:
- a map of non repeatable directives by directive name.
-
getAllDirectivesByName
public java.util.Map<java.lang.String,java.util.List<GraphQLDirective>> getAllDirectivesByName()
Description copied from interface:GraphQLDirectiveContainer
This will return a Map of the all directives that are associated with aGraphQLNamedSchemaElement
, including both repeatable and non repeatable directives.- Specified by:
getAllDirectivesByName
in interfaceGraphQLDirectiveContainer
- Returns:
- a map of all directives by directive name
-
getDirective
public GraphQLDirective getDirective(java.lang.String directiveName)
Description copied from interface:GraphQLDirectiveContainer
Returns a non-repeatable directive with the provided name. This will throw aAssertException
if the directive is a repeatable directive that has more then one instance.- Specified by:
getDirective
in interfaceGraphQLDirectiveContainer
- Parameters:
directiveName
- the name of the directive to retrieve- Returns:
- the directive or null if there is not one with that name
-
getAppliedDirectives
public java.util.List<GraphQLAppliedDirective> getAppliedDirectives()
Description copied from interface:GraphQLDirectiveContainer
This will return a list of all the directives that have been put onGraphQLNamedSchemaElement
as a flat list, which may contain repeatable and non-repeatable directives.- Specified by:
getAppliedDirectives
in interfaceGraphQLDirectiveContainer
- Returns:
- a list of all the directives associated with this named schema element
-
getAllAppliedDirectivesByName
public java.util.Map<java.lang.String,java.util.List<GraphQLAppliedDirective>> getAllAppliedDirectivesByName()
Description copied from interface:GraphQLDirectiveContainer
This will return a Map of the all directives that are associated with aGraphQLNamedSchemaElement
, including both repeatable and non-repeatable directives.- Specified by:
getAllAppliedDirectivesByName
in interfaceGraphQLDirectiveContainer
- Returns:
- a map of all directives by directive name
-
getAppliedDirective
public GraphQLAppliedDirective getAppliedDirective(java.lang.String directiveName)
Description copied from interface:GraphQLDirectiveContainer
Returns a non-repeatable directive with the provided name.- Specified by:
getAppliedDirective
in interfaceGraphQLDirectiveContainer
- Parameters:
directiveName
- the name of the directive to retrieve- Returns:
- the directive or null if there is not one with that name
-
getChildren
public java.util.List<GraphQLSchemaElement> getChildren()
- Specified by:
getChildren
in interfaceGraphQLSchemaElement
-
getChildrenWithTypeReferences
public SchemaElementChildrenContainer getChildrenWithTypeReferences()
- Specified by:
getChildrenWithTypeReferences
in interfaceGraphQLSchemaElement
-
withNewChildren
public GraphQLArgument withNewChildren(SchemaElementChildrenContainer newChildren)
- Specified by:
withNewChildren
in interfaceGraphQLSchemaElement
-
copy
public GraphQLSchemaElement copy()
Description copied from interface:GraphQLSchemaElement
Each GraphQLSchemaElement should make a copy of itself when this is called. The copy should be included its current contents as they currently exist into a new object.- Specified by:
copy
in interfaceGraphQLSchemaElement
- Returns:
- a copy of this element
-
equals
public final boolean equals(java.lang.Object o)
No GraphQLSchemaElement implements `equals` because we need object identity to treat a GraphQLSchema as an abstract graph.- Specified by:
equals
in interfaceGraphQLSchemaElement
- Overrides:
equals
in classjava.lang.Object
- Parameters:
o
- the reference object with which to compare.- Returns:
true
if this object is the same as the obj argument;false
otherwise.
-
hashCode
public final int hashCode()
No GraphQLSchemaElement implements `equals/hashCode` because we need object identity to treat a GraphQLSchema as an abstract graph.- Specified by:
hashCode
in interfaceGraphQLSchemaElement
- Overrides:
hashCode
in classjava.lang.Object
- Returns:
- a hash code value for this object.
-
transform
public GraphQLArgument transform(java.util.function.Consumer<GraphQLArgument.Builder> builderConsumer)
This helps you transform the current GraphQLArgument into another one by starting a builder with all the current values and allows you to transform it how you want.- Parameters:
builderConsumer
- the consumer code that will be given a builder to transform- Returns:
- a new field based on calling build on that builder
-
newArgument
public static GraphQLArgument.Builder newArgument()
-
newArgument
public static GraphQLArgument.Builder newArgument(GraphQLArgument existing)
-
accept
public TraversalControl accept(TraverserContext<GraphQLSchemaElement> context, GraphQLTypeVisitor visitor)
- Specified by:
accept
in interfaceGraphQLSchemaElement
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
toAppliedArgument
public GraphQLAppliedDirectiveArgument toAppliedArgument()
This method can be used to turn an argument that was being use as an applied argument into one.- Returns:
- an
GraphQLAppliedDirectiveArgument
-
-