package graphql.schema.idl; import graphql.language.FieldDefinition; import graphql.language.InterfaceTypeDefinition; import graphql.language.UnionTypeDefinition; import graphql.schema.DataFetcher; import graphql.schema.TypeResolver; import java.util.ArrayList; import java.util.List; import static graphql.Assert.assertNotNull; /** * This combines a number of {@link WiringFactory}s together to act as one. It asks each one * whether it handles a type and delegates to the first one to answer yes. */ public class CombinedWiringFactory implements WiringFactory { private List<WiringFactory> factories; public CombinedWiringFactory(List<WiringFactory> factories) { assertNotNull(factories, "You must provide a list of wiring factories"); this.factories = new ArrayList<>(factories); } @Override public boolean providesTypeResolver(TypeDefinitionRegistry registry, InterfaceTypeDefinition definition) { for (WiringFactory factory : factories) { if (factory.providesTypeResolver(registry, definition)) { return true; } } return false; } @Override public boolean providesTypeResolver(TypeDefinitionRegistry registry, UnionTypeDefinition definition) { for (WiringFactory factory : factories) { if (factory.providesTypeResolver(registry, definition)) { return true; } } return false; } @Override public TypeResolver getTypeResolver(TypeDefinitionRegistry registry, InterfaceTypeDefinition definition) { for (WiringFactory factory : factories) { if (factory.providesTypeResolver(registry, definition)) { return factory.getTypeResolver(registry, definition); } } return null; } @Override public TypeResolver getTypeResolver(TypeDefinitionRegistry registry, UnionTypeDefinition definition) { for (WiringFactory factory : factories) { if (factory.providesTypeResolver(registry, definition)) { return factory.getTypeResolver(registry, definition); } } return null; } @Override public boolean providesDataFetcher(TypeDefinitionRegistry registry, FieldDefinition definition) { for (WiringFactory factory : factories) { if (factory.providesDataFetcher(registry, definition)) { return true; } } return false; } @Override public DataFetcher getDataFetcher(TypeDefinitionRegistry registry, FieldDefinition definition) { for (WiringFactory factory : factories) { if (factory.providesDataFetcher(registry, definition)) { return factory.getDataFetcher(registry, definition); } } return null; } }