From 99bf85794bb06001c973da8b12f6c5cd4be27ed6 Mon Sep 17 00:00:00 2001 From: "Christian P. MOMON" Date: Tue, 6 Dec 2016 14:36:45 +0100 Subject: [PATCH] Renamed catcher to hook. Improved hooking. --- .../kiss4web/catchers/FolderCatcher.java | 108 ---------------- .../kiss4web/catchers/XHTMLCatcher.java | 119 ------------------ .../BlankHook.java} | 23 +++- src/fr/devinsy/kiss4web/hooks/FolderHook.java | 89 +++++++++++++ .../Catcher.java => hooks/Hook.java} | 27 +++- .../Catchers.java => hooks/HookCore.java} | 24 +++- .../devinsy/kiss4web/hooks/HookRegister.java | 98 +++++++++++++++ .../LongURLHook.java} | 28 +++-- .../{catchers => hooks}/LongURLRewriter.java | 2 +- .../RootCatcher.java => hooks/RootHook.java} | 26 ++-- .../ShortURLHook.java} | 30 +++-- .../{catchers => hooks}/ShortURLRewriter.java | 2 +- .../kiss4web/hooks/StatisticsHook.java | 76 +++++++++++ .../WebContentHook.java} | 22 +++- .../WebInfHook.java} | 27 ++-- src/fr/devinsy/kiss4web/hooks/XHTMLHook.java | 89 +++++++++++++ .../kiss4web/catchers/BlankCatcherTest.java | 10 +- .../kiss4web/catchers/RootCatcherTest.java | 12 +- .../mocks/HttpServletRequestMock.java | 97 +++++++++++++- 19 files changed, 611 insertions(+), 298 deletions(-) delete mode 100644 src/fr/devinsy/kiss4web/catchers/FolderCatcher.java delete mode 100644 src/fr/devinsy/kiss4web/catchers/XHTMLCatcher.java rename src/fr/devinsy/kiss4web/{catchers/BlankCatcher.java => hooks/BlankHook.java} (72%) create mode 100644 src/fr/devinsy/kiss4web/hooks/FolderHook.java rename src/fr/devinsy/kiss4web/{catchers/Catcher.java => hooks/Hook.java} (55%) rename src/fr/devinsy/kiss4web/{catchers/Catchers.java => hooks/HookCore.java} (67%) create mode 100644 src/fr/devinsy/kiss4web/hooks/HookRegister.java rename src/fr/devinsy/kiss4web/{catchers/LongURLCatcher.java => hooks/LongURLHook.java} (70%) rename src/fr/devinsy/kiss4web/{catchers => hooks}/LongURLRewriter.java (95%) rename src/fr/devinsy/kiss4web/{catchers/RootCatcher.java => hooks/RootHook.java} (69%) rename src/fr/devinsy/kiss4web/{catchers/ShortURLCatcher.java => hooks/ShortURLHook.java} (70%) rename src/fr/devinsy/kiss4web/{catchers => hooks}/ShortURLRewriter.java (96%) create mode 100644 src/fr/devinsy/kiss4web/hooks/StatisticsHook.java rename src/fr/devinsy/kiss4web/{catchers/WebContentCatcher.java => hooks/WebContentHook.java} (75%) rename src/fr/devinsy/kiss4web/{catchers/WebInfCatcher.java => hooks/WebInfHook.java} (73%) create mode 100644 src/fr/devinsy/kiss4web/hooks/XHTMLHook.java diff --git a/src/fr/devinsy/kiss4web/catchers/FolderCatcher.java b/src/fr/devinsy/kiss4web/catchers/FolderCatcher.java deleted file mode 100644 index 3705889..0000000 --- a/src/fr/devinsy/kiss4web/catchers/FolderCatcher.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2016 Christian Pierre MOMON - * - * This file is part of Kiss4web. - * - * Kiss4web is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Kiss4web is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Kiss4web. If not, see - */ -package fr.devinsy.kiss4web.catchers; - -import java.io.IOException; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import fr.devinsy.kiss4web.KissDispatcherUtils; -import fr.devinsy.util.strings.StringList; - -/** - * - */ -public class FolderCatcher -{ - private static Logger logger = LoggerFactory.getLogger(FolderCatcher.class); - - /** - * @throws IOException - * @throws ServletException - * - */ - public static void doCatch(final ServletConfig servletConfig, final HttpServletRequest request, final HttpServletResponse response, final String webClassesRootPackage) throws IOException, - ServletException - { - logger.debug("Doing catch."); - - String urlPath = request.getPathInfo(); - - String className; - String[] tokens = urlPath.split("/"); - if (tokens.length == 1) - { - className = "Index_xhtml"; - } - else - { - StringList buffer = new StringList(); - - // Note: as pathInfo starts always with a '/', the first - // good token index is 1. - for (int tokenCounter = 1; tokenCounter <= tokens.length - 1; tokenCounter++) - { - buffer.append(tokens[tokenCounter]); - buffer.append('.'); - } - - // String lastToken = tokens[tokens.length - 1]; - // buffer.append(StringUtils.capitalize(lastToken)).append("_xhtml"); - buffer.append("Index_xhtml"); - - className = buffer.toString(); - } - - className = KissDispatcherUtils.concatenatePackage(webClassesRootPackage, className); - logger.info("className=[" + className + "]"); - - KissDispatcherUtils.dispatchToServlet(servletConfig, request, response, className); - } - - /** - * - * @param urlPath - * @return - */ - public static boolean matches(final HttpServletRequest request) - { - boolean result; - - String urlPath = request.getPathInfo(); - - if ((urlPath != null) && (urlPath.endsWith("/"))) - { - result = true; - } - else - { - result = false; - } - - // - return result; - } - -} diff --git a/src/fr/devinsy/kiss4web/catchers/XHTMLCatcher.java b/src/fr/devinsy/kiss4web/catchers/XHTMLCatcher.java deleted file mode 100644 index 4222a40..0000000 --- a/src/fr/devinsy/kiss4web/catchers/XHTMLCatcher.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2016 Christian Pierre MOMON - * - * This file is part of Kiss4web. - * - * Kiss4web is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Kiss4web is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Kiss4web. If not, see - */ -package fr.devinsy.kiss4web.catchers; - -import java.io.IOException; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import fr.devinsy.kiss4web.KissDispatcherUtils; -import fr.devinsy.util.strings.StringList; - -/** - * - */ -public class XHTMLCatcher -{ - private static Logger logger = LoggerFactory.getLogger(XHTMLCatcher.class); - - /** - * @throws IOException - * @throws ServletException - */ - public static void doCatch(final ServletConfig servletConfig, final HttpServletRequest request, final HttpServletResponse response, final String webClassesRootPackage) throws IOException, - ServletException - { - logger.debug("Doing catch."); - - String urlPath = request.getPathInfo(); - - String className = translateToClassName(urlPath); - className = KissDispatcherUtils.concatenatePackage(webClassesRootPackage, className); - logger.info("className=[" + className + "]"); - - KissDispatcherUtils.dispatchToServlet(servletConfig, request, response, className); - } - - /** - * - * @param urlPath - * @return - */ - public static boolean matches(final HttpServletRequest request) - { - boolean result; - - String urlPath = request.getPathInfo(); - - if ((urlPath != null) && (urlPath.endsWith(".xhtml"))) - { - result = true; - } - else - { - result = false; - } - - // - return result; - } - - /** - * - * @param urlPath - * @return - */ - public static String translateToClassName(final String urlPath) - { - String result; - - String[] tokens = urlPath.split("/"); - if (tokens.length == 1) - { - result = "Index_xhtml"; - } - else - { - StringList buffer = new StringList(); - - // Note: as pathInfo starts always with a '/', the first - // good token index is 1. - for (int tokenCounter = 1; tokenCounter < tokens.length - 1; tokenCounter++) - { - buffer.append(tokens[tokenCounter]); - buffer.append('.'); - } - - String lastToken = tokens[tokens.length - 1]; - buffer.append(StringUtils.capitalize(lastToken).replace('.', '_')); - - result = buffer.toString(); - } - - // - return result; - } -} diff --git a/src/fr/devinsy/kiss4web/catchers/BlankCatcher.java b/src/fr/devinsy/kiss4web/hooks/BlankHook.java similarity index 72% rename from src/fr/devinsy/kiss4web/catchers/BlankCatcher.java rename to src/fr/devinsy/kiss4web/hooks/BlankHook.java index d88d628..9ddd20a 100644 --- a/src/fr/devinsy/kiss4web/catchers/BlankCatcher.java +++ b/src/fr/devinsy/kiss4web/hooks/BlankHook.java @@ -16,11 +16,13 @@ * You should have received a copy of the GNU Lesser General Public License * along with Kiss4web. If not, see */ -package fr.devinsy.kiss4web.catchers; +package fr.devinsy.kiss4web.hooks; import java.io.IOException; import java.io.PrintWriter; +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -30,15 +32,25 @@ import org.slf4j.LoggerFactory; /** * */ -public class BlankCatcher +public class BlankHook extends HookCore { - private static Logger logger = LoggerFactory.getLogger(BlankCatcher.class); + private static Logger logger = LoggerFactory.getLogger(BlankHook.class); + + /** + * + */ + public BlankHook() + { + super(); + } /** * @throws IOException * */ - public static void doCatch(final HttpServletResponse response) throws IOException + @Override + public void process(final ServletConfig servletConfig, final ServletContext servletContext, final HttpServletRequest request, + final HttpServletResponse response) throws IOException { logger.debug("Doing catch."); @@ -57,7 +69,8 @@ public class BlankCatcher * @param urlPath * @return */ - public static boolean matches(final HttpServletRequest request) + @Override + public boolean matches(final ServletContext servletContext, final HttpServletRequest request) { boolean result; diff --git a/src/fr/devinsy/kiss4web/hooks/FolderHook.java b/src/fr/devinsy/kiss4web/hooks/FolderHook.java new file mode 100644 index 0000000..9d9fb53 --- /dev/null +++ b/src/fr/devinsy/kiss4web/hooks/FolderHook.java @@ -0,0 +1,89 @@ +/** + * Copyright (C) 2006-2010, 2013-2016 Christian Pierre MOMON + * + * This file is part of Kiss4web. + * + * Kiss4web is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Kiss4web is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Kiss4web. If not, see + */ +package fr.devinsy.kiss4web.hooks; + +import java.io.IOException; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.devinsy.kiss4web.KissDispatcherUtils; + +/** + * + */ +public class FolderHook extends HookCore +{ + private static Logger logger = LoggerFactory.getLogger(FolderHook.class); + + /** + * + */ + public FolderHook() + { + super(); + } + + /** + * @throws IOException + * @throws ServletException + * + */ + @Override + public void process(final ServletConfig servletConfig, final ServletContext servletContext, final HttpServletRequest request, + final HttpServletResponse response) throws IOException, ServletException + { + logger.debug("Doing catch."); + + String urlPath = request.getPathInfo(); + KissDispatcherUtils.dispatchToServlet(servletConfig, request, response, urlPath); + } + + /** + * + * @param urlPath + * @return + */ + @Override + public boolean matches(final ServletContext servletContext, final HttpServletRequest request) + { + boolean result; + + String urlPath = request.getPathInfo(); + + if ((urlPath != null) && (urlPath.endsWith("/"))) + { + result = true; + } + else + { + result = false; + } + + // + return result; + } + +} diff --git a/src/fr/devinsy/kiss4web/catchers/Catcher.java b/src/fr/devinsy/kiss4web/hooks/Hook.java similarity index 55% rename from src/fr/devinsy/kiss4web/catchers/Catcher.java rename to src/fr/devinsy/kiss4web/hooks/Hook.java index ff590a3..6cce1a4 100644 --- a/src/fr/devinsy/kiss4web/catchers/Catcher.java +++ b/src/fr/devinsy/kiss4web/hooks/Hook.java @@ -16,22 +16,41 @@ * You should have received a copy of the GNU Lesser General Public License * along with Kiss4web. If not, see */ -package fr.devinsy.kiss4web.catchers; +package fr.devinsy.kiss4web.hooks; +import java.io.IOException; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * */ -public interface Catcher +public interface Hook { - void dispatch(final HttpServletRequest request, final HttpServletResponse response) throws Exception; + /** + * + * @param request + * @param response + * @throws Exception + */ + void process(final ServletConfig servletConfig, final ServletContext servletContext, final HttpServletRequest request, + final HttpServletResponse response) throws IOException, ServletException; /** * * @param source * @return */ - boolean matches(final String urlPath); + boolean matches(final ServletContext servletContext, final HttpServletRequest request); + + /** + * + * + * @return true if it is a final hook, false otherwise. + */ + boolean isTerminal(); } diff --git a/src/fr/devinsy/kiss4web/catchers/Catchers.java b/src/fr/devinsy/kiss4web/hooks/HookCore.java similarity index 67% rename from src/fr/devinsy/kiss4web/catchers/Catchers.java rename to src/fr/devinsy/kiss4web/hooks/HookCore.java index 1cfaac3..f8e5885 100644 --- a/src/fr/devinsy/kiss4web/catchers/Catchers.java +++ b/src/fr/devinsy/kiss4web/hooks/HookCore.java @@ -16,23 +16,35 @@ * You should have received a copy of the GNU Lesser General Public License * along with Kiss4web. If not, see */ -package fr.devinsy.kiss4web.catchers; - -import java.util.ArrayList; +package fr.devinsy.kiss4web.hooks; /** * */ -public class Catchers extends ArrayList +public abstract class HookCore implements Hook { - private static final long serialVersionUID = -5400120588573116300L; + private boolean terminal; + + public void setTerminal(boolean terminal) + { + this.terminal = terminal; + } /** * */ - public Catchers() + public HookCore() { super(); + + this.terminal = true; } + /** + * + */ + public boolean isTerminal() + { + return this.terminal; + } } diff --git a/src/fr/devinsy/kiss4web/hooks/HookRegister.java b/src/fr/devinsy/kiss4web/hooks/HookRegister.java new file mode 100644 index 0000000..fa444c6 --- /dev/null +++ b/src/fr/devinsy/kiss4web/hooks/HookRegister.java @@ -0,0 +1,98 @@ +/** + * Copyright (C) 2006-2010, 2013-2016 Christian Pierre MOMON + * + * This file is part of Kiss4web. + * + * Kiss4web is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Kiss4web is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Kiss4web. If not, see + */ +package fr.devinsy.kiss4web.hooks; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; + +/** + * + */ +public class HookRegister +{ + List hooks; + + /** + * + */ + public HookRegister() + { + super(); + + this.hooks = new ArrayList(); + } + + /** + * + * @return + */ + public List hooks() + { + return hooks; + } + + /** + * + * @param hook + */ + public void register(Hook hook) + { + hooks.add(hook); + } + + /** + * + * @param servletContext + * @param request + * @return + */ + public Hook getMatching(final ServletContext servletContext, final HttpServletRequest request) + { + Hook result; + + boolean ended = false; + Iterator iterator = this.hooks.iterator(); + result = null; + while (!ended) + { + if (iterator.hasNext()) + { + Hook currentHook = iterator.next(); + + if (currentHook.matches(servletContext, request)) + { + ended = true; + result = currentHook; + } + } + else + { + ended = true; + result = null; + } + } + + // + return result; + } +} diff --git a/src/fr/devinsy/kiss4web/catchers/LongURLCatcher.java b/src/fr/devinsy/kiss4web/hooks/LongURLHook.java similarity index 70% rename from src/fr/devinsy/kiss4web/catchers/LongURLCatcher.java rename to src/fr/devinsy/kiss4web/hooks/LongURLHook.java index 012700b..98766d1 100644 --- a/src/fr/devinsy/kiss4web/catchers/LongURLCatcher.java +++ b/src/fr/devinsy/kiss4web/hooks/LongURLHook.java @@ -16,11 +16,12 @@ * You should have received a copy of the GNU Lesser General Public License * along with Kiss4web. If not, see */ -package fr.devinsy.kiss4web.catchers; +package fr.devinsy.kiss4web.hooks; import java.io.IOException; import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -33,28 +34,34 @@ import fr.devinsy.kiss4web.KissDispatcherUtils; /** * */ -public class LongURLCatcher +public class LongURLHook extends HookCore { - private static Logger logger = LoggerFactory.getLogger(LongURLCatcher.class); + private static Logger logger = LoggerFactory.getLogger(LongURLHook.class); + + /** + * + */ + public LongURLHook() + { + super(); + } /** * @throws IOException * @throws ServletException * */ - public static void doCatch(final ServletConfig servletConfig, final HttpServletRequest request, final HttpServletResponse response, final String webClassesRootPackage) throws IOException, - ServletException + @Override + public void process(final ServletConfig servletConfig, final ServletContext servletContext, final HttpServletRequest request, + final HttpServletResponse response) throws IOException, ServletException { logger.debug("Doing catch."); String urlPath = request.getPathInfo(); String rewritedURLPath = LongURLRewriter.unrewrite(urlPath); - String className = XHTMLCatcher.translateToClassName(rewritedURLPath); - className = KissDispatcherUtils.concatenatePackage(webClassesRootPackage, className); - logger.info("className=[" + className + "]"); - KissDispatcherUtils.dispatchToServlet(servletConfig, request, response, className); + KissDispatcherUtils.dispatchToServlet(servletConfig, request, response, rewritedURLPath); } /** @@ -62,7 +69,8 @@ public class LongURLCatcher * @param urlPath * @return */ - public static boolean matches(final HttpServletRequest request) + @Override + public boolean matches(final ServletContext servletContext, final HttpServletRequest request) { boolean result; diff --git a/src/fr/devinsy/kiss4web/catchers/LongURLRewriter.java b/src/fr/devinsy/kiss4web/hooks/LongURLRewriter.java similarity index 95% rename from src/fr/devinsy/kiss4web/catchers/LongURLRewriter.java rename to src/fr/devinsy/kiss4web/hooks/LongURLRewriter.java index c0c0c23..d7780af 100644 --- a/src/fr/devinsy/kiss4web/catchers/LongURLRewriter.java +++ b/src/fr/devinsy/kiss4web/hooks/LongURLRewriter.java @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with Kiss4web. If not, see */ -package fr.devinsy.kiss4web.catchers; +package fr.devinsy.kiss4web.hooks; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/fr/devinsy/kiss4web/catchers/RootCatcher.java b/src/fr/devinsy/kiss4web/hooks/RootHook.java similarity index 69% rename from src/fr/devinsy/kiss4web/catchers/RootCatcher.java rename to src/fr/devinsy/kiss4web/hooks/RootHook.java index 87f3201..23d9870 100644 --- a/src/fr/devinsy/kiss4web/catchers/RootCatcher.java +++ b/src/fr/devinsy/kiss4web/hooks/RootHook.java @@ -16,11 +16,12 @@ * You should have received a copy of the GNU Lesser General Public License * along with Kiss4web. If not, see */ -package fr.devinsy.kiss4web.catchers; +package fr.devinsy.kiss4web.hooks; import java.io.IOException; import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -33,23 +34,31 @@ import fr.devinsy.kiss4web.KissDispatcherUtils; /** * */ -public class RootCatcher +public class RootHook extends HookCore { - private static Logger logger = LoggerFactory.getLogger(RootCatcher.class); + private static Logger logger = LoggerFactory.getLogger(RootHook.class); + + /** + * + */ + public RootHook() + { + super(); + } /** * @throws IOException * @throws ServletException * */ - public static void doCatch(final ServletConfig servletConfig, final HttpServletRequest request, final HttpServletResponse response, final String webClassesRootPackage) throws IOException, - ServletException + @Override + public void process(final ServletConfig servletConfig, final ServletContext servletContext, final HttpServletRequest request, + final HttpServletResponse response) throws IOException, ServletException { logger.debug("Doing catch."); - String className = KissDispatcherUtils.concatenatePackage(webClassesRootPackage, "Index_xhtml"); + String className = "index.xhtml"; - logger.info("classPathname=[" + className + "]"); KissDispatcherUtils.dispatchToServlet(servletConfig, request, response, className); } @@ -58,7 +67,8 @@ public class RootCatcher * @param urlPath * @return */ - public static boolean matches(final HttpServletRequest request) + @Override + public boolean matches(final ServletContext servletContext, final HttpServletRequest request) { boolean result; diff --git a/src/fr/devinsy/kiss4web/catchers/ShortURLCatcher.java b/src/fr/devinsy/kiss4web/hooks/ShortURLHook.java similarity index 70% rename from src/fr/devinsy/kiss4web/catchers/ShortURLCatcher.java rename to src/fr/devinsy/kiss4web/hooks/ShortURLHook.java index 4f7c3f3..fb5df13 100644 --- a/src/fr/devinsy/kiss4web/catchers/ShortURLCatcher.java +++ b/src/fr/devinsy/kiss4web/hooks/ShortURLHook.java @@ -16,11 +16,12 @@ * You should have received a copy of the GNU Lesser General Public License * along with Kiss4web. If not, see */ -package fr.devinsy.kiss4web.catchers; +package fr.devinsy.kiss4web.hooks; import java.io.IOException; import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -33,17 +34,26 @@ import fr.devinsy.kiss4web.KissDispatcherUtils; /** * */ -public class ShortURLCatcher +public class ShortURLHook extends HookCore { - private static Logger logger = LoggerFactory.getLogger(ShortURLCatcher.class); + private static Logger logger = LoggerFactory.getLogger(ShortURLHook.class); + + /** + * + */ + public ShortURLHook() + { + super(); + } /** * @throws IOException * @throws ServletException * */ - public static void doCatch(final ServletConfig servletConfig, final HttpServletRequest request, final HttpServletResponse response, final String webClassesRootPackage) throws IOException, - ServletException + @Override + public void process(final ServletConfig servletConfig, final ServletContext servletContext, final HttpServletRequest request, + final HttpServletResponse response) throws IOException, ServletException { logger.debug("Doing catch."); @@ -51,12 +61,7 @@ public class ShortURLCatcher String rewritedURLPath = ShortURLRewriter.unrewrite(urlPath); - String className = XHTMLCatcher.translateToClassName(rewritedURLPath); - className = KissDispatcherUtils.concatenatePackage(webClassesRootPackage, className); - - logger.info("className=[" + className + "]"); - - KissDispatcherUtils.dispatchToServlet(servletConfig, request, response, className); + KissDispatcherUtils.dispatchToServlet(servletConfig, request, response, rewritedURLPath); } /** @@ -64,7 +69,8 @@ public class ShortURLCatcher * @param urlPath * @return */ - public static boolean matches(final HttpServletRequest request) + @Override + public boolean matches(final ServletContext servletContext, final HttpServletRequest request) { boolean result; diff --git a/src/fr/devinsy/kiss4web/catchers/ShortURLRewriter.java b/src/fr/devinsy/kiss4web/hooks/ShortURLRewriter.java similarity index 96% rename from src/fr/devinsy/kiss4web/catchers/ShortURLRewriter.java rename to src/fr/devinsy/kiss4web/hooks/ShortURLRewriter.java index 770242d..79af076 100644 --- a/src/fr/devinsy/kiss4web/catchers/ShortURLRewriter.java +++ b/src/fr/devinsy/kiss4web/hooks/ShortURLRewriter.java @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with Kiss4web. If not, see */ -package fr.devinsy.kiss4web.catchers; +package fr.devinsy.kiss4web.hooks; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/fr/devinsy/kiss4web/hooks/StatisticsHook.java b/src/fr/devinsy/kiss4web/hooks/StatisticsHook.java new file mode 100644 index 0000000..a51b8e4 --- /dev/null +++ b/src/fr/devinsy/kiss4web/hooks/StatisticsHook.java @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2006-2010, 2013-2016 Christian Pierre MOMON + * + * This file is part of Kiss4web. + * + * Kiss4web is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Kiss4web is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Kiss4web. If not, see + */ +package fr.devinsy.kiss4web.hooks; + +import java.io.IOException; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + */ +public class StatisticsHook extends HookCore +{ + private static Logger logger = LoggerFactory.getLogger(StatisticsHook.class); + + /** + * + */ + public StatisticsHook() + { + super(); + + setTerminal(false); + } + + /** + * @throws IOException + * + */ + @Override + public void process(final ServletConfig servletConfig, final ServletContext servletContext, final HttpServletRequest request, + final HttpServletResponse response) throws IOException + { + logger.debug("Doing catch."); + + // TODO store statistics. + } + + /** + * + * @param urlPath + * @return + */ + @Override + public boolean matches(final ServletContext servletContext, final HttpServletRequest request) + { + boolean result; + + result = true; + + // + return result; + } +} diff --git a/src/fr/devinsy/kiss4web/catchers/WebContentCatcher.java b/src/fr/devinsy/kiss4web/hooks/WebContentHook.java similarity index 75% rename from src/fr/devinsy/kiss4web/catchers/WebContentCatcher.java rename to src/fr/devinsy/kiss4web/hooks/WebContentHook.java index 3d63230..ae31e83 100644 --- a/src/fr/devinsy/kiss4web/catchers/WebContentCatcher.java +++ b/src/fr/devinsy/kiss4web/hooks/WebContentHook.java @@ -16,11 +16,12 @@ * You should have received a copy of the GNU Lesser General Public License * along with Kiss4web. If not, see */ -package fr.devinsy.kiss4web.catchers; +package fr.devinsy.kiss4web.hooks; import java.io.File; import java.io.IOException; +import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -34,16 +35,26 @@ import fr.devinsy.kiss4web.KissDispatcherUtils; /** * */ -public class WebContentCatcher +public class WebContentHook extends HookCore { - private static Logger logger = LoggerFactory.getLogger(WebContentCatcher.class); + private static Logger logger = LoggerFactory.getLogger(WebContentHook.class); + + /** + * + */ + public WebContentHook() + { + super(); + } /** * @throws IOException * @throws ServletException * */ - public static void doCatch(final ServletContext servletContext, final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException + @Override + public void process(final ServletConfig servletConfig, final ServletContext servletContext, final HttpServletRequest request, + final HttpServletResponse response) throws IOException, ServletException { logger.debug("Doing catch."); @@ -61,7 +72,8 @@ public class WebContentCatcher * @param urlPath * @return */ - public static boolean matches(final ServletContext servletContext, final HttpServletRequest request) + @Override + public boolean matches(final ServletContext servletContext, final HttpServletRequest request) { boolean result; diff --git a/src/fr/devinsy/kiss4web/catchers/WebInfCatcher.java b/src/fr/devinsy/kiss4web/hooks/WebInfHook.java similarity index 73% rename from src/fr/devinsy/kiss4web/catchers/WebInfCatcher.java rename to src/fr/devinsy/kiss4web/hooks/WebInfHook.java index 2a397f1..40b0bc7 100644 --- a/src/fr/devinsy/kiss4web/catchers/WebInfCatcher.java +++ b/src/fr/devinsy/kiss4web/hooks/WebInfHook.java @@ -16,11 +16,12 @@ * You should have received a copy of the GNU Lesser General Public License * along with Kiss4web. If not, see */ -package fr.devinsy.kiss4web.catchers; +package fr.devinsy.kiss4web.hooks; import java.io.File; import java.io.IOException; +import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -34,21 +35,30 @@ import fr.devinsy.kiss4web.KissDispatcherUtils; /** * */ -public class WebInfCatcher +public class WebInfHook extends HookCore { - private static Logger logger = LoggerFactory.getLogger(WebInfCatcher.class); + private static Logger logger = LoggerFactory.getLogger(WebInfHook.class); + + /** + * + */ + public WebInfHook() + { + super(); + } /** * @throws IOException * @throws ServletException * */ - public static void doCatch(final ServletContext servletContext, final HttpServletRequest request, final HttpServletResponse response, final String webClassesRootPackage) throws IOException, - ServletException + @Override + public void process(final ServletConfig servletConfig, final ServletContext servletContext, final HttpServletRequest request, + final HttpServletResponse response) throws IOException, ServletException { logger.debug("Doing catch."); - String path = servletContext.getRealPath("/") + "WEB-INF/classes/" + webClassesRootPackage.replaceAll("\\.", "/") + request.getPathInfo(); + String path = servletContext.getRealPath("/") + "WEB-INF/classes/website" + request.getPathInfo(); logger.info("path=[{}]", path); @@ -63,11 +73,12 @@ public class WebInfCatcher * @param urlPath * @return */ - public static boolean matches(final ServletContext servletContext, final HttpServletRequest request, final String webClassesRootPackage) + @Override + public boolean matches(final ServletContext servletContext, final HttpServletRequest request) { boolean result; - if (new File(servletContext.getRealPath("/") + "WEB-INF/classes/" + webClassesRootPackage.replaceAll("\\.", "/") + request.getPathInfo()).exists()) + if (new File(servletContext.getRealPath("/") + "WEB-INF/classes/website" + request.getPathInfo()).exists()) { result = true; } diff --git a/src/fr/devinsy/kiss4web/hooks/XHTMLHook.java b/src/fr/devinsy/kiss4web/hooks/XHTMLHook.java new file mode 100644 index 0000000..7a206ec --- /dev/null +++ b/src/fr/devinsy/kiss4web/hooks/XHTMLHook.java @@ -0,0 +1,89 @@ +/** + * Copyright (C) 2006-2010, 2013-2016 Christian Pierre MOMON + * + * This file is part of Kiss4web. + * + * Kiss4web is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Kiss4web is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Kiss4web. If not, see + */ +package fr.devinsy.kiss4web.hooks; + +import java.io.IOException; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.devinsy.kiss4web.KissDispatcherUtils; + +/** + * + */ +public class XHTMLHook extends HookCore +{ + private static Logger logger = LoggerFactory.getLogger(XHTMLHook.class); + + /** + * + */ + public XHTMLHook() + { + super(); + } + + /** + * @throws IOException + * @throws ServletException + */ + @Override + public void process(final ServletConfig servletConfig, final ServletContext servletContext, final HttpServletRequest request, + final HttpServletResponse response) throws IOException, ServletException + { + logger.debug("Doing catch."); + + String urlPath = request.getPathInfo(); + + KissDispatcherUtils.dispatchToServlet(servletConfig, request, response, urlPath); + } + + /** + * + * @param urlPath + * @return + */ + @Override + public boolean matches(final ServletContext servletContext, final HttpServletRequest request) + { + boolean result; + + String urlPath = request.getPathInfo(); + + if ((urlPath != null) && (urlPath.endsWith(".xhtml"))) + { + result = true; + } + else + { + result = false; + } + + // + return result; + } + +} diff --git a/test/fr/devinsy/kiss4web/catchers/BlankCatcherTest.java b/test/fr/devinsy/kiss4web/catchers/BlankCatcherTest.java index 1f4b2f1..c7ae845 100644 --- a/test/fr/devinsy/kiss4web/catchers/BlankCatcherTest.java +++ b/test/fr/devinsy/kiss4web/catchers/BlankCatcherTest.java @@ -23,6 +23,8 @@ import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import fr.devinsy.kiss4web.hooks.BlankHook; +import fr.devinsy.kiss4web.hooks.ShortURLHook; import fr.devinsy.kiss4web.mocks.HttpServletRequestMock; /** @@ -31,7 +33,7 @@ import fr.devinsy.kiss4web.mocks.HttpServletRequestMock; */ public class BlankCatcherTest { - private static Logger logger = LoggerFactory.getLogger(ShortURLCatcher.class); + private static Logger logger = LoggerFactory.getLogger(ShortURLHook.class); /** * @@ -42,7 +44,7 @@ public class BlankCatcherTest HttpServletRequestMock source = new HttpServletRequestMock(); source.setPathInfo(null); - Assert.assertTrue(BlankCatcher.matches(source)); + Assert.assertTrue(BlankHook.matches(source)); } /** @@ -54,7 +56,7 @@ public class BlankCatcherTest HttpServletRequestMock source = new HttpServletRequestMock(); source.setPathInfo(""); - Assert.assertTrue(BlankCatcher.matches(source)); + Assert.assertTrue(BlankHook.matches(source)); } /** @@ -66,6 +68,6 @@ public class BlankCatcherTest HttpServletRequestMock source = new HttpServletRequestMock(); source.setPathInfo("/"); - Assert.assertFalse(BlankCatcher.matches(source)); + Assert.assertFalse(BlankHook.matches(source)); } } diff --git a/test/fr/devinsy/kiss4web/catchers/RootCatcherTest.java b/test/fr/devinsy/kiss4web/catchers/RootCatcherTest.java index fdc8fe7..051c0fd 100644 --- a/test/fr/devinsy/kiss4web/catchers/RootCatcherTest.java +++ b/test/fr/devinsy/kiss4web/catchers/RootCatcherTest.java @@ -23,6 +23,8 @@ import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import fr.devinsy.kiss4web.hooks.RootHook; +import fr.devinsy.kiss4web.hooks.ShortURLHook; import fr.devinsy.kiss4web.mocks.HttpServletRequestMock; /** @@ -31,7 +33,7 @@ import fr.devinsy.kiss4web.mocks.HttpServletRequestMock; */ public class RootCatcherTest { - private static Logger logger = LoggerFactory.getLogger(ShortURLCatcher.class); + private static Logger logger = LoggerFactory.getLogger(ShortURLHook.class); /** * @@ -42,7 +44,7 @@ public class RootCatcherTest HttpServletRequestMock source = new HttpServletRequestMock(); source.setPathInfo(null); - Assert.assertFalse(RootCatcher.matches(source)); + Assert.assertFalse(RootHook.matches(source)); } /** @@ -54,7 +56,7 @@ public class RootCatcherTest HttpServletRequestMock source = new HttpServletRequestMock(); source.setPathInfo(""); - Assert.assertFalse(RootCatcher.matches(source)); + Assert.assertFalse(RootHook.matches(source)); } /** @@ -66,7 +68,7 @@ public class RootCatcherTest HttpServletRequestMock source = new HttpServletRequestMock(); source.setPathInfo("/"); - Assert.assertTrue(RootCatcher.matches(source)); + Assert.assertTrue(RootHook.matches(source)); } /** @@ -78,6 +80,6 @@ public class RootCatcherTest HttpServletRequestMock source = new HttpServletRequestMock(); source.setPathInfo("/toto"); - Assert.assertFalse(RootCatcher.matches(source)); + Assert.assertFalse(RootHook.matches(source)); } } diff --git a/test/fr/devinsy/kiss4web/mocks/HttpServletRequestMock.java b/test/fr/devinsy/kiss4web/mocks/HttpServletRequestMock.java index e6aa94f..9446efc 100644 --- a/test/fr/devinsy/kiss4web/mocks/HttpServletRequestMock.java +++ b/test/fr/devinsy/kiss4web/mocks/HttpServletRequestMock.java @@ -22,20 +22,29 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.Principal; +import java.util.Collection; import java.util.Enumeration; import java.util.Locale; import java.util.Map; +import javax.servlet.AsyncContext; +import javax.servlet.DispatcherType; import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; import javax.servlet.ServletInputStream; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import javax.servlet.http.Part; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import fr.devinsy.kiss4web.catchers.ShortURLCatcher; +import fr.devinsy.kiss4web.hooks.ShortURLHook; /** * @@ -43,7 +52,7 @@ import fr.devinsy.kiss4web.catchers.ShortURLCatcher; */ public class HttpServletRequestMock implements HttpServletRequest { - private static Logger logger = LoggerFactory.getLogger(ShortURLCatcher.class); + private static Logger logger = LoggerFactory.getLogger(ShortURLHook.class); private String pathInfo; @@ -429,4 +438,88 @@ public class HttpServletRequestMock implements HttpServletRequest this.pathInfo = pathInfo; } + @Override + public AsyncContext getAsyncContext() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public DispatcherType getDispatcherType() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public ServletContext getServletContext() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isAsyncStarted() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isAsyncSupported() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public AsyncContext startAsync() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public AsyncContext startAsync(ServletRequest arg0, ServletResponse arg1) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean authenticate(HttpServletResponse arg0) throws IOException, ServletException + { + // TODO Auto-generated method stub + return false; + } + + @Override + public Part getPart(String arg0) throws IOException, IllegalStateException, ServletException + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Collection getParts() throws IOException, IllegalStateException, ServletException + { + // TODO Auto-generated method stub + return null; + } + + @Override + public void login(String arg0, String arg1) throws ServletException + { + // TODO Auto-generated method stub + + } + + @Override + public void logout() throws ServletException + { + // TODO Auto-generated method stub + + } + }