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

graphql.schema.GraphQLDirective Maven / Gradle / Ivy

The newest version!
package graphql.schema;


import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.function.UnaryOperator;

import static graphql.Assert.assertNotNull;
import static graphql.Assert.assertValidName;
import static graphql.introspection.Introspection.DirectiveLocation;

public class GraphQLDirective {

    private final String name;
    private final String description;
    private final EnumSet locations;
    private final List arguments = new ArrayList<>();
    private final boolean onOperation;
    private final boolean onFragment;
    private final boolean onField;

    public GraphQLDirective(String name, String description, EnumSet locations,
                            List arguments, boolean onOperation, boolean onFragment, boolean onField) {
    	assertValidName(name);
        assertNotNull(arguments, "arguments can't be null");
        this.name = name;
        this.description = description;
        this.locations = locations;
        this.arguments.addAll(arguments);
        this.onOperation = onOperation;
        this.onFragment = onFragment;
        this.onField = onField;
    }

    public String getName() {
        return name;
    }

    public List getArguments() {
        return new ArrayList<>(arguments);
    }

    public GraphQLArgument getArgument(String name) {
        for (GraphQLArgument argument : arguments) {
            if (argument.getName().equals(name)) return argument;
        }
        return null;
    }

    public EnumSet validLocations() {
        return locations;
    }

    /**
     * @deprecated  Use {@link #validLocations()}
     * @return onOperation
     */
    @Deprecated
    public boolean isOnOperation() {
        return onOperation;
    }

    /**
     * @deprecated  Use {@link #validLocations()}
     * @return onFragment
     */
    @Deprecated
    public boolean isOnFragment() {
        return onFragment;
    }

    /**
     * @deprecated  Use {@link #validLocations()}
     * @return onField
     */
    @Deprecated
    public boolean isOnField() {
        return onField;
    }

    public String getDescription() {
        return description;
    }

    public static Builder newDirective() {
        return new Builder();
    }

    public static class Builder {

        private String name;
        private EnumSet locations = EnumSet.noneOf(DirectiveLocation.class);
        private final List arguments = new ArrayList<>();
        private String description;
        private boolean onOperation;
        private boolean onFragment;
        private boolean onField;

        public Builder name(String name) {
            this.name = name;
            return this;
        }

        public Builder description(String description) {
            this.description = description;
            return this;
        }

        public Builder validLocations(DirectiveLocation ...validLocations) {
            for (DirectiveLocation location : validLocations) {
                locations.add(location);
            }
            return this;
        }

        public Builder argument(GraphQLArgument fieldArgument) {
            arguments.add(fieldArgument);
            return this;
        }

        /**
         * Take an argument builder in a function definition and apply. Can be used in a jdk8 lambda
         * e.g.:
         * 
         *     {@code
         *      argument(a -> a.name("argumentName"))
         *     }
         * 
* * @param builderFunction a supplier for the builder impl * @return this */ public Builder argument(UnaryOperator builderFunction) { GraphQLArgument.Builder builder = GraphQLArgument.newArgument(); builder = builderFunction.apply(builder); return argument(builder); } /** * Same effect as the argument(GraphQLArgument). Builder.build() is called * from within * * @param builder an un-built/incomplete GraphQLArgument * @return this */ public Builder argument(GraphQLArgument.Builder builder) { this.arguments.add(builder.build()); return this; } /** * @deprecated Use {@code graphql.schema.GraphQLDirective.Builder#validLocations(DirectiveLocation...)} * @param onOperation onOperation * @return this builder */ @Deprecated public Builder onOperation(boolean onOperation) { this.onOperation = onOperation; return this; } /** * @deprecated Use {@code graphql.schema.GraphQLDirective.Builder#validLocations(DirectiveLocation...)} * @param onFragment onFragment * @return this builder */ @Deprecated public Builder onFragment(boolean onFragment) { this.onFragment = onFragment; return this; } /** * @deprecated Use {@code graphql.schema.GraphQLDirective.Builder#validLocations(DirectiveLocation...)} * @param onField onField * @return this builder */ @Deprecated public Builder onField(boolean onField) { this.onField = onField; return this; } public GraphQLDirective build() { return new GraphQLDirective(name, description, locations, arguments, onOperation, onFragment, onField); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy