From 6fec6196a0dffc3d6ae0988af66f89bc613b165e Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 28 Sep 2010 20:19:18 +0200 Subject: [PATCH] improve utils --- .../scm/repository/HgRepositoryHandler.java | 3 +- .../main/java/sonia/scm/web/HgCGIServlet.java | 74 +++++++ .../java/sonia/scm/web/HgServletModule.java | 29 +-- .../java/sonia/scm/web/HgWebConfigWriter.java | 6 +- .../main/java/sonia/scm/web/HgWebPlugin.java | 2 +- .../scm/repository/SvnRepositoryHandler.java | 5 +- .../sonia/scm/io/INIConfigurationReader.java | 4 +- .../sonia/scm/io/INIConfigurationWriter.java | 4 +- .../sonia/scm/io/RegexResourceProcessor.java | 6 +- .../main/java/sonia/scm/io/SimpleCommand.java | 4 +- .../AbstractSimpleRepositoryHandler.java | 5 +- .../src/main/java/sonia/scm/util/IOUtil.java | 192 ++++++++++++++++++ .../src/main/java/sonia/scm/util/Util.java | 71 +------ .../sonia/scm/web/cgi/AbstractCGIServlet.java | 148 ++++++++++++++ .../java/sonia/scm/web/cgi/CGIRunner.java | 16 +- .../java/sonia/scm/web/cgi/CGIServlet.java | 3 + .../main/java/sonia/scm/ContextListener.java | 23 +++ .../scm/plugin/AbstractResourceServlet.java | 6 +- .../scm/plugin/ScriptResourceServlet.java | 8 +- 19 files changed, 483 insertions(+), 126 deletions(-) create mode 100644 plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java create mode 100644 scm-core/src/main/java/sonia/scm/util/IOUtil.java create mode 100644 scm-web-api/src/main/java/sonia/scm/web/cgi/AbstractCGIServlet.java diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java index 5f839bc016..74a35728dc 100644 --- a/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java @@ -16,6 +16,7 @@ import sonia.scm.io.INIConfiguration; import sonia.scm.io.INIConfigurationReader; import sonia.scm.io.INIConfigurationWriter; import sonia.scm.io.INISection; +import sonia.scm.util.IOUtil; import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ @@ -115,7 +116,7 @@ public class HgRepositoryHandler extends AbstractRepositoryHandler if (new File(directory, ".hg").exists()) { - Util.delete(directory); + IOUtil.delete(directory); } else { diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java new file mode 100644 index 0000000000..ac34612e4e --- /dev/null +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java @@ -0,0 +1,74 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm.web; + +//~--- non-JDK imports -------------------------------------------------------- + +import com.google.inject.Singleton; + +import sonia.scm.web.cgi.AbstractCGIServlet; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; + +/** + * + * @author Sebastian Sdorra + */ +@Singleton +public class HgCGIServlet extends AbstractCGIServlet +{ + + /** Field description */ + private static final long serialVersionUID = -3492811300905099810L; + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @throws ServletException + */ + @Override + public void init() throws ServletException + { + command = HgUtil.getCGI(); + super.init(); + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param req + * + * @return + * + * @throws IOException + * @throws ServletException + */ + @Override + protected File getCommand(HttpServletRequest req) + throws ServletException, IOException + { + return command; + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private File command; +} diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java index 1820bd5ba6..141d9a76ef 100644 --- a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java @@ -9,18 +9,9 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- -import com.google.inject.Scopes; import com.google.inject.servlet.ServletModule; import sonia.scm.web.filter.BasicAuthenticationFilter; -import sonia.scm.web.cgi.CGIServlet; - -//~--- JDK imports ------------------------------------------------------------ - -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.ServletContext; /** * @@ -29,19 +20,6 @@ import javax.servlet.ServletContext; public class HgServletModule extends ServletModule { - /** - * Constructs ... - * - * - * @param servletContext - */ - HgServletModule(ServletContext servletContext) - { - cgiPath = HgUtil.getCGI().getAbsolutePath(); - } - - //~--- methods -------------------------------------------------------------- - /** * Method description * @@ -50,12 +28,7 @@ public class HgServletModule extends ServletModule protected void configureServlets() { filter("/hg/*").through(BasicAuthenticationFilter.class); - - Map initParams = new HashMap(); - - initParams.put("command", cgiPath); - bind(CGIServlet.class).in(Scopes.SINGLETON); - serve("/hg/*").with(CGIServlet.class, initParams); + serve("/hg/*").with(HgCGIServlet.class); } //~--- fields --------------------------------------------------------------- diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebConfigWriter.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebConfigWriter.java index 189f91bf42..5e5150f90b 100644 --- a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebConfigWriter.java +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebConfigWriter.java @@ -15,7 +15,7 @@ import sonia.scm.io.INISection; import sonia.scm.io.RegexResourceProcessor; import sonia.scm.io.ResourceProcessor; import sonia.scm.repository.HgConfig; -import sonia.scm.util.Util; +import sonia.scm.util.IOUtil; //~--- JDK imports ------------------------------------------------------------ @@ -102,8 +102,8 @@ public class HgWebConfigWriter } finally { - Util.close(input); - Util.close(output); + IOUtil.close(input); + IOUtil.close(output); } } diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebPlugin.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebPlugin.java index 25a32953d8..dea962509a 100644 --- a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebPlugin.java +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebPlugin.java @@ -42,6 +42,6 @@ public class HgWebPlugin implements ScmWebPlugin public void contextInitialized(ScmWebPluginContext context) { context.addScriptResource(new ClasspathWebResource(SCRIPT)); - context.addInjectModule(new HgServletModule( context.getServletContext() )); + context.addInjectModule(new HgServletModule()); } } diff --git a/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java b/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java index 4a3a9a2c30..60e1bd1845 100644 --- a/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java +++ b/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java @@ -28,6 +28,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.bind.JAXB; +import sonia.scm.util.IOUtil; /** * @@ -114,8 +115,8 @@ public class SvnRepositoryHandler extends AbstractRepositoryHandler if (directory.exists() && repositoryFile.exists()) { - Util.delete(directory); - Util.delete(repositoryFile); + IOUtil.delete(directory); + IOUtil.delete(repositoryFile); } else { diff --git a/scm-core/src/main/java/sonia/scm/io/INIConfigurationReader.java b/scm-core/src/main/java/sonia/scm/io/INIConfigurationReader.java index 5e94a6934f..c4e6c63133 100644 --- a/scm-core/src/main/java/sonia/scm/io/INIConfigurationReader.java +++ b/scm-core/src/main/java/sonia/scm/io/INIConfigurationReader.java @@ -9,7 +9,7 @@ package sonia.scm.io; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.util.Util; +import sonia.scm.util.IOUtil; //~--- JDK imports ------------------------------------------------------------ @@ -96,7 +96,7 @@ public class INIConfigurationReader extends AbstractReader } finally { - Util.close(input); + IOUtil.close(input); } return configuration; diff --git a/scm-core/src/main/java/sonia/scm/io/INIConfigurationWriter.java b/scm-core/src/main/java/sonia/scm/io/INIConfigurationWriter.java index 954d504d1c..53ca6f0ad9 100644 --- a/scm-core/src/main/java/sonia/scm/io/INIConfigurationWriter.java +++ b/scm-core/src/main/java/sonia/scm/io/INIConfigurationWriter.java @@ -9,7 +9,7 @@ package sonia.scm.io; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.util.Util; +import sonia.scm.util.IOUtil; //~--- JDK imports ------------------------------------------------------------ @@ -52,7 +52,7 @@ public class INIConfigurationWriter extends AbstractWriter } finally { - Util.close(writer); + IOUtil.close(writer); } } } diff --git a/scm-core/src/main/java/sonia/scm/io/RegexResourceProcessor.java b/scm-core/src/main/java/sonia/scm/io/RegexResourceProcessor.java index c98ee96961..835623c1e2 100644 --- a/scm-core/src/main/java/sonia/scm/io/RegexResourceProcessor.java +++ b/scm-core/src/main/java/sonia/scm/io/RegexResourceProcessor.java @@ -9,7 +9,7 @@ package sonia.scm.io; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.util.Util; +import sonia.scm.util.IOUtil; //~--- JDK imports ------------------------------------------------------------ @@ -66,8 +66,8 @@ public class RegexResourceProcessor extends AbstractResourceProcessor } finally { - Util.close(reader); - Util.close(writer); + IOUtil.close(reader); + IOUtil.close(writer); } } diff --git a/scm-core/src/main/java/sonia/scm/io/SimpleCommand.java b/scm-core/src/main/java/sonia/scm/io/SimpleCommand.java index 3bff17a838..26fdc1c5d0 100644 --- a/scm-core/src/main/java/sonia/scm/io/SimpleCommand.java +++ b/scm-core/src/main/java/sonia/scm/io/SimpleCommand.java @@ -9,7 +9,7 @@ package sonia.scm.io; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.util.Util; +import sonia.scm.util.IOUtil; //~--- JDK imports ------------------------------------------------------------ @@ -150,7 +150,7 @@ public class SimpleCommand implements Command } finally { - Util.close(input); + IOUtil.close(input); } return result; diff --git a/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java b/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java index c41874a04d..023222c429 100644 --- a/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java +++ b/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java @@ -28,6 +28,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.bind.JAXB; +import sonia.scm.util.IOUtil; /** * @@ -115,8 +116,8 @@ public abstract class AbstractSimpleRepositoryHandler