Skip to content

Commit 9372716

Browse files
committed
implement render endpoint
1 parent 0c2837e commit 9372716

File tree

7 files changed

+160
-25
lines changed

7 files changed

+160
-25
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/DefaultGenerator.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package io.swagger.codegen.v3;
22

3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.github.jknack.handlebars.Handlebars;
5+
import com.github.jknack.handlebars.Template;
36
import io.swagger.codegen.v3.ignore.CodegenIgnoreProcessor;
47
import io.swagger.codegen.v3.templates.TemplateEngine;
58
import io.swagger.codegen.v3.utils.ImplementationVersion;
@@ -29,6 +32,8 @@
2932
import java.io.IOException;
3033
import java.io.InputStream;
3134
import java.io.OutputStream;
35+
import java.io.PrintWriter;
36+
import java.io.StringWriter;
3237
import java.net.URL;
3338
import java.time.ZonedDateTime;
3439
import java.util.ArrayList;
@@ -792,12 +797,27 @@ public List<File> generate() {
792797

793798
// supporting files
794799
Map<String, Object> bundle = buildSupportFileBundle(allOperations, allModels);
795-
Json.prettyPrint(bundle);
796800
generateSupportingFiles(files, bundle);
797801
config.processOpenAPI(openAPI);
798802
return files;
799803
}
800804

805+
@Override
806+
public String renderTemplate(String template, String context) {
807+
808+
try {
809+
Map<String, Object> bundle = new ObjectMapper().readValue(context, Map.class);
810+
Handlebars handlebars = new Handlebars();
811+
Template hTemplate = handlebars.compileInline(template);
812+
return hTemplate.apply(bundle);
813+
} catch (IOException e) {
814+
StringWriter sw = new StringWriter();
815+
PrintWriter pw = new PrintWriter(sw);
816+
e.printStackTrace(pw);
817+
return "Error rendering template: " + e.getMessage() + "\n" + sw.toString();
818+
}
819+
}
820+
801821
@Override
802822
public Map<String, Object> generateBundle() {
803823

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/Generator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ public interface Generator {
99

1010
List<File> generate();
1111
Map<String, Object> generateBundle();
12-
12+
String renderTemplate(String template, String context);
1313
}

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/service/GeneratorService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,8 @@ public Map<String, Object> generateBundle() {
6060
throw new RuntimeException("missing opts input");
6161
}
6262

63+
public String renderTemplate(RenderRequest renderRequest) {
64+
return new DefaultGenerator().renderTemplate(renderRequest.getTemplate(), renderRequest.getContext());
65+
}
66+
6367
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package io.swagger.codegen.v3.service;
2+
3+
import java.io.Serializable;
4+
5+
public class RenderRequest implements Serializable {
6+
private static final long serialVersionUID = 1L;
7+
8+
private String template;
9+
private String context;
10+
11+
public RenderRequest template(String template) {
12+
this.template = template;
13+
return this;
14+
}
15+
16+
public String getTemplate() {
17+
return template;
18+
}
19+
public void setTemplate(String template) {
20+
this.template = template;
21+
}
22+
23+
public RenderRequest context(String context) {
24+
this.context = context;
25+
return this;
26+
}
27+
28+
public String getContext() {
29+
return context;
30+
}
31+
public void setContext(String context) {
32+
this.context = context;
33+
}
34+
35+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.swagger.codegen.v3.service;
2+
3+
import java.io.Serializable;
4+
5+
public class RenderResponse implements Serializable {
6+
private static final long serialVersionUID = 1L;
7+
8+
private String value;
9+
10+
public RenderResponse value(String value) {
11+
this.value = value;
12+
return this;
13+
}
14+
15+
public String getValue() {
16+
return value;
17+
}
18+
public void setValue(String value) {
19+
this.value = value;
20+
}
21+
22+
}

modules/swagger-generator/src/main/java/io/swagger/v3/generator/online/GeneratorController.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import io.swagger.codegen.v3.CodegenConfig;
88
import io.swagger.codegen.v3.CodegenType;
99
import io.swagger.codegen.v3.service.GeneratorService;
10+
import io.swagger.codegen.v3.service.RenderRequest;
11+
import io.swagger.codegen.v3.service.RenderResponse;
1012
import io.swagger.v3.core.util.Yaml;
1113
import io.swagger.codegen.v3.service.GenerationRequest;
1214
import io.swagger.v3.generator.model.HiddenOptions;
@@ -484,6 +486,16 @@ public ResponseContext generate(RequestContext context, GenerationRequest genera
484486

485487
}
486488

489+
public ResponseContext renderTemplate(RequestContext context, RenderRequest renderRequest) {
490+
String result = new GeneratorService().renderTemplate(renderRequest);
491+
RenderResponse response = new RenderResponse();
492+
response.setValue(result);
493+
return new ResponseContext()
494+
.status(200)
495+
.contentType(MediaType.APPLICATION_JSON_TYPE)
496+
.entity(response);
497+
}
498+
487499
public ResponseContext generateBundle(RequestContext context, GenerationRequest generationRequest) {
488500

489501
String requestLog = requestLog(generationRequest);

modules/swagger-generator/src/main/resources/openapi.yaml

Lines changed: 65 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,6 @@ tags:
1515
- name: documentation
1616
- name: config
1717
paths:
18-
"/model":
19-
post:
20-
tags:
21-
- clients
22-
- servers
23-
- documentation
24-
- config
25-
x-swagger-router-controller: io.swagger.v3.generator.online.GeneratorController
26-
operationId: generateBundle
27-
summary: Generates the intermediate model ("bundle") and returns it as a JSON.
28-
body.
29-
requestBody:
30-
content:
31-
application/json:
32-
schema:
33-
"$ref": "#/components/schemas/GenerationRequest"
34-
responses:
35-
'200':
36-
description: successful operation
37-
content:
38-
application/json:
39-
schema:
40-
type: object
4118
"/generate":
4219
get:
4320
tags:
@@ -228,6 +205,48 @@ paths:
228205
type: "object"
229206
additionalProperties:
230207
$ref: "#/components/schemas/CliOption"
208+
"/model":
209+
post:
210+
tags:
211+
- clients
212+
- servers
213+
- documentation
214+
- config
215+
x-swagger-router-controller: io.swagger.v3.generator.online.GeneratorController
216+
operationId: generateBundle
217+
summary: Generates the intermediate model ("bundle") and returns it as a JSON.
218+
body.
219+
requestBody:
220+
content:
221+
application/json:
222+
schema:
223+
"$ref": "#/components/schemas/GenerationRequest"
224+
responses:
225+
'200':
226+
description: successful operation
227+
content:
228+
application/json:
229+
schema:
230+
type: object
231+
"/render":
232+
post:
233+
tags:
234+
- documentation
235+
x-swagger-router-controller: io.swagger.v3.generator.online.GeneratorController
236+
operationId: renderTemplate
237+
summary: render a template using the provided data
238+
requestBody:
239+
content:
240+
application/json:
241+
schema:
242+
"$ref": "#/components/schemas/RenderRequest"
243+
responses:
244+
'200':
245+
description: successful operation
246+
content:
247+
application/json:
248+
schema:
249+
"$ref": "#/components/schemas/RenderResponse"
231250
components:
232251
parameters:
233252
version:
@@ -465,3 +484,26 @@ components:
465484
type: "string"
466485
default:
467486
type: "string"
487+
RenderRequest:
488+
x-swagger-router-model: io.swagger.codegen.v3.service.RenderRequest
489+
required:
490+
- template
491+
- context
492+
properties:
493+
template:
494+
type: string
495+
title: template
496+
description: template as string
497+
example: "{{!mustache}}"
498+
context:
499+
type: string
500+
title: context
501+
description: context as string
502+
example: "{}"
503+
RenderResponse:
504+
x-swagger-router-model: io.swagger.codegen.v3.service.RenderResponse
505+
required:
506+
- value
507+
properties:
508+
value:
509+
type: string

0 commit comments

Comments
 (0)