Hi Hen,
2013/10/24 <bay...@apache.org> > Author: bayard > Date: Thu Oct 24 21:23:40 2013 > New Revision: 1535555 > > URL: http://svn.apache.org/r1535555 > Log: > Applying Sebb's patch from LANG-774 - adding isStarted, isSuspended and > isStopped to StopWatch > > Modified: > commons/proper/lang/trunk/src/changes/changes.xml > > commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/StopWatch.java > > commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java > > Modified: commons/proper/lang/trunk/src/changes/changes.xml > URL: > http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/changes/changes.xml?rev=1535555&r1=1535554&r2=1535555&view=diff > > ============================================================================== > --- commons/proper/lang/trunk/src/changes/changes.xml (original) > +++ commons/proper/lang/trunk/src/changes/changes.xml Thu Oct 24 21:23:40 > 2013 > @@ -22,6 +22,7 @@ > <body> > > <release version="3.2" date="TBA" description="Next release"> > + <action issue="LANG-774" type="add" due-to="Erhan Bagdemir">Added > isStarted, isSuspended and isStopped to StopWatch</action> > Either the due-to or the commit log is wrong :-) > <action issue="LANG-917" type="fix" due-to="Arne Burmeister">Fixed > exception when combining custom and choice format in > ExtendedMessageFormat</action> > <action issue="LANG-848" type="add" due-to="Alexander Muthmann">Added > StringUtils.isBlank/isEmpty CharSequence... methods</action> > <action issue="LANG-926" type="add" dev="ggregory">Added > ArrayUtils.reverse(array, from, to) methods</action> > > Modified: > commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/StopWatch.java > URL: > http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/StopWatch.java?rev=1535555&r1=1535554&r2=1535555&view=diff > > ============================================================================== > --- > commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/StopWatch.java > (original) > +++ > commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/StopWatch.java > Thu Oct 24 21:23:40 2013 > @@ -58,30 +58,86 @@ package org.apache.commons.lang3.time; > public class StopWatch { > > private static final long NANO_2_MILLIS = 1000000L; > + > + /** > + * Enumeration type which indicates the status of stopwatch. > + */ > + private enum State { > > - // running states > - private static final int STATE_UNSTARTED = 0; > - > - private static final int STATE_RUNNING = 1; > - > - private static final int STATE_STOPPED = 2; > - > - private static final int STATE_SUSPENDED = 3; > - > - // split state > - private static final int STATE_UNSPLIT = 10; > - > - private static final int STATE_SPLIT = 11; > - > + UNSTARTED { > + @Override boolean isStarted() { return false; } > + @Override boolean isStopped() { return true; } > + @Override boolean isSuspended() { return false; } > + }, > + RUNNING { > + @Override boolean isStarted() { return true; } > + @Override boolean isStopped() { return false; } > + @Override boolean isSuspended() { return false; } > + }, > + STOPPED { > + @Override boolean isStarted() { return false; } > + @Override boolean isStopped() { return true; } > + @Override boolean isSuspended() { return false; } > + }, > + SUSPENDED { > + @Override boolean isStarted() { return true; } > + @Override boolean isStopped() { return false; } > + @Override boolean isSuspended() { return true; } > + }; > + > + /** > + * <p> > + * The method is used to find out if the StopWatch is started. A > suspended > + * StopWatch is also started watch. > + * </p> > + > + * @param stopWatch > + * @return boolean > + * If the StopWatch is started. > + */ > + abstract boolean isStarted(); > + > + /** > + * <p> > + * This method is used to find out whether the StopWatch is > stopped. The > + * stopwatch which's not yet started and explicitly stopped > stopwatch is > + * considered as stopped. > + * </p> > + * > + * @param stopWatch > + * @return boolean > + * If the StopWatch is stopped. > + */ > + abstract boolean isStopped(); > + > + /** > + * <p> > + * This method is used to find out whether the StopWatch is > suspended. > + * </p> > + * > + * @param stopWatch > + * @return boolean > + * If the StopWatch is suspended. > + */ > + abstract boolean isSuspended(); > + } > + > + /** > + * Enumeration type which indicates the split status of stopwatch. > + */ > + private enum SplitState { > + SPLIT, > + UNSPLIT > + } > /** > * The current running state of the StopWatch. > */ > - private int runningState = STATE_UNSTARTED; > + private State runningState = State.UNSTARTED; > > /** > * Whether the stopwatch has a split time recorded. > */ > - private int splitState = STATE_UNSPLIT; > + private SplitState splitState = SplitState.UNSPLIT; > > /** > * The start time. > @@ -122,17 +178,18 @@ public class StopWatch { > * if the StopWatch is already running. > */ > public void start() { > - if (this.runningState == STATE_STOPPED) { > + if (this.runningState == State.STOPPED) { > throw new IllegalStateException("Stopwatch must be reset > before being restarted. "); > } > - if (this.runningState != STATE_UNSTARTED) { > + if (this.runningState != State.UNSTARTED) { > throw new IllegalStateException("Stopwatch already started. > "); > } > this.startTime = System.nanoTime(); > this.startTimeMillis = System.currentTimeMillis(); > - this.runningState = STATE_RUNNING; > + this.runningState = State.RUNNING; > } > > + > /** > * <p> > * Stop the stopwatch. > @@ -146,13 +203,13 @@ public class StopWatch { > * if the StopWatch is not running. > */ > public void stop() { > - if (this.runningState != STATE_RUNNING && this.runningState != > STATE_SUSPENDED) { > + if (this.runningState != State.RUNNING && this.runningState != > State.SUSPENDED) { > throw new IllegalStateException("Stopwatch is not running. "); > } > - if (this.runningState == STATE_RUNNING) { > + if (this.runningState == State.RUNNING) { > this.stopTime = System.nanoTime(); > } > - this.runningState = STATE_STOPPED; > + this.runningState = State.STOPPED; > } > > /** > @@ -165,8 +222,8 @@ public class StopWatch { > * </p> > */ > public void reset() { > - this.runningState = STATE_UNSTARTED; > - this.splitState = STATE_UNSPLIT; > + this.runningState = State.UNSTARTED; > + this.splitState = SplitState.UNSPLIT; > } > > /** > @@ -183,11 +240,11 @@ public class StopWatch { > * if the StopWatch is not running. > */ > public void split() { > - if (this.runningState != STATE_RUNNING) { > + if (this.runningState != State.RUNNING) { > throw new IllegalStateException("Stopwatch is not running. "); > } > this.stopTime = System.nanoTime(); > - this.splitState = STATE_SPLIT; > + this.splitState = SplitState.SPLIT; > } > > /** > @@ -204,10 +261,10 @@ public class StopWatch { > * if the StopWatch has not been split. > */ > public void unsplit() { > - if (this.splitState != STATE_SPLIT) { > + if (this.splitState != SplitState.SPLIT) { > throw new IllegalStateException("Stopwatch has not been > split. "); > } > - this.splitState = STATE_UNSPLIT; > + this.splitState = SplitState.UNSPLIT; > } > > /** > @@ -224,11 +281,11 @@ public class StopWatch { > * if the StopWatch is not currently running. > */ > public void suspend() { > - if (this.runningState != STATE_RUNNING) { > + if (this.runningState != State.RUNNING) { > throw new IllegalStateException("Stopwatch must be running to > suspend. "); > } > this.stopTime = System.nanoTime(); > - this.runningState = STATE_SUSPENDED; > + this.runningState = State.SUSPENDED; > } > > /** > @@ -245,11 +302,11 @@ public class StopWatch { > * if the StopWatch has not been suspended. > */ > public void resume() { > - if (this.runningState != STATE_SUSPENDED) { > + if (this.runningState != State.SUSPENDED) { > throw new IllegalStateException("Stopwatch must be suspended > to resume. "); > } > this.startTime += System.nanoTime() - this.stopTime; > - this.runningState = STATE_RUNNING; > + this.runningState = State.RUNNING; > } > > /** > @@ -281,11 +338,11 @@ public class StopWatch { > * @since 3.0 > */ > public long getNanoTime() { > - if (this.runningState == STATE_STOPPED || this.runningState == > STATE_SUSPENDED) { > + if (this.runningState == State.STOPPED || this.runningState == > State.SUSPENDED) { > return this.stopTime - this.startTime; > - } else if (this.runningState == STATE_UNSTARTED) { > + } else if (this.runningState == State.UNSTARTED) { > return 0; > - } else if (this.runningState == STATE_RUNNING) { > + } else if (this.runningState == State.RUNNING) { > return System.nanoTime() - this.startTime; > } > throw new RuntimeException("Illegal running state has occurred."); > @@ -325,7 +382,7 @@ public class StopWatch { > * @since 3.0 > */ > public long getSplitNanoTime() { > - if (this.splitState != STATE_SPLIT) { > + if (this.splitState != SplitState.SPLIT) { > throw new IllegalStateException("Stopwatch must be split to > get the split time. "); > } > return this.stopTime - this.startTime; > @@ -340,7 +397,7 @@ public class StopWatch { > * @since 2.4 > */ > public long getStartTime() { > - if (this.runningState == STATE_UNSTARTED) { > + if (this.runningState == State.UNSTARTED) { > throw new IllegalStateException("Stopwatch has not been > started"); > } > // System.nanoTime is for elapsed time > @@ -379,4 +436,49 @@ public class StopWatch { > return DurationFormatUtils.formatDurationHMS(getSplitTime()); > } > > + /** > + * <p> > + * The method is used to find out if the StopWatch is started. A > suspended > + * StopWatch is also started watch. > + * </p> > + * > + * @return boolean > + * If the StopWatch is started. > + * @see State#isStarted() > + * @since 3.2 > + */ > + public boolean isStarted() { > + return runningState.isStarted(); > + } > + > + /** > + * <p> > + * This method is used to find out whether the StopWatch is suspended. > + * </p> > + * > + * @return boolean > + * If the StopWatch is suspended. > + * @see State#isSuspended() > + * @since 3.2 > + */ > + public boolean isSuspended() { > + return runningState.isSuspended(); > + } > + > + /** > + * <p> > + * This method is used to find out whether the StopWatch is stopped. > The > + * stopwatch which's not yet started and explicitly stopped stopwatch > is > + * considered as stopped. > + * </p> > + * > + * @return boolean > + * If the StopWatch is stopped. > + * @see State#isStopped() > + * @since 3.2 > + */ > + public boolean isStopped() { > + return runningState.isStopped(); > + } > + > } > > Modified: > commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java > URL: > http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java?rev=1535555&r1=1535554&r2=1535555&view=diff > > ============================================================================== > --- > commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java > (original) > +++ > commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java > Thu Oct 24 21:23:40 2013 > @@ -18,6 +18,7 @@ package org.apache.commons.lang3.time; > > import static org.junit.Assert.assertEquals; > import static org.junit.Assert.assertTrue; > +import static org.junit.Assert.assertFalse; > import static org.junit.Assert.fail; > import org.junit.Assert; > > @@ -224,4 +225,27 @@ public class StopWatchTest { > } > } > > + @Test > + public void testBooleanStates() { > + final StopWatch watch = new StopWatch(); > + assertFalse(watch.isStarted()); > + assertFalse(watch.isSuspended()); > + assertTrue(watch.isStopped()); > + > + watch.start(); > + assertTrue(watch.isStarted()); > + assertFalse(watch.isSuspended()); > + assertFalse(watch.isStopped()); > + > + watch.suspend(); > + assertTrue(watch.isStarted()); > + assertTrue(watch.isSuspended()); > + assertFalse(watch.isStopped()); > + > + watch.stop(); > + assertFalse(watch.isStarted()); > + assertFalse(watch.isSuspended()); > + assertTrue(watch.isStopped()); > + } > + > } > > >