Skip to content

Commit c0bcce2

Browse files
authored
add Java language examples (#4580)
* calling java converter * pushing to same file as other examples * fix java output * java example in model * update request converter * generate * specific java examples command * a * more java example up * a * back down * back up * manual fixes * schema json * update openapi generator * update metamodel * openapi output * fix rebase * remove alternative_java examples * fix generate script * regen examples under alternatives field * reapply manual fixes * full output regen * remove leftover code * remove old, remove reindex * capitalize java * updated java examples with spaces instead of tabs * rereapply manual fixes * output regen * restore first reindex example, regen * fix more tabs, regen
1 parent 7efcc50 commit c0bcce2

File tree

382 files changed

+5670
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

382 files changed

+5670
-1
lines changed

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ generate-language-examples:
8282
@node docs/examples/generate-language-examples.js
8383
@npm run format:fix-examples --prefix compiler
8484

85+
generate-language-examples-with-java:
86+
@node docs/examples/generate-language-examples.js java
87+
@npm run format:fix-examples --prefix compiler
88+
8589
lint-docs: ## Lint the OpenAPI documents after overlays
8690
@npx @redocly/cli lint "output/openapi/elasticsearch-*.json" --config "docs/linters/redocly.yaml" --format stylish --max-problems 500
8791

Binary file not shown.

docs/examples/generate-language-examples.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ const fs = require('fs');
2121
const path = require('path');
2222
const { parseDocument: yamlParseDocument } = require('yaml');
2323
const { convertRequests, loadSchema } = require('@elastic/request-converter');
24+
const {parseRequest} = require("@elastic/request-converter/dist/parse");
25+
const {JavaCaller} = require("java-caller");
2426

2527
const LANGUAGES = ['Python', 'JavaScript', 'Ruby', 'PHP', 'curl'];
2628

@@ -44,6 +46,50 @@ async function generateLanguages(example) {
4446
});
4547
}
4648
data.alternatives = alternatives.concat(data.alternatives.filter(pair => !LANGUAGES.includes(pair.language)));
49+
50+
// specific java example generator
51+
if (process.argv[2] === "java") {
52+
const partialRequest = await parseRequest(request);
53+
const java = new JavaCaller({
54+
minimumJavaVersion: 21,
55+
jar: "path/to/converter/jar/java-es-request-converter-1.0-SNAPSHOT.jar",
56+
});
57+
58+
let correctParams = getCodeGenParamNames(partialRequest.params, partialRequest.request);
59+
let body = partialRequest.body;
60+
if (!body) {
61+
body = {}
62+
}
63+
64+
let javaReqs = [];
65+
const javaParsedRequest = {
66+
api: partialRequest.api,
67+
params: correctParams,
68+
query: partialRequest.query,
69+
body: body,
70+
};
71+
javaReqs.push(javaParsedRequest)
72+
73+
let args = [];
74+
args.push(JSON.stringify(javaReqs));
75+
76+
const {status, stdout, stderr} = await java.run(args);
77+
if (status) {
78+
console.log(stderr);
79+
console.log(JSON.stringify(javaReqs));
80+
}
81+
else {
82+
const alternative_java = [];
83+
alternative_java.push({
84+
language: "Java",
85+
code: stdout,
86+
});
87+
// replace old java examples
88+
data.alternatives = data.alternatives.filter(pair => pair.language !== "Java");
89+
data.alternatives = data.alternatives.concat(alternative_java);
90+
}
91+
}
92+
4793
doc.delete('alternatives');
4894
doc.add(doc.createPair('alternatives', data.alternatives));
4995
await fs.promises.writeFile(example, doc.toString({lineWidth: 132}));
@@ -61,6 +107,23 @@ async function* walkExamples(dir) {
61107
}
62108
}
63109

110+
function getCodeGenParamNames(
111+
params,
112+
request,
113+
){
114+
for (const [key, value] of Object.entries(params)) {
115+
if (request?.path) {
116+
for (const prop of request.path) {
117+
if (prop.name === key && prop.codegenName !== undefined) {
118+
delete params[key];
119+
params[prop.codegenName] = value;
120+
}
121+
}
122+
}
123+
}
124+
return params;
125+
}
126+
64127
async function main() {
65128
let count = 0;
66129
let errors = 0;

docs/examples/package-lock.json

Lines changed: 152 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/examples/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"@elastic/request-converter": "^9.1.1",
77
"@redocly/cli": "^1.34.3",
88
"@stoplight/spectral-cli": "^6.14.2",
9-
"yaml": "^2.8.0"
9+
"yaml": "^2.8.0",
10+
"java-caller": "^4.1.1"
1011
}
1112
}

0 commit comments

Comments
 (0)