Skip to content

Commit e90c69a

Browse files
committed
Add support for @QueryParam, @FormParam, @default, @cookie, @Header
1 parent 0e9c5be commit e90c69a

File tree

3 files changed

+71
-11
lines changed

3 files changed

+71
-11
lines changed

src/main/java/io/dinject/javalin/generator/MethodParam.java

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package io.dinject.javalin.generator;
22

3+
import io.dinject.controller.Cookie;
4+
import io.dinject.controller.Default;
5+
import io.dinject.controller.FormParam;
6+
import io.dinject.controller.Header;
37
import io.dinject.controller.QueryParam;
48

59
import javax.lang.model.element.VariableElement;
@@ -10,27 +14,50 @@ class MethodParam {
1014
private final String rawType;
1115
private final TypeHandler typeHandler;
1216
private final String varName;
13-
private final String paramName;
1417
private final String snakeName;
15-
16-
private final String paramDefault;
1718
private final String docComment;
19+
private String paramName;
20+
private String paramDefault;
21+
private String paramType;
1822

1923
MethodParam(VariableElement param, ProcessingContext ctx) {
2024
this.rawType = param.asType().toString();
2125
this.typeHandler = TypeMap.get(rawType);
2226
this.varName = param.getSimpleName().toString();
27+
this.snakeName = Util.snakeCase(varName);
28+
this.paramName = varName;
2329
this.docComment = ctx.docComment(param);
2430

31+
Default defaultVal = param.getAnnotation(Default.class);
32+
if (defaultVal != null) {
33+
this.paramDefault = defaultVal.value();
34+
}
35+
2536
QueryParam queryParam = param.getAnnotation(QueryParam.class);
2637
if (queryParam != null) {
27-
this.paramName = nameFrom(queryParam.name(), param.getSimpleName().toString());
28-
this.paramDefault = queryParam.defaultValue();
29-
} else {
30-
this.paramName = varName;
31-
this.paramDefault = "";
38+
this.paramName = nameFrom(queryParam.value(), varName);
39+
this.paramType = "queryParam";
40+
}
41+
FormParam formParam = param.getAnnotation(FormParam.class);
42+
if (formParam != null) {
43+
this.paramName = nameFrom(formParam.value(), varName);
44+
this.paramType = "formParam";
45+
}
46+
Cookie cookieParam = param.getAnnotation(Cookie.class);
47+
if (cookieParam != null) {
48+
this.paramName = nameFrom(cookieParam.value(), varName);
49+
this.paramType = "cookie";
50+
this.paramDefault = null;
51+
}
52+
Header headerParam = param.getAnnotation(Header.class);
53+
if (headerParam != null) {
54+
this.paramName = nameFrom(headerParam.value(), Util.initcapSnake(snakeName));
55+
this.paramType = "header";
56+
this.paramDefault = null;
57+
}
58+
if (paramType == null) {
59+
this.paramType = "queryParam";
3260
}
33-
this.snakeName = Util.snakeCase(varName);
3461
}
3562

3663
private String nameFrom(String name, String defaultName) {
@@ -80,9 +107,9 @@ void buildCtxGet(Append writer, Set<String> pathParams) {
80107
writer.append("ctx.bodyAsClass(%s.class)", shortType);
81108
} else {
82109
if (hasParamDefault()) {
83-
writer.append("ctx.queryParam(\"%s\",\"%s\")", paramName, paramDefault);
110+
writer.append("ctx.%s(\"%s\",\"%s\")", paramType, paramName, paramDefault);
84111
} else {
85-
writer.append("ctx.queryParam(\"%s\")", paramName);
112+
writer.append("ctx.%s(\"%s\")", paramType, paramName);
86113
}
87114
}
88115
}

src/main/java/io/dinject/javalin/generator/Util.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,29 @@ static String snakeCase(String name) {
6969
return sb.toString();
7070
}
7171

72+
static String initcapSnake(String input) {
73+
StringBuilder sb = new StringBuilder(input.length());
74+
int len = input.length();
75+
76+
boolean upper = true;
77+
78+
for (int i = 0; i < len; i++) {
79+
char ch = input.charAt(i);
80+
if (ch == '-') {
81+
sb.append(ch);
82+
upper = true;
83+
} else {
84+
if (upper) {
85+
sb.append(Character.toUpperCase(ch));
86+
upper = false;
87+
} else {
88+
sb.append(ch);
89+
}
90+
}
91+
}
92+
return sb.toString();
93+
}
94+
7295
/**
7396
* Find and return the list of roles on the given element.
7497
* <p>

src/test/java/io/dinject/javalin/generator/UtilTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,14 @@ public void snakeCase() {
4848
assertThat(Util.snakeCase("DTo")).isEqualTo("d-to");
4949
assertThat(Util.snakeCase("_DTo")).isEqualTo("_-d-to");
5050
}
51+
52+
@Test
53+
public void initcapSnake() {
54+
55+
assertThat(Util.initcapSnake("lower")).isEqualTo("Lower");
56+
assertThat(Util.initcapSnake("foo-id")).isEqualTo("Foo-Id");
57+
assertThat(Util.initcapSnake("foo-bar-baz-uuid")).isEqualTo("Foo-Bar-Baz-Uuid");
58+
assertThat(Util.initcapSnake("a-d-to")).isEqualTo("A-D-To");
59+
assertThat(Util.initcapSnake("proxy-authenticate")).isEqualTo("Proxy-Authenticate");
60+
}
5161
}

0 commit comments

Comments
 (0)