decebals
11/13/2014 - 3:12 PM

pippo-controller.java

Application.java
=========================

public void GET(String urlPattern, Class<? extends Controller> controllerClass, String methodName) {
    // TODO verify that `action` exists
    addRoute(urlPattern, HttpConstants.Method.GET, new ControllerHandler(controllerClass, methodName));
}

Controller.java
=========================

public class Controller {

    private Request request;
    private Response response;
    private RouteHandlerChain chain;

    public Request getRequest() {
        return request;
    }

    public Response getResponse() {
        return response;
    }

    public RouteHandlerChain getChain() {
        return chain;
    }

    protected void init(Request request, Response response, RouteHandlerChain chain) {
        this.request = request;
        this.response = response;
        this.chain = chain;
    }

}

ControllerHandler.java
=========================

class ControllerHandler implements RouteHandler {

    private Class<? extends Controller> controllerClass;
    private String methodName;

    public ControllerHandler(Class<? extends Controller> controllerClass, String methodName) {
        this.controllerClass = controllerClass;
        this.methodName = methodName;
    }

    public Class<? extends Controller> getControllerClass() {
        return controllerClass;
    }

    public String getMethodName() {
        return methodName;
    }

    @Override
    public void handle(Request request, Response response, RouteHandlerChain chain) {
        System.out.println("ControllerHandler.handle");
        System.out.println("controllerClass = " + controllerClass);
        System.out.println("methodName = " + methodName);

        try {
            // invoke action (a method from controller)
            Method method = controllerClass.getMethod(methodName, new Class[]{});
            Controller instance = controllerClass.newInstance();
            instance.init(request, response, chain);
            method.invoke(instance, new Object[] {});
        } catch (Exception e) {
            throw new PippoRuntimeException(e);
        }
    }

}


>>> Demo

ContactsController.java
=========================

public class ContactsController extends Controller {

    private ContactService contactService;

    public ContactsController() {
        contactService = new InMemoryContactService();
    }

    public void index() {
        getResponse().getLocals().put("contacts", contactService.getContacts());
        getResponse().render("crud/contacts.ftl");
    }

}

ControllerDemo.java
=========================

public class ControllerDemo {

    public static void main(String[] args) {
        Pippo pippo = new Pippo();
        pippo.getServer().getSettings().staticFilesLocation("/public");
        pippo.getApplication().GET("/", ContactsController.class, "index");
        pippo.start();
    }

}