@@ -44,68 +44,51 @@ private GraphQLDocumentParser() {
4444 static ExtendedDocument getDocument (MappingConfig mappingConfig , List <String > schemaPaths ) throws IOException {
4545 Document document = readDocument (schemaPaths );
4646
47- Map <String , ExtendedObjectTypeDefinition > operationDefinitions = new HashMap <>();
48- Map <String , ExtendedObjectTypeDefinition > typeDefinitions = new HashMap <>();
49- Map <String , ExtendedInputObjectTypeDefinition > inputDefinitions = new HashMap <>();
50- Map <String , ExtendedEnumTypeDefinition > enumDefinitions = new HashMap <>();
51- Map <String , ExtendedScalarTypeDefinition > scalarDefinitions = new HashMap <>();
52- Map <String , ExtendedInterfaceTypeDefinition > interfaceDefinitions = new HashMap <>();
53- Map <String , ExtendedUnionTypeDefinition > unionDefinitions = new HashMap <>();
47+ ExtendedDocumentBuilder extendedDocumentBuilder = new ExtendedDocumentBuilder ();
48+
5449 for (Definition <?> definition : document .getDefinitions ()) {
55- if (!(definition instanceof NamedNode )) {
56- // the only definition that does not have a name is SchemaDefinition, so skipping it
57- continue ;
58- }
59- // we need to group base definitions and extension definitions by name
60- String definitionName = ((NamedNode <?>) definition ).getName ();
61-
62- if (definition instanceof ObjectTypeDefinition ) {
63- if (Utils .isGraphqlOperation (definitionName )) {
64- populateDefinition (operationDefinitions , definition , definitionName ,
65- ObjectTypeDefinition .class , ObjectTypeExtensionDefinition .class ,
66- s -> new ExtendedObjectTypeDefinition ());
67- if (Boolean .TRUE .equals (mappingConfig .getGenerateModelsForRootTypes ())) {
68- populateDefinition (typeDefinitions , definition , definitionName ,
69- ObjectTypeDefinition .class , ObjectTypeExtensionDefinition .class ,
70- s -> new ExtendedObjectTypeDefinition ());
71- }
72- } else {
73- populateDefinition (typeDefinitions , definition , definitionName ,
74- ObjectTypeDefinition .class , ObjectTypeExtensionDefinition .class ,
75- s -> new ExtendedObjectTypeDefinition ());
50+ processDefinition (mappingConfig , extendedDocumentBuilder , definition );
51+ }
52+ return extendedDocumentBuilder .build ();
53+ }
54+
55+ private static void processDefinition (MappingConfig mappingConfig , ExtendedDocumentBuilder extendedDocumentBuilder , Definition <?> definition ) {
56+ if (!(definition instanceof NamedNode )) {
57+ // the only definition that does not have a name is SchemaDefinition, so skipping it
58+ return ;
59+ }
60+ // we need to group base definitions and extension definitions by name
61+ String definitionName = ((NamedNode <?>) definition ).getName ();
62+
63+ if (definition instanceof ObjectTypeDefinition ) {
64+ if (Utils .isGraphqlOperation (definitionName )) {
65+ populateDefinition (extendedDocumentBuilder .operationDefinitions , definition , definitionName ,
66+ ObjectTypeExtensionDefinition .class , s -> new ExtendedObjectTypeDefinition ());
67+ if (Boolean .TRUE .equals (mappingConfig .getGenerateModelsForRootTypes ())) {
68+ populateDefinition (extendedDocumentBuilder .typeDefinitions , definition , definitionName ,
69+ ObjectTypeExtensionDefinition .class , s -> new ExtendedObjectTypeDefinition ());
7670 }
77- } else if (definition instanceof EnumTypeDefinition ) {
78- populateDefinition (enumDefinitions , definition , definitionName ,
79- EnumTypeDefinition .class , EnumTypeExtensionDefinition .class ,
80- s -> new ExtendedEnumTypeDefinition ());
81- } else if (definition instanceof InputObjectTypeDefinition ) {
82- populateDefinition (inputDefinitions , definition , definitionName ,
83- InputObjectTypeDefinition .class , InputObjectTypeExtensionDefinition .class ,
84- s -> new ExtendedInputObjectTypeDefinition ());
85- } else if (definition instanceof UnionTypeDefinition ) {
86- populateDefinition (unionDefinitions , definition , definitionName ,
87- UnionTypeDefinition .class , UnionTypeExtensionDefinition .class ,
88- s -> new ExtendedUnionTypeDefinition ());
89- } else if (definition instanceof ScalarTypeDefinition ) {
90- populateDefinition (scalarDefinitions , definition , definitionName ,
91- ScalarTypeDefinition .class , ScalarTypeExtensionDefinition .class ,
92- s -> new ExtendedScalarTypeDefinition ());
93- } else if (definition instanceof InterfaceTypeDefinition ) {
94- populateDefinition (interfaceDefinitions , definition , definitionName ,
95- InterfaceTypeDefinition .class , InterfaceTypeExtensionDefinition .class ,
96- s -> new ExtendedInterfaceTypeDefinition ());
71+ } else {
72+ populateDefinition (extendedDocumentBuilder .typeDefinitions , definition , definitionName ,
73+ ObjectTypeExtensionDefinition .class , s -> new ExtendedObjectTypeDefinition ());
9774 }
98- // TODO: consider DirectiveDefinition
75+ } else if (definition instanceof EnumTypeDefinition ) {
76+ populateDefinition (extendedDocumentBuilder .enumDefinitions , definition , definitionName ,
77+ EnumTypeExtensionDefinition .class , s -> new ExtendedEnumTypeDefinition ());
78+ } else if (definition instanceof InputObjectTypeDefinition ) {
79+ populateDefinition (extendedDocumentBuilder .inputDefinitions , definition , definitionName ,
80+ InputObjectTypeExtensionDefinition .class , s -> new ExtendedInputObjectTypeDefinition ());
81+ } else if (definition instanceof UnionTypeDefinition ) {
82+ populateDefinition (extendedDocumentBuilder .unionDefinitions , definition , definitionName ,
83+ UnionTypeExtensionDefinition .class , s -> new ExtendedUnionTypeDefinition ());
84+ } else if (definition instanceof ScalarTypeDefinition ) {
85+ populateDefinition (extendedDocumentBuilder .scalarDefinitions , definition , definitionName ,
86+ ScalarTypeExtensionDefinition .class , s -> new ExtendedScalarTypeDefinition ());
87+ } else if (definition instanceof InterfaceTypeDefinition ) {
88+ populateDefinition (extendedDocumentBuilder .interfaceDefinitions , definition , definitionName ,
89+ InterfaceTypeExtensionDefinition .class , s -> new ExtendedInterfaceTypeDefinition ());
9990 }
100- return ExtendedDocument .builder ()
101- .operationDefinitions (operationDefinitions .values ())
102- .typeDefinitions (typeDefinitions .values ())
103- .inputDefinitions (inputDefinitions .values ())
104- .enumDefinitions (enumDefinitions .values ())
105- .scalarDefinitions (scalarDefinitions .values ())
106- .interfaceDefinitions (interfaceDefinitions .values ())
107- .unionDefinitions (unionDefinitions .values ())
108- .build ();
91+ // TODO: consider DirectiveDefinition
10992 }
11093
11194 @ SuppressWarnings ("unchecked" )
@@ -115,7 +98,6 @@ static ExtendedDocument getDocument(MappingConfig mappingConfig, List<String> sc
11598 E extends B > void populateDefinition (Map <String , D > definitionsMap ,
11699 Definition <?> definition ,
117100 String definitionName ,
118- Class <B > baseDefinitionClass ,
119101 Class <E > extensionDefinitionClass ,
120102 Function <String , D > mappingFunction ) {
121103 D extendedDefinition = definitionsMap .computeIfAbsent (definitionName , mappingFunction );
@@ -144,4 +126,29 @@ public static MultiSourceReader createMultiSourceReader(List<String> schemaPaths
144126 }
145127 return builder .trackData (true ).build ();
146128 }
129+
130+ private static class ExtendedDocumentBuilder {
131+
132+ private final Map <String , ExtendedObjectTypeDefinition > operationDefinitions = new HashMap <>();
133+ private final Map <String , ExtendedObjectTypeDefinition > typeDefinitions = new HashMap <>();
134+ private final Map <String , ExtendedInputObjectTypeDefinition > inputDefinitions = new HashMap <>();
135+ private final Map <String , ExtendedEnumTypeDefinition > enumDefinitions = new HashMap <>();
136+ private final Map <String , ExtendedScalarTypeDefinition > scalarDefinitions = new HashMap <>();
137+ private final Map <String , ExtendedInterfaceTypeDefinition > interfaceDefinitions = new HashMap <>();
138+ private final Map <String , ExtendedUnionTypeDefinition > unionDefinitions = new HashMap <>();
139+
140+ ExtendedDocument build () {
141+ return ExtendedDocument .builder ()
142+ .operationDefinitions (operationDefinitions .values ())
143+ .typeDefinitions (typeDefinitions .values ())
144+ .inputDefinitions (inputDefinitions .values ())
145+ .enumDefinitions (enumDefinitions .values ())
146+ .scalarDefinitions (scalarDefinitions .values ())
147+ .interfaceDefinitions (interfaceDefinitions .values ())
148+ .unionDefinitions (unionDefinitions .values ())
149+ .build ();
150+ }
151+
152+ }
153+
147154}
0 commit comments