Skip to content

Commit

Permalink
Extract addRoute, GET, POST, ... methods in Routing interface
Browse files Browse the repository at this point in the history
  • Loading branch information
decebals committed Jun 21, 2016
1 parent 3fcf0ac commit cbe60af
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 131 deletions.
122 changes: 4 additions & 118 deletions pippo-core/src/main/java/ro/pippo/core/Application.java
Expand Up @@ -17,25 +17,19 @@

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ro.pippo.core.route.ClasspathResourceHandler;
import ro.pippo.core.route.DefaultRouter;
import ro.pippo.core.route.FileResourceHandler;
import ro.pippo.core.route.PublicResourceHandler;
import ro.pippo.core.route.ResourceHandler;
import ro.pippo.core.route.Route;
import ro.pippo.core.route.Routing;
import ro.pippo.core.route.RouteContext;
import ro.pippo.core.route.RouteDispatcher;
import ro.pippo.core.route.RouteGroup;
import ro.pippo.core.route.RouteHandler;
import ro.pippo.core.route.RoutePostDispatchListenerList;
import ro.pippo.core.route.RoutePreDispatchListenerList;
import ro.pippo.core.route.Router;
import ro.pippo.core.route.WebjarsResourceHandler;
import ro.pippo.core.util.HttpCacheToolkit;
import ro.pippo.core.util.MimeTypes;
import ro.pippo.core.util.ServiceLocator;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
Expand All @@ -48,7 +42,7 @@
*
* @author Decebal Suiu
*/
public class Application {
public class Application implements Routing {

private static final Logger log = LoggerFactory.getLogger(Application.class);

Expand Down Expand Up @@ -216,124 +210,16 @@ public void setRouter(Router router) {
this.router = router;
}

public Route GET(String uriPattern, RouteHandler routeHandler) {
if (routeHandler instanceof ResourceHandler) {
throw new PippoRuntimeException("Please use 'addResourceRoute()'");
}

Route route = Route.GET(uriPattern, routeHandler);
addRoute(route);

return route;
}

public Route POST(String uriPattern, RouteHandler routeHandler) {
Route route = Route.POST(uriPattern, routeHandler);
addRoute(route);

return route;
}

public Route DELETE(String uriPattern, RouteHandler routeHandler) {
Route route = Route.DELETE(uriPattern, routeHandler);
addRoute(route);

return route;
}

public Route HEAD(String uriPattern, RouteHandler routeHandler) {
Route route = Route.HEAD(uriPattern, routeHandler);
addRoute(route);

return route;
}

public Route PUT(String uriPattern, RouteHandler routeHandler) {
Route route = Route.PUT(uriPattern, routeHandler);
addRoute(route);

return route;
}

public Route PATCH(String uriPattern, RouteHandler routeHandler) {
Route route = Route.PATCH(uriPattern, routeHandler);
addRoute(route);

return route;
}

public Route ALL(String uriPattern, RouteHandler routeHandler) {
Route route = Route.ALL(uriPattern, routeHandler);
addRoute(route);

return route;
}

@Override
public void addRoute(Route route) {
getRouter().addRoute(route);
}

@Override
public void addRouteGroup(RouteGroup routeGroup) {
getRouter().addRouteGroup(routeGroup);
}

/**
* It's a shortcut for {@link #addPublicResourceRoute(String)} with parameter <code>"/public"</code>.
*/
public Route addPublicResourceRoute() {
return addPublicResourceRoute("/public");
}

/**
* Add a route that serves resources from the "public" directory within your classpath.
*/
public Route addPublicResourceRoute(String urlPath) {
return addResourceRoute(new PublicResourceHandler(urlPath));
}

/**
* Add a route that serves resources from a directory(file system).
*/
public Route addFileResourceRoute(String urlPath, File directory) {
return addResourceRoute(new FileResourceHandler(urlPath, directory));
}

public Route addFileResourceRoute(String urlPath, String directory) {
return addResourceRoute(new FileResourceHandler(urlPath, directory));
}

public Route addClasspathResourceRoute(String urlPath, Class<?> resourceClass) {
return addResourceRoute(new ClasspathResourceHandler(urlPath, resourceClass.getName().replace(".", "/")));
}

/**
* Add a route that serves resources from classpath.
*/
public Route addClasspathResourceRoute(String urlPath, String resourceBasePath) {
return addResourceRoute(new ClasspathResourceHandler(urlPath, resourceBasePath));
}

/**
* It's a shortcut for {@link #addWebjarsResourceRoute(String)} with parameter <code>"/webjars"</code>.
*/
public Route addWebjarsResourceRoute() {
return addWebjarsResourceRoute("/webjars");
}

/**
* Add a route that serves webjars (http://www.webjars.org/) resources.
*/
public Route addWebjarsResourceRoute(String urlPath) {
return addResourceRoute(new WebjarsResourceHandler(urlPath));
}

public Route addResourceRoute(ResourceHandler resourceHandler) {
Route route = Route.GET(resourceHandler.getUriPattern(), resourceHandler);
addRoute(route);

return route;
}

public ErrorHandler getErrorHandler() {
if (errorHandler == null) {
errorHandler = new DefaultErrorHandler(this);
Expand Down
29 changes: 16 additions & 13 deletions pippo-core/src/main/java/ro/pippo/core/Pippo.java
Expand Up @@ -15,17 +15,17 @@
*/
package ro.pippo.core;

import ro.pippo.core.route.RouteContext;
import ro.pippo.core.route.RouteHandler;
import ro.pippo.core.util.ServiceLocator;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ro.pippo.core.route.Route;
import ro.pippo.core.route.Routing;
import ro.pippo.core.route.RouteGroup;
import ro.pippo.core.util.ServiceLocator;

/**
* @author Decebal Suiu
*/
public class Pippo {
public class Pippo implements Routing {

private static final Logger log = LoggerFactory.getLogger(Pippo.class);

Expand Down Expand Up @@ -83,6 +83,16 @@ public void stop() {
}
}

@Override
public void addRoute(Route route) {
getApplication().addRoute(route);
}

@Override
public void addRouteGroup(RouteGroup routeGroup) {
getApplication().addRouteGroup(routeGroup);
}

/**
* Create a pippo instance, add a route on "/" that responds with a message.
*
Expand All @@ -91,14 +101,7 @@ public void stop() {
*/
public static Pippo send(final String text) {
Pippo pippo = new Pippo();
pippo.getApplication().GET("/", new RouteHandler() {

@Override
public void handle(RouteContext routeContext) {
routeContext.send(text);
}

});
pippo.GET("/", (routeContext) -> routeContext.send(text));
pippo.start();

return pippo;
Expand Down
141 changes: 141 additions & 0 deletions pippo-core/src/main/java/ro/pippo/core/route/Routing.java
@@ -0,0 +1,141 @@
/*
* Copyright (C) 2016 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;

import java.io.File;

/**
* @author Decebal Suiu
*/
public interface Routing {

void addRoute(Route route);

void addRouteGroup(RouteGroup routeGroup);

default Route GET(String uriPattern, RouteHandler routeHandler) {
if (routeHandler instanceof ResourceHandler) {
throw new PippoRuntimeException("Please use 'addResourceRoute()'");
}

Route route = Route.GET(uriPattern, routeHandler);
addRoute(route);

return route;
}

default Route POST(String uriPattern, RouteHandler routeHandler) {
Route route = Route.POST(uriPattern, routeHandler);
addRoute(route);

return route;
}

default Route DELETE(String uriPattern, RouteHandler routeHandler) {
Route route = Route.DELETE(uriPattern, routeHandler);
addRoute(route);

return route;
}

default Route HEAD(String uriPattern, RouteHandler routeHandler) {
Route route = Route.HEAD(uriPattern, routeHandler);
addRoute(route);

return route;
}

default Route PUT(String uriPattern, RouteHandler routeHandler) {
Route route = Route.PUT(uriPattern, routeHandler);
addRoute(route);

return route;
}

default Route PATCH(String uriPattern, RouteHandler routeHandler) {
Route route = Route.PATCH(uriPattern, routeHandler);
addRoute(route);

return route;
}

default Route ALL(String uriPattern, RouteHandler routeHandler) {
Route route = Route.ALL(uriPattern, routeHandler);
addRoute(route);

return route;
}

/**
* It's a shortcut for {@link #addPublicResourceRoute(String)} with parameter <code>"/public"</code>.
*/
default Route addPublicResourceRoute() {
return addPublicResourceRoute("/public");
}

/**
* Add a route that serves resources from the "public" directory within your classpath.
*/
default Route addPublicResourceRoute(String urlPath) {
return addResourceRoute(new PublicResourceHandler(urlPath));
}

/**
* Add a route that serves resources from a directory(file system).
*/
default Route addFileResourceRoute(String urlPath, File directory) {
return addResourceRoute(new FileResourceHandler(urlPath, directory));
}

default Route addFileResourceRoute(String urlPath, String directory) {
return addResourceRoute(new FileResourceHandler(urlPath, directory));
}

default Route addClasspathResourceRoute(String urlPath, Class<?> resourceClass) {
return addResourceRoute(new ClasspathResourceHandler(urlPath, resourceClass.getName().replace(".", "/")));
}

/**
* Add a route that serves resources from classpath.
*/
default Route addClasspathResourceRoute(String urlPath, String resourceBasePath) {
return addResourceRoute(new ClasspathResourceHandler(urlPath, resourceBasePath));
}

/**
* It's a shortcut for {@link #addWebjarsResourceRoute(String)} with parameter <code>"/webjars"</code>.
*/
default Route addWebjarsResourceRoute() {
return addWebjarsResourceRoute("/webjars");
}

/**
* Add a route that serves webjars (http://www.webjars.org/) resources.
*/
default Route addWebjarsResourceRoute(String urlPath) {
return addResourceRoute(new WebjarsResourceHandler(urlPath));
}

default Route addResourceRoute(ResourceHandler resourceHandler) {
Route route = Route.GET(resourceHandler.getUriPattern(), resourceHandler);
addRoute(route);

return route;
}

}

0 comments on commit cbe60af

Please sign in to comment.