All Downloads are FREE. Search and download functionalities are using the official Maven repository.

graphql.execution.directives.QueryAppliedDirectiveArgument Maven / Gradle / Ivy

There is a newer version: 230521-nf-execution
Show newest version
package graphql.execution.directives;


import graphql.Assert;
import graphql.GraphQLContext;
import graphql.PublicApi;
import graphql.language.Argument;
import graphql.language.Value;
import graphql.schema.GraphQLArgument;
import graphql.schema.GraphQLInputType;
import graphql.schema.GraphqlTypeBuilder;
import graphql.schema.InputValueWithState;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Locale;
import java.util.function.Consumer;

import static graphql.Assert.assertNotNull;
import static graphql.Assert.assertValidName;
import static graphql.execution.ValuesResolver.getInputValueImpl;

/**
 * This represents the argument values that can be placed on an {@link QueryAppliedDirective}.
 * 

* You can think of them as 'instances' of {@link GraphQLArgument}, when applied to a directive on a query element */ @PublicApi public class QueryAppliedDirectiveArgument { private final String name; private final InputValueWithState value; private final GraphQLInputType originalType; private final Argument definition; private QueryAppliedDirectiveArgument(String name, InputValueWithState value, GraphQLInputType type, Argument definition ) { assertValidName(name); this.name = name; this.value = assertNotNull(value); this.originalType = assertNotNull(type); this.definition = definition; } @NotNull public String getName() { return name; } @NotNull public GraphQLInputType getType() { return originalType; } public boolean hasSetValue() { return value.isSet(); } /** * @return an input value with state for an applied directive argument */ public @NotNull InputValueWithState getArgumentValue() { return value; } /** * This swill give out an internal java value based on the semantics captured * in the {@link InputValueWithState} from {@link QueryAppliedDirectiveArgument#getArgumentValue()} * * Note : You MUST only call this on a {@link QueryAppliedDirectiveArgument} that is part of a fully formed schema. We need * all 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 want to know the difference * when "not set" and "set to null" then you can't use this method. Rather you should use {@link QueryAppliedDirectiveArgument#getArgumentValue()} * and use the {@link InputValueWithState#isNotSet()} methods to decide how to handle those values. * * @param the type you want it cast as * * @return a value of type T which is the java value of the argument */ @Nullable public T getValue() { return getInputValueImpl(getType(), value, GraphQLContext.getDefault(), Locale.getDefault()); } /** * This will always be null. Applied arguments have no description * * @return always null */ public @Nullable String getDescription() { return null; } @Nullable public Argument getDefinition() { return definition; } /** * 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. * * @param builderConsumer the consumer code that will be given a builder to transform * * @return a new field based on calling build on that builder */ public QueryAppliedDirectiveArgument transform(Consumer builderConsumer) { Builder builder = newArgument(this); builderConsumer.accept(builder); return builder.build(); } public static Builder newArgument() { return new Builder(); } public static Builder newArgument(QueryAppliedDirectiveArgument existing) { return new Builder(existing); } @Override public String toString() { return "QueryAppliedDirectiveArgument{" + "name='" + name + '\'' + ", type=" + getType() + ", value=" + value + '}'; } public static class Builder extends GraphqlTypeBuilder { private InputValueWithState value = InputValueWithState.NOT_SET; private Argument definition; private GraphQLInputType type; public Builder() { } public Builder(QueryAppliedDirectiveArgument existing) { this.name = existing.getName(); this.value = existing.getArgumentValue(); this.type = existing.getType(); } public Builder type(GraphQLInputType type) { this.type = assertNotNull(type); return this; } public Builder definition(Argument definition) { this.definition = definition; return this; } /** * Sets a literal AST value as the arguments value * * @param value can't be null as a `null` is represented a @{@link graphql.language.NullValue} Literal * * @return this builder */ public Builder valueLiteral(@NotNull Value value) { this.value = InputValueWithState.newLiteralValue(value); return this; } /** * @param value values can be null to represent null value * * @return this builder */ public Builder valueProgrammatic(@Nullable Object value) { this.value = InputValueWithState.newExternalValue(value); return this; } public Builder inputValueWithState(@NotNull InputValueWithState value) { this.value = Assert.assertNotNull(value); return this; } /** * Removes the value to represent a missing value (which is different from null) * * @return this builder */ public Builder clearValue() { this.value = InputValueWithState.NOT_SET; return this; } public QueryAppliedDirectiveArgument build() { return new QueryAppliedDirectiveArgument( name, value, type, definition ); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy