package com.nfl.glitr.registry.datafetcher.query.batched;

import com.nfl.glitr.registry.datafetcher.query.CompositeDataFetcher;
import com.nfl.glitr.registry.datafetcher.query.OverrideDataFetcher;
import graphql.schema.DataFetcher;

import java.util.List;
import java.util.stream.Collectors;

/**
 * Create a CompositeDataFetcher based on the supplied DataFetchers.
 *
 */
public class CompositeDataFetcherFactory {

    public static DataFetcher create(final List<DataFetcher> supplied) {

        List<DataFetcher> fetchers = supplied.stream()
                // filter out all the OverrideDataFetchers that have a null overrideMethod since type registry adds a default overrideDF
                .filter(f -> !(f instanceof OverrideDataFetcher) || ((OverrideDataFetcher)f).getOverrideMethod() != null)
                .collect(Collectors.toList());

        return new CompositeDataFetcher(fetchers);
    }
}