From 5ef764d1db7e7e7e81ca863567e5b202fa08d224 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sat, 12 Mar 2011 12:03:21 +0100 Subject: [PATCH] added XmlIntervalAdapter --- .../src/main/java/sonia/scm/util/Util.java | 60 ++++++++++++++ .../sonia/scm/xml/XmlIntervalAdapter.java | 82 +++++++++++++++++++ .../scm/plugin/BackendConfiguration.java | 8 +- .../scanner/TimerPluginScannerScheduler.java | 14 ++++ 4 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 scm-core/src/main/java/sonia/scm/xml/XmlIntervalAdapter.java diff --git a/scm-core/src/main/java/sonia/scm/util/Util.java b/scm-core/src/main/java/sonia/scm/util/Util.java index 4e5f0bec01..8a28a0e714 100644 --- a/scm-core/src/main/java/sonia/scm/util/Util.java +++ b/scm-core/src/main/java/sonia/scm/util/Util.java @@ -112,6 +112,66 @@ public class Util return result; } + /** + * Method description + * + * + * @param time + * + * @return + */ + public static String convertTime(long time) + { + String suffix = "ms"; + + if (time > 1000) + { + time /= 1000; + suffix = "s"; + + if (time > 60) + { + time /= 60; + suffix = "m"; + + if (time > 60) + { + time /= 60; + suffix = "h"; + } + } + } + + return time + suffix; + } + + /** + * Method description + * + * + * @param timeString + * + * @return + */ + public static long convertTime(String timeString) + { + char suffix = timeString.charAt(timeString.length() - 1); + long time = Long.parseLong(timeString.substring(0, + timeString.length() - 1)); + + switch (suffix) + { + case 'h' : + time *= 60; + case 'm' : + time *= 60; + case 's' : + time *= 1000; + } + + return time; + } + /** * Method description * diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlIntervalAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlIntervalAdapter.java new file mode 100644 index 0000000000..3f2710fe34 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/xml/XmlIntervalAdapter.java @@ -0,0 +1,82 @@ +/** + * 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.xml; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.util.Util; + +//~--- JDK imports ------------------------------------------------------------ + +import javax.xml.bind.annotation.adapters.XmlAdapter; + +/** + * + * @author Sebastian Sdorra + */ +public class XmlIntervalAdapter extends XmlAdapter +{ + + /** + * Method description + * + * + * @param longValue + * + * @return + * + * @throws Exception + */ + @Override + public String marshal(Long longValue) throws Exception + { + return Util.convertTime(longValue); + } + + /** + * Method description + * + * + * @param stringValue + * + * @return + * + * @throws Exception + */ + @Override + public Long unmarshal(String stringValue) throws Exception + { + return Util.convertTime(stringValue); + } +} diff --git a/scm-plugin-backend/src/main/java/sonia/scm/plugin/BackendConfiguration.java b/scm-plugin-backend/src/main/java/sonia/scm/plugin/BackendConfiguration.java index e6da1d891a..b7da5ae808 100644 --- a/scm-plugin-backend/src/main/java/sonia/scm/plugin/BackendConfiguration.java +++ b/scm-plugin-backend/src/main/java/sonia/scm/plugin/BackendConfiguration.java @@ -33,6 +33,10 @@ package sonia.scm.plugin; +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.xml.XmlIntervalAdapter; + //~--- JDK imports ------------------------------------------------------------ import java.io.File; @@ -44,6 +48,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** * @@ -161,5 +166,6 @@ public class BackendConfiguration /** Field description */ @XmlElement(name = "scann-interval") - private long scannInterval; + @XmlJavaTypeAdapter(XmlIntervalAdapter.class) + private Long scannInterval; } diff --git a/scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/TimerPluginScannerScheduler.java b/scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/TimerPluginScannerScheduler.java index 69da744139..cd4c02d5d8 100644 --- a/scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/TimerPluginScannerScheduler.java +++ b/scm-plugin-backend/src/main/java/sonia/scm/plugin/scanner/TimerPluginScannerScheduler.java @@ -37,8 +37,12 @@ package sonia.scm.plugin.scanner; 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.util.Util; //~--- JDK imports ------------------------------------------------------------ @@ -54,6 +58,10 @@ public class TimerPluginScannerScheduler implements PluginScannerScheduler /** Field description */ public static final String TIMER_NAME = "ScmPluginScanner"; + /** the logger for TimerPluginScannerScheduler */ + private static final Logger logger = + LoggerFactory.getLogger(TimerPluginScannerScheduler.class); + //~--- constructors --------------------------------------------------------- /** @@ -94,6 +102,12 @@ public class TimerPluginScannerScheduler implements PluginScannerScheduler @Override public void start() { + if (logger.isInfoEnabled()) + { + logger.info("start scanner task with an interval of {}", + Util.convertTime(configuration.getScannInterval())); + } + PluginScannerTimerTask task = new PluginScannerTimerTask(backend, configuration, scannerFactory);