package graphql.execution.batched; import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import graphql.schema.DataFetchingEnvironmentImpl; import java.util.ArrayList; import java.util.List; /** * Given a normal data fetcher as a delegate, * uses that fetcher in a batched context by iterating through each source value and calling * the delegate. */ public class UnbatchedDataFetcher implements BatchedDataFetcher { private final DataFetcher delegate; public UnbatchedDataFetcher(DataFetcher delegate) { assert !(delegate instanceof BatchedDataFetcher); this.delegate = delegate; } @Override public Object get(DataFetchingEnvironment environment) { List<Object> sources = environment.getSource(); List<Object> results = new ArrayList<>(); for (Object source : sources) { DataFetchingEnvironment singleEnv = new DataFetchingEnvironmentImpl( source, environment.getArguments(), environment.getContext(), environment.getFields(), environment.getFieldType(), environment.getParentType(), environment.getGraphQLSchema(), environment.getFragmentsByName(), environment.getExecutionId(), environment.getSelectionSet()); results.add(delegate.get(singleEnv)); } return results; } }