Package graphql.schema.diffing.ana
Class EditOperationAnalyzer
- java.lang.Object
-
- graphql.schema.diffing.ana.EditOperationAnalyzer
-
public class EditOperationAnalyzer extends java.lang.ObjectHigher level GraphQL semantic assigned to
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map<java.lang.String,SchemaDifference.DirectiveDifference>directiveDifferencesprivate java.util.Map<java.lang.String,SchemaDifference.EnumDifference>enumDifferencesprivate java.util.Map<java.lang.String,SchemaDifference.InputObjectDifference>inputObjectDifferencesprivate java.util.Map<java.lang.String,SchemaDifference.InterfaceDifference>interfaceDifferencesprivate GraphQLSchemanewSchemaprivate SchemaGraphnewSchemaGraphprivate java.util.Map<java.lang.String,SchemaDifference.ObjectDifference>objectDifferencesprivate GraphQLSchemaoldSchemaprivate SchemaGrapholdSchemaGraphprivate static java.util.List<EditOperation.Operation>OPERATION_TRAVERSAL_ORDERThe order to traverse edit operations according to the operation.private java.util.Map<java.lang.String,SchemaDifference.ScalarDifference>scalarDifferencesprivate static java.util.List<java.lang.String>TYPE_TRAVERSAL_ORDERThe order to traverse edit operations according to the vertex types involved.private java.util.Map<java.lang.String,SchemaDifference.UnionDifference>unionDifferences
-
Constructor Summary
Constructors Constructor Description EditOperationAnalyzer(GraphQLSchema oldSchema, GraphQLSchema newSchema, SchemaGraph oldSchemaGraph, SchemaGraph newSchemaGraph)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidaddedDirective(EditOperation editOperation)private voidaddedEnum(EditOperation editOperation)private voidaddedInputObject(EditOperation editOperation)private voidaddedInterface(EditOperation editOperation)private voidaddedObject(EditOperation editOperation)private voidaddedScalar(EditOperation editOperation)private voidaddedUnion(EditOperation editOperation)EditOperationAnalysisResultanalyzeEdits(java.util.List<EditOperation> editOperations, Mapping mapping)private voidappliedDirectiveAdded(EditOperation editOperation)private voidappliedDirectiveAddedToArgument(Vertex appliedDirective, Vertex container)private voidappliedDirectiveAddedToField(Vertex appliedDirective, Vertex container)private voidappliedDirectiveArgumentChanged(EditOperation editOperation)private voidappliedDirectiveArgumentDeleted(EditOperation editOperation)private voidappliedDirectiveDeleted(EditOperation editOperation)private voidappliedDirectiveDeletedFromArgument(Vertex appliedDirective, Vertex container)private voidappliedDirectiveDeletedFromField(Vertex appliedDirective, Vertex container)private voidargumentAdded(EditOperation editOperation)private voidargumentDeleted(EditOperation editOperation)private voidargumentTypeOrDefaultValueChanged(EditOperation editOperation, Mapping mapping)private voidchangedDirective(EditOperation editOperation)private voidchangedEnum(EditOperation editOperation)private voidchangedInputObject(EditOperation editOperation)private voidchangedInterface(EditOperation editOperation)private voidchangedObject(EditOperation editOperation)private voidchangedScalar(EditOperation editOperation)private voidchangedTypeVertex(EditOperation editOperation)private voidchangedUnion(EditOperation editOperation)private voiddeletedDirective(EditOperation editOperation)private voiddeletedScalar(EditOperation editOperation)private voiddeletedTypeVertex(EditOperation editOperation)private booleandoesArgumentChangeMakeSense(Vertex oldArgument, Vertex newArgument, Mapping mapping)Sometimes the diffing algorithm will give us an argument change when the argument container changed i.e.private voidfieldAdded(EditOperation editOperation)private voidfieldChanged(EditOperation editOperation)private voidfieldDeleted(EditOperation editOperation)private EditOperationfindDeletedEdge(Vertex targetVertexFrom, java.util.List<EditOperation> editOperations, Mapping mapping, java.util.function.Predicate<Edge> edgePredicate)private java.lang.StringgetDefaultValueFromEdgeLabel(Edge edge)private SchemaDifference.DirectiveModificationgetDirectiveModification(java.lang.String newName)private SchemaDifference.EnumModificationgetEnumModification(java.lang.String newName)private SchemaDifference.InputObjectModificationgetInputObjectModification(java.lang.String newName)private SchemaDifference.InterfaceModificationgetInterfaceModification(java.lang.String newName)private SchemaDifference.ObjectModificationgetObjectModification(java.lang.String newName)private SchemaDifference.ScalarModificationgetScalarModification(java.lang.String newName)(package private) static java.util.List<EditOperation>getTraversalOrder(java.util.List<EditOperation> editOperations)The input list ofEditOperations does not conform to any order.private java.lang.StringgetTypeFromEdgeLabel(Edge edge)private SchemaDifference.UnionModificationgetUnionModification(java.lang.String newName)private voidhandleAppliedDirectives(java.util.List<EditOperation> editOperations, Mapping mapping)private voidhandleArgumentChange(EditOperation editOperation, Mapping mapping)private voidhandleArgumentChanges(java.util.List<EditOperation> editOperations, Mapping mapping)private voidhandleEnumValueAdded(EditOperation editOperation)private voidhandleEnumValueChanged(EditOperation editOperation)private voidhandleEnumValueDeleted(EditOperation editOperation)private voidhandleEnumValuesChanges(java.util.List<EditOperation> editOperations, Mapping mapping)private voidhandleImplementsChanges(java.util.List<EditOperation> editOperations, Mapping mapping)private voidhandleInputFieldChange(EditOperation editOperation)private voidhandleTypeChanges(java.util.List<EditOperation> editOperations, Mapping mapping)private voidhandleTypeVertexChanges(java.util.List<EditOperation> editOperations)private voidhandleUnionMemberAdded(EditOperation editOperation)private voidhandleUnionMemberChanges(java.util.List<EditOperation> editOperations, Mapping mapping)private voidhandleUnionMemberDeleted(EditOperation editOperation)private voidinputFieldAdded(EditOperation editOperation)private voidinputFieldDeleted(EditOperation editOperation)private voidinputFieldTypeOrDefaultValueChanged(EditOperation editOperation)private voidinsertedTypeVertex(EditOperation editOperation)private voidinterfaceImplementationDeleted(Edge deletedEdge)private static booleanisAnyVertexOfType(Edge edge, java.lang.String type)private static booleanisAnyVertexOfType(EditOperation edit, java.lang.String type)private booleanisArgumentDeletedFromExistingDirective(java.lang.String directiveName, java.lang.String argumentName)private booleanisArgumentDeletedFromExistingInterfaceField(java.lang.String interfaceName, java.lang.String fieldName, java.lang.String argumentName)private booleanisArgumentDeletedFromExistingObjectField(java.lang.String objectName, java.lang.String fieldName, java.lang.String argumentName)private booleanisArgumentNewForExistingDirective(java.lang.String directiveName, java.lang.String argumentName)private booleanisArgumentNewForExistingInterfaceField(java.lang.String objectName, java.lang.String fieldName, java.lang.String argumentName)private booleanisArgumentNewForExistingObjectField(java.lang.String objectName, java.lang.String fieldName, java.lang.String argumentName)private booleanisDirectiveAdded(java.lang.String name)private booleanisDirectiveDeleted(java.lang.String name)private booleanisEnumAdded(java.lang.String name)private booleanisEnumDeleted(java.lang.String name)private booleanisEnumValueDeletedFromExistingEnum(java.lang.String enumName, java.lang.String valueName)private booleanisFieldDeletedFromExistingInterface(java.lang.String interfaceName, java.lang.String fieldName)private booleanisFieldDeletedFromExistingObject(java.lang.String objectName, java.lang.String fieldName)private booleanisFieldNewForExistingInterface(java.lang.String interfaceName, java.lang.String fieldName)private booleanisFieldNewForExistingObject(java.lang.String objectName, java.lang.String fieldName)private booleanisInputFieldAdded(java.lang.String name)private booleanisInputFieldDeletedFromExistingInputObject(java.lang.String inputObjectName, java.lang.String fieldName)private booleanisInputObjectAdded(java.lang.String name)private booleanisInputObjectDeleted(java.lang.String name)private booleanisInterfaceAdded(java.lang.String name)private booleanisInterfaceDeleted(java.lang.String name)private booleanisNewEnumValueForExistingEnum(java.lang.String enumName, java.lang.String valueName)private booleanisNewInputFieldExistingInputObject(java.lang.String inputObjectName, java.lang.String fieldName)private booleanisObjectAdded(java.lang.String name)private booleanisObjectDeleted(java.lang.String name)private booleanisScalarAdded(java.lang.String name)private booleanisScalarDeleted(java.lang.String name)private booleanisTypeEdge(Edge edge)private booleanisUnionAdded(java.lang.String name)private booleanisUnionDeleted(java.lang.String name)private voidnewInterfaceAddedToInterfaceOrObject(Edge newEdge)private voidoutputFieldTypeChanged(EditOperation editOperation)private voidremovedEnum(EditOperation editOperation)private voidremovedInputObject(EditOperation editOperation)private voidremovedInterface(EditOperation editOperation)private voidremovedObject(EditOperation editOperation)private voidremovedUnion(EditOperation editOperation)private voidtypeEdgeChanged(EditOperation editOperation, Mapping mapping)private voidtypeEdgeInserted(EditOperation editOperation, java.util.List<EditOperation> editOperations, Mapping mapping)private voidtypeEdgeInsertedForArgument(EditOperation editOperation, java.util.List<EditOperation> editOperations, Mapping mapping)private voidtypeEdgeInsertedForField(EditOperation editOperation, java.util.List<EditOperation> editOperations, Mapping mapping)private voidtypeEdgeInsertedForInputField(EditOperation editOperation, java.util.List<EditOperation> editOperations, Mapping mapping)
-
-
-
Field Detail
-
oldSchema
private final GraphQLSchema oldSchema
-
newSchema
private final GraphQLSchema newSchema
-
oldSchemaGraph
private final SchemaGraph oldSchemaGraph
-
newSchemaGraph
private final SchemaGraph newSchemaGraph
-
objectDifferences
private final java.util.Map<java.lang.String,SchemaDifference.ObjectDifference> objectDifferences
-
interfaceDifferences
private final java.util.Map<java.lang.String,SchemaDifference.InterfaceDifference> interfaceDifferences
-
unionDifferences
private final java.util.Map<java.lang.String,SchemaDifference.UnionDifference> unionDifferences
-
enumDifferences
private final java.util.Map<java.lang.String,SchemaDifference.EnumDifference> enumDifferences
-
inputObjectDifferences
private final java.util.Map<java.lang.String,SchemaDifference.InputObjectDifference> inputObjectDifferences
-
scalarDifferences
private final java.util.Map<java.lang.String,SchemaDifference.ScalarDifference> scalarDifferences
-
directiveDifferences
private final java.util.Map<java.lang.String,SchemaDifference.DirectiveDifference> directiveDifferences
-
OPERATION_TRAVERSAL_ORDER
private static final java.util.List<EditOperation.Operation> OPERATION_TRAVERSAL_ORDER
The order to traverse edit operations according to the operation.- See Also:
getTraversalOrder(List)
-
TYPE_TRAVERSAL_ORDER
private static final java.util.List<java.lang.String> TYPE_TRAVERSAL_ORDER
The order to traverse edit operations according to the vertex types involved.- See Also:
getTraversalOrder(List)
-
-
Constructor Detail
-
EditOperationAnalyzer
public EditOperationAnalyzer(GraphQLSchema oldSchema, GraphQLSchema newSchema, SchemaGraph oldSchemaGraph, SchemaGraph newSchemaGraph)
-
-
Method Detail
-
analyzeEdits
public EditOperationAnalysisResult analyzeEdits(java.util.List<EditOperation> editOperations, Mapping mapping)
-
handleArgumentChanges
private void handleArgumentChanges(java.util.List<EditOperation> editOperations, Mapping mapping)
-
handleAppliedDirectives
private void handleAppliedDirectives(java.util.List<EditOperation> editOperations, Mapping mapping)
-
appliedDirectiveDeleted
private void appliedDirectiveDeleted(EditOperation editOperation)
-
appliedDirectiveArgumentDeleted
private void appliedDirectiveArgumentDeleted(EditOperation editOperation)
-
appliedDirectiveArgumentChanged
private void appliedDirectiveArgumentChanged(EditOperation editOperation)
-
appliedDirectiveAdded
private void appliedDirectiveAdded(EditOperation editOperation)
-
appliedDirectiveDeletedFromField
private void appliedDirectiveDeletedFromField(Vertex appliedDirective, Vertex container)
-
appliedDirectiveAddedToField
private void appliedDirectiveAddedToField(Vertex appliedDirective, Vertex container)
-
appliedDirectiveDeletedFromArgument
private void appliedDirectiveDeletedFromArgument(Vertex appliedDirective, Vertex container)
-
appliedDirectiveAddedToArgument
private void appliedDirectiveAddedToArgument(Vertex appliedDirective, Vertex container)
-
handleTypeChanges
private void handleTypeChanges(java.util.List<EditOperation> editOperations, Mapping mapping)
-
handleUnionMemberChanges
private void handleUnionMemberChanges(java.util.List<EditOperation> editOperations, Mapping mapping)
-
handleEnumValuesChanges
private void handleEnumValuesChanges(java.util.List<EditOperation> editOperations, Mapping mapping)
-
handleInputFieldChange
private void handleInputFieldChange(EditOperation editOperation)
-
handleArgumentChange
private void handleArgumentChange(EditOperation editOperation, Mapping mapping)
-
handleImplementsChanges
private void handleImplementsChanges(java.util.List<EditOperation> editOperations, Mapping mapping)
-
handleUnionMemberAdded
private void handleUnionMemberAdded(EditOperation editOperation)
-
handleUnionMemberDeleted
private void handleUnionMemberDeleted(EditOperation editOperation)
-
handleEnumValueAdded
private void handleEnumValueAdded(EditOperation editOperation)
-
handleEnumValueDeleted
private void handleEnumValueDeleted(EditOperation editOperation)
-
handleEnumValueChanged
private void handleEnumValueChanged(EditOperation editOperation)
-
fieldChanged
private void fieldChanged(EditOperation editOperation)
-
inputFieldAdded
private void inputFieldAdded(EditOperation editOperation)
-
fieldAdded
private void fieldAdded(EditOperation editOperation)
-
inputFieldDeleted
private void inputFieldDeleted(EditOperation editOperation)
-
fieldDeleted
private void fieldDeleted(EditOperation editOperation)
-
handleTypeVertexChanges
private void handleTypeVertexChanges(java.util.List<EditOperation> editOperations)
-
insertedTypeVertex
private void insertedTypeVertex(EditOperation editOperation)
-
deletedTypeVertex
private void deletedTypeVertex(EditOperation editOperation)
-
changedTypeVertex
private void changedTypeVertex(EditOperation editOperation)
-
typeEdgeInserted
private void typeEdgeInserted(EditOperation editOperation, java.util.List<EditOperation> editOperations, Mapping mapping)
-
typeEdgeInsertedForInputField
private void typeEdgeInsertedForInputField(EditOperation editOperation, java.util.List<EditOperation> editOperations, Mapping mapping)
-
typeEdgeInsertedForArgument
private void typeEdgeInsertedForArgument(EditOperation editOperation, java.util.List<EditOperation> editOperations, Mapping mapping)
-
typeEdgeInsertedForField
private void typeEdgeInsertedForField(EditOperation editOperation, java.util.List<EditOperation> editOperations, Mapping mapping)
-
findDeletedEdge
private EditOperation findDeletedEdge(Vertex targetVertexFrom, java.util.List<EditOperation> editOperations, Mapping mapping, java.util.function.Predicate<Edge> edgePredicate)
-
typeEdgeChanged
private void typeEdgeChanged(EditOperation editOperation, Mapping mapping)
-
inputFieldTypeOrDefaultValueChanged
private void inputFieldTypeOrDefaultValueChanged(EditOperation editOperation)
-
argumentTypeOrDefaultValueChanged
private void argumentTypeOrDefaultValueChanged(EditOperation editOperation, Mapping mapping)
-
doesArgumentChangeMakeSense
private boolean doesArgumentChangeMakeSense(Vertex oldArgument, Vertex newArgument, Mapping mapping)
Sometimes the diffing algorithm will give us an argument change when the argument container changed i.e. the argument was "moved" around because the deleted and newly added arguments look similar.We only want to report argument type changes if it makes sense i.e. if the argument container was the same.
-
outputFieldTypeChanged
private void outputFieldTypeChanged(EditOperation editOperation)
-
getTypeFromEdgeLabel
private java.lang.String getTypeFromEdgeLabel(Edge edge)
-
getDefaultValueFromEdgeLabel
private java.lang.String getDefaultValueFromEdgeLabel(Edge edge)
-
isTypeEdge
private boolean isTypeEdge(Edge edge)
-
interfaceImplementationDeleted
private void interfaceImplementationDeleted(Edge deletedEdge)
-
newInterfaceAddedToInterfaceOrObject
private void newInterfaceAddedToInterfaceOrObject(Edge newEdge)
-
isDirectiveAdded
private boolean isDirectiveAdded(java.lang.String name)
-
isDirectiveDeleted
private boolean isDirectiveDeleted(java.lang.String name)
-
isObjectAdded
private boolean isObjectAdded(java.lang.String name)
-
isUnionAdded
private boolean isUnionAdded(java.lang.String name)
-
isUnionDeleted
private boolean isUnionDeleted(java.lang.String name)
-
isEnumDeleted
private boolean isEnumDeleted(java.lang.String name)
-
isEnumAdded
private boolean isEnumAdded(java.lang.String name)
-
isInputObjectAdded
private boolean isInputObjectAdded(java.lang.String name)
-
isInputObjectDeleted
private boolean isInputObjectDeleted(java.lang.String name)
-
isInputFieldAdded
private boolean isInputFieldAdded(java.lang.String name)
-
isNewInputFieldExistingInputObject
private boolean isNewInputFieldExistingInputObject(java.lang.String inputObjectName, java.lang.String fieldName)
-
isInputFieldDeletedFromExistingInputObject
private boolean isInputFieldDeletedFromExistingInputObject(java.lang.String inputObjectName, java.lang.String fieldName)
-
isArgumentNewForExistingDirective
private boolean isArgumentNewForExistingDirective(java.lang.String directiveName, java.lang.String argumentName)
-
isArgumentDeletedFromExistingDirective
private boolean isArgumentDeletedFromExistingDirective(java.lang.String directiveName, java.lang.String argumentName)
-
isArgumentNewForExistingObjectField
private boolean isArgumentNewForExistingObjectField(java.lang.String objectName, java.lang.String fieldName, java.lang.String argumentName)
-
isArgumentDeletedFromExistingObjectField
private boolean isArgumentDeletedFromExistingObjectField(java.lang.String objectName, java.lang.String fieldName, java.lang.String argumentName)
-
isArgumentDeletedFromExistingInterfaceField
private boolean isArgumentDeletedFromExistingInterfaceField(java.lang.String interfaceName, java.lang.String fieldName, java.lang.String argumentName)
-
isArgumentNewForExistingInterfaceField
private boolean isArgumentNewForExistingInterfaceField(java.lang.String objectName, java.lang.String fieldName, java.lang.String argumentName)
-
isFieldNewForExistingObject
private boolean isFieldNewForExistingObject(java.lang.String objectName, java.lang.String fieldName)
-
isFieldDeletedFromExistingInterface
private boolean isFieldDeletedFromExistingInterface(java.lang.String interfaceName, java.lang.String fieldName)
-
isFieldDeletedFromExistingObject
private boolean isFieldDeletedFromExistingObject(java.lang.String objectName, java.lang.String fieldName)
-
isNewEnumValueForExistingEnum
private boolean isNewEnumValueForExistingEnum(java.lang.String enumName, java.lang.String valueName)
-
isEnumValueDeletedFromExistingEnum
private boolean isEnumValueDeletedFromExistingEnum(java.lang.String enumName, java.lang.String valueName)
-
isFieldNewForExistingInterface
private boolean isFieldNewForExistingInterface(java.lang.String interfaceName, java.lang.String fieldName)
-
isObjectDeleted
private boolean isObjectDeleted(java.lang.String name)
-
isInterfaceDeleted
private boolean isInterfaceDeleted(java.lang.String name)
-
isInterfaceAdded
private boolean isInterfaceAdded(java.lang.String name)
-
isScalarAdded
private boolean isScalarAdded(java.lang.String name)
-
isScalarDeleted
private boolean isScalarDeleted(java.lang.String name)
-
getObjectModification
private SchemaDifference.ObjectModification getObjectModification(java.lang.String newName)
-
getUnionModification
private SchemaDifference.UnionModification getUnionModification(java.lang.String newName)
-
getEnumModification
private SchemaDifference.EnumModification getEnumModification(java.lang.String newName)
-
getInputObjectModification
private SchemaDifference.InputObjectModification getInputObjectModification(java.lang.String newName)
-
getDirectiveModification
private SchemaDifference.DirectiveModification getDirectiveModification(java.lang.String newName)
-
getInterfaceModification
private SchemaDifference.InterfaceModification getInterfaceModification(java.lang.String newName)
-
getScalarModification
private SchemaDifference.ScalarModification getScalarModification(java.lang.String newName)
-
addedObject
private void addedObject(EditOperation editOperation)
-
addedInterface
private void addedInterface(EditOperation editOperation)
-
addedUnion
private void addedUnion(EditOperation editOperation)
-
addedInputObject
private void addedInputObject(EditOperation editOperation)
-
addedEnum
private void addedEnum(EditOperation editOperation)
-
addedScalar
private void addedScalar(EditOperation editOperation)
-
addedDirective
private void addedDirective(EditOperation editOperation)
-
removedObject
private void removedObject(EditOperation editOperation)
-
removedInterface
private void removedInterface(EditOperation editOperation)
-
removedUnion
private void removedUnion(EditOperation editOperation)
-
removedInputObject
private void removedInputObject(EditOperation editOperation)
-
removedEnum
private void removedEnum(EditOperation editOperation)
-
deletedScalar
private void deletedScalar(EditOperation editOperation)
-
deletedDirective
private void deletedDirective(EditOperation editOperation)
-
argumentDeleted
private void argumentDeleted(EditOperation editOperation)
-
argumentAdded
private void argumentAdded(EditOperation editOperation)
-
changedEnum
private void changedEnum(EditOperation editOperation)
-
changedScalar
private void changedScalar(EditOperation editOperation)
-
changedInputObject
private void changedInputObject(EditOperation editOperation)
-
changedDirective
private void changedDirective(EditOperation editOperation)
-
changedObject
private void changedObject(EditOperation editOperation)
-
changedInterface
private void changedInterface(EditOperation editOperation)
-
changedUnion
private void changedUnion(EditOperation editOperation)
-
getTraversalOrder
static java.util.List<EditOperation> getTraversalOrder(java.util.List<EditOperation> editOperations)
The input list ofEditOperations does not conform to any order.We need to sort it as we sometimes rely on the parents being processed first.
e.g. we ignore a new argument if the parent of the argument is new. However, if the argument addition is processed before the
-
isAnyVertexOfType
private static boolean isAnyVertexOfType(EditOperation edit, java.lang.String type)
-
isAnyVertexOfType
private static boolean isAnyVertexOfType(Edge edge, java.lang.String type)
-
-