Search in sources :

Example 1 with SchemaDefinition

use of graphql.language.SchemaDefinition in project graphql-java by graphql-java.

the class GraphqlAntlrToLanguage method visitSchemaDefinition.

@Override
public Void visitSchemaDefinition(GraphqlParser.SchemaDefinitionContext ctx) {
    SchemaDefinition def = new SchemaDefinition();
    newNode(def, ctx);
    result.getDefinitions().add(def);
    addContextProperty(ContextProperty.SchemaDefinition, def);
    super.visitChildren(ctx);
    popContext();
    return null;
}
Also used : SchemaDefinition(graphql.language.SchemaDefinition)

Example 2 with SchemaDefinition

use of graphql.language.SchemaDefinition in project graphql-java by graphql-java.

the class IntrospectionResultToSchema method createSchemaDefinition.

/**
 * Returns a IDL Document that reprSesents the schema as defined by the introspection result map
 *
 * @param introspectionResult the result of an introspection query on a schema
 *
 * @return a IDL Document of the schema
 */
@SuppressWarnings("unchecked")
public Document createSchemaDefinition(Map<String, Object> introspectionResult) {
    assertTrue(introspectionResult.get("__schema") != null, "__schema expected");
    Map<String, Object> schema = (Map<String, Object>) introspectionResult.get("__schema");
    Map<String, Object> queryType = (Map<String, Object>) schema.get("queryType");
    assertNotNull(queryType, "queryType expected");
    TypeName query = new TypeName((String) queryType.get("name"));
    boolean nonDefaultQueryName = !"Query".equals(query.getName());
    SchemaDefinition schemaDefinition = new SchemaDefinition();
    schemaDefinition.getOperationTypeDefinitions().add(new OperationTypeDefinition("query", query));
    Map<String, Object> mutationType = (Map<String, Object>) schema.get("mutationType");
    boolean nonDefaultMutationName = false;
    if (mutationType != null) {
        TypeName mutation = new TypeName((String) mutationType.get("name"));
        nonDefaultMutationName = !"Mutation".equals(mutation.getName());
        schemaDefinition.getOperationTypeDefinitions().add(new OperationTypeDefinition("mutation", mutation));
    }
    Map<String, Object> subscriptionType = (Map<String, Object>) schema.get("subscriptionType");
    boolean nonDefaultSubscriptionName = false;
    if (subscriptionType != null) {
        TypeName subscription = new TypeName((String) subscriptionType.get("name"));
        nonDefaultSubscriptionName = !"Subscription".equals(subscription.getName());
        schemaDefinition.getOperationTypeDefinitions().add(new OperationTypeDefinition("subscription", subscription));
    }
    Document document = new Document();
    if (nonDefaultQueryName || nonDefaultMutationName || nonDefaultSubscriptionName) {
        document.getDefinitions().add(schemaDefinition);
    }
    List<Map<String, Object>> types = (List<Map<String, Object>>) schema.get("types");
    for (Map<String, Object> type : types) {
        TypeDefinition typeDefinition = createTypeDefinition(type);
        if (typeDefinition == null)
            continue;
        document.getDefinitions().add(typeDefinition);
    }
    return document;
}
Also used : TypeName(graphql.language.TypeName) SchemaDefinition(graphql.language.SchemaDefinition) ArrayList(java.util.ArrayList) List(java.util.List) OperationTypeDefinition(graphql.language.OperationTypeDefinition) Document(graphql.language.Document) Map(java.util.Map) InputObjectTypeDefinition(graphql.language.InputObjectTypeDefinition) EnumTypeDefinition(graphql.language.EnumTypeDefinition) UnionTypeDefinition(graphql.language.UnionTypeDefinition) OperationTypeDefinition(graphql.language.OperationTypeDefinition) ScalarTypeDefinition(graphql.language.ScalarTypeDefinition) ObjectTypeDefinition(graphql.language.ObjectTypeDefinition) TypeDefinition(graphql.language.TypeDefinition) InterfaceTypeDefinition(graphql.language.InterfaceTypeDefinition)

Example 3 with SchemaDefinition

use of graphql.language.SchemaDefinition in project graphql-java by graphql-java.

the class SchemaTypeChecker method checkSchemaInvariants.

private void checkSchemaInvariants(List<GraphQLError> errors, TypeDefinitionRegistry typeRegistry) {
    // schema
    if (!typeRegistry.schemaDefinition().isPresent()) {
        if (!typeRegistry.getType("Query").isPresent()) {
            errors.add(new SchemaMissingError());
        }
    } else {
        SchemaDefinition schemaDefinition = typeRegistry.schemaDefinition().get();
        List<OperationTypeDefinition> operationTypeDefinitions = schemaDefinition.getOperationTypeDefinitions();
        operationTypeDefinitions.forEach(checkOperationTypesExist(typeRegistry, errors));
        operationTypeDefinitions.forEach(checkOperationTypesAreObjects(typeRegistry, errors));
        // ensure we have a "query" one
        Optional<OperationTypeDefinition> query = operationTypeDefinitions.stream().filter(op -> "query".equals(op.getName())).findFirst();
        if (!query.isPresent()) {
            errors.add(new QueryOperationMissingError());
        }
    }
}
Also used : MissingInterfaceTypeError(graphql.schema.idl.errors.MissingInterfaceTypeError) BiFunction(java.util.function.BiFunction) InputValueDefinition(graphql.language.InputValueDefinition) SchemaDefinition(graphql.language.SchemaDefinition) MissingInterfaceFieldError(graphql.schema.idl.errors.MissingInterfaceFieldError) EnumTypeDefinition(graphql.language.EnumTypeDefinition) Type(graphql.language.Type) MissingScalarImplementationError(graphql.schema.idl.errors.MissingScalarImplementationError) EnumValueDefinition(graphql.language.EnumValueDefinition) ObjectTypeExtensionDefinition(graphql.language.ObjectTypeExtensionDefinition) GraphQLError(graphql.GraphQLError) Map(java.util.Map) TypeName(graphql.language.TypeName) QueryOperationMissingError(graphql.schema.idl.errors.QueryOperationMissingError) OperationTypeDefinition(graphql.language.OperationTypeDefinition) ObjectTypeDefinition(graphql.language.ObjectTypeDefinition) InterfaceFieldRedefinitionError(graphql.schema.idl.errors.InterfaceFieldRedefinitionError) Predicate(java.util.function.Predicate) Collection(java.util.Collection) FieldDefinition(graphql.language.FieldDefinition) Set(java.util.Set) TypeDefinition(graphql.language.TypeDefinition) Collectors(java.util.stream.Collectors) BinaryOperator(java.util.function.BinaryOperator) AstPrinter(graphql.language.AstPrinter) MissingTypeError(graphql.schema.idl.errors.MissingTypeError) List(java.util.List) InterfaceTypeDefinition(graphql.language.InterfaceTypeDefinition) Optional(java.util.Optional) NonUniqueArgumentError(graphql.schema.idl.errors.NonUniqueArgumentError) InterfaceFieldArgumentRedefinitionError(graphql.schema.idl.errors.InterfaceFieldArgumentRedefinitionError) SchemaMissingError(graphql.schema.idl.errors.SchemaMissingError) NonUniqueDirectiveError(graphql.schema.idl.errors.NonUniqueDirectiveError) Internal(graphql.Internal) InputObjectTypeDefinition(graphql.language.InputObjectTypeDefinition) SchemaProblem(graphql.schema.idl.errors.SchemaProblem) MissingTypeResolverError(graphql.schema.idl.errors.MissingTypeResolverError) Function(java.util.function.Function) Supplier(java.util.function.Supplier) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) UnionTypeDefinition(graphql.language.UnionTypeDefinition) NonUniqueNameError(graphql.schema.idl.errors.NonUniqueNameError) OperationTypesMustBeObjects(graphql.schema.idl.errors.OperationTypesMustBeObjects) InvalidDeprecationDirectiveError(graphql.schema.idl.errors.InvalidDeprecationDirectiveError) MissingInterfaceFieldArgumentsError(graphql.schema.idl.errors.MissingInterfaceFieldArgumentsError) Directive(graphql.language.Directive) Consumer(java.util.function.Consumer) Argument(graphql.language.Argument) StringValue(graphql.language.StringValue) Collections(java.util.Collections) QueryOperationMissingError(graphql.schema.idl.errors.QueryOperationMissingError) SchemaDefinition(graphql.language.SchemaDefinition) SchemaMissingError(graphql.schema.idl.errors.SchemaMissingError) OperationTypeDefinition(graphql.language.OperationTypeDefinition)

Example 4 with SchemaDefinition

use of graphql.language.SchemaDefinition in project graphql-java by graphql-java.

the class SchemaGenerator method makeExecutableSchemaImpl.

private GraphQLSchema makeExecutableSchemaImpl(BuildContext buildCtx) {
    GraphQLObjectType query;
    GraphQLObjectType mutation;
    GraphQLObjectType subscription;
    GraphQLSchema.Builder schemaBuilder = GraphQLSchema.newSchema();
    // 
    // Schema can be missing if the type is called 'Query'.  Pre flight checks have checked that!
    // 
    TypeDefinitionRegistry typeRegistry = buildCtx.getTypeRegistry();
    if (!typeRegistry.schemaDefinition().isPresent()) {
        @SuppressWarnings({ "OptionalGetWithoutIsPresent", "ConstantConditions" }) TypeDefinition queryTypeDef = typeRegistry.getType("Query").get();
        query = buildOutputType(buildCtx, new TypeName(queryTypeDef.getName()));
        schemaBuilder.query(query);
        Optional<TypeDefinition> mutationTypeDef = typeRegistry.getType("Mutation");
        if (mutationTypeDef.isPresent()) {
            mutation = buildOutputType(buildCtx, new TypeName(mutationTypeDef.get().getName()));
            schemaBuilder.mutation(mutation);
        }
        Optional<TypeDefinition> subscriptionTypeDef = typeRegistry.getType("Subscription");
        if (subscriptionTypeDef.isPresent()) {
            subscription = buildOutputType(buildCtx, new TypeName(subscriptionTypeDef.get().getName()));
            schemaBuilder.subscription(subscription);
        }
    } else {
        SchemaDefinition schemaDefinition = typeRegistry.schemaDefinition().get();
        List<OperationTypeDefinition> operationTypes = schemaDefinition.getOperationTypeDefinitions();
        // pre-flight checked via checker
        @SuppressWarnings({ "OptionalGetWithoutIsPresent", "ConstantConditions" }) OperationTypeDefinition queryOp = operationTypes.stream().filter(op -> "query".equals(op.getName())).findFirst().get();
        Optional<OperationTypeDefinition> mutationOp = operationTypes.stream().filter(op -> "mutation".equals(op.getName())).findFirst();
        Optional<OperationTypeDefinition> subscriptionOp = operationTypes.stream().filter(op -> "subscription".equals(op.getName())).findFirst();
        query = buildOperation(buildCtx, queryOp);
        schemaBuilder.query(query);
        if (mutationOp.isPresent()) {
            mutation = buildOperation(buildCtx, mutationOp.get());
            schemaBuilder.mutation(mutation);
        }
        if (subscriptionOp.isPresent()) {
            subscription = buildOperation(buildCtx, subscriptionOp.get());
            schemaBuilder.subscription(subscription);
        }
    }
    Set<GraphQLType> additionalTypes = buildAdditionalTypes(buildCtx);
    schemaBuilder.fieldVisibility(buildCtx.getWiring().getFieldVisibility());
    return schemaBuilder.build(additionalTypes);
}
Also used : Arrays(java.util.Arrays) Value(graphql.language.Value) INPUT_FIELD_DEFINITION(graphql.introspection.Introspection.DirectiveLocation.INPUT_FIELD_DEFINITION) GraphQLInputObjectType(graphql.schema.GraphQLInputObjectType) GraphQLFieldDefinition(graphql.schema.GraphQLFieldDefinition) GraphQLInterfaceType(graphql.schema.GraphQLInterfaceType) InputValueDefinition(graphql.language.InputValueDefinition) GraphQLInputObjectField(graphql.schema.GraphQLInputObjectField) GraphQLUnionType(graphql.schema.GraphQLUnionType) SchemaDefinition(graphql.language.SchemaDefinition) GraphQLEnumValueDefinition(graphql.schema.GraphQLEnumValueDefinition) UNION(graphql.introspection.Introspection.DirectiveLocation.UNION) EnumTypeDefinition(graphql.language.EnumTypeDefinition) Type(graphql.language.Type) INPUT_OBJECT(graphql.introspection.Introspection.DirectiveLocation.INPUT_OBJECT) TypeResolverProxy(graphql.schema.TypeResolverProxy) GraphQLEnumValueDefinition.newEnumValueDefinition(graphql.schema.GraphQLEnumValueDefinition.newEnumValueDefinition) DataFetcherFactory(graphql.schema.DataFetcherFactory) EnumValueDefinition(graphql.language.EnumValueDefinition) ObjectTypeExtensionDefinition(graphql.language.ObjectTypeExtensionDefinition) OBJECT(graphql.introspection.Introspection.DirectiveLocation.OBJECT) GraphQLError(graphql.GraphQLError) Map(java.util.Map) TypeName(graphql.language.TypeName) TypeResolver(graphql.schema.TypeResolver) OperationTypeDefinition(graphql.language.OperationTypeDefinition) GraphQLObjectType(graphql.schema.GraphQLObjectType) GraphQLDirective(graphql.schema.GraphQLDirective) NotAnInputTypeError(graphql.schema.idl.errors.NotAnInputTypeError) ObjectTypeDefinition(graphql.language.ObjectTypeDefinition) UnionTypeExtensionDefinition(graphql.language.UnionTypeExtensionDefinition) Collections.emptyList(java.util.Collections.emptyList) FieldDefinition(graphql.language.FieldDefinition) GraphQLInputType(graphql.schema.GraphQLInputType) Set(java.util.Set) TypeDefinition(graphql.language.TypeDefinition) GraphQLArgument(graphql.schema.GraphQLArgument) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) NotAnOutputTypeError(graphql.schema.idl.errors.NotAnOutputTypeError) List(java.util.List) Stream(java.util.stream.Stream) ENUM_VALUE(graphql.introspection.Introspection.DirectiveLocation.ENUM_VALUE) InterfaceTypeDefinition(graphql.language.InterfaceTypeDefinition) Optional(java.util.Optional) GraphQLEnumType(graphql.schema.GraphQLEnumType) InterfaceTypeExtensionDefinition(graphql.language.InterfaceTypeExtensionDefinition) DirectiveLocation(graphql.introspection.Introspection.DirectiveLocation) GraphQLScalarType(graphql.schema.GraphQLScalarType) InputObjectTypeDefinition(graphql.language.InputObjectTypeDefinition) SchemaProblem(graphql.schema.idl.errors.SchemaProblem) HashMap(java.util.HashMap) GraphQLType(graphql.schema.GraphQLType) Stack(java.util.Stack) ArrayList(java.util.ArrayList) ENUM(graphql.introspection.Introspection.DirectiveLocation.ENUM) Introspection(graphql.introspection.Introspection) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) UnionTypeDefinition(graphql.language.UnionTypeDefinition) DataFetcherFactories(graphql.schema.DataFetcherFactories) InputObjectTypeExtensionDefinition(graphql.language.InputObjectTypeExtensionDefinition) ScalarTypeExtensionDefinition(graphql.language.ScalarTypeExtensionDefinition) DataFetcher(graphql.schema.DataFetcher) GraphQLSchema(graphql.schema.GraphQLSchema) ScalarTypeDefinition(graphql.language.ScalarTypeDefinition) EnumTypeExtensionDefinition(graphql.language.EnumTypeExtensionDefinition) GraphQLOutputType(graphql.schema.GraphQLOutputType) Directive(graphql.language.Directive) GraphQLTypeReference(graphql.schema.GraphQLTypeReference) PublicApi(graphql.PublicApi) Assert.assertNotNull(graphql.Assert.assertNotNull) GraphQLTypeReference.typeRef(graphql.schema.GraphQLTypeReference.typeRef) Collections(java.util.Collections) TypeName(graphql.language.TypeName) SchemaDefinition(graphql.language.SchemaDefinition) GraphQLType(graphql.schema.GraphQLType) OperationTypeDefinition(graphql.language.OperationTypeDefinition) GraphQLSchema(graphql.schema.GraphQLSchema) EnumTypeDefinition(graphql.language.EnumTypeDefinition) OperationTypeDefinition(graphql.language.OperationTypeDefinition) ObjectTypeDefinition(graphql.language.ObjectTypeDefinition) TypeDefinition(graphql.language.TypeDefinition) InterfaceTypeDefinition(graphql.language.InterfaceTypeDefinition) InputObjectTypeDefinition(graphql.language.InputObjectTypeDefinition) UnionTypeDefinition(graphql.language.UnionTypeDefinition) ScalarTypeDefinition(graphql.language.ScalarTypeDefinition) GraphQLObjectType(graphql.schema.GraphQLObjectType)

Example 5 with SchemaDefinition

use of graphql.language.SchemaDefinition in project graphql-java by graphql-java.

the class SchemaDiff method diffSchemaImpl.

private void diffSchemaImpl(DiffSet diffSet, DifferenceReporter reporter) {
    Map<String, Object> oldApi = diffSet.getOld();
    Map<String, Object> newApi = diffSet.getNew();
    Document oldDoc = new IntrospectionResultToSchema().createSchemaDefinition(oldApi);
    Document newDoc = new IntrospectionResultToSchema().createSchemaDefinition(newApi);
    DiffCtx ctx = new DiffCtx(reporter, oldDoc, newDoc);
    Optional<SchemaDefinition> oldSchemaDef = getSchemaDef(oldDoc);
    Optional<SchemaDefinition> newSchemaDef = getSchemaDef(newDoc);
    // check query operation
    checkOperation(ctx, "query", oldSchemaDef, newSchemaDef);
    checkOperation(ctx, "mutation", oldSchemaDef, newSchemaDef);
    checkOperation(ctx, "subscription", oldSchemaDef, newSchemaDef);
    reporter.onEnd();
}
Also used : SchemaDefinition(graphql.language.SchemaDefinition) Document(graphql.language.Document) IntrospectionResultToSchema(graphql.introspection.IntrospectionResultToSchema)

Aggregations

SchemaDefinition (graphql.language.SchemaDefinition)5 EnumTypeDefinition (graphql.language.EnumTypeDefinition)3 InputObjectTypeDefinition (graphql.language.InputObjectTypeDefinition)3 InterfaceTypeDefinition (graphql.language.InterfaceTypeDefinition)3 ObjectTypeDefinition (graphql.language.ObjectTypeDefinition)3 OperationTypeDefinition (graphql.language.OperationTypeDefinition)3 TypeDefinition (graphql.language.TypeDefinition)3 TypeName (graphql.language.TypeName)3 UnionTypeDefinition (graphql.language.UnionTypeDefinition)3 ArrayList (java.util.ArrayList)3 List (java.util.List)3 Map (java.util.Map)3 GraphQLError (graphql.GraphQLError)2 Directive (graphql.language.Directive)2 Document (graphql.language.Document)2 EnumValueDefinition (graphql.language.EnumValueDefinition)2 FieldDefinition (graphql.language.FieldDefinition)2 InputValueDefinition (graphql.language.InputValueDefinition)2 ObjectTypeExtensionDefinition (graphql.language.ObjectTypeExtensionDefinition)2 ScalarTypeDefinition (graphql.language.ScalarTypeDefinition)2