package com.intrbiz.bergamot.ui.router;
import java.io.IOException;
import org.apache.log4j.Logger;
import com.intrbiz.balsa.engine.route.Router;
import com.intrbiz.balsa.error.BalsaConversionError;
import com.intrbiz.balsa.error.BalsaValidationError;
import com.intrbiz.balsa.error.http.BalsaNotFound;
import com.intrbiz.balsa.http.HTTP.HTTPStatus;
import com.intrbiz.bergamot.ui.BergamotApp;
import com.intrbiz.metadata.Any;
import com.intrbiz.metadata.Catch;
import com.intrbiz.metadata.Order;
import com.intrbiz.metadata.Prefix;
import com.intrbiz.metadata.Status;
import com.intrbiz.metadata.Template;
@Prefix("/")
@Template("layout/single")
public class ErrorRouter extends Router<BergamotApp>
{
private Logger logger = Logger.getLogger(ErrorRouter.class);
@Any("/test/error")
@Order(Order.LAST)
public void errorTest() throws Exception
{
throw new RuntimeException("Testing 1 2 3 ...");
}
@Catch(BalsaNotFound.class)
@Any("**")
@Order(Order.LAST)
public void notFoundError() throws IOException
{
logger.warn("Not found: " + balsa().request().getPathInfo());
redirect("/");
}
@Catch({ BalsaValidationError.class, BalsaConversionError.class })
@Any("**")
@Order(Order.LAST)
@Status(HTTPStatus.BadRequest)
public void badRequest()
{
logger.error("Bad request: " + balsa().getValidationErrors());
encode("error/400");
}
@Catch()
@Any("**")
@Order(Order.LAST)
@Status(HTTPStatus.InternalServerError)
public void unhandledError()
{
logger.error("Unhandle error handling request", balsa().getException());
encode("error/500");
}
}