@@ -30,7 +30,7 @@ class ApplicationModel {
30
30
}
31
31
// Using x-parser-schema-id didn't work for us, fall back to trying to get at least something using the provided name.
32
32
if ( ! modelClass ) {
33
- modelClass = this . modelClassMap [ schemaName ] ;
33
+ modelClass = this . modelClassMap [ schemaName ] || this . modelClassMap [ _ . camelCase ( schemaName ) ] ;
34
34
}
35
35
debugApplicationModel ( `returning modelClass for caller ${ this . caller } ${ schemaName } ` ) ;
36
36
debugApplicationModel ( modelClass ) ;
@@ -42,25 +42,26 @@ class ApplicationModel {
42
42
}
43
43
44
44
setupSuperClassMap ( ) {
45
- if ( ! this . superClassMap ) {
46
- this . superClassMap = new Map ( ) ;
47
- this . anonymousSchemaToSubClassMap = new Map ( ) ;
48
- debugApplicationModel ( '-------- SCHEMAS -------------' ) ;
49
- debugApplicationModel ( ApplicationModel . asyncapi . allSchemas ( ) ) ;
50
- ApplicationModel . asyncapi . allSchemas ( ) . forEach ( ( schema , schemaName ) => {
51
- debugApplicationModel ( `${ schemaName } :` ) ;
52
- debugApplicationModel ( schema ) ;
53
- const allOf = schema . allOf ( ) ;
54
- if ( allOf ) {
55
- this . handleAllOfSchema ( schema , schemaName , allOf ) ;
56
- }
57
- } ) ;
58
- debugApplicationModel ( '-----------------------------' ) ;
59
- debugApplicationModel ( 'superclassMap:' ) ;
60
- debugApplicationModel ( this . superClassMap ) ;
61
- debugApplicationModel ( 'anonymousSchemaToSubClassMap:' ) ;
62
- debugApplicationModel ( this . anonymousSchemaToSubClassMap ) ;
45
+ if ( this . superClassMap ) {
46
+ return ;
63
47
}
48
+ this . superClassMap = new Map ( ) ;
49
+ this . anonymousSchemaToSubClassMap = new Map ( ) ;
50
+ debugApplicationModel ( '-------- SCHEMAS -------------' ) ;
51
+ debugApplicationModel ( ApplicationModel . asyncapi . allSchemas ( ) ) ;
52
+ ApplicationModel . asyncapi . allSchemas ( ) . forEach ( ( schema , schemaName ) => {
53
+ debugApplicationModel ( `${ schemaName } :` ) ;
54
+ debugApplicationModel ( schema ) ;
55
+ const allOf = schema . allOf ( ) ;
56
+ if ( allOf ) {
57
+ this . handleAllOfSchema ( schema , schemaName , allOf ) ;
58
+ }
59
+ } ) ;
60
+ debugApplicationModel ( '-----------------------------' ) ;
61
+ debugApplicationModel ( 'superclassMap:' ) ;
62
+ debugApplicationModel ( this . superClassMap ) ;
63
+ debugApplicationModel ( 'anonymousSchemaToSubClassMap:' ) ;
64
+ debugApplicationModel ( this . anonymousSchemaToSubClassMap ) ;
64
65
}
65
66
66
67
handleAllOfSchema ( schema , schemaName , allOfSchema ) {
@@ -89,54 +90,19 @@ class ApplicationModel {
89
90
}
90
91
91
92
setupModelClassMap ( ) {
92
- if ( ! this . modelClassMap ) {
93
- this . modelClassMap = new Map ( ) ;
94
- this . nameToSchemaMap = new Map ( ) ;
95
- // Register all schemas first, then check the anonymous schemas for duplicates
96
- ApplicationModel . asyncapi . allSchemas ( ) . forEach ( ( schema , name ) => {
97
- debugApplicationModel ( `setupModelClassMap ${ name } type ${ schema . type ( ) } ` ) ;
98
- this . registerSchemaNameToModelClass ( schema , name ) ;
99
- this . nameToSchemaMap [ name ] = schema ;
100
- } ) ;
101
-
102
- ApplicationModel . asyncapi . allSchemas ( ) . forEach ( ( schema , schemaName ) => {
103
- debugApplicationModel ( `setupModelClassMap anonymous schemas ${ schemaName } type ${ schema . type ( ) } ` ) ;
104
- this . registerSchemasInProperties ( schema ) ;
105
- this . registerSchemasInAllOf ( schema ) ;
106
- } ) ;
107
- debugApplicationModel ( 'modelClassMap:' ) ;
108
- debugApplicationModel ( this . modelClassMap ) ;
109
- }
110
- }
111
-
112
- registerSchemasInProperties ( schema ) {
113
- if ( ! ! Object . keys ( schema . properties ( ) ) . length ) {
114
- // Each property name is the name of a schema. It should also have an x-parser-schema-id name. We'll be adding duplicate mappings (two mappings to the same model class) since the anon schemas do have names
115
- Object . keys ( schema . properties ( ) ) . forEach ( property => {
116
- const innerSchema = schema . properties ( ) [ property ] ;
117
- const innerSchemaParserId = innerSchema . ext ( 'x-parser-schema-id' ) ;
118
- const existingModelClass = this . modelClassMap [ innerSchemaParserId ] ;
119
- if ( existingModelClass ) {
120
- this . modelClassMap [ property ] = existingModelClass ;
121
- } else {
122
- this . registerSchemaNameToModelClass ( innerSchema , property ) ;
123
- }
124
- } ) ;
125
- }
126
- }
127
-
128
- registerSchemasInAllOf ( schema ) {
129
- const allOf = schema . allOf ( ) ;
130
- debugApplicationModel ( 'allOf:' ) ;
131
- debugApplicationModel ( allOf ) ;
132
- if ( allOf ) {
133
- allOf . forEach ( innerSchema => {
134
- const name = innerSchema . ext ( 'x-parser-schema-id' ) ;
135
- if ( this . isAnonymousSchema ( name ) && innerSchema . type ( ) === 'object' ) {
136
- this . registerSchemaNameToModelClass ( innerSchema , name ) ;
137
- }
138
- } ) ;
93
+ if ( this . modelClassMap ) {
94
+ return ;
139
95
}
96
+ this . modelClassMap = new Map ( ) ;
97
+ this . nameToSchemaMap = new Map ( ) ;
98
+ // Register all schemas recursively as a flat map of name -> ModelClass
99
+ ApplicationModel . asyncapi . allSchemas ( ) . forEach ( ( schema , name ) => {
100
+ debugApplicationModel ( `setupModelClassMap ${ name } type ${ schema . type ( ) } ` ) ;
101
+ this . registerSchemaNameToModelClass ( schema , name ) ;
102
+ this . nameToSchemaMap [ name ] = schema ;
103
+ } ) ;
104
+ debugApplicationModel ( 'modelClassMap:' ) ;
105
+ debugApplicationModel ( this . modelClassMap ) ;
140
106
}
141
107
142
108
isAnonymousSchema ( schemaName ) {
@@ -158,7 +124,12 @@ class ApplicationModel {
158
124
modelClass . setCanBeInnerClass ( false ) ;
159
125
}
160
126
161
- const { className, javaPackage } = scsLib . stripPackageName ( schemaName ) ;
127
+ const classNameAndLocation = scsLib . stripPackageName ( schemaName ) ;
128
+ let className = classNameAndLocation . className ;
129
+ const javaPackage = classNameAndLocation . javaPackage ;
130
+ if ( schema . _json [ 'x-model-class-name' ] ) {
131
+ className = schema . _json [ 'x-model-class-name' ] ;
132
+ }
162
133
modelClass . setJavaPackage ( javaPackage ) ;
163
134
modelClass . setClassName ( className ) ;
164
135
debugApplicationModel ( `schemaName ${ schemaName } className: ${ modelClass . getClassName ( ) } super: ${ modelClass . getSuperClassName ( ) } javaPackage: ${ javaPackage } ` ) ;
0 commit comments