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

graphql.servlet.GraphQLInvocationInputFactory Maven / Gradle / Ivy

There is a newer version: 16.0.0
Show newest version
package graphql.servlet;

import graphql.schema.GraphQLSchema;
import graphql.servlet.internal.GraphQLRequest;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.websocket.Session;
import javax.websocket.server.HandshakeRequest;
import java.util.List;
import java.util.function.Supplier;

/**
 * @author Andrew Potter
 */
public class GraphQLInvocationInputFactory {

    private final Supplier schemaProviderSupplier;
    private final Supplier contextBuilderSupplier;
    private final Supplier rootObjectBuilderSupplier;

    protected GraphQLInvocationInputFactory(Supplier schemaProviderSupplier, Supplier contextBuilderSupplier, Supplier rootObjectBuilderSupplier) {
        this.schemaProviderSupplier = schemaProviderSupplier;
        this.contextBuilderSupplier = contextBuilderSupplier;
        this.rootObjectBuilderSupplier = rootObjectBuilderSupplier;
    }

    public GraphQLSchemaProvider getSchemaProvider() {
        return schemaProviderSupplier.get();
    }

    public GraphQLSingleInvocationInput create(GraphQLRequest graphQLRequest, HttpServletRequest request, HttpServletResponse response) {
        return create(graphQLRequest, request, response, false);
    }

    public GraphQLBatchedInvocationInput create(List graphQLRequests, HttpServletRequest request, HttpServletResponse response) {
        return create(graphQLRequests, request, response, false);
    }

    public GraphQLSingleInvocationInput createReadOnly(GraphQLRequest graphQLRequest, HttpServletRequest request, HttpServletResponse response) {
        return create(graphQLRequest, request, response, true);
    }

    public GraphQLBatchedInvocationInput createReadOnly(List graphQLRequests, HttpServletRequest request, HttpServletResponse response) {
        return create(graphQLRequests, request, response, true);
    }

    public GraphQLSingleInvocationInput create(GraphQLRequest graphQLRequest) {
        return new GraphQLSingleInvocationInput(
            graphQLRequest,
            schemaProviderSupplier.get().getSchema(),
            contextBuilderSupplier.get().build(),
            rootObjectBuilderSupplier.get().build()
        );
    }

    private GraphQLSingleInvocationInput create(GraphQLRequest graphQLRequest, HttpServletRequest request, HttpServletResponse response, boolean readOnly) {
        return new GraphQLSingleInvocationInput(
            graphQLRequest,
            readOnly ? schemaProviderSupplier.get().getReadOnlySchema(request) : schemaProviderSupplier.get().getSchema(request),
            contextBuilderSupplier.get().build(request, response),
            rootObjectBuilderSupplier.get().build(request)
        );
    }

    private GraphQLBatchedInvocationInput create(List graphQLRequests, HttpServletRequest request, HttpServletResponse response, boolean readOnly) {
        return new GraphQLBatchedInvocationInput(
            graphQLRequests,
            readOnly ? schemaProviderSupplier.get().getReadOnlySchema(request) : schemaProviderSupplier.get().getSchema(request),
            contextBuilderSupplier.get().build(request, response),
            rootObjectBuilderSupplier.get().build(request)
        );
    }

    public GraphQLSingleInvocationInput create(GraphQLRequest graphQLRequest, Session session, HandshakeRequest request) {
        return new GraphQLSingleInvocationInput(
            graphQLRequest,
            schemaProviderSupplier.get().getSchema(request),
            contextBuilderSupplier.get().build(session, request),
            rootObjectBuilderSupplier.get().build(request)
        );
    }

    public GraphQLBatchedInvocationInput create(List graphQLRequest, Session session, HandshakeRequest request) {
        return new GraphQLBatchedInvocationInput(
            graphQLRequest,
            schemaProviderSupplier.get().getSchema(request),
            contextBuilderSupplier.get().build(session, request),
            rootObjectBuilderSupplier.get().build(request)
        );
    }

    public static Builder newBuilder(GraphQLSchema schema) {
        return new Builder(new DefaultGraphQLSchemaProvider(schema));
    }

    public static Builder newBuilder(GraphQLSchemaProvider schemaProvider) {
        return new Builder(schemaProvider);
    }

    public static Builder newBuilder(Supplier schemaProviderSupplier) {
        return new Builder(schemaProviderSupplier);
    }

    public static class Builder {
        private final Supplier schemaProviderSupplier;
        private Supplier contextBuilderSupplier = DefaultGraphQLContextBuilder::new;
        private Supplier rootObjectBuilderSupplier = DefaultGraphQLRootObjectBuilder::new;

        public Builder(GraphQLSchemaProvider schemaProvider) {
            this(() -> schemaProvider);
        }

        public Builder(Supplier schemaProviderSupplier) {
            this.schemaProviderSupplier = schemaProviderSupplier;
        }

        public Builder withGraphQLContextBuilder(GraphQLContextBuilder contextBuilder) {
            return withGraphQLContextBuilder(() -> contextBuilder);
        }

        public Builder withGraphQLContextBuilder(Supplier contextBuilderSupplier) {
            this.contextBuilderSupplier = contextBuilderSupplier;
            return this;
        }

        public Builder withGraphQLRootObjectBuilder(GraphQLRootObjectBuilder rootObjectBuilder) {
            return withGraphQLRootObjectBuilder(() -> rootObjectBuilder);
        }

        public Builder withGraphQLRootObjectBuilder(Supplier rootObjectBuilderSupplier) {
            this.rootObjectBuilderSupplier = rootObjectBuilderSupplier;
            return this;
        }

        public GraphQLInvocationInputFactory build() {
            return new GraphQLInvocationInputFactory(schemaProviderSupplier, contextBuilderSupplier, rootObjectBuilderSupplier);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy