Skip to content

Commit e826cea

Browse files
committed
apt: add route injection
1 parent 796dc37 commit e826cea

7 files changed

Lines changed: 51 additions & 3 deletions

File tree

jooby/src/main/java/io/jooby/Route.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import java.util.Set;
1717
import java.util.HashSet;
1818
import java.util.Map;
19-
import java.util.HashMap;
2019
import java.util.List;
2120
import java.util.ArrayList;
2221
import java.util.Arrays;
@@ -654,7 +653,7 @@ public Route(@Nonnull String method, @Nonnull String pattern, @Nonnull Handler h
654653
public @Nonnull Route setAttributes(@Nonnull Map<String, Object> attributes) {
655654
if (attributes.size() > 0) {
656655
if (this.attributes == EMPTY_MAP) {
657-
this.attributes = new HashMap<>();
656+
this.attributes = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
658657
}
659658
this.attributes.putAll(attributes);
660659
}

jooby/src/main/java/io/jooby/Usage.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
/**
2+
* Jooby https://jooby.io
3+
* Apache License Version 2.0 https://jooby.io/LICENSE.txt
4+
* Copyright 2014 Edgar Espina
5+
*/
16
package io.jooby;
27

38
import javax.annotation.Nonnull;

modules/jooby-apt/src/main/java/io/jooby/internal/apt/ParamDefinition.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.jooby.Multipart;
1313
import io.jooby.QueryString;
1414
import io.jooby.Reified;
15+
import io.jooby.Route;
1516
import io.jooby.Session;
1617
import io.jooby.Value;
1718
import io.jooby.apt.Annotations;
@@ -260,6 +261,9 @@ private boolean isTypeInjection() {
260261
if (is(Session.class) || is(Optional.class, Session.class)) {
261262
return true;
262263
}
264+
if (is(Route.class)) {
265+
return true;
266+
}
263267
return false;
264268
}
265269

modules/jooby-apt/src/main/java/io/jooby/internal/apt/ParamKind.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,15 @@ public enum ParamKind {
155155
return Context.class.getDeclaredMethod("session");
156156
}
157157
},
158+
ROUTE_PARAM {
159+
@Override public Set<String> annotations() {
160+
return Collections.emptySet();
161+
}
162+
163+
@Override public Method valueObject(ParamDefinition param) throws NoSuchMethodException {
164+
return Context.class.getDeclaredMethod("getRoute");
165+
}
166+
},
158167

159168
BODY_PARAM {
160169
@Override public Method valueObject(ParamDefinition param) throws NoSuchMethodException {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package source;
2+
3+
import io.jooby.Route;
4+
import io.jooby.annotations.GET;
5+
import io.jooby.annotations.Path;
6+
7+
@Path("/route")
8+
public class RouteInjection {
9+
10+
@GET
11+
public Route route(Route route) {
12+
return route;
13+
}
14+
}

modules/jooby-apt/src/test/java/tests/HandlerCompilerTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.jooby.Multipart;
99
import io.jooby.ProvisioningException;
1010
import io.jooby.Reified;
11+
import io.jooby.Route;
1112
import io.jooby.StatusCode;
1213
import io.jooby.apt.MvcHandlerCompilerRunner;
1314
import org.junit.jupiter.api.Test;
@@ -17,6 +18,7 @@
1718
import source.NoPathRoute;
1819
import source.NullRoutes;
1920
import source.Provisioning;
21+
import source.RouteInjection;
2022

2123
import java.io.InputStream;
2224
import java.math.BigDecimal;
@@ -419,6 +421,16 @@ public void nullRoutes() throws Exception {
419421
;
420422
}
421423

424+
@Test
425+
public void routeParam() throws Exception {
426+
new MvcHandlerCompilerRunner(new RouteInjection())
427+
.compile("/route", handler -> {
428+
Route route = mock(Route.class);
429+
assertEquals(route, handler.apply(new MockContext().setRoute(route)));
430+
})
431+
;
432+
}
433+
422434
private Context mockContext(String method, String path) {
423435
Context ctx = mock(Context.class);
424436
when(ctx.getMethod()).thenReturn(method);

tests/src/test/java/examples/InstanceRouter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
package examples;
22

33
import io.jooby.Context;
4+
import io.jooby.Route;
45
import io.jooby.annotations.GET;
56
import io.jooby.annotations.POST;
67
import io.jooby.annotations.Path;
78

9+
import static org.junit.jupiter.api.Assertions.assertEquals;
10+
811
@Path("/")
912
public class InstanceRouter {
1013

1114
@GET
1215
@POST
13-
public String getIt() {
16+
@Role("some")
17+
public String getIt(Route route) {
18+
assertEquals("some", route.attribute("role"));
1419
return "Got it!";
1520
}
1621

0 commit comments

Comments
 (0)