use of io.vertx.ext.web.handler.graphql.ExecutionInputBuilderWithContext in project vertx-web by vert-x3.
the class GraphQLHandlerImpl method execute.
private Future<JsonObject> execute(RoutingContext rc, GraphQLQuery query) {
ExecutionInput.Builder builder = ExecutionInput.newExecutionInput();
builder.query(query.getQuery());
String operationName = query.getOperationName();
if (operationName != null) {
builder.operationName(operationName);
}
Map<String, Object> variables = query.getVariables();
if (variables != null) {
builder.variables(variables);
}
Object initialValue = query.getInitialValue();
if (initialValue != null) {
builder.root(initialValue);
}
Function<RoutingContext, Object> qc;
Function<RoutingContext, DataLoaderRegistry> dlr;
Function<RoutingContext, Locale> l;
Handler<ExecutionInputBuilderWithContext<RoutingContext>> be;
synchronized (this) {
qc = queryContextFactory;
dlr = dataLoaderRegistryFactory;
l = localeFactory;
be = beforeExecute;
}
builder.context(qc.apply(rc));
DataLoaderRegistry registry = dlr.apply(rc);
if (registry != null) {
builder.dataLoaderRegistry(registry);
}
Locale locale = l.apply(rc);
if (locale != null) {
builder.locale(locale);
}
builder.graphQLContext(Collections.singletonMap(RoutingContext.class, rc));
if (be != null) {
be.handle(new ExecutionInputBuilderWithContext<RoutingContext>() {
@Override
public RoutingContext context() {
return rc;
}
@Override
public ExecutionInput.Builder builder() {
return builder;
}
});
}
return Future.fromCompletionStage(graphQL.executeAsync(builder.build()), rc.vertx().getOrCreateContext()).map(executionResult -> new JsonObject(executionResult.toSpecification()));
}
use of io.vertx.ext.web.handler.graphql.ExecutionInputBuilderWithContext in project vertx-web by vert-x3.
the class ApolloWSConnectionHandler method start.
private void start(ApolloWSMessage message) {
String opId = message.content().getString("id");
// Unsubscribe if it's subscribed
if (subscriptions.containsKey(opId)) {
stop(opId);
}
GraphQLQuery payload = new GraphQLQuery(message.content().getJsonObject("payload"));
ExecutionInput.Builder builder = ExecutionInput.newExecutionInput();
builder.query(payload.getQuery());
builder.context(apolloWSHandler.getQueryContext().apply(message));
DataLoaderRegistry registry = apolloWSHandler.getDataLoaderRegistry().apply(message);
if (registry != null) {
builder.dataLoaderRegistry(registry);
}
Locale locale = apolloWSHandler.getLocale().apply(message);
if (locale != null) {
builder.locale(locale);
}
String operationName = payload.getOperationName();
if (operationName != null) {
builder.operationName(operationName);
}
Map<String, Object> variables = payload.getVariables();
if (variables != null) {
builder.variables(variables);
}
Object initialValue = payload.getInitialValue();
if (initialValue != null) {
builder.root(initialValue);
}
Handler<ExecutionInputBuilderWithContext<ApolloWSMessage>> beforeExecute = apolloWSHandler.getBeforeExecute();
if (beforeExecute != null) {
beforeExecute.handle(new ExecutionInputBuilderWithContext<ApolloWSMessage>() {
@Override
public ApolloWSMessage context() {
return message;
}
@Override
public ExecutionInput.Builder builder() {
return builder;
}
});
}
builder.graphQLContext(Collections.singletonMap(ApolloWSMessage.class, message));
apolloWSHandler.getGraphQL().executeAsync(builder).whenCompleteAsync((executionResult, throwable) -> {
if (throwable == null) {
if (executionResult.getData() instanceof Publisher) {
subscribe(opId, executionResult);
} else {
sendMessage(opId, DATA, new JsonObject(executionResult.toSpecification()));
sendMessage(opId, COMPLETE, null);
}
} else {
if (log.isDebugEnabled()) {
log.debug("Failed to execute GraphQL query, opId=" + opId, throwable);
}
sendMessage(opId, ERROR, toJsonObject(throwable));
}
}, executor);
}
Aggregations