From bdeab2c263fe3be1f46e6d4afb0482b1a5db055c Mon Sep 17 00:00:00 2001 From: ScienJus Date: Tue, 9 Feb 2016 22:42:07 +0800 Subject: [PATCH 1/8] Route Groups --- .../main/java/ro/pippo/core/Application.java | 8 ++ .../pippo/core/route/RouteGroupHandler.java | 134 ++++++++++++++++++ .../java/ro/pippo/core/RouteGroupTest.java | 76 ++++++++++ 3 files changed, 218 insertions(+) create mode 100644 pippo-core/src/main/java/ro/pippo/core/route/RouteGroupHandler.java create mode 100644 pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java diff --git a/pippo-core/src/main/java/ro/pippo/core/Application.java b/pippo-core/src/main/java/ro/pippo/core/Application.java index 1a4abea48..58b2bfe59 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Application.java +++ b/pippo-core/src/main/java/ro/pippo/core/Application.java @@ -33,6 +33,7 @@ import ro.pippo.core.util.HttpCacheToolkit; import ro.pippo.core.util.MimeTypes; import ro.pippo.core.util.ServiceLocator; +import ro.pippo.core.util.StringUtils; import java.io.File; import java.util.ArrayList; @@ -264,6 +265,13 @@ public Route ALL(String uriPattern, RouteHandler routeHandler) { return route; } + public void GROUP(String namespace, RouteGroupHandler routeGroupHandler) { + if (StringUtils.isNullOrEmpty(namespace)) { + throw new PippoRuntimeException("The group namespace cannot be null or empty"); + } + routeGroupHandler.routes(namespace).forEach(this::addRoute); + } + public void addRoute(Route route) { getRouter().addRoute(route); } diff --git a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroupHandler.java b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroupHandler.java new file mode 100644 index 000000000..f69d18150 --- /dev/null +++ b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroupHandler.java @@ -0,0 +1,134 @@ +package ro.pippo.core.route; + +import ro.pippo.core.PippoRuntimeException; +import ro.pippo.core.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author ScienJus + * @date 16/2/9. + */ +public abstract class RouteGroupHandler { + + private String namespace; + + private List routes = new ArrayList<>(); + + public abstract void handle(); + + public Route GET(String uriPattern, RouteHandler routeHandler) { + if (routeHandler instanceof ResourceHandler) { + throw new PippoRuntimeException("Please use 'addResourceRoute()'"); + } + + Route route = Route.GET(buildPath(uriPattern), routeHandler); + routes.add(route); + + return route; + } + + public Route GET(RouteHandler routeHandler) { + return GET("", routeHandler); + } + + public Route POST(String uriPattern, RouteHandler routeHandler) { + Route route = Route.POST(buildPath(uriPattern), routeHandler); + routes.add(route); + + return route; + } + + public Route POST(RouteHandler routeHandler) { + return POST("", routeHandler); + } + + public Route DELETE(String uriPattern, RouteHandler routeHandler) { + Route route = Route.DELETE(buildPath(uriPattern), routeHandler); + routes.add(route); + + return route; + } + + public Route DELETE(RouteHandler routeHandler) { + return DELETE("", routeHandler); + } + + public Route HEAD(String uriPattern, RouteHandler routeHandler) { + Route route = Route.HEAD(buildPath(uriPattern), routeHandler); + routes.add(route); + + return route; + } + + public Route HEAD(RouteHandler routeHandler) { + return HEAD("", routeHandler); + } + + public Route PUT(String uriPattern, RouteHandler routeHandler) { + Route route = Route.PUT(buildPath(uriPattern), routeHandler); + routes.add(route); + + return route; + } + + public Route PUT(RouteHandler routeHandler) { + return PUT("", routeHandler); + } + + public Route PATCH(String uriPattern, RouteHandler routeHandler) { + Route route = Route.PATCH(buildPath(uriPattern), routeHandler); + routes.add(route); + + return route; + } + + public Route PATCH(RouteHandler routeHandler) { + return PATCH("", routeHandler); + } + + public Route ALL(String uriPattern, RouteHandler routeHandler) { + Route route = Route.ALL(buildPath(uriPattern), routeHandler); + routes.add(route); + + return route; + } + public Route ALL(RouteHandler routeHandler) { + return PATCH("", routeHandler); + } + + public void GROUP(String namespace, RouteGroupHandler routeGroupHandler) { + if (StringUtils.isNullOrEmpty(namespace)) { + throw new PippoRuntimeException("The group namespace cannot be null or empty"); + } + routes.addAll(routeGroupHandler.routes(buildPath(namespace))); + } + + public List routes(String namespace) { + this.namespace = namespace; + handle(); + return routes; + } + + private String buildPath(String uriPattern) { + String routePath; + if (namespace.endsWith("/")) { + if (uriPattern.startsWith("/")) { + routePath = namespace + uriPattern.substring(1); + } else { + routePath = namespace + uriPattern; + } + } else { + if (uriPattern.startsWith("/")) { + routePath = namespace + uriPattern; + } else { + routePath = namespace + "/" + uriPattern; + } + } + if (routePath.endsWith("/")) { + return routePath.substring(0, routePath.length() - 1); + } + return routePath; + } +} diff --git a/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java b/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java new file mode 100644 index 000000000..c7b7ca729 --- /dev/null +++ b/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java @@ -0,0 +1,76 @@ +package ro.pippo.core; + +import org.junit.Test; +import ro.pippo.core.route.RouteGroupHandler; +import ro.pippo.core.route.RouteMatch; + +import java.util.List; + +import static org.junit.Assert.assertEquals; + +/** + * @author ScienJus + * @date 16/2/9. + */ +public class RouteGroupTest { + + @Test + public void testGroupRoute() { + Application application = new TestApplication(); + application.init(); + + List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users"); + assertEquals(1, matches.size()); + + matches = application.getRouter().findRoutes(HttpConstants.Method.POST, "/users"); + assertEquals(1, matches.size()); + + matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users/1"); + assertEquals(1, matches.size()); + + matches = application.getRouter().findRoutes(HttpConstants.Method.PUT, "/users/1"); + assertEquals(1, matches.size()); + + matches = application.getRouter().findRoutes(HttpConstants.Method.DELETE, "/users/1"); + assertEquals(1, matches.size()); + } + + // how to test this? can not use Router.addRoute + private class TestApplication extends Application { + + @Override + protected void onInit() { + + GROUP("/users", new RouteGroupHandler() { + + @Override + public void handle() { + + GET(routeContext -> routeContext.send("all users")); + + POST(routeContext -> routeContext.send("create a new user")); + + GROUP("{id}", new RouteGroupHandler() { + + @Override + public void handle() { + + GET(routeContext -> { + routeContext.send("find user, id: " + routeContext.getParameter("id").toString()); + }); + + PUT(routeContext -> { + routeContext.send("modify user, id: " + routeContext.getParameter("id").toString()); + }); + + DELETE(routeContext -> { + routeContext.send("delete user, id: " + routeContext.getParameter("id").toString()); + }); + } + }); + } + }); + } + } +} + From 7987f153784ab51f75b0d5961baead039fc3a705 Mon Sep 17 00:00:00 2001 From: ScienJus Date: Tue, 9 Feb 2016 23:17:12 +0800 Subject: [PATCH 2/8] fixed --- .../pippo/core/route/RouteGroupHandler.java | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroupHandler.java b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroupHandler.java index f69d18150..f7241910d 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroupHandler.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroupHandler.java @@ -95,7 +95,7 @@ public Route ALL(String uriPattern, RouteHandler routeHandler) { return route; } public Route ALL(RouteHandler routeHandler) { - return PATCH("", routeHandler); + return ALL("", routeHandler); } public void GROUP(String namespace, RouteGroupHandler routeGroupHandler) { @@ -112,23 +112,7 @@ public List routes(String namespace) { } private String buildPath(String uriPattern) { - String routePath; - if (namespace.endsWith("/")) { - if (uriPattern.startsWith("/")) { - routePath = namespace + uriPattern.substring(1); - } else { - routePath = namespace + uriPattern; - } - } else { - if (uriPattern.startsWith("/")) { - routePath = namespace + uriPattern; - } else { - routePath = namespace + "/" + uriPattern; - } - } - if (routePath.endsWith("/")) { - return routePath.substring(0, routePath.length() - 1); - } - return routePath; + String routePath = StringUtils.addEnd(StringUtils.addEnd(namespace, "/"), uriPattern); + return routePath.endsWith("/") ? routePath.substring(0, routePath.length() - 1) : routePath; } } From ff2e995f1075d603b2a5872748760ad15b2186ad Mon Sep 17 00:00:00 2001 From: ScienJus Date: Tue, 9 Feb 2016 23:27:47 +0800 Subject: [PATCH 3/8] fixed import --- pippo-core/src/main/java/ro/pippo/core/Application.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pippo-core/src/main/java/ro/pippo/core/Application.java b/pippo-core/src/main/java/ro/pippo/core/Application.java index 58b2bfe59..e1d7a72ea 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Application.java +++ b/pippo-core/src/main/java/ro/pippo/core/Application.java @@ -25,6 +25,7 @@ import ro.pippo.core.route.Route; import ro.pippo.core.route.RouteContext; import ro.pippo.core.route.RouteDispatcher; +import ro.pippo.core.route.RouteGroupHandler; import ro.pippo.core.route.RouteHandler; import ro.pippo.core.route.RoutePostDispatchListenerList; import ro.pippo.core.route.RoutePreDispatchListenerList; From b1d8bb2e60d0f3ed001a57bd9252c6b4fd624503 Mon Sep 17 00:00:00 2001 From: ScienJus Date: Tue, 9 Feb 2016 23:37:56 +0800 Subject: [PATCH 4/8] change RouteGroupHandler.handle to RouteGroup.onInit / license --- .../main/java/ro/pippo/core/Application.java | 6 ++--- ...RouteGroupHandler.java => RouteGroup.java} | 25 +++++++++++++++---- .../java/ro/pippo/core/RouteGroupTest.java | 25 +++++++++++++++---- 3 files changed, 43 insertions(+), 13 deletions(-) rename pippo-core/src/main/java/ro/pippo/core/route/{RouteGroupHandler.java => RouteGroup.java} (78%) diff --git a/pippo-core/src/main/java/ro/pippo/core/Application.java b/pippo-core/src/main/java/ro/pippo/core/Application.java index e1d7a72ea..0aa536c57 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Application.java +++ b/pippo-core/src/main/java/ro/pippo/core/Application.java @@ -25,7 +25,7 @@ import ro.pippo.core.route.Route; import ro.pippo.core.route.RouteContext; import ro.pippo.core.route.RouteDispatcher; -import ro.pippo.core.route.RouteGroupHandler; +import ro.pippo.core.route.RouteGroup; import ro.pippo.core.route.RouteHandler; import ro.pippo.core.route.RoutePostDispatchListenerList; import ro.pippo.core.route.RoutePreDispatchListenerList; @@ -266,11 +266,11 @@ public Route ALL(String uriPattern, RouteHandler routeHandler) { return route; } - public void GROUP(String namespace, RouteGroupHandler routeGroupHandler) { + public void GROUP(String namespace, RouteGroup routeGroup) { if (StringUtils.isNullOrEmpty(namespace)) { throw new PippoRuntimeException("The group namespace cannot be null or empty"); } - routeGroupHandler.routes(namespace).forEach(this::addRoute); + routeGroup.routes(namespace).forEach(this::addRoute); } public void addRoute(Route route) { diff --git a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroupHandler.java b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java similarity index 78% rename from pippo-core/src/main/java/ro/pippo/core/route/RouteGroupHandler.java rename to pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java index f7241910d..63da65c09 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroupHandler.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java @@ -1,3 +1,18 @@ +/* + * Copyright (C) 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package ro.pippo.core.route; import ro.pippo.core.PippoRuntimeException; @@ -10,13 +25,13 @@ * @author ScienJus * @date 16/2/9. */ -public abstract class RouteGroupHandler { +public abstract class RouteGroup { private String namespace; private List routes = new ArrayList<>(); - public abstract void handle(); + public abstract void onInit(); public Route GET(String uriPattern, RouteHandler routeHandler) { if (routeHandler instanceof ResourceHandler) { @@ -98,16 +113,16 @@ public Route ALL(RouteHandler routeHandler) { return ALL("", routeHandler); } - public void GROUP(String namespace, RouteGroupHandler routeGroupHandler) { + public void GROUP(String namespace, RouteGroup routeGroup) { if (StringUtils.isNullOrEmpty(namespace)) { throw new PippoRuntimeException("The group namespace cannot be null or empty"); } - routes.addAll(routeGroupHandler.routes(buildPath(namespace))); + routes.addAll(routeGroup.routes(buildPath(namespace))); } public List routes(String namespace) { this.namespace = namespace; - handle(); + onInit(); return routes; } diff --git a/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java b/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java index c7b7ca729..289d2463e 100644 --- a/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java +++ b/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java @@ -1,7 +1,22 @@ +/* + * Copyright (C) 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package ro.pippo.core; import org.junit.Test; -import ro.pippo.core.route.RouteGroupHandler; +import ro.pippo.core.route.RouteGroup; import ro.pippo.core.route.RouteMatch; import java.util.List; @@ -41,19 +56,19 @@ private class TestApplication extends Application { @Override protected void onInit() { - GROUP("/users", new RouteGroupHandler() { + GROUP("/users", new RouteGroup() { @Override - public void handle() { + public void onInit() { GET(routeContext -> routeContext.send("all users")); POST(routeContext -> routeContext.send("create a new user")); - GROUP("{id}", new RouteGroupHandler() { + GROUP("{id}", new RouteGroup() { @Override - public void handle() { + public void onInit() { GET(routeContext -> { routeContext.send("find user, id: " + routeContext.getParameter("id").toString()); From ff68cb0457449fe23ae17ecc4d8ce90b9f110b1f Mon Sep 17 00:00:00 2001 From: ScienJus Date: Wed, 10 Feb 2016 12:01:59 +0800 Subject: [PATCH 5/8] route groups --- .../main/java/ro/pippo/core/Application.java | 15 ++- .../main/java/ro/pippo/core/route/Route.java | 28 +++- .../java/ro/pippo/core/route/RouteGroup.java | 88 +++++++------ .../java/ro/pippo/core/RouteGroupTest.java | 122 +++++++++++++++++- 4 files changed, 202 insertions(+), 51 deletions(-) diff --git a/pippo-core/src/main/java/ro/pippo/core/Application.java b/pippo-core/src/main/java/ro/pippo/core/Application.java index 0aa536c57..160c728ad 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Application.java +++ b/pippo-core/src/main/java/ro/pippo/core/Application.java @@ -266,17 +266,24 @@ public Route ALL(String uriPattern, RouteHandler routeHandler) { return route; } - public void GROUP(String namespace, RouteGroup routeGroup) { - if (StringUtils.isNullOrEmpty(namespace)) { - throw new PippoRuntimeException("The group namespace cannot be null or empty"); + public void GROUP(RouteGroup routeGroup) { + routeGroup.initRoutes().forEach(this::addRoute); + for (RouteGroup child : routeGroup.getChildren()) { + child.initRoutes().forEach(this::addRoute); } - routeGroup.routes(namespace).forEach(this::addRoute); } public void addRoute(Route route) { getRouter().addRoute(route); } + public void addGroup(RouteGroup routeGroup) { + routeGroup.getRoutes().forEach(this::addRoute); + for (RouteGroup child : routeGroup.getChildren()) { + child.getRoutes().forEach(this::addRoute); + } + } + /** * It's a shortcut for {@link #addPublicResourceRoute(String)} with parameter "/public". */ diff --git a/pippo-core/src/main/java/ro/pippo/core/route/Route.java b/pippo-core/src/main/java/ro/pippo/core/route/Route.java index 816b8d835..ffe394150 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/Route.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/Route.java @@ -16,6 +16,7 @@ package ro.pippo.core.route; import ro.pippo.core.HttpConstants; +import ro.pippo.core.util.StringUtils; /** * @author Decebal Suiu @@ -28,6 +29,7 @@ public class Route { private boolean runAsFinally; private String name; + private RouteGroup group; public Route(String requestMethod, String uriPattern, RouteHandler routeHandler) { this.requestMethod = requestMethod; @@ -117,13 +119,28 @@ public String getRequestMethod() { } public String getUriPattern() { - return uriPattern; +// return uriPattern; + return getCompletePath(); //should i modify this method or modify methods in DefaultRouter to use getCompletePath ? } public RouteHandler getRouteHandler() { return routeHandler; } + // path with group + public String getCompletePath() { + RouteGroup group = this.group; + String path = this.uriPattern; + while (group != null) { + path = StringUtils.addStart(StringUtils.addStart(path, "/"), group.getNamespace()); + group = group.getParent(); + } + if (StringUtils.isNullOrEmpty(path)) { + return path; + } + return path.endsWith("/") ? path.substring(0, path.length() - 1) : path; + } + public boolean isRunAsFinally() { return runAsFinally; } @@ -150,6 +167,13 @@ public void setName(String name) { this.name = name; } + + public Route inGroup(RouteGroup group) { + this.group = group; + group.getRoutes().add(this); + return this; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -158,7 +182,7 @@ public boolean equals(Object o) { Route route = (Route) o; if (!requestMethod.equals(route.requestMethod)) return false; - if (!uriPattern.equals(route.uriPattern)) return false; + if (!getUriPattern().equals(route.getUriPattern())) return false; return true; } diff --git a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java index 63da65c09..e04902188 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java @@ -25,23 +25,41 @@ * @author ScienJus * @date 16/2/9. */ -public abstract class RouteGroup { +public class RouteGroup { private String namespace; private List routes = new ArrayList<>(); - public abstract void onInit(); + private RouteGroup parent; + + private List children = new ArrayList<>(); + + public RouteGroup withNamespace(String namespace) { + this.namespace = namespace; + return this; + } + + public String getNamespace() { + return this.namespace; + } + + public RouteGroup getParent() { + return parent; + } + + public List getChildren() { + return children; + } + + public void onInit(){} public Route GET(String uriPattern, RouteHandler routeHandler) { if (routeHandler instanceof ResourceHandler) { throw new PippoRuntimeException("Please use 'addResourceRoute()'"); } - Route route = Route.GET(buildPath(uriPattern), routeHandler); - routes.add(route); - - return route; + return Route.GET(uriPattern, routeHandler).inGroup(this); } public Route GET(RouteHandler routeHandler) { @@ -49,10 +67,7 @@ public Route GET(RouteHandler routeHandler) { } public Route POST(String uriPattern, RouteHandler routeHandler) { - Route route = Route.POST(buildPath(uriPattern), routeHandler); - routes.add(route); - - return route; + return Route.POST(uriPattern, routeHandler).inGroup(this); } public Route POST(RouteHandler routeHandler) { @@ -60,10 +75,7 @@ public Route POST(RouteHandler routeHandler) { } public Route DELETE(String uriPattern, RouteHandler routeHandler) { - Route route = Route.DELETE(buildPath(uriPattern), routeHandler); - routes.add(route); - - return route; + return Route.DELETE(uriPattern, routeHandler).inGroup(this); } public Route DELETE(RouteHandler routeHandler) { @@ -71,10 +83,7 @@ public Route DELETE(RouteHandler routeHandler) { } public Route HEAD(String uriPattern, RouteHandler routeHandler) { - Route route = Route.HEAD(buildPath(uriPattern), routeHandler); - routes.add(route); - - return route; + return Route.HEAD(uriPattern, routeHandler).inGroup(this); } public Route HEAD(RouteHandler routeHandler) { @@ -82,10 +91,7 @@ public Route HEAD(RouteHandler routeHandler) { } public Route PUT(String uriPattern, RouteHandler routeHandler) { - Route route = Route.PUT(buildPath(uriPattern), routeHandler); - routes.add(route); - - return route; + return Route.PUT(uriPattern, routeHandler).inGroup(this); } public Route PUT(RouteHandler routeHandler) { @@ -93,10 +99,7 @@ public Route PUT(RouteHandler routeHandler) { } public Route PATCH(String uriPattern, RouteHandler routeHandler) { - Route route = Route.PATCH(buildPath(uriPattern), routeHandler); - routes.add(route); - - return route; + return Route.PATCH(uriPattern, routeHandler).inGroup(this); } public Route PATCH(RouteHandler routeHandler) { @@ -104,30 +107,35 @@ public Route PATCH(RouteHandler routeHandler) { } public Route ALL(String uriPattern, RouteHandler routeHandler) { - Route route = Route.ALL(buildPath(uriPattern), routeHandler); - routes.add(route); - - return route; + return Route.ALL(uriPattern, routeHandler).inGroup(this); } public Route ALL(RouteHandler routeHandler) { return ALL("", routeHandler); } - public void GROUP(String namespace, RouteGroup routeGroup) { - if (StringUtils.isNullOrEmpty(namespace)) { - throw new PippoRuntimeException("The group namespace cannot be null or empty"); - } - routes.addAll(routeGroup.routes(buildPath(namespace))); + public void GROUP(RouteGroup routeGroup) { + this.addGroup(routeGroup); } - public List routes(String namespace) { - this.namespace = namespace; + public List initRoutes() { onInit(); return routes; } - private String buildPath(String uriPattern) { - String routePath = StringUtils.addEnd(StringUtils.addEnd(namespace, "/"), uriPattern); - return routePath.endsWith("/") ? routePath.substring(0, routePath.length() - 1) : routePath; + public List getRoutes() { + return routes; + } + + public void addRoute(Route route) { + route.inGroup(this); + } + + public void addGroup(RouteGroup routeGroup) { + routeGroup.inGroup(this); + } + + public void inGroup(RouteGroup routeGroup) { + this.parent = routeGroup; + routeGroup.getChildren().add(this); } } diff --git a/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java b/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java index 289d2463e..752af5a3f 100644 --- a/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java +++ b/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java @@ -16,6 +16,7 @@ package ro.pippo.core; import org.junit.Test; +import ro.pippo.core.route.Route; import ro.pippo.core.route.RouteGroup; import ro.pippo.core.route.RouteMatch; @@ -30,7 +31,7 @@ public class RouteGroupTest { @Test - public void testGroupRoute() { + public void testOnInit() { Application application = new TestApplication(); application.init(); @@ -50,13 +51,124 @@ public void testGroupRoute() { assertEquals(1, matches.size()); } + @Test + public void testAddGroup() { + Application application = new Application(){ + + @Override + protected void onInit() { + RouteGroup group = new RouteGroup().withNamespace("/users"); + group.GET("{id}", routeContext -> routeContext.send("all posts")); + addGroup(group); + } + + }; + application.init(); + List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users/1"); + assertEquals(1, matches.size()); + } + + @Test + public void testAddRoute() { + Application application = new Application(){ + + @Override + protected void onInit() { + RouteGroup group = new RouteGroup().withNamespace("/users"); + Route route = group.GET("{id}", routeContext -> routeContext.send("all posts")); + addRoute(route); + } + + }; + application.init(); + List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users/1"); + assertEquals(1, matches.size()); + } + + @Test + public void testGroupAddRoute() { + Application application = new Application(){ + + @Override + protected void onInit() { + RouteGroup group = new RouteGroup().withNamespace("/users"); + Route route = new Route("GET", "{id}", routeContext -> {routeContext.send("all users");}); + group.addRoute(route); + addGroup(group); + } + + }; + application.init(); + List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users/1"); + assertEquals(1, matches.size()); + } + + @Test + public void testInGroup() { + Application application = new Application(){ + + @Override + protected void onInit() { + RouteGroup group = new RouteGroup().withNamespace("/users"); + Route route = new Route("GET", "{id}", routeContext -> {routeContext.send("all users");}); + route.inGroup(group); + addRoute(route); + } + + }; + application.init(); + List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users/1"); + assertEquals(1, matches.size()); + } + + @Test + public void testGroupAddGroup() { + Application application = new Application(){ + + @Override + protected void onInit() { + RouteGroup group = new RouteGroup().withNamespace("/users"); + RouteGroup child = new RouteGroup().withNamespace("{id}"); + Route route = new Route("POST", "like", routeContext -> {routeContext.send("i like you");}); + group.addGroup(child); + child.addRoute(route); + addGroup(group); + } + + }; + application.init(); + List matches = application.getRouter().findRoutes(HttpConstants.Method.POST, "/users/1/like"); + assertEquals(1, matches.size()); + } + + @Test + public void testGroupInGroup() { + Application application = new Application(){ + + @Override + protected void onInit() { + RouteGroup group = new RouteGroup().withNamespace("/users"); + RouteGroup child = new RouteGroup().withNamespace("{id}"); + Route route = new Route("POST", "like", routeContext -> {routeContext.send("i like you");}); + child.inGroup(group); + route.inGroup(child); + addRoute(route); + } + + }; + application.init(); + List matches = application.getRouter().findRoutes(HttpConstants.Method.POST, "/users/1/like"); + assertEquals(1, matches.size()); + } + // how to test this? can not use Router.addRoute private class TestApplication extends Application { + // create group with onInit @Override protected void onInit() { - GROUP("/users", new RouteGroup() { + GROUP(new RouteGroup() { @Override public void onInit() { @@ -65,7 +177,7 @@ public void onInit() { POST(routeContext -> routeContext.send("create a new user")); - GROUP("{id}", new RouteGroup() { + GROUP(new RouteGroup() { @Override public void onInit() { @@ -82,9 +194,9 @@ public void onInit() { routeContext.send("delete user, id: " + routeContext.getParameter("id").toString()); }); } - }); + }.withNamespace("{id}")); } - }); + }.withNamespace("/users")); } } } From 7890b7d807635314812d18aedaf8cfd9062ea541 Mon Sep 17 00:00:00 2001 From: ScienJus Date: Wed, 10 Feb 2016 12:17:24 +0800 Subject: [PATCH 6/8] modify return val --- .../src/main/java/ro/pippo/core/route/RouteGroup.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java index e04902188..1ad357fb3 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java @@ -126,16 +126,19 @@ public List getRoutes() { return routes; } - public void addRoute(Route route) { + public RouteGroup addRoute(Route route) { route.inGroup(this); + return this; } - public void addGroup(RouteGroup routeGroup) { + public RouteGroup addGroup(RouteGroup routeGroup) { routeGroup.inGroup(this); + return this; } - public void inGroup(RouteGroup routeGroup) { + public RouteGroup inGroup(RouteGroup routeGroup) { this.parent = routeGroup; routeGroup.getChildren().add(this); + return this; } } From c061937eac8d8b79a9a3c4bbd61d20ef22e444b4 Mon Sep 17 00:00:00 2001 From: ScienJus Date: Wed, 10 Feb 2016 16:08:52 +0800 Subject: [PATCH 7/8] remove Application.GROUP, RouteGroup.GROUP and RouteGroup.onInit, add RouteGroup. constructor --- .../main/java/ro/pippo/core/Application.java | 7 -- .../main/java/ro/pippo/core/route/Route.java | 2 +- .../java/ro/pippo/core/route/RouteGroup.java | 29 ++----- .../java/ro/pippo/core/RouteGroupTest.java | 86 ++++++------------- 4 files changed, 36 insertions(+), 88 deletions(-) diff --git a/pippo-core/src/main/java/ro/pippo/core/Application.java b/pippo-core/src/main/java/ro/pippo/core/Application.java index 160c728ad..18b7b477f 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Application.java +++ b/pippo-core/src/main/java/ro/pippo/core/Application.java @@ -266,13 +266,6 @@ public Route ALL(String uriPattern, RouteHandler routeHandler) { return route; } - public void GROUP(RouteGroup routeGroup) { - routeGroup.initRoutes().forEach(this::addRoute); - for (RouteGroup child : routeGroup.getChildren()) { - child.initRoutes().forEach(this::addRoute); - } - } - public void addRoute(Route route) { getRouter().addRoute(route); } diff --git a/pippo-core/src/main/java/ro/pippo/core/route/Route.java b/pippo-core/src/main/java/ro/pippo/core/route/Route.java index ffe394150..5a9db78f1 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/Route.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/Route.java @@ -132,7 +132,7 @@ public String getCompletePath() { RouteGroup group = this.group; String path = this.uriPattern; while (group != null) { - path = StringUtils.addStart(StringUtils.addStart(path, "/"), group.getNamespace()); + path = StringUtils.addStart(StringUtils.addStart(path, "/"), group.getUriPattern()); group = group.getParent(); } if (StringUtils.isNullOrEmpty(path)) { diff --git a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java index 1ad357fb3..f90b0da74 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java @@ -16,7 +16,6 @@ package ro.pippo.core.route; import ro.pippo.core.PippoRuntimeException; -import ro.pippo.core.util.StringUtils; import java.util.ArrayList; import java.util.List; @@ -27,21 +26,22 @@ */ public class RouteGroup { - private String namespace; + private String uriPattern; - private List routes = new ArrayList<>(); + private List routes; private RouteGroup parent; - private List children = new ArrayList<>(); + private List children; - public RouteGroup withNamespace(String namespace) { - this.namespace = namespace; - return this; + public RouteGroup(String uriPattern) { + this.uriPattern = uriPattern; + this.routes = new ArrayList<>(); + this.children = new ArrayList<>(); } - public String getNamespace() { - return this.namespace; + public String getUriPattern() { + return this.uriPattern; } public RouteGroup getParent() { @@ -52,8 +52,6 @@ public List getChildren() { return children; } - public void onInit(){} - public Route GET(String uriPattern, RouteHandler routeHandler) { if (routeHandler instanceof ResourceHandler) { throw new PippoRuntimeException("Please use 'addResourceRoute()'"); @@ -113,15 +111,6 @@ public Route ALL(RouteHandler routeHandler) { return ALL("", routeHandler); } - public void GROUP(RouteGroup routeGroup) { - this.addGroup(routeGroup); - } - - public List initRoutes() { - onInit(); - return routes; - } - public List getRoutes() { return routes; } diff --git a/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java b/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java index 752af5a3f..9836c0701 100644 --- a/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java +++ b/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java @@ -30,34 +30,13 @@ */ public class RouteGroupTest { - @Test - public void testOnInit() { - Application application = new TestApplication(); - application.init(); - - List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users"); - assertEquals(1, matches.size()); - - matches = application.getRouter().findRoutes(HttpConstants.Method.POST, "/users"); - assertEquals(1, matches.size()); - - matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users/1"); - assertEquals(1, matches.size()); - - matches = application.getRouter().findRoutes(HttpConstants.Method.PUT, "/users/1"); - assertEquals(1, matches.size()); - - matches = application.getRouter().findRoutes(HttpConstants.Method.DELETE, "/users/1"); - assertEquals(1, matches.size()); - } - @Test public void testAddGroup() { Application application = new Application(){ @Override protected void onInit() { - RouteGroup group = new RouteGroup().withNamespace("/users"); + RouteGroup group = new RouteGroup("/users"); group.GET("{id}", routeContext -> routeContext.send("all posts")); addGroup(group); } @@ -74,7 +53,7 @@ public void testAddRoute() { @Override protected void onInit() { - RouteGroup group = new RouteGroup().withNamespace("/users"); + RouteGroup group = new RouteGroup("/users"); Route route = group.GET("{id}", routeContext -> routeContext.send("all posts")); addRoute(route); } @@ -91,7 +70,7 @@ public void testGroupAddRoute() { @Override protected void onInit() { - RouteGroup group = new RouteGroup().withNamespace("/users"); + RouteGroup group = new RouteGroup("/users"); Route route = new Route("GET", "{id}", routeContext -> {routeContext.send("all users");}); group.addRoute(route); addGroup(group); @@ -109,7 +88,7 @@ public void testInGroup() { @Override protected void onInit() { - RouteGroup group = new RouteGroup().withNamespace("/users"); + RouteGroup group = new RouteGroup("/users"); Route route = new Route("GET", "{id}", routeContext -> {routeContext.send("all users");}); route.inGroup(group); addRoute(route); @@ -127,8 +106,8 @@ public void testGroupAddGroup() { @Override protected void onInit() { - RouteGroup group = new RouteGroup().withNamespace("/users"); - RouteGroup child = new RouteGroup().withNamespace("{id}"); + RouteGroup group = new RouteGroup("/users"); + RouteGroup child = new RouteGroup("{id}"); Route route = new Route("POST", "like", routeContext -> {routeContext.send("i like you");}); group.addGroup(child); child.addRoute(route); @@ -147,8 +126,8 @@ public void testGroupInGroup() { @Override protected void onInit() { - RouteGroup group = new RouteGroup().withNamespace("/users"); - RouteGroup child = new RouteGroup().withNamespace("{id}"); + RouteGroup group = new RouteGroup("/users"); + RouteGroup child = new RouteGroup("{id}"); Route route = new Route("POST", "like", routeContext -> {routeContext.send("i like you");}); child.inGroup(group); route.inGroup(child); @@ -161,43 +140,30 @@ protected void onInit() { assertEquals(1, matches.size()); } - // how to test this? can not use Router.addRoute - private class TestApplication extends Application { - - // create group with onInit - @Override - protected void onInit() { - - GROUP(new RouteGroup() { - - @Override - public void onInit() { - - GET(routeContext -> routeContext.send("all users")); - - POST(routeContext -> routeContext.send("create a new user")); + @Test + public void testCustomGroup() { + Application application = new Application(){ - GROUP(new RouteGroup() { + @Override + protected void onInit() { + UserGroup userGroup = new UserGroup(); + addGroup(userGroup); + } - @Override - public void onInit() { + }; + application.init(); + List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users"); + assertEquals(1, matches.size()); + } - GET(routeContext -> { - routeContext.send("find user, id: " + routeContext.getParameter("id").toString()); - }); + private class UserGroup extends RouteGroup { - PUT(routeContext -> { - routeContext.send("modify user, id: " + routeContext.getParameter("id").toString()); - }); + public UserGroup() { + super("/users"); - DELETE(routeContext -> { - routeContext.send("delete user, id: " + routeContext.getParameter("id").toString()); - }); - } - }.withNamespace("{id}")); - } - }.withNamespace("/users")); + GET(routeContext -> routeContext.send("all users")); } } + } From c657b15a77cfb0156c89680cfa89498d8b2974bd Mon Sep 17 00:00:00 2001 From: ScienJus Date: Wed, 10 Feb 2016 18:38:03 +0800 Subject: [PATCH 8/8] add Router.addGroup , move tests in defaultRouterTest --- .../main/java/ro/pippo/core/Application.java | 8 +- .../ro/pippo/core/route/DefaultRouter.java | 12 ++ .../main/java/ro/pippo/core/route/Route.java | 10 +- .../java/ro/pippo/core/route/RouteGroup.java | 2 +- .../main/java/ro/pippo/core/route/Router.java | 30 ++-- .../java/ro/pippo/core/DefaultRouterTest.java | 93 ++++++++++ .../java/ro/pippo/core/RouteGroupTest.java | 169 ------------------ 7 files changed, 128 insertions(+), 196 deletions(-) delete mode 100644 pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java diff --git a/pippo-core/src/main/java/ro/pippo/core/Application.java b/pippo-core/src/main/java/ro/pippo/core/Application.java index 18b7b477f..bbcfd3565 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Application.java +++ b/pippo-core/src/main/java/ro/pippo/core/Application.java @@ -34,7 +34,6 @@ import ro.pippo.core.util.HttpCacheToolkit; import ro.pippo.core.util.MimeTypes; import ro.pippo.core.util.ServiceLocator; -import ro.pippo.core.util.StringUtils; import java.io.File; import java.util.ArrayList; @@ -270,11 +269,8 @@ public void addRoute(Route route) { getRouter().addRoute(route); } - public void addGroup(RouteGroup routeGroup) { - routeGroup.getRoutes().forEach(this::addRoute); - for (RouteGroup child : routeGroup.getChildren()) { - child.getRoutes().forEach(this::addRoute); - } + public void addRouteGroup(RouteGroup routeGroup) { + getRouter().addRouteGroup(routeGroup); } /** diff --git a/pippo-core/src/main/java/ro/pippo/core/route/DefaultRouter.java b/pippo-core/src/main/java/ro/pippo/core/route/DefaultRouter.java index ea7fb42be..998f9efe1 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/DefaultRouter.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/DefaultRouter.java @@ -192,6 +192,18 @@ public void removeRoute(Route route) { removeBinding(route); } + @Override + public void addRouteGroup(RouteGroup routeGroup) { + routeGroup.getRoutes().forEach(this::addRoute); + routeGroup.getChildren().forEach(this::addRouteGroup); + } + + @Override + public void removeRouteGroup(RouteGroup routeGroup) { + routeGroup.getRoutes().forEach(this::removeRoute); + routeGroup.getChildren().forEach(this::removeRouteGroup); + } + @Override public String uriFor(String relativeUri) { return prefixApplicationPath(relativeUri); diff --git a/pippo-core/src/main/java/ro/pippo/core/route/Route.java b/pippo-core/src/main/java/ro/pippo/core/route/Route.java index 5a9db78f1..6e4f78363 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/Route.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/Route.java @@ -119,8 +119,7 @@ public String getRequestMethod() { } public String getUriPattern() { -// return uriPattern; - return getCompletePath(); //should i modify this method or modify methods in DefaultRouter to use getCompletePath ? + return getFullUriPattern(); } public RouteHandler getRouteHandler() { @@ -128,17 +127,14 @@ public RouteHandler getRouteHandler() { } // path with group - public String getCompletePath() { + public String getFullUriPattern() { RouteGroup group = this.group; String path = this.uriPattern; while (group != null) { path = StringUtils.addStart(StringUtils.addStart(path, "/"), group.getUriPattern()); group = group.getParent(); } - if (StringUtils.isNullOrEmpty(path)) { - return path; - } - return path.endsWith("/") ? path.substring(0, path.length() - 1) : path; + return StringUtils.removeEnd(path, "/"); } public boolean isRunAsFinally() { diff --git a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java index f90b0da74..2da01a8eb 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/RouteGroup.java @@ -120,7 +120,7 @@ public RouteGroup addRoute(Route route) { return this; } - public RouteGroup addGroup(RouteGroup routeGroup) { + public RouteGroup addRouteGroup(RouteGroup routeGroup) { routeGroup.inGroup(this); return this; } diff --git a/pippo-core/src/main/java/ro/pippo/core/route/Router.java b/pippo-core/src/main/java/ro/pippo/core/route/Router.java index 5d98eafa7..1fea9fdfd 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/Router.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/Router.java @@ -33,26 +33,30 @@ public interface Router { * * @return the context path */ - public String getContextPath(); + String getContextPath(); /** * Sets the context path for url generation. * * @param contextPath */ - public void setContextPath(String contextPath); + void setContextPath(String contextPath); - public Set getIgnorePaths(); + Set getIgnorePaths(); - public void ignorePaths(String... paths); + void ignorePaths(String... paths); - public void addRoute(Route route); + void addRoute(Route route); - public void removeRoute(Route route); + void removeRoute(Route route); - public List findRoutes(String requestMethod, String requestUri); + void addRouteGroup(RouteGroup routeGroup); - public List getRoutes(); + void removeRouteGroup(RouteGroup routeGroup); + + List findRoutes(String requestMethod, String requestUri); + + List getRoutes(); /** * Get uri with context path. @@ -60,17 +64,17 @@ public interface Router { * @param relativeUri * @return */ - public String uriFor(String relativeUri); + String uriFor(String relativeUri); - public String uriFor(String nameOrUriPattern, Map parameters); + String uriFor(String nameOrUriPattern, Map parameters); - public String uriPatternFor(Class resourceHandlerClass); + String uriPatternFor(Class resourceHandlerClass); /** * Returns the base path for the Pippo application. */ - public String getApplicationPath(); + String getApplicationPath(); - public void setApplicationPath(String pippoPath); + void setApplicationPath(String pippoPath); } diff --git a/pippo-core/src/test/java/ro/pippo/core/DefaultRouterTest.java b/pippo-core/src/test/java/ro/pippo/core/DefaultRouterTest.java index 28950863e..a816d8929 100644 --- a/pippo-core/src/test/java/ro/pippo/core/DefaultRouterTest.java +++ b/pippo-core/src/test/java/ro/pippo/core/DefaultRouterTest.java @@ -22,6 +22,7 @@ import org.junit.rules.ExpectedException; import ro.pippo.core.route.DefaultRouter; import ro.pippo.core.route.Route; +import ro.pippo.core.route.RouteGroup; import ro.pippo.core.route.RouteMatch; import ro.pippo.core.route.WebjarsResourceHandler; @@ -632,4 +633,96 @@ public void testRequiredSuffixGroup() throws Exception { assertEquals(0, matches.size()); } + @Test + public void testAddGroup() { + RouteGroup group = new RouteGroup("/users"); + group.GET("{id}", routeContext -> routeContext.send("all posts")); + + router.addRouteGroup(group); + + List matches = router.findRoutes(HttpConstants.Method.GET, "/users/1"); + assertEquals(1, matches.size()); + } + + @Test + public void testAddRouteWithGroup() { + RouteGroup group = new RouteGroup("/users"); + Route route = group.GET("{id}", routeContext -> routeContext.send("all posts")); + + router.addRoute(route); + + List matches = router.findRoutes(HttpConstants.Method.GET, "/users/1"); + assertEquals(1, matches.size()); + } + + @Test + public void testGroupAddRoute() { + RouteGroup group = new RouteGroup("/users"); + Route route = new Route("GET", "{id}", routeContext -> {routeContext.send("all users");}); + group.addRoute(route); + + router.addRouteGroup(group); + + List matches = router.findRoutes(HttpConstants.Method.GET, "/users/1"); + assertEquals(1, matches.size()); + } + + @Test + public void testRouteInGroup() { + RouteGroup group = new RouteGroup("/users"); + Route route = new Route("GET", "{id}", routeContext -> {routeContext.send("all users");}); + route.inGroup(group); + + router.addRouteGroup(group); + + List matches = router.findRoutes(HttpConstants.Method.GET, "/users/1"); + assertEquals(1, matches.size()); + } + + @Test + public void testGroupAddGroup() { + RouteGroup group = new RouteGroup("/users"); + RouteGroup child = new RouteGroup("{id}"); + Route route = new Route("POST", "like", routeContext -> {routeContext.send("i like you");}); + group.addRouteGroup(child); + child.addRoute(route); + + router.addRouteGroup(group); + + List matches = router.findRoutes(HttpConstants.Method.POST, "/users/1/like"); + assertEquals(1, matches.size()); + } + + @Test + public void testGroupInGroup() { + RouteGroup group = new RouteGroup("/users"); + RouteGroup child = new RouteGroup("{id}"); + Route route = new Route("POST", "like", routeContext -> {routeContext.send("i like you");}); + child.inGroup(group); + route.inGroup(child); + + router.addRoute(route); + + List matches = router.findRoutes(HttpConstants.Method.POST, "/users/1/like"); + assertEquals(1, matches.size()); + } + + @Test + public void testCustomGroup() { + UserGroup userGroup = new UserGroup(); + router.addRouteGroup(userGroup); + + List matches = router.findRoutes(HttpConstants.Method.GET, "/users"); + assertEquals(1, matches.size()); + } + + private class UserGroup extends RouteGroup { + + public UserGroup() { + super("/users"); + + GET(routeContext -> routeContext.send("all users")); + } + } + } diff --git a/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java b/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java deleted file mode 100644 index 9836c0701..000000000 --- a/pippo-core/src/test/java/ro/pippo/core/RouteGroupTest.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (C) 2015 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package ro.pippo.core; - -import org.junit.Test; -import ro.pippo.core.route.Route; -import ro.pippo.core.route.RouteGroup; -import ro.pippo.core.route.RouteMatch; - -import java.util.List; - -import static org.junit.Assert.assertEquals; - -/** - * @author ScienJus - * @date 16/2/9. - */ -public class RouteGroupTest { - - @Test - public void testAddGroup() { - Application application = new Application(){ - - @Override - protected void onInit() { - RouteGroup group = new RouteGroup("/users"); - group.GET("{id}", routeContext -> routeContext.send("all posts")); - addGroup(group); - } - - }; - application.init(); - List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users/1"); - assertEquals(1, matches.size()); - } - - @Test - public void testAddRoute() { - Application application = new Application(){ - - @Override - protected void onInit() { - RouteGroup group = new RouteGroup("/users"); - Route route = group.GET("{id}", routeContext -> routeContext.send("all posts")); - addRoute(route); - } - - }; - application.init(); - List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users/1"); - assertEquals(1, matches.size()); - } - - @Test - public void testGroupAddRoute() { - Application application = new Application(){ - - @Override - protected void onInit() { - RouteGroup group = new RouteGroup("/users"); - Route route = new Route("GET", "{id}", routeContext -> {routeContext.send("all users");}); - group.addRoute(route); - addGroup(group); - } - - }; - application.init(); - List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users/1"); - assertEquals(1, matches.size()); - } - - @Test - public void testInGroup() { - Application application = new Application(){ - - @Override - protected void onInit() { - RouteGroup group = new RouteGroup("/users"); - Route route = new Route("GET", "{id}", routeContext -> {routeContext.send("all users");}); - route.inGroup(group); - addRoute(route); - } - - }; - application.init(); - List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users/1"); - assertEquals(1, matches.size()); - } - - @Test - public void testGroupAddGroup() { - Application application = new Application(){ - - @Override - protected void onInit() { - RouteGroup group = new RouteGroup("/users"); - RouteGroup child = new RouteGroup("{id}"); - Route route = new Route("POST", "like", routeContext -> {routeContext.send("i like you");}); - group.addGroup(child); - child.addRoute(route); - addGroup(group); - } - - }; - application.init(); - List matches = application.getRouter().findRoutes(HttpConstants.Method.POST, "/users/1/like"); - assertEquals(1, matches.size()); - } - - @Test - public void testGroupInGroup() { - Application application = new Application(){ - - @Override - protected void onInit() { - RouteGroup group = new RouteGroup("/users"); - RouteGroup child = new RouteGroup("{id}"); - Route route = new Route("POST", "like", routeContext -> {routeContext.send("i like you");}); - child.inGroup(group); - route.inGroup(child); - addRoute(route); - } - - }; - application.init(); - List matches = application.getRouter().findRoutes(HttpConstants.Method.POST, "/users/1/like"); - assertEquals(1, matches.size()); - } - - @Test - public void testCustomGroup() { - Application application = new Application(){ - - @Override - protected void onInit() { - UserGroup userGroup = new UserGroup(); - addGroup(userGroup); - } - - }; - application.init(); - List matches = application.getRouter().findRoutes(HttpConstants.Method.GET, "/users"); - assertEquals(1, matches.size()); - } - - private class UserGroup extends RouteGroup { - - public UserGroup() { - super("/users"); - - GET(routeContext -> routeContext.send("all users")); - } - } - -} -