Commits

Sebastian Sdorra committed af84e51

added rest action to start a directory scann manually

Comments (0)

Files changed (5)

scm-plugin-backend/src/main/java/sonia/scm/plugin/rest/ViewableResource.java

   //~--- fields ---------------------------------------------------------------
 
   /** Field description */
-  private BackendConfiguration configuration;
+  protected BackendConfiguration configuration;
 
   /** Field description */
   private String contextPath;

scm-plugin-backend/src/main/java/sonia/scm/plugin/rest/admin/AdminResource.java

 
 import com.google.inject.Inject;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import sonia.scm.plugin.BackendConfiguration;
+import sonia.scm.plugin.PluginBackend;
 import sonia.scm.plugin.rest.ViewableResource;
+import sonia.scm.plugin.scanner.PluginScannerFactory;
+import sonia.scm.plugin.scanner.PluginScanners;
 
 //~--- JDK imports ------------------------------------------------------------
 
 import javax.servlet.ServletContext;
 
 import javax.ws.rs.GET;
+import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
   /** Field description */
   private static final String PAGE_OVERVIEW = "/admin/index";
 
+  /**
+   * the logger for AdminResource
+   */
+  private static final Logger logger =
+    LoggerFactory.getLogger(AdminResource.class);
+
   //~--- constructors ---------------------------------------------------------
 
   /**
    *
    * @param context
    * @param configuration
+   * @param backend
+   * @param scannerFactory
    */
   @Inject
   public AdminResource(ServletContext context,
-    BackendConfiguration configuration)
+    BackendConfiguration configuration, PluginBackend backend,
+    PluginScannerFactory scannerFactory)
   {
     super(context, configuration);
+    this.backend = backend;
+    this.scannerFactory = scannerFactory;
   }
 
   //~--- methods --------------------------------------------------------------
   @Produces(MediaType.TEXT_HTML)
   public Viewable overview()
   {
-    Map<String, Object> env = createVarMap("Administrator");
+    Map<String, Object> env = createVarMap("Administration");
 
     return new Viewable(PAGE_OVERVIEW, env);
   }
+
+  /**
+   * Method description
+   *
+   *
+   * @return
+   */
+  @POST
+  @Path("action/scann")
+  public void scann()
+  {
+    new Thread(new Runnable()
+    {
+
+      @Override
+      public void run()
+      {
+        logger.trace("strat scanner manually");
+        PluginScanners.scannDirectory(configuration, backend, scannerFactory);
+      }
+    }).start();
+  }
+
+  //~--- fields ---------------------------------------------------------------
+
+  /** Field description */
+  private PluginBackend backend;
+
+  /** Field description */
+  private PluginScannerFactory scannerFactory;
 }

scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/PluginScannerTimerTask.java

 
 //~--- JDK imports ------------------------------------------------------------
 
-import java.io.File;
-
 import java.util.TimerTask;
 
 /**
   @Override
   public void run()
   {
-    if (logger.isInfoEnabled())
-    {
-      logger.info("start scann");
-    }
-
-    for (File directory : configuration.getDirectories())
-    {
-      if (logger.isDebugEnabled())
-      {
-        logger.info("scann directory {}", directory.getPath());
-      }
-
-      PluginScanner scanner = scannerFactory.createScanner();
-
-      if (configuration.isMultithreaded())
-      {
-        new Thread(new PluginScannerRunnable(backend, scanner,
-          directory)).start();
-      }
-      else
-      {
-        scanner.scannDirectory(backend, directory);
-      }
-    }
+    logger.trace("timer task started scann");
+    PluginScanners.scannDirectory(configuration, backend, scannerFactory);
   }
 
   //~--- fields ---------------------------------------------------------------

scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/PluginScanners.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.plugin.scanner;
+
+//~--- non-JDK imports --------------------------------------------------------
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import sonia.scm.plugin.BackendConfiguration;
+import sonia.scm.plugin.PluginBackend;
+
+//~--- JDK imports ------------------------------------------------------------
+
+import java.io.File;
+
+/**
+ *
+ * @author Sebastian Sdorra
+ */
+public class PluginScanners
+{
+
+  /**
+   * the logger for PluginScanners
+   */
+  private static final Logger logger =
+    LoggerFactory.getLogger(PluginScanners.class);
+
+  //~--- methods --------------------------------------------------------------
+
+  /**
+   * Method description
+   *
+   *
+   * @param configuration
+   * @param backend
+   * @param scannerFactory
+   */
+  public synchronized static void scannDirectory(
+    BackendConfiguration configuration, PluginBackend backend,
+    PluginScannerFactory scannerFactory)
+  {
+    if (logger.isInfoEnabled())
+    {
+      logger.info("start scann");
+    }
+
+    for (File directory : configuration.getDirectories())
+    {
+      if (logger.isDebugEnabled())
+      {
+        logger.info("scann directory {}", directory.getPath());
+      }
+
+      PluginScanner scanner = scannerFactory.createScanner();
+
+      if (configuration.isMultithreaded())
+      {
+        new Thread(new PluginScannerRunnable(backend, scanner,
+          directory)).start();
+      }
+      else
+      {
+        scanner.scannDirectory(backend, directory);
+      }
+    }
+  }
+}

scm-plugin-backend/src/main/webapp/WEB-INF/ftl/admin/index.html

 
 <h2>Admin (${subject.name})</h2>
 
+<h3>Actions</h3>
+<ul id="actions">
+  <li>
+    <a rel="${contextPath}/admin/action/scann">Scann Directories</a>
+  </li>
+</ul>
+
+<script type="text/javascript">
+  $(document).ready(function(){
+    $('#actions a').click(function(){
+      var action = $(this).attr('rel');
+      $.post(action, function(text){
+        
+      });
+    });
+  });
+</script>
+
 <#include "../template/footer.html">