diff --git a/scm-plugin-backend/src/main/java/sonia/scm/plugin/rest/ViewableResource.java b/scm-plugin-backend/src/main/java/sonia/scm/plugin/rest/ViewableResource.java index 1fc4add848..d96eb06b53 100644 --- a/scm-plugin-backend/src/main/java/sonia/scm/plugin/rest/ViewableResource.java +++ b/scm-plugin-backend/src/main/java/sonia/scm/plugin/rest/ViewableResource.java @@ -92,7 +92,7 @@ public class ViewableResource //~--- fields --------------------------------------------------------------- /** Field description */ - private BackendConfiguration configuration; + protected BackendConfiguration configuration; /** Field description */ private String contextPath; diff --git a/scm-plugin-backend/src/main/java/sonia/scm/plugin/rest/admin/AdminResource.java b/scm-plugin-backend/src/main/java/sonia/scm/plugin/rest/admin/AdminResource.java index c8e893ebde..e8c15ca79f 100644 --- a/scm-plugin-backend/src/main/java/sonia/scm/plugin/rest/admin/AdminResource.java +++ b/scm-plugin-backend/src/main/java/sonia/scm/plugin/rest/admin/AdminResource.java @@ -35,8 +35,14 @@ package sonia.scm.plugin.rest.admin; 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 ------------------------------------------------------------ @@ -47,6 +53,7 @@ import java.util.Map; 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; @@ -62,6 +69,12 @@ public class AdminResource extends ViewableResource /** Field description */ private static final String PAGE_OVERVIEW = "/admin/index"; + /** + * the logger for AdminResource + */ + private static final Logger logger = + LoggerFactory.getLogger(AdminResource.class); + //~--- constructors --------------------------------------------------------- /** @@ -70,12 +83,17 @@ public class AdminResource extends ViewableResource * * @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 -------------------------------------------------------------- @@ -91,8 +109,38 @@ public class AdminResource extends ViewableResource @Produces(MediaType.TEXT_HTML) public Viewable overview() { - Map env = createVarMap("Administrator"); + Map 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; } diff --git a/scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/PluginScannerTimerTask.java b/scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/PluginScannerTimerTask.java index 146352d40e..d1e118e349 100644 --- a/scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/PluginScannerTimerTask.java +++ b/scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/PluginScannerTimerTask.java @@ -43,8 +43,6 @@ import sonia.scm.plugin.PluginBackend; //~--- JDK imports ------------------------------------------------------------ -import java.io.File; - import java.util.TimerTask; /** @@ -85,30 +83,8 @@ public class PluginScannerTimerTask extends 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 --------------------------------------------------------------- diff --git a/scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/PluginScanners.java b/scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/PluginScanners.java new file mode 100644 index 0000000000..36046f1274 --- /dev/null +++ b/scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/PluginScanners.java @@ -0,0 +1,98 @@ +/** + * 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); + } + } + } +} diff --git a/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/admin/index.html b/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/admin/index.html index 2a4300d4f1..939b3a4dc2 100644 --- a/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/admin/index.html +++ b/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/admin/index.html @@ -2,4 +2,22 @@

Admin (${subject.name})

+

Actions

+ + + + <#include "../template/footer.html"> \ No newline at end of file