Skip to content

Commit 237988d

Browse files
committed
router: redo router options
1 parent edeb7be commit 237988d

14 files changed

Lines changed: 56 additions & 157 deletions

File tree

examples/src/main/java/examples/HelloApp.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,18 @@
66
package examples;
77

88
import io.jooby.Jooby;
9-
import io.jooby.RouterOptions;
9+
import io.jooby.RouterOption;
1010
import io.jooby.TraceHandler;
11-
import io.jooby.annotations.QueryParam;
1211
import io.jooby.banner.BannerModule;
1312

14-
import java.util.stream.Stream;
15-
1613
public class HelloApp extends Jooby {
1714

1815
{
1916
install(new BannerModule());
2017

2118
decorator(new TraceHandler());
2219

23-
setRouterOptions(new RouterOptions().setIgnoreCase(false).setIgnoreTrailingSlash(true));
20+
setRouterOptions(RouterOption.NO_TRAILING_SLASH);
2421

2522
get("/", ctx -> {
2623
return "Hello World";

jooby/src/main/java/io/jooby/Jooby.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.Optional;
3030
import java.util.Properties;
3131
import java.util.ServiceLoader;
32+
import java.util.Set;
3233
import java.util.Spliterator;
3334
import java.util.concurrent.Executor;
3435
import java.util.concurrent.ExecutorService;
@@ -132,11 +133,11 @@ public Jooby() {
132133
return this;
133134
}
134135

135-
@Nonnull @Override public RouterOptions getRouterOptions() {
136+
@Nonnull @Override public Set<RouterOption> getRouterOptions() {
136137
return router.getRouterOptions();
137138
}
138139

139-
@Nonnull @Override public Jooby setRouterOptions(@Nonnull RouterOptions options) {
140+
@Nonnull @Override public Jooby setRouterOptions(@Nonnull RouterOption... options) {
140141
router.setRouterOptions(options);
141142
return this;
142143
}

jooby/src/main/java/io/jooby/Router.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.Collections;
1919
import java.util.List;
2020
import java.util.Map;
21+
import java.util.Set;
2122
import java.util.concurrent.Executor;
2223
import java.util.function.Predicate;
2324
import java.util.stream.Stream;
@@ -635,20 +636,15 @@ default Router error(@Nonnull Predicate<StatusCode> predicate,
635636
*/
636637
@Nonnull Router responseHandler(@Nonnull ResponseHandler factory);
637638

638-
/**
639-
* Router options.
640-
*
641-
* @return Router options.
642-
*/
643-
@Nonnull RouterOptions getRouterOptions();
639+
@Nonnull Set<RouterOption> getRouterOptions();
644640

645641
/**
646642
* Set router options.
647643
*
648644
* @param options router options.
649645
* @return This router.
650646
*/
651-
@Nonnull Router setRouterOptions(@Nonnull RouterOptions options);
647+
@Nonnull Router setRouterOptions(@Nonnull RouterOption... options);
652648

653649
/**
654650
* Session store. Default use a cookie ID with a memory storage.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.jooby;
2+
3+
public enum RouterOption {
4+
LOW_CASE,
5+
6+
NO_TRAILING_SLASH,
7+
8+
NORM,
9+
10+
RESET_HEADERS_ON_ERROR;
11+
12+
public int getMask() {
13+
return 1 << ordinal();
14+
}
15+
16+
public boolean isEnabled(int flags) {
17+
return (flags & getMask()) != 0;
18+
}
19+
}

jooby/src/main/java/io/jooby/RouterOptions.java

Lines changed: 0 additions & 110 deletions
This file was deleted.

jooby/src/main/java/io/jooby/internal/RouterImpl.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import io.jooby.Context;
1111
import io.jooby.Jooby;
1212
import io.jooby.RegistryException;
13+
import io.jooby.RouterOption;
1314
import io.jooby.ServerOptions;
1415
import io.jooby.ServiceKey;
1516
import io.jooby.SessionStore;
@@ -22,7 +23,6 @@
2223
import io.jooby.ResponseHandler;
2324
import io.jooby.Route;
2425
import io.jooby.Router;
25-
import io.jooby.RouterOptions;
2626
import io.jooby.ServiceRegistry;
2727
import io.jooby.StatusCode;
2828
import io.jooby.TemplateEngine;
@@ -40,13 +40,15 @@
4040
import java.nio.file.Paths;
4141
import java.util.ArrayList;
4242
import java.util.Collections;
43+
import java.util.EnumSet;
4344
import java.util.HashMap;
4445
import java.util.LinkedHashMap;
4546
import java.util.LinkedList;
4647
import java.util.List;
4748
import java.util.Map;
4849
import java.util.NoSuchElementException;
4950
import java.util.Optional;
51+
import java.util.Set;
5052
import java.util.concurrent.ConcurrentHashMap;
5153
import java.util.concurrent.Executor;
5254
import java.util.function.Predicate;
@@ -136,8 +138,6 @@ public Stack executor(Executor executor) {
136138

137139
private Map<String, StatusCode> errorCodes;
138140

139-
private RouterOptions options = new RouterOptions();
140-
141141
private RouteTree chi = new Chi();
142142

143143
private LinkedList<Stack> stack = new LinkedList<>();
@@ -172,6 +172,8 @@ public Stack executor(Executor executor) {
172172

173173
private ClassLoader classLoader;
174174

175+
private Set<RouterOption> routerOptions = EnumSet.of(RouterOption.RESET_HEADERS_ON_ERROR);
176+
175177
public RouterImpl(ClassLoader loader) {
176178
this.classLoader = loader;
177179
stack.addLast(new Stack(null));
@@ -188,13 +190,13 @@ public RouterImpl(ClassLoader loader) {
188190
return attributes;
189191
}
190192

191-
@Nonnull @Override public Router setRouterOptions(@Nonnull RouterOptions options) {
192-
this.options = options;
193-
return this;
193+
@Nonnull @Override public Set<RouterOption> getRouterOptions() {
194+
return routerOptions;
194195
}
195196

196-
@Nonnull @Override public RouterOptions getRouterOptions() {
197-
return options;
197+
@Nonnull @Override public Router setRouterOptions(@Nonnull RouterOption... options) {
198+
Stream.of(options).forEach(routerOptions::add);
199+
return this;
198200
}
199201

200202
@Nonnull @Override public Router setContextPath(@Nonnull String basePath) {
@@ -505,13 +507,13 @@ private Route newRoute(@Nonnull String method, @Nonnull String pattern,
505507
}
506508
}
507509
/** router options: */
508-
if (options.getIgnoreCase()) {
510+
if (routerOptions.contains(RouterOption.LOW_CASE)) {
509511
chi = new RouteTreeLowerCasePath(chi);
510512
}
511-
if (options.getIgnoreTrailingSlash()) {
513+
if (routerOptions.contains(RouterOption.NO_TRAILING_SLASH)) {
512514
chi = new RouteTreeIgnoreTrailingSlash(chi);
513515
}
514-
if (options.getNormalizePath()) {
516+
if (routerOptions.contains(RouterOption.NORM)) {
515517
chi = new RouteTreeNormPath(chi);
516518
}
517519

jooby/src/main/kotlin/io/jooby/Kooby.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,10 +249,8 @@ open class Kooby constructor() : Jooby() {
249249
}
250250

251251
@OptionsDsl
252-
fun routerOptions(configurer: RouterOptions.() -> Unit): Kooby {
253-
val options = RouterOptions()
254-
configurer(options)
255-
this.routerOptions = options
252+
fun routerOptions(vararg option: RouterOption): Kooby {
253+
this.setRouterOptions(*option)
256254
return this
257255
}
258256

jooby/src/test/kotlin/io/jooby/Idioms.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.jooby
22

3+
import io.jooby.RouterOption.LOW_CASE
4+
import io.jooby.RouterOption.NO_TRAILING_SLASH
35
import kotlinx.coroutines.delay
46
import java.nio.file.Paths
57
import java.time.Duration
@@ -45,10 +47,7 @@ class Idioms : Kooby({
4547
}
4648
}
4749

48-
routerOptions {
49-
this.ignoreCase = true
50-
this.ignoreTrailingSlash = true
51-
}
50+
routerOptions(LOW_CASE, NO_TRAILING_SLASH)
5251

5352
environmentOptions {
5453
this.activeNames = listOf("foo")
@@ -141,7 +140,7 @@ class Idioms : Kooby({
141140
ws.send("SS")
142141
}
143142
configurer.onMessage { ws, message ->
144-
val value = message.to<IdiomsPojo> ()
143+
val value = message.to<IdiomsPojo>()
145144
ws.render(value)
146145
}
147146
}

modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyContext.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.jooby.QueryString;
1818
import io.jooby.Route;
1919
import io.jooby.Router;
20+
import io.jooby.RouterOption;
2021
import io.jooby.Sender;
2122
import io.jooby.Server;
2223
import io.jooby.Session;
@@ -482,7 +483,7 @@ private Context sendStreamInternal(@Nonnull InputStream in) {
482483

483484
@Override public boolean getResetHeadersOnError() {
484485
return resetHeadersOnError == null
485-
? getRouter().getRouterOptions().getResetHeadersOnError()
486+
? getRouter().getRouterOptions().contains(RouterOption.RESET_HEADERS_ON_ERROR)
486487
: resetHeadersOnError.booleanValue();
487488
}
488489

modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyContext.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.jooby.QueryString;
1919
import io.jooby.Route;
2020
import io.jooby.Router;
21+
import io.jooby.RouterOption;
2122
import io.jooby.Sender;
2223
import io.jooby.Server;
2324
import io.jooby.Session;
@@ -557,7 +558,7 @@ public void flush() {
557558

558559
@Override public boolean getResetHeadersOnError() {
559560
return resetHeadersOnError == null
560-
? getRouter().getRouterOptions().getResetHeadersOnError()
561+
? getRouter().getRouterOptions().contains(RouterOption.RESET_HEADERS_ON_ERROR)
561562
: resetHeadersOnError.booleanValue();
562563
}
563564

0 commit comments

Comments
 (0)