Package graphql.schema
Class SchemaTransformer
- java.lang.Object
-
- graphql.schema.SchemaTransformer
-
@PublicApi public class SchemaTransformer extends java.lang.Object
Transforms aGraphQLSchema
object by calling bac on a provided visitor.To change a
GraphQLSchemaElement
node in the schema you need to returnGraphQLTypeVisitor.changeNode(TraverserContext, GraphQLSchemaElement)
which instructs the schema transformer to change that element upon leaving that visitor method.public TraversalControl visitGraphQLObjectType(GraphQLObjectType objectType, TraverserContext<GraphQLSchemaElement> context) { GraphQLObjectType newObjectType = mkSomeNewNode(objectType); return changeNode(context, newObjectType); }
To delete an element use
GraphQLTypeVisitor.deleteNode(TraverserContext)
public TraversalControl visitGraphQLObjectType(GraphQLObjectType objectType, TraverserContext<GraphQLSchemaElement> context) { return deleteNode(context, objectType); }
To insert elements use either
GraphQLTypeVisitor.insertAfter(TraverserContext, GraphQLSchemaElement)
orGraphQLTypeVisitor.insertBefore(TraverserContext, GraphQLSchemaElement)
which will insert the new node before or after the current node being visitedpublic TraversalControl visitGraphQLObjectType(GraphQLObjectType objectType, TraverserContext<GraphQLSchemaElement> context) { GraphQLObjectType newObjectType = mkSomeNewNode(); return insertAfter(context, newObjectType); }
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
SchemaTransformer.DummyRoot
private static class
SchemaTransformer.RelevantZippersAndBreadcrumbs
private static class
SchemaTransformer.ZipperWithOneParent
-
Constructor Summary
Constructors Constructor Description SchemaTransformer()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private NodeZipper<GraphQLSchemaElement>
moveUp(GraphQLSchemaElement parent, java.util.Map<NodeZipper<GraphQLSchemaElement>,Breadcrumb<GraphQLSchemaElement>> sameParentsZipper)
private void
replaceTypeReferences(SchemaTransformer.DummyRoot dummyRoot, GraphQLSchema schema, GraphQLCodeRegistry.Builder codeRegistry, java.util.Map<java.lang.String,GraphQLNamedType> changedTypes)
GraphQLSchema
transform(GraphQLSchema schema, GraphQLTypeVisitor visitor)
GraphQLSchema
transform(GraphQLSchema schema, GraphQLTypeVisitor visitor, java.util.function.Consumer<GraphQLSchema.Builder> postTransformation)
<T extends GraphQLSchemaElement>
Ttransform(T schemaElement, GraphQLTypeVisitor visitor)
private java.lang.Object
transformImpl(GraphQLSchema schema, GraphQLSchemaElement schemaElement, GraphQLTypeVisitor visitor, java.util.function.Consumer<GraphQLSchema.Builder> postTransformation)
static GraphQLSchema
transformSchema(GraphQLSchema schema, GraphQLTypeVisitor visitor)
Transforms a GraphQLSchema and returns a new GraphQLSchema object.static GraphQLSchema
transformSchema(GraphQLSchema schema, GraphQLTypeVisitor visitor, java.util.function.Consumer<GraphQLSchema.Builder> postTransformation)
Transforms a GraphQLSchema and returns a new GraphQLSchema object.static <T extends GraphQLSchemaElement>
TtransformSchema(T schemaElement, GraphQLTypeVisitor visitor)
Transforms aGraphQLSchemaElement
and returns a new element.private boolean
traverseAndTransform(SchemaTransformer.DummyRoot dummyRoot, java.util.Map<java.lang.String,GraphQLNamedType> changedTypes, java.util.Map<java.lang.String,GraphQLTypeReference> typeReferences, GraphQLTypeVisitor visitor, GraphQLCodeRegistry.Builder codeRegistry, GraphQLSchema schema)
private java.util.Map<NodeZipper<GraphQLSchemaElement>,Breadcrumb<GraphQLSchemaElement>>
zipperWithSameParent(GraphQLSchemaElement parent, SchemaTransformer.RelevantZippersAndBreadcrumbs relevantZippers, boolean cleanup)
private boolean
zipUpToDummyRoot(java.util.List<NodeZipper<GraphQLSchemaElement>> zippers, java.util.List<java.util.List<GraphQLSchemaElement>> stronglyConnectedTopologicallySorted, java.util.Map<NodeZipper<GraphQLSchemaElement>,java.util.List<java.util.List<Breadcrumb<GraphQLSchemaElement>>>> breadcrumbsByZipper, java.util.Map<GraphQLSchemaElement,NodeZipper<GraphQLSchemaElement>> nodeToZipper)
-
-
-
Method Detail
-
transformSchema
public static GraphQLSchema transformSchema(GraphQLSchema schema, GraphQLTypeVisitor visitor)
Transforms a GraphQLSchema and returns a new GraphQLSchema object.- Parameters:
schema
- the schema to transformvisitor
- the visitor call back- Returns:
- a new GraphQLSchema instance.
-
transformSchema
public static GraphQLSchema transformSchema(GraphQLSchema schema, GraphQLTypeVisitor visitor, java.util.function.Consumer<GraphQLSchema.Builder> postTransformation)
Transforms a GraphQLSchema and returns a new GraphQLSchema object.- Parameters:
schema
- the schema to transformvisitor
- the visitor call backpostTransformation
- a callback that can be as a final step to the schema- Returns:
- a new GraphQLSchema instance.
-
transformSchema
public static <T extends GraphQLSchemaElement> T transformSchema(T schemaElement, GraphQLTypeVisitor visitor)
Transforms aGraphQLSchemaElement
and returns a new element.- Type Parameters:
T
- for two- Parameters:
schemaElement
- the schema element to transformvisitor
- the visitor call back- Returns:
- a new GraphQLSchemaElement instance.
-
transform
public GraphQLSchema transform(GraphQLSchema schema, GraphQLTypeVisitor visitor)
-
transform
public GraphQLSchema transform(GraphQLSchema schema, GraphQLTypeVisitor visitor, java.util.function.Consumer<GraphQLSchema.Builder> postTransformation)
-
transform
public <T extends GraphQLSchemaElement> T transform(T schemaElement, GraphQLTypeVisitor visitor)
-
transformImpl
private java.lang.Object transformImpl(GraphQLSchema schema, GraphQLSchemaElement schemaElement, GraphQLTypeVisitor visitor, java.util.function.Consumer<GraphQLSchema.Builder> postTransformation)
-
replaceTypeReferences
private void replaceTypeReferences(SchemaTransformer.DummyRoot dummyRoot, GraphQLSchema schema, GraphQLCodeRegistry.Builder codeRegistry, java.util.Map<java.lang.String,GraphQLNamedType> changedTypes)
-
traverseAndTransform
private boolean traverseAndTransform(SchemaTransformer.DummyRoot dummyRoot, java.util.Map<java.lang.String,GraphQLNamedType> changedTypes, java.util.Map<java.lang.String,GraphQLTypeReference> typeReferences, GraphQLTypeVisitor visitor, GraphQLCodeRegistry.Builder codeRegistry, GraphQLSchema schema)
-
zipUpToDummyRoot
private boolean zipUpToDummyRoot(java.util.List<NodeZipper<GraphQLSchemaElement>> zippers, java.util.List<java.util.List<GraphQLSchemaElement>> stronglyConnectedTopologicallySorted, java.util.Map<NodeZipper<GraphQLSchemaElement>,java.util.List<java.util.List<Breadcrumb<GraphQLSchemaElement>>>> breadcrumbsByZipper, java.util.Map<GraphQLSchemaElement,NodeZipper<GraphQLSchemaElement>> nodeToZipper)
-
zipperWithSameParent
private java.util.Map<NodeZipper<GraphQLSchemaElement>,Breadcrumb<GraphQLSchemaElement>> zipperWithSameParent(GraphQLSchemaElement parent, SchemaTransformer.RelevantZippersAndBreadcrumbs relevantZippers, boolean cleanup)
-
moveUp
private NodeZipper<GraphQLSchemaElement> moveUp(GraphQLSchemaElement parent, java.util.Map<NodeZipper<GraphQLSchemaElement>,Breadcrumb<GraphQLSchemaElement>> sameParentsZipper)
-
-