Commits

Sebastian Sdorra  committed be5a6c1

prepare for custom subversion collection renderer

  • Participants
  • Parent commits 28c0bf8

Comments (0)

Files changed (5)

 
     <!-- repostitory libraries -->
     <jgit.version>3.0.0.201306101825-r</jgit.version>
-    <svnkit.version>1.7.10-scm3</svnkit.version>
+    <svnkit.version>1.7.10-scm4-SNAPSHOT</svnkit.version>
     
     <!-- util libraries -->
     <guava.version>15.0</guava.version>

File scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnCollectionRenderer.java

+/**
+ * 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;
+}

File scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVConfig.java

 
 //~--- 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;
 
    *
    * @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;
   }
    * @return
    */
   @Override
+  public CollectionRenderer getCollectionRenderer()
+  {
+    return collectionRenderer;
+  }
+
+  /**
+   * Method description
+   *
+   *
+   * @return
+   */
+  @Override
   public String getRepositoryName()
   {
     return davConfig.getRepositoryName();
   //~--- 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;
 }

File scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java

    *
    *
    * @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;
   }
   @Override
   protected DAVConfig getDAVConfig()
   {
-    return new SvnDAVConfig(super.getDAVConfig(), handler, repositoryProvider);
+    return new SvnDAVConfig(super.getDAVConfig(), handler, collectionRenderer,
+      repositoryProvider);
   }
 
   //~--- inner classes --------------------------------------------------------
   //~--- fields ---------------------------------------------------------------
 
   /** Field description */
+  private SvnCollectionRenderer collectionRenderer;
+
+  /** Field description */
   private SvnRepositoryHandler handler;
 
   /** Field description */

File scm-plugins/scm-svn-plugin/src/main/resources/sonia/scm/svn.index.mustache

+<!--
+
+    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
+
+
+-->
+
+<html>
+  <head>
+    <title>SCM :: Manager - Subversion Repository</title>
+    <style type="text/css">
+      body {
+        background-color: #ffffff;
+        margin: 10px;
+        color: #202020;
+        font-family: Verdana,Helvetica,Arial,sans-serif;
+        font-size: 75%;
+      }
+      h1, h2, h3, h4, h5 {
+        font-family: Arial, "Arial CE", "Lucida Grande CE", lucida, "Helvetica CE", sans-serif;
+        font-weight: bold;
+        margin: 0px;
+        padding: 0px;
+        color: #D20005;
+        margin-bottom: 1em;
+      }
+      h1, h2 {
+        border-bottom: 1px solid #AFAFAF;
+      }
+      h1 {
+        font-size: 18px;
+      }
+      h2 {
+        font-size:  14px;
+      }
+      h3 {
+        font-size:  12px;
+      }
+      a:link, a:visited {
+        color: #045491;
+        font-weight: bold;
+        text-decoration: none;
+      }      
+      a:link:hover, a:visited:hover  {
+        color: #045491;
+        font-weight: bold;
+        text-decoration: underline;
+      }
+      table {
+        border: 0 none;
+        border-collapse: collapse;
+        font-size: 100%;
+        margin: 20px 0;
+        padding: 20px;
+        width: 100%;
+      }
+      td, th {
+        padding: 3px;
+        vertical-align: top;
+        border: 1px solid #CCCCCC;
+        text-align: left;
+      }
+      .small {
+        width: 20%;
+      }
+    </style>
+  </head>
+  <body>
+
+    <h1>SCM :: Manager - Subversion Repository</h1>
+    
+    <h2>Notes</h2>
+    
+    <div>
+      <p>
+        This page is only a quick source view for subversion. 
+        The full source view is <a href="">here</a>.
+      </p>
+      <ul>
+        <li>
+          <a href="">Commits</a>
+        </li>
+        <li>
+          <a href="">Source</a>
+        </li>
+      </ul>
+    </div>
+
+  </body>
+</html>