Skip to content

Commit 0e9c5be

Browse files
committed
Add support for @QueryParam with default value
1 parent bec540d commit 0e9c5be

File tree

5 files changed

+53
-14
lines changed

5 files changed

+53
-14
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<dependency>
2929
<groupId>io.dinject</groupId>
3030
<artifactId>dinject-controller</artifactId>
31-
<version>1.5</version>
31+
<version>1.6-SNAPSHOT</version>
3232
</dependency>
3333

3434
<dependency>

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
class BeanReader {
2020

21+
private final ProcessingContext ctx;
22+
2123
private final TypeElement beanType;
2224

2325
private final List<String> roles;
@@ -30,6 +32,7 @@ class BeanReader {
3032

3133
BeanReader(TypeElement beanType, ProcessingContext ctx) {
3234
this.beanType = beanType;
35+
this.ctx = ctx;
3336
this.roles = Util.findRoles(beanType);
3437
if (ctx.isGeneratedAvailable()) {
3538
importTypes.add(Constants.GENERATED);
@@ -63,7 +66,7 @@ void read() {
6366
private void readMethod(Element element) {
6467

6568
ExecutableElement methodElement = (ExecutableElement) element;
66-
MethodReader methodReader = new MethodReader(this, methodElement);
69+
MethodReader methodReader = new MethodReader(this, methodElement, ctx);
6770
methodReader.read();
6871
methods.add(methodReader);
6972
}

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

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,47 @@
11
package io.dinject.javalin.generator;
22

3+
import io.dinject.controller.QueryParam;
4+
35
import javax.lang.model.element.VariableElement;
46
import java.util.Set;
57

68
class MethodParam {
79

810
private final String rawType;
911
private final TypeHandler typeHandler;
10-
private final String name;
12+
private final String varName;
13+
private final String paramName;
1114
private final String snakeName;
1215

16+
private final String paramDefault;
17+
private final String docComment;
1318

14-
MethodParam(VariableElement param) {
15-
this.name = param.getSimpleName().toString();
16-
this.snakeName = Util.snakeCase(name);
19+
MethodParam(VariableElement param, ProcessingContext ctx) {
1720
this.rawType = param.asType().toString();
1821
this.typeHandler = TypeMap.get(rawType);
22+
this.varName = param.getSimpleName().toString();
23+
this.docComment = ctx.docComment(param);
24+
25+
QueryParam queryParam = param.getAnnotation(QueryParam.class);
26+
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 = "";
32+
}
33+
this.snakeName = Util.snakeCase(varName);
34+
}
35+
36+
private String nameFrom(String name, String defaultName) {
37+
if (name != null && !name.isEmpty()) {
38+
return name;
39+
}
40+
return defaultName;
41+
}
42+
43+
private boolean hasParamDefault() {
44+
return paramDefault != null && !paramDefault.isEmpty();
1945
}
2046

2147
private boolean isJavalinContext() {
@@ -36,7 +62,7 @@ void buildCtxGet(Append writer, Set<String> pathParams) {
3662
shortType = Util.shortName(rawType);
3763
}
3864

39-
writer.append(" %s %s = ", shortType, name);
65+
writer.append(" %s %s = ", shortType, varName);
4066

4167
// path parameters are expected to be not nullable
4268
// ... with query parameters nullable
@@ -51,9 +77,13 @@ void buildCtxGet(Append writer, Set<String> pathParams) {
5177
} else {
5278
if (typeHandler == null) {
5379
// assuming this is a body (POST, PATCH)
54-
writer.append("ctx.bodyAsClass(%s.class)", shortType, name, shortType);
80+
writer.append("ctx.bodyAsClass(%s.class)", shortType);
5581
} else {
56-
writer.append("ctx.queryParam(\"%s\")", name);
82+
if (hasParamDefault()) {
83+
writer.append("ctx.queryParam(\"%s\",\"%s\")", paramName, paramDefault);
84+
} else {
85+
writer.append("ctx.queryParam(\"%s\")", paramName);
86+
}
5787
}
5888
}
5989

@@ -64,8 +94,8 @@ void buildCtxGet(Append writer, Set<String> pathParams) {
6494
}
6595

6696
private String derivePathParam(Set<String> pathParams) {
67-
if (pathParams.contains(name)) {
68-
return name;
97+
if (pathParams.contains(varName)) {
98+
return varName;
6999
}
70100
if (pathParams.contains(snakeName)){
71101
return snakeName;
@@ -88,7 +118,7 @@ void buildParamName(Append writer) {
88118
if (isJavalinContext()) {
89119
writer.append("ctx");
90120
} else {
91-
writer.append(name);
121+
writer.append(varName);
92122
}
93123
}
94124
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
class MethodReader {
1818

19+
private final ProcessingContext ctx;
1920
private final BeanReader bean;
2021
private final ExecutableElement element;
2122

@@ -31,7 +32,8 @@ class MethodReader {
3132
*/
3233
private final List<String> methodRoles;
3334

34-
MethodReader(BeanReader bean, ExecutableElement element) {
35+
MethodReader(BeanReader bean, ExecutableElement element, ProcessingContext ctx) {
36+
this.ctx = ctx;
3537
this.bean = bean;
3638
this.beanPath = bean.getPath();
3739
this.element = element;
@@ -48,7 +50,7 @@ void read() {
4850
}
4951

5052
for (VariableElement p : element.getParameters()) {
51-
MethodParam param = new MethodParam(p);
53+
MethodParam param = new MethodParam(p, ctx);
5254
params.add(param);
5355
param.addImports(bean);
5456
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,8 @@ void logError(Element e, String msg, Object... args) {
4343
JavaFileObject createWriter(String cls, Element origin) throws IOException {
4444
return filer.createSourceFile(cls, origin);
4545
}
46+
47+
public String docComment(Element param) {
48+
return elementUtils.getDocComment(param);
49+
}
4650
}

0 commit comments

Comments
 (0)