Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import java.text.SimpleDateFormat

plugins {
id "com.jfrog.bintray" version "1.2"
}
Expand All @@ -10,10 +8,11 @@ apply plugin: 'maven-publish'
apply plugin: 'antlr'
apply plugin: 'jacoco'

sourceCompatibility = 1.6
targetCompatibility = 1.6
sourceCompatibility = 1.8
targetCompatibility = 1.8
def releaseVersion = System.properties.RELEASE_VERSION
version = releaseVersion ? releaseVersion : new SimpleDateFormat('yyyy-MM-dd\'T\'HH-mm-ss').format(new Date())
version = "3.0.0-SNAPSHOT"
//version = releaseVersion ? releaseVersion : new SimpleDateFormat('yyyy-MM-dd\'T\'HH-mm-ss').format(new Date())
group = 'com.graphql-java'


Expand All @@ -30,12 +29,14 @@ jar {
dependencies {
compile 'org.antlr:antlr4-runtime:4.5.1'
compile 'org.slf4j:slf4j-api:1.7.12'
compile 'com.spotify:completable-futures:0.3.0'
antlr "org.antlr:antlr4:4.5.1"
testCompile group: 'junit', name: 'junit', version: '4.11'
testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
testCompile 'org.codehaus.groovy:groovy-all:2.4.4'
testCompile 'cglib:cglib-nodep:3.1'
testCompile 'org.objenesis:objenesis:2.1'
testCompile 'org.slf4j:slf4j-log4j12:1.7.21'
}

compileJava.source file("build/generated-src"), sourceSets.main.java
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/graphql/GraphQL.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletionStage;

import static graphql.Assert.assertNotNull;

Expand All @@ -34,11 +35,10 @@ public ExecutionId provide(String query, String operationName, Object context) {
}
};

private final GraphQLSchema graphQLSchema;
private final ExecutionStrategy queryStrategy;
private final ExecutionStrategy mutationStrategy;
private final ExecutionIdProvider idProvider;

protected final GraphQLSchema graphQLSchema;
protected final ExecutionStrategy queryStrategy;
protected final ExecutionStrategy mutationStrategy;
protected final ExecutionIdProvider idProvider;

/**
* A GraphQL object ready to execute queries
Expand Down
86 changes: 86 additions & 0 deletions src/main/java/graphql/GraphQLAsync.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package graphql;

import graphql.execution.AsyncExecution;
import graphql.execution.Execution;
import graphql.execution.ExecutionStrategy;
import graphql.language.Document;
import graphql.language.SourceLocation;
import graphql.parser.Parser;
import graphql.schema.GraphQLSchema;
import graphql.validation.ValidationError;
import graphql.validation.Validator;
import org.antlr.v4.runtime.RecognitionException;
import org.antlr.v4.runtime.misc.ParseCancellationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletionStage;

import static graphql.Assert.assertNotNull;
import static java.util.concurrent.CompletableFuture.completedFuture;

public class GraphQLAsync extends GraphQL {

private static Logger log = LoggerFactory.getLogger(GraphQLAsync.class);

public GraphQLAsync(GraphQLSchema graphQLSchema) {
super(graphQLSchema);
}

public GraphQLAsync(GraphQLSchema graphQLSchema, ExecutionStrategy queryStrategy) {
super(graphQLSchema, queryStrategy);
}

public GraphQLAsync(GraphQLSchema graphQLSchema, ExecutionStrategy queryStrategy, ExecutionStrategy mutationStrategy) {
super(graphQLSchema, queryStrategy, mutationStrategy);
}

public CompletionStage<ExecutionResult> executeAsync(String requestString) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be more convenient if it returned CompletableFuture here.

return executeAsync(requestString, null);

}

public CompletionStage<ExecutionResult> executeAsync(String requestString, Object context) {
return executeAsync(requestString, context, Collections.emptyMap());

}

public CompletionStage<ExecutionResult> executeAsync(String requestString, String operationName, Object context) {
return executeAsync(requestString, operationName, context, Collections.emptyMap());

}

public CompletionStage<ExecutionResult> executeAsync(String requestString, Object context, Map<String, Object> arguments) {
return executeAsync(requestString, null, context, arguments);

}

@SuppressWarnings("unchecked")
public CompletionStage<ExecutionResult> executeAsync(String requestString, String operationName, Object context, Map<String, Object> arguments) {

assertNotNull(arguments, "arguments can't be null");
log.debug("Executing request. operation name: {}. Request: {} ", operationName, requestString);
Parser parser = new Parser();
Document document;
try {
document = parser.parseDocument(requestString);
} catch (ParseCancellationException e) {
RecognitionException recognitionException = (RecognitionException) e.getCause();
SourceLocation sourceLocation = new SourceLocation(recognitionException.getOffendingToken().getLine(), recognitionException.getOffendingToken().getCharPositionInLine());
InvalidSyntaxError invalidSyntaxError = new InvalidSyntaxError(sourceLocation);
return completedFuture(new ExecutionResultImpl(Arrays.asList(invalidSyntaxError)));
}

Validator validator = new Validator();
List<ValidationError> validationErrors = validator.validateDocument(graphQLSchema, document);
if (validationErrors.size() > 0) {
return completedFuture(new ExecutionResultImpl(validationErrors));
}
AsyncExecution execution = new AsyncExecution(queryStrategy, mutationStrategy);
return execution.executeAsync(graphQLSchema, context, document, operationName, arguments);
}
}
8 changes: 8 additions & 0 deletions src/main/java/graphql/NonNullException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package graphql;

public class NonNullException extends GraphQLException {

public NonNullException(String s) {
super(s);
}
}
46 changes: 46 additions & 0 deletions src/main/java/graphql/execution/AsyncExecution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package graphql.execution;

import graphql.ExecutionResult;
import graphql.execution.async.AsyncExecutionStrategy;
import graphql.language.Document;
import graphql.language.Field;
import graphql.language.OperationDefinition;
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLSchema;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletionStage;

public class AsyncExecution extends Execution {

public AsyncExecution(ExecutionStrategy queryStrategy, ExecutionStrategy mutationStrategy) {
super(queryStrategy, mutationStrategy);
}

public CompletionStage<ExecutionResult> executeAsync(GraphQLSchema graphQLSchema, Object root, Document document, String operationName, Map<String, Object> args) {
ExecutionContextBuilder executionContextBuilder = new ExecutionContextBuilder(new ValuesResolver());
ExecutionContext executionContext = executionContextBuilder
.executionId(ExecutionId.generate())
.build(graphQLSchema, queryStrategy, mutationStrategy, root, document, operationName, args);
return executeOperationAsync(executionContext, root, executionContext.getOperationDefinition());
}

private CompletionStage<ExecutionResult> executeOperationAsync(
ExecutionContext executionContext,
Object root,
OperationDefinition operationDefinition) {
GraphQLObjectType operationRootType = getOperationRootType(executionContext.getGraphQLSchema(), operationDefinition);

Map<String, List<Field>> fields = new LinkedHashMap<String, List<Field>>();
fieldCollector.collectFields(executionContext, operationRootType, operationDefinition.getSelectionSet(), new ArrayList<String>(), fields);

if (operationDefinition.getOperation() == OperationDefinition.Operation.MUTATION) {
return ((AsyncExecutionStrategy) mutationStrategy).executeAsync(executionContext, operationRootType, root, fields);
} else {
return ((AsyncExecutionStrategy) queryStrategy).executeAsync(executionContext, operationRootType, root, fields);
}
}
}
11 changes: 7 additions & 4 deletions src/main/java/graphql/execution/Execution.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import graphql.ExecutionResult;
import graphql.GraphQLException;
import graphql.execution.async.AsyncExecutionStrategy;
import graphql.language.Document;
import graphql.language.Field;
import graphql.language.OperationDefinition;
Expand All @@ -13,12 +14,14 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletionStage;
import java.util.stream.Stream;

public class Execution {

private FieldCollector fieldCollector = new FieldCollector();
private ExecutionStrategy queryStrategy;
private ExecutionStrategy mutationStrategy;
protected FieldCollector fieldCollector = new FieldCollector();
protected ExecutionStrategy queryStrategy;
protected ExecutionStrategy mutationStrategy;

public Execution(ExecutionStrategy queryStrategy, ExecutionStrategy mutationStrategy) {
this.queryStrategy = queryStrategy != null ? queryStrategy : new SimpleExecutionStrategy();
Expand All @@ -33,7 +36,7 @@ public ExecutionResult execute(ExecutionId executionId, GraphQLSchema graphQLSch
return executeOperation(executionContext, root, executionContext.getOperationDefinition());
}

private GraphQLObjectType getOperationRootType(GraphQLSchema graphQLSchema, OperationDefinition operationDefinition) {
protected GraphQLObjectType getOperationRootType(GraphQLSchema graphQLSchema, OperationDefinition operationDefinition) {
if (operationDefinition.getOperation() == OperationDefinition.Operation.MUTATION) {
return graphQLSchema.getMutationType();

Expand Down
Loading