11package io .avaje .http .generator .helidon .nima ;
22
3+ import io .avaje .http .api .MediaType ;
4+ import io .avaje .http .generator .core .*;
5+
36import java .util .Optional ;
47
5- import io .avaje .http .api .MediaType ;
6- import io .avaje .http .generator .core .Append ;
7- import io .avaje .http .generator .core .MethodParam ;
8- import io .avaje .http .generator .core .MethodReader ;
9- import io .avaje .http .generator .core .ParamType ;
10- import io .avaje .http .generator .core .PathSegments ;
11- import io .avaje .http .generator .core .ProcessingContext ;
12- import io .avaje .http .generator .core .WebMethod ;
13-
14- /** Write code to register Web route for a given controller method. */
8+ /**
9+ * Write code to register Web route for a given controller method.
10+ */
1511class ControllerMethodWriter {
1612
1713 private final MethodReader method ;
@@ -20,58 +16,51 @@ class ControllerMethodWriter {
2016 private final ProcessingContext ctx ;
2117 private final boolean useJsonB ;
2218
23- ControllerMethodWriter (
24- MethodReader method , Append writer , ProcessingContext ctx , boolean useJsonB ) {
19+ ControllerMethodWriter (MethodReader method , Append writer , ProcessingContext ctx , boolean useJsonB ) {
2520 this .method = method ;
2621 this .writer = writer ;
27- webMethod = method .getWebMethod ();
22+ this . webMethod = method .getWebMethod ();
2823 this .ctx = ctx ;
2924 this .useJsonB = useJsonB ;
3025 }
3126
3227 void writeRule () {
3328 final var fullPath = method .getFullPath ();
3429 writer
35- .append (
36- " rules.%s(\" %s\" , this::_%s);" ,
37- webMethod .name ().toLowerCase (), fullPath , method .simpleName ())
38- .eol ();
30+ .append (
31+ " rules.%s(\" %s\" , this::_%s);" ,
32+ webMethod .name ().toLowerCase (), fullPath , method .simpleName ())
33+ .eol ();
3934 }
4035
4136 void writeHandler (boolean requestScoped ) {
42- writer .append (" private void _%s(ServerRequest req, ServerResponse res" , method .simpleName ());
43-
44- writer .append (") {" ).eol ();
37+ writer .append (" private void _%s(ServerRequest req, ServerResponse res) {" , method .simpleName ()).eol ();
4538 final var bodyType = method .getBodyType ();
4639 if (bodyType != null ) {
4740 if (useJsonB ) {
48-
4941 writer
50- .append (
51- " var %s = %sBodyJsonType.fromJson(req.content().inputStream());" ,
52- method .getBodyName (), method .simpleName ())
53- .eol ();
42+ .append (
43+ " var %s = %sBodyJsonType.fromJson(req.content().inputStream());" ,
44+ method .getBodyName (), method .simpleName ())
45+ .eol ();
5446
5547 } else {
5648 // use default helidon content negotiation
5749 method .getParams ().stream ()
58- .filter (MethodParam ::isBody )
59- .forEach (
60- param -> {
61- final var type = param .getUType ();
62- writer .append (" var %s = req.content().as(" , method .getBodyName ());
63-
64- if (type .param0 () != null ) {
65- writer .append ("new io.helidon.common.GenericType<%s>() {}" , type .full ());
66- } else {
67- writer .append ("%s.class" , type .full ());
68- }
69-
70- writer .append (");" ).eol ();
71- });
50+ .filter (MethodParam ::isBody )
51+ .forEach (
52+ param -> {
53+ final var type = param .getUType ();
54+ writer .append (" var %s = req.content().as(" , method .getBodyName ());
55+ if (type .param0 () != null ) {
56+ writer .append ("new io.helidon.common.GenericType<%s>() {}" , type .full ());
57+ } else {
58+ writer .append ("%s.class" , type .full ());
59+ }
60+ writer .append (");" ).eol ();
61+ });
7262 }
73- } else if (method .getParams ().stream ()
74- .anyMatch (p -> p .isForm () || ParamType .FORMPARAM .equals (p .getParamType ()))) {
63+ } else if (method .getParams ().stream ().anyMatch (p -> p .isForm () || ParamType .FORMPARAM .equals (p .getParamType ()))) {
7564 writer .append (" var formParams = req.content().as(Parameters.class);" ).eol ();
7665 }
7766
@@ -91,10 +80,8 @@ void writeHandler(boolean requestScoped) {
9180 writer .append (" " );
9281 if (!method .isVoid ()) {
9382 writer .append ("var result = " );
94- } else if (method .isVoid ()
95- && params .stream ().noneMatch (p -> "ServerResponse" .equals (p .getShortType ()))) {
96- throw new IllegalStateException (
97- "Void controller methods must have a ServerResponse parameter" );
83+ } else if (method .isVoid () && params .stream ().noneMatch (p -> "ServerResponse" .equals (p .getShortType ()))) {
84+ throw new IllegalStateException ("Void controller methods must have a ServerResponse parameter" );
9885 }
9986
10087 if (method .includeValidate ()) {
@@ -118,14 +105,14 @@ void writeHandler(boolean requestScoped) {
118105 if (!method .isVoid ()) {
119106 writeContextReturn ();
120107 if (useJsonB
121- && !"byte[]" .equals (method .getReturnType ().toString ())
122- && (method .getProduces () == null
123- || method .getProduces ().toLowerCase ().contains ("json" ))) {
108+ && !"byte[]" .equals (method .getReturnType ().toString ())
109+ && (method .getProduces () == null
110+ || method .getProduces ().toLowerCase ().contains ("json" ))) {
124111
125112 writer
126- .append (
127- " %sReturnedJsonType.toJson(result, res.outputStream());" , method .simpleName ())
128- .eol ();
113+ .append (
114+ " %sReturnedJsonType.toJson(result, res.outputStream());" , method .simpleName ())
115+ .eol ();
129116
130117 } else {
131118 writer .append (" res.send(result);" ).eol ();
@@ -136,19 +123,14 @@ void writeHandler(boolean requestScoped) {
136123
137124 private void writeContextReturn () {
138125 final var producesOp = Optional .ofNullable (method .getProduces ());
139-
140126 if (producesOp .isEmpty () && !useJsonB ) {
141127 return ;
142128 }
143129
144130 final var produces = producesOp .orElse (MediaType .APPLICATION_JSON );
145- final var contentTypeString =
146- " res.headers().contentType(io.helidon.common.http.HttpMediaType." ;
147-
131+ final var contentTypeString = " res.headers().contentType(io.helidon.common.http.HttpMediaType." ;
148132 switch (produces .toLowerCase ()) {
149- case MediaType .APPLICATION_JSON -> writer
150- .append (contentTypeString + "APPLICATION_JSON);" )
151- .eol ();
133+ case MediaType .APPLICATION_JSON -> writer .append (contentTypeString + "APPLICATION_JSON);" ).eol ();
152134 case MediaType .TEXT_HTML -> writer .append (contentTypeString + "TEXT_HTML);" ).eol ();
153135 case MediaType .TEXT_PLAIN -> writer .append (contentTypeString + "TEXT_PLAIN);" ).eol ();
154136 default -> writer .append (contentTypeString + "create(\" %s\" ));" , produces ).eol ();
0 commit comments