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> <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()); + } + }