@@ -21,6 +21,8 @@ const fs = require('fs');
2121const path = require ( 'path' ) ;
2222const { parseDocument : yamlParseDocument } = require ( 'yaml' ) ;
2323const { convertRequests, loadSchema } = require ( '@elastic/request-converter' ) ;
24+ const { parseRequest} = require ( "@elastic/request-converter/dist/parse" ) ;
25+ const { JavaCaller} = require ( "java-caller" ) ;
2426
2527const LANGUAGES = [ 'Python' , 'JavaScript' , 'Ruby' , 'PHP' , 'curl' ] ;
2628
@@ -43,6 +45,40 @@ async function generateLanguages(example) {
4345 code : ( await convertRequests ( request , lang , { } ) ) . trim ( ) ,
4446 } ) ;
4547 }
48+ // specific java example generator
49+ const javaExampleFile = path . parse ( example ) . name + "Java.txt" ;
50+ const partialRequest = await parseRequest ( request ) ;
51+ const java = new JavaCaller ( {
52+ minimumJavaVersion : 21 ,
53+ jar : "path/to/converter/jar/java-es-request-converter-1.0-SNAPSHOT.jar" ,
54+ } ) ;
55+
56+ let correctParams = getCodeGenParamNames ( partialRequest . params , partialRequest . request ) ;
57+ let body = partialRequest . body ;
58+ if ( ! body ) {
59+ body = { }
60+ }
61+
62+ let javaReqs = [ ] ;
63+ const javaParsedRequest = {
64+ api : partialRequest . api ,
65+ params : correctParams ,
66+ query : partialRequest . query ,
67+ body : body ,
68+ } ;
69+ javaReqs . push ( javaParsedRequest )
70+
71+ let args = [ ] ;
72+ args . push ( JSON . stringify ( javaReqs ) ) ;
73+
74+ const { status, stdout, stderr } = await java . run ( args ) ;
75+ if ( status ) {
76+ console . log ( stderr ) ;
77+ console . log ( JSON . stringify ( javaReqs ) ) ;
78+ return stderr ;
79+ }
80+ await fs . promises . writeFile ( javaExampleFile , stdout ) ;
81+
4682 doc . delete ( 'alternatives' ) ;
4783 doc . add ( doc . createPair ( 'alternatives' , data . alternatives ) ) ;
4884 await fs . promises . writeFile ( example , doc . toString ( { lineWidth : 132 } ) ) ;
@@ -60,6 +96,23 @@ async function* walkExamples(dir) {
6096 }
6197}
6298
99+ function getCodeGenParamNames (
100+ params ,
101+ request ,
102+ ) {
103+ for ( const [ key , value ] of Object . entries ( params ) ) {
104+ if ( request ?. path ) {
105+ for ( const prop of request . path ) {
106+ if ( prop . name === key && prop . codegenName !== undefined ) {
107+ delete params [ key ] ;
108+ params [ prop . codegenName ] = value ;
109+ }
110+ }
111+ }
112+ }
113+ return params ;
114+ }
115+
63116async function main ( ) {
64117 let count = 0 ;
65118 let errors = 0 ;
0 commit comments