You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/09/15 18:53:24 UTC
[05/15] incubator-brooklyn git commit: fix duration parse for `never`
and tests
fix duration parse for `never` and tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/a340dbc3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/a340dbc3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/a340dbc3
Branch: refs/heads/master
Commit: a340dbc311c19aef84c6b98d4d91b7776932212a
Parents: e92dd1e
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Sep 10 13:52:27 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Sep 10 14:01:59 2015 +0100
----------------------------------------------------------------------
.../org/apache/brooklyn/util/time/Duration.java | 4 +-
.../org/apache/brooklyn/util/time/Time.java | 98 +++++++++++---------
.../org/apache/brooklyn/util/time/TimeTest.java | 8 +-
3 files changed, 64 insertions(+), 46 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a340dbc3/utils/common/src/main/java/org/apache/brooklyn/util/time/Duration.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/time/Duration.java b/utils/common/src/main/java/org/apache/brooklyn/util/time/Duration.java
index b11c0b0..e8dee7d 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/time/Duration.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/time/Duration.java
@@ -28,6 +28,8 @@ import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
+import org.apache.brooklyn.util.text.Strings;
+
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Stopwatch;
@@ -138,7 +140,7 @@ public class Duration implements Comparable<Duration>, Serializable {
* also accepts "forever" (and for those who prefer things exceedingly accurate, "practically_forever").
* Also see {@link #of(Object)}. */
public static Duration parse(String textualDescription) {
- if (textualDescription==null) return null;
+ if (Strings.isBlank(textualDescription)) return null;
if ("null".equalsIgnoreCase(textualDescription)) return null;
if ("forever".equalsIgnoreCase(textualDescription)) return Duration.PRACTICALLY_FOREVER;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a340dbc3/utils/common/src/main/java/org/apache/brooklyn/util/time/Time.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/time/Time.java b/utils/common/src/main/java/org/apache/brooklyn/util/time/Time.java
index b1ab8f3..25bd9de 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/time/Time.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/time/Time.java
@@ -440,63 +440,73 @@ public class Time {
*
* @throws NumberFormatException if cannot be parsed (or if null)
*/
- public static double parseElapsedTimeAsDouble(String timeString) {
+ public static double parseElapsedTimeAsDouble(final String timeStringOrig) {
+ String timeString = timeStringOrig;
if (timeString==null)
throw new NumberFormatException("GeneralHelper.parseTimeString cannot parse a null string");
try {
double d = Double.parseDouble(timeString);
return d;
} catch (NumberFormatException e) {
- //look for a type marker
- timeString = timeString.trim();
- String s = Strings.getLastWord(timeString).toLowerCase();
- timeString = timeString.substring(0, timeString.length()-s.length()).trim();
- int i=0;
- while (s.length()>i) {
- char c = s.charAt(i);
- if (c=='.' || Character.isDigit(c)) i++;
- else break;
- }
- String num = s.substring(0, i);
- if (i==0) {
- num = Strings.getLastWord(timeString).toLowerCase();
- timeString = timeString.substring(0, timeString.length()-num.length()).trim();
- } else {
- s = s.substring(i);
- }
- long multiplier = 0;
- if (num.length()==0) {
- //must be never or something
- if (s.equalsIgnoreCase("never") || s.equalsIgnoreCase("off") || s.equalsIgnoreCase("false"))
- return -1;
- throw new NumberFormatException("unrecognised word '"+s+"' in time string");
- }
- if (s.equalsIgnoreCase("ms") || s.equalsIgnoreCase("milli") || s.equalsIgnoreCase("millis")
+ try {
+ //look for a type marker
+ timeString = timeString.trim();
+ String s = Strings.getLastWord(timeString).toLowerCase();
+ timeString = timeString.substring(0, timeString.length()-s.length()).trim();
+ int i=0;
+ while (s.length()>i) {
+ char c = s.charAt(i);
+ if (c=='.' || Character.isDigit(c)) i++;
+ else break;
+ }
+ String num = s.substring(0, i);
+ if (i==0) {
+ if (Strings.isNonBlank(timeString)) {
+ num = Strings.getLastWord(timeString).toLowerCase();
+ timeString = timeString.substring(0, timeString.length()-num.length()).trim();
+ }
+ } else {
+ s = s.substring(i);
+ }
+ long multiplier = 0;
+ if (num.length()==0) {
+ //must be never or something
+ // TODO does 'never' work?
+ if (s.equalsIgnoreCase("never") || s.equalsIgnoreCase("off") || s.equalsIgnoreCase("false"))
+ return -1;
+ throw new NumberFormatException("unrecognised word '"+s+"' in time string");
+ }
+ if (s.equalsIgnoreCase("ms") || s.equalsIgnoreCase("milli") || s.equalsIgnoreCase("millis")
|| s.equalsIgnoreCase("millisec") || s.equalsIgnoreCase("millisecs")
|| s.equalsIgnoreCase("millisecond") || s.equalsIgnoreCase("milliseconds"))
- multiplier = 1;
- else if (s.equalsIgnoreCase("s") || s.equalsIgnoreCase("sec") || s.equalsIgnoreCase("secs")
+ multiplier = 1;
+ else if (s.equalsIgnoreCase("s") || s.equalsIgnoreCase("sec") || s.equalsIgnoreCase("secs")
|| s.equalsIgnoreCase("second") || s.equalsIgnoreCase("seconds"))
- multiplier = 1000;
- else if (s.equalsIgnoreCase("m") || s.equalsIgnoreCase("min") || s.equalsIgnoreCase("mins")
+ multiplier = 1000;
+ else if (s.equalsIgnoreCase("m") || s.equalsIgnoreCase("min") || s.equalsIgnoreCase("mins")
|| s.equalsIgnoreCase("minute") || s.equalsIgnoreCase("minutes"))
- multiplier = 60*1000;
- else if (s.equalsIgnoreCase("h") || s.equalsIgnoreCase("hr") || s.equalsIgnoreCase("hrs")
+ multiplier = 60*1000;
+ else if (s.equalsIgnoreCase("h") || s.equalsIgnoreCase("hr") || s.equalsIgnoreCase("hrs")
|| s.equalsIgnoreCase("hour") || s.equalsIgnoreCase("hours"))
- multiplier = 60*60*1000;
- else if (s.equalsIgnoreCase("d") || s.equalsIgnoreCase("day") || s.equalsIgnoreCase("days"))
- multiplier = 24*60*60*1000;
- else
- throw new NumberFormatException("unknown unit '"+s+"' in time string");
- double d = Double.parseDouble(num);
- double dd = 0;
- if (timeString.length()>0) {
- dd = parseElapsedTimeAsDouble(timeString);
- if (dd==-1) {
- throw new NumberFormatException("cannot combine '"+timeString+"' with '"+num+" "+s+"'");
+ multiplier = 60*60*1000;
+ else if (s.equalsIgnoreCase("d") || s.equalsIgnoreCase("day") || s.equalsIgnoreCase("days"))
+ multiplier = 24*60*60*1000;
+ else
+ throw new NumberFormatException("Unknown unit '"+s+"' in time string '"+timeStringOrig+"'");
+ double d = Double.parseDouble(num);
+ double dd = 0;
+ if (timeString.length()>0) {
+ dd = parseElapsedTimeAsDouble(timeString);
+ if (dd==-1) {
+ throw new NumberFormatException("Cannot combine '"+timeString+"' with '"+num+" "+s+"'");
+ }
}
+ return d*multiplier + dd;
+ } catch (Exception ex) {
+ if (ex instanceof NumberFormatException) throw ex;
+ log.trace("Details of parse failure:", ex);
+ throw new NumberFormatException("Cannot parse time string '"+timeStringOrig+"'");
}
- return d*multiplier + dd;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a340dbc3/utils/common/src/test/java/org/apache/brooklyn/util/time/TimeTest.java
----------------------------------------------------------------------
diff --git a/utils/common/src/test/java/org/apache/brooklyn/util/time/TimeTest.java b/utils/common/src/test/java/org/apache/brooklyn/util/time/TimeTest.java
index 2cce436..60945cf 100644
--- a/utils/common/src/test/java/org/apache/brooklyn/util/time/TimeTest.java
+++ b/utils/common/src/test/java/org/apache/brooklyn/util/time/TimeTest.java
@@ -152,7 +152,13 @@ public class TimeTest {
Assert.assertFalse(Time.hasElapsedSince(aFewSecondsAgo, Duration.TEN_SECONDS));
Assert.assertTrue(Time.hasElapsedSince(-1, Duration.TEN_SECONDS));
}
-
+
+ @Test
+ public void testParseTime() {
+ Assert.assertEquals(Time.parseElapsedTime("1s"), 1000);
+ Assert.assertEquals(Time.parseElapsedTime("never"), -1);
+ }
+
@Test
public void testMakeDateString() {
String in1 = "2015-06-15T12:34:56";