
graphql.execution.RxExecutionStrategy Maven / Gradle / Ivy
The newest version!
package graphql.execution;
import graphql.ExecutionResult;
import graphql.GraphQLException;
import graphql.execution.ExecutionContext;
import graphql.execution.ExecutionStrategy;
import graphql.language.Field;
import graphql.schema.GraphQLList;
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLType;
import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rx.Observable;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class RxExecutionStrategy extends ExecutionStrategy {
private final static Logger logger = LoggerFactory.getLogger(RxExecutionStrategy.class);
@Override
public ExecutionResult execute(ExecutionContext executionContext, GraphQLObjectType parentType, Object source, Map> fields) {
List>> observables = new ArrayList<>();
for (String fieldName : fields.keySet()) {
final List fieldList = fields.get(fieldName);
ExecutionResult executionResult = resolveField(executionContext, parentType, source, fieldList);
if (executionResult instanceof RxExecutionResult) {
RxExecutionResult rxResult = (RxExecutionResult)executionResult;
Observable> unwrapped = rxResult.getDataObservable().flatMap(potentialResult -> {
if (potentialResult instanceof RxExecutionResult) {
return ((RxExecutionResult) potentialResult).getDataObservable();
}
if (potentialResult instanceof ExecutionResult) {
return Observable.just(((ExecutionResult) potentialResult).getData());
}
return Observable.just(potentialResult);
});
observables.add(Observable.zip(Observable.just(fieldName), unwrapped, Pair::of));
} else {
observables.add(Observable.just(Pair.of(fieldName, executionResult != null ? executionResult.getData() : null)));
}
}
Observable
© 2015 - 2025 Weber Informatics LLC | Privacy Policy