diff --git a/pom.xml b/pom.xml index a1afc8815a..f6bb699c56 100644 --- a/pom.xml +++ b/pom.xml @@ -431,7 +431,7 @@ 3.0.0.201306101825-r - 1.7.10-scm3 + 1.7.10-scm4-SNAPSHOT 15.0 diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnCollectionRenderer.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnCollectionRenderer.java new file mode 100644 index 0000000000..3665a67506 --- /dev/null +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnCollectionRenderer.java @@ -0,0 +1,116 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.web; + +//~--- non-JDK imports -------------------------------------------------------- + +import com.google.common.io.Closeables; +import com.google.inject.Inject; + +import org.tmatesoft.svn.core.SVNErrorMessage; +import org.tmatesoft.svn.core.SVNException; +import org.tmatesoft.svn.core.internal.server.dav.CollectionRenderer; +import org.tmatesoft.svn.core.internal.server.dav.DAVResource; + +import sonia.scm.template.Template; +import sonia.scm.template.TemplateEngine; +import sonia.scm.template.TemplateEngineFactory; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.IOException; +import java.io.StringWriter; + +/** + * + * @author Sebastian Sdorra + */ +public class SvnCollectionRenderer implements CollectionRenderer +{ + + /** Field description */ + private static final String RESOURCE_SVNINDEX = + "sonia/scm/svn.index.mustache"; + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + * + * @param templateEngineFactory + */ + @Inject + public SvnCollectionRenderer(TemplateEngineFactory templateEngineFactory) + { + this.templateEngineFactory = templateEngineFactory; + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @param buffer + * @param resource + * + * @throws SVNException + */ + @Override + public void renderCollection(StringBuilder buffer, DAVResource resource) + throws SVNException + { + TemplateEngine engine = templateEngineFactory.getDefaultEngine(); + + StringWriter writer = new StringWriter(); + + try + { + Template template = engine.getTemplate(RESOURCE_SVNINDEX); + + template.execute(writer, new Object()); + } + catch (IOException ex) + { + throw new SVNException(SVNErrorMessage.UNKNOWN_ERROR_MESSAGE); + } + + writer.flush(); + buffer.append(writer.toString()); + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private final TemplateEngineFactory templateEngineFactory; +} diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVConfig.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVConfig.java index 64bd23eff7..b220737ecb 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVConfig.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVConfig.java @@ -35,6 +35,7 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- +import org.tmatesoft.svn.core.internal.server.dav.CollectionRenderer; import org.tmatesoft.svn.core.internal.server.dav.DAVConfig; import org.tmatesoft.svn.core.internal.server.dav.SVNPathBasedAccess; @@ -59,12 +60,15 @@ public class SvnDAVConfig extends DAVConfig * * @param davConfig * @param handler + * @param collectionRenderer * @param repositoryProvider */ public SvnDAVConfig(DAVConfig davConfig, SvnRepositoryHandler handler, - RepositoryProvider repositoryProvider) + CollectionRenderer collectionRenderer, + RepositoryProvider repositoryProvider) { this.davConfig = davConfig; + this.collectionRenderer = collectionRenderer; this.handler = handler; this.repositoryProvider = repositoryProvider; } @@ -83,6 +87,18 @@ public class SvnDAVConfig extends DAVConfig return null; } + /** + * Method description + * + * + * @return + */ + @Override + public CollectionRenderer getCollectionRenderer() + { + return collectionRenderer; + } + /** * Method description * @@ -285,11 +301,14 @@ public class SvnDAVConfig extends DAVConfig //~--- fields --------------------------------------------------------------- /** Field description */ - private DAVConfig davConfig; + private final CollectionRenderer collectionRenderer; /** Field description */ - private SvnRepositoryHandler handler; + private final DAVConfig davConfig; /** Field description */ - private RepositoryProvider repositoryProvider; + private final SvnRepositoryHandler handler; + + /** Field description */ + private final RepositoryProvider repositoryProvider; } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java index ee940dec23..701de1d44b 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java @@ -85,15 +85,18 @@ public class SvnDAVServlet extends DAVServlet * * * @param handler + * @param collectionRenderer * @param repositoryProvider * @param repositoryRequestListenerUtil */ @Inject public SvnDAVServlet(SvnRepositoryHandler handler, + SvnCollectionRenderer collectionRenderer, RepositoryProvider repositoryProvider, RepositoryRequestListenerUtil repositoryRequestListenerUtil) { this.handler = handler; + this.collectionRenderer = collectionRenderer; this.repositoryProvider = repositoryProvider; this.repositoryRequestListenerUtil = repositoryRequestListenerUtil; } @@ -147,7 +150,8 @@ public class SvnDAVServlet extends DAVServlet @Override protected DAVConfig getDAVConfig() { - return new SvnDAVConfig(super.getDAVConfig(), handler, repositoryProvider); + return new SvnDAVConfig(super.getDAVConfig(), handler, collectionRenderer, + repositoryProvider); } //~--- inner classes -------------------------------------------------------- @@ -286,6 +290,9 @@ public class SvnDAVServlet extends DAVServlet //~--- fields --------------------------------------------------------------- + /** Field description */ + private SvnCollectionRenderer collectionRenderer; + /** Field description */ private SvnRepositoryHandler handler; diff --git a/scm-plugins/scm-svn-plugin/src/main/resources/sonia/scm/svn.index.mustache b/scm-plugins/scm-svn-plugin/src/main/resources/sonia/scm/svn.index.mustache new file mode 100644 index 0000000000..76808f828b --- /dev/null +++ b/scm-plugins/scm-svn-plugin/src/main/resources/sonia/scm/svn.index.mustache @@ -0,0 +1,116 @@ + + + + + SCM :: Manager - Subversion Repository + + + + +

SCM :: Manager - Subversion Repository

+ +

Notes

+ +
+

+ This page is only a quick source view for subversion. + The full source view is here. +

+ +
+ + + \ No newline at end of file