Search in sources :

Example 16 with ExecutionResult

use of graphql.ExecutionResult in project graphql-java by graphql-java.

the class AsyncSerialExecutionStrategy method execute.

@Override
public CompletableFuture<ExecutionResult> execute(ExecutionContext executionContext, ExecutionStrategyParameters parameters) throws NonNullableFieldWasNullException {
    Instrumentation instrumentation = executionContext.getInstrumentation();
    InstrumentationExecutionStrategyParameters instrumentationParameters = new InstrumentationExecutionStrategyParameters(executionContext, parameters);
    InstrumentationContext<ExecutionResult> executionStrategyCtx = instrumentation.beginExecutionStrategy(instrumentationParameters);
    Map<String, List<Field>> fields = parameters.getFields();
    List<String> fieldNames = new ArrayList<>(fields.keySet());
    CompletableFuture<List<ExecutionResult>> resultsFuture = Async.eachSequentially(fieldNames, (fieldName, index, prevResults) -> {
        List<Field> currentField = fields.get(fieldName);
        ExecutionPath fieldPath = parameters.getPath().segment(fieldName);
        ExecutionStrategyParameters newParameters = parameters.transform(builder -> builder.field(currentField).path(fieldPath));
        return resolveField(executionContext, newParameters);
    });
    CompletableFuture<ExecutionResult> overallResult = new CompletableFuture<>();
    executionStrategyCtx.onDispatched(overallResult);
    resultsFuture.whenComplete(handleResults(executionContext, fieldNames, overallResult));
    overallResult.whenComplete(executionStrategyCtx::onCompleted);
    return overallResult;
}
Also used : ArrayList(java.util.ArrayList) Instrumentation(graphql.execution.instrumentation.Instrumentation) ExecutionResult(graphql.ExecutionResult) Field(graphql.language.Field) CompletableFuture(java.util.concurrent.CompletableFuture) InstrumentationExecutionStrategyParameters(graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters) List(java.util.List) ArrayList(java.util.ArrayList) InstrumentationExecutionStrategyParameters(graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters)

Example 17 with ExecutionResult

use of graphql.ExecutionResult in project incubator-skywalking by apache.

the class GraphQLHandler method execute.

private JsonObject execute(String request, Map<String, Object> variables) {
    try {
        ExecutionInput executionInput = ExecutionInput.newExecutionInput().query(request).variables(variables).build();
        ExecutionResult executionResult = graphQL.execute(executionInput);
        logger.info("Execution result is {}", executionResult);
        Object data = executionResult.getData();
        List<GraphQLError> errors = executionResult.getErrors();
        JsonObject jsonObject = new JsonObject();
        if (data != null) {
            jsonObject.add(DATA, gson.fromJson(gson.toJson(data), JsonObject.class));
        }
        if (CollectionUtils.isNotEmpty(errors)) {
            JsonArray errorArray = new JsonArray();
            errors.forEach(error -> {
                JsonObject errorJson = new JsonObject();
                errorJson.addProperty(MESSAGE, error.getMessage());
                errorArray.add(errorJson);
            });
            jsonObject.add(ERRORS, errorArray);
        }
        return jsonObject;
    } catch (Throwable e) {
        logger.error(e.getMessage(), e);
        JsonObject jsonObject = new JsonObject();
        JsonArray errorArray = new JsonArray();
        JsonObject errorJson = new JsonObject();
        errorJson.addProperty(MESSAGE, e.getMessage());
        errorArray.add(errorJson);
        jsonObject.add(ERRORS, errorArray);
        return jsonObject;
    }
}
Also used : JsonArray(com.google.gson.JsonArray) GraphQLError(graphql.GraphQLError) JsonObject(com.google.gson.JsonObject) ExecutionResult(graphql.ExecutionResult) JsonObject(com.google.gson.JsonObject) ExecutionInput(graphql.ExecutionInput)

Example 18 with ExecutionResult

use of graphql.ExecutionResult in project timbuctoo by HuygensING.

the class GraphQl method executeGraphql.

public Response executeGraphql(String query, String acceptHeader, String acceptParam, String queryFromBody, Map variables, String operationName, String authHeader) {
    final SerializerWriter serializerWriter;
    if (acceptParam != null && !acceptParam.isEmpty()) {
        // Accept param overrules header because it's more under the user's control
        acceptHeader = acceptParam;
    }
    if (unSpecifiedAcceptHeader(acceptHeader)) {
        acceptHeader = MediaType.APPLICATION_JSON;
    }
    if (MediaType.APPLICATION_JSON.equals(acceptHeader)) {
        serializerWriter = null;
    } else {
        Optional<SerializerWriter> bestMatch = serializerWriterRegistry.getBestMatch(acceptHeader);
        if (bestMatch.isPresent()) {
            serializerWriter = bestMatch.get();
        } else {
            return Response.status(415).type(MediaType.APPLICATION_JSON_TYPE).entity("{\"errors\": [\"The available mediatypes are: " + String.join(", ", serializerWriterRegistry.getSupportedMimeTypes()) + "\"]}").build();
        }
    }
    if (query != null && queryFromBody != null) {
        return Response.status(400).type(MediaType.APPLICATION_JSON_TYPE).entity("{\"errors\": [\"There's both a query as url paramatere and a query in the body. Please pick one.\"]}").build();
    }
    if (query == null && queryFromBody == null) {
        return Response.status(400).type(MediaType.APPLICATION_JSON_TYPE).entity("{\"errors\": [\"Please provide the graphql query as the query property of a JSON encoded object. " + "E.g. {query: \\\"{\\n  persons {\\n ... \\\"}\"]}").build();
    }
    Optional<User> user;
    try {
        user = userValidator.getUserFromAccessToken(authHeader);
    } catch (UserValidationException e) {
        user = Optional.empty();
    }
    UserPermissionCheck userPermissionCheck = new UserPermissionCheck(user, permissionFetcher, newHashSet(Permission.READ));
    final GraphQLSchema transform = graphqlGetter.get().transform(b -> b.fieldVisibility(new PermissionBasedFieldVisibility(userPermissionCheck, dataSetRepository)));
    final GraphQL.Builder builder = GraphQL.newGraphQL(transform);
    if (serializerWriter != null) {
        builder.queryExecutionStrategy(new SerializerExecutionStrategy());
    }
    GraphQL graphQl = builder.build();
    final ExecutionResult result = graphQl.execute(newExecutionInput().root(new RootData(user)).context(contextData(userPermissionCheck, user)).query(queryFromBody).operationName(operationName).variables(variables == null ? Collections.emptyMap() : variables).build());
    if (serializerWriter == null) {
        return Response.ok().type(MediaType.APPLICATION_JSON_TYPE).entity(result.toSpecification()).build();
    } else {
        if (result.getErrors() != null && !result.getErrors().isEmpty()) {
            return Response.status(415).type(MediaType.APPLICATION_JSON_TYPE).entity(result.toSpecification()).build();
        }
        return Response.ok().type(serializerWriter.getMimeType()).entity((StreamingOutput) os -> {
            serializerWriter.getSerializationFactory().create(os).serialize(new SerializableResult(result.getData()));
        }).build();
    }
}
Also used : UserValidationException(nl.knaw.huygens.timbuctoo.v5.security.exceptions.UserValidationException) User(nl.knaw.huygens.timbuctoo.v5.security.dto.User) GraphQL(graphql.GraphQL) SerializableResult(nl.knaw.huygens.timbuctoo.v5.serializable.SerializableResult) SerializerWriter(nl.knaw.huygens.timbuctoo.v5.dropwizard.contenttypes.SerializerWriter) ExecutionResult(graphql.ExecutionResult) StreamingOutput(javax.ws.rs.core.StreamingOutput) GraphQLSchema(graphql.schema.GraphQLSchema) RootData(nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.RootData) PermissionBasedFieldVisibility(nl.knaw.huygens.timbuctoo.v5.graphql.security.PermissionBasedFieldVisibility) SerializerExecutionStrategy(nl.knaw.huygens.timbuctoo.v5.graphql.serializable.SerializerExecutionStrategy) UserPermissionCheck(nl.knaw.huygens.timbuctoo.v5.graphql.security.UserPermissionCheck)

Example 19 with ExecutionResult

use of graphql.ExecutionResult in project structr by structr.

the class GraphQLWriter method stream.

public void stream(final SecurityContext securityContext, final Writer output, final GraphQLRequest request) throws IOException, FrameworkException {
    final RestWriter writer = new StructrJsonWriter(securityContext, output);
    if (indent) {
        writer.setIndent("	");
    }
    if (request.hasSchemaQuery()) {
        // schema query is serialized from GraphQL execution result, doesn't need enclosing JSON object
        for (final GraphQLQuery query : request.getQueries()) {
            if (query.isSchemaQuery()) {
                // use graphql-java schema response
                final String originalQuery = request.getOriginalQuery();
                final GraphQL graphQL = GraphQL.newGraphQL(SchemaService.getGraphQLSchema()).build();
                final ExecutionResult result = graphQL.execute(originalQuery);
                final Gson gson = new GsonBuilder().setPrettyPrinting().create();
                if (result != null) {
                    final Map<String, Object> data = result.getData();
                    if (data != null) {
                        gson.toJson(data, output);
                    }
                }
            }
        }
    } else {
        writer.beginDocument(null, null);
        writer.beginObject();
        for (final GraphQLQuery query : request.getQueries()) {
            if (query.isSchemaQuery()) {
                // use graphql-java schema response
                final String originalQuery = request.getOriginalQuery();
                final GraphQL graphQL = GraphQL.newGraphQL(SchemaService.getGraphQLSchema()).build();
                final ExecutionResult result = graphQL.execute(originalQuery);
                final Gson gson = new GsonBuilder().setPrettyPrinting().create();
                if (result != null) {
                    final Map<String, Object> data = result.getData();
                    if (data != null) {
                        gson.toJson(data, output);
                    }
                }
            } else {
                writer.name(query.getFieldName());
                writer.beginArray();
                for (final GraphObject object : query.getEntities(securityContext)) {
                    root.serialize(writer, null, object, query, query.getRootPath());
                }
                writer.endArray();
            }
        }
        // finished
        writer.endObject();
        writer.endDocument();
    }
}
Also used : GsonBuilder(com.google.gson.GsonBuilder) GraphQL(graphql.GraphQL) Gson(com.google.gson.Gson) ExecutionResult(graphql.ExecutionResult) GraphObject(org.structr.core.GraphObject) GraphObject(org.structr.core.GraphObject) GraphQLQuery(org.structr.core.graphql.GraphQLQuery)

Example 20 with ExecutionResult

use of graphql.ExecutionResult in project nextprot-api by calipho-sib.

the class GraphQLTest method main.

public static void main(String[] args) {
    String schema = "type Query{hello: String} schema{query: Query}";
    SchemaParser schemaParser = new SchemaParser();
    TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema);
    RuntimeWiring runtimeWiring = newRuntimeWiring().type("Query", builder -> builder.dataFetcher("hello", new StaticDataFetcher("world"))).build();
    SchemaGenerator schemaGenerator = new SchemaGenerator();
    GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring);
    GraphQL build = GraphQL.newGraphQL(graphQLSchema).build();
    ExecutionResult executionResult = build.execute("{hello}");
    System.out.println(executionResult.getData().toString());
// Prints: {hello=world}
}
Also used : DataFetchingEnvironment(graphql.schema.DataFetchingEnvironment) StaticDataFetcher(graphql.schema.StaticDataFetcher) Arrays(java.util.Arrays) GraphQL(graphql.GraphQL) Entry(org.nextprot.api.core.domain.Entry) RuntimeWiring.newRuntimeWiring(graphql.schema.idl.RuntimeWiring.newRuntimeWiring) TypeDefinitionRegistry(graphql.schema.idl.TypeDefinitionRegistry) Autowired(org.springframework.beans.factory.annotation.Autowired) GraphQLQueryResolver(com.coxautodev.graphql.tools.GraphQLQueryResolver) ExecutionResult(graphql.ExecutionResult) Component(org.springframework.stereotype.Component) RuntimeWiring(graphql.schema.idl.RuntimeWiring) SchemaParser(graphql.schema.idl.SchemaParser) GraphQLSchema(graphql.schema.GraphQLSchema) SchemaGenerator(graphql.schema.idl.SchemaGenerator) RuntimeWiring.newRuntimeWiring(graphql.schema.idl.RuntimeWiring.newRuntimeWiring) RuntimeWiring(graphql.schema.idl.RuntimeWiring) GraphQL(graphql.GraphQL) TypeDefinitionRegistry(graphql.schema.idl.TypeDefinitionRegistry) SchemaGenerator(graphql.schema.idl.SchemaGenerator) StaticDataFetcher(graphql.schema.StaticDataFetcher) ExecutionResult(graphql.ExecutionResult) SchemaParser(graphql.schema.idl.SchemaParser) GraphQLSchema(graphql.schema.GraphQLSchema)

Aggregations

ExecutionResult (graphql.ExecutionResult)42 GraphQL (graphql.GraphQL)17 List (java.util.List)10 GraphQLSchema (graphql.schema.GraphQLSchema)9 ExecutionInput (graphql.ExecutionInput)8 Instrumentation (graphql.execution.instrumentation.Instrumentation)8 Field (graphql.language.Field)8 ExecutionResultImpl (graphql.ExecutionResultImpl)7 CompletableFuture (java.util.concurrent.CompletableFuture)7 GraphQLError (graphql.GraphQLError)6 GraphQLFieldDefinition (graphql.schema.GraphQLFieldDefinition)6 LinkedHashMap (java.util.LinkedHashMap)6 GraphQLObjectType (graphql.schema.GraphQLObjectType)5 ArrayList (java.util.ArrayList)5 Map (java.util.Map)5 InstrumentationExecutionStrategyParameters (graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters)4 HashMap (java.util.HashMap)4 Collectors.toList (java.util.stream.Collectors.toList)3 InstrumentationFieldCompleteParameters (graphql.execution.instrumentation.parameters.InstrumentationFieldCompleteParameters)2 GraphQLList (graphql.schema.GraphQLList)2