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/06/15 09:41:27 UTC

[03/10] incubator-brooklyn git commit: require java 7

require java 7

needed for named groups in regexes;
also fix semantics of 'T' separator and tidy date parsing


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/0988b6d8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/0988b6d8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/0988b6d8

Branch: refs/heads/master
Commit: 0988b6d8f58bea06fe81191eddba691140fde5f1
Parents: 30c3029
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Jun 8 09:36:46 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Jun 10 18:38:17 2015 +0100

----------------------------------------------------------------------
 docs/guide/ops/requirements.md                  |  5 +-
 pom.xml                                         |  2 +-
 .../src/main/java/brooklyn/util/time/Time.java  | 54 ++++++++++----------
 .../test/java/brooklyn/util/time/TimeTest.java  |  9 ++--
 4 files changed, 35 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0988b6d8/docs/guide/ops/requirements.md
----------------------------------------------------------------------
diff --git a/docs/guide/ops/requirements.md b/docs/guide/ops/requirements.md
index 7830bc9..d0cf7fd 100644
--- a/docs/guide/ops/requirements.md
+++ b/docs/guide/ops/requirements.md
@@ -28,12 +28,9 @@ Brooklyn has also been tested on Ubuntu 12.04 and OS X.
 
 ## Software Requirements
 
-Brooklyn requires Java (JRE or JDK) minimum version 6. The latest release of version 7 or 8 is recommended.
+Brooklyn requires Java (JRE or JDK) minimum version 7. 
 OpenJDK is recommended. Brooklyn has also been tested on IBM J9 and Oracle's JVM.
 
-* check your `iptables` or other firewall service, making sure that incoming connections on port 8443 is not blocked
-* check that the [linux kernel entropy](increase-entropy.html) is sufficient
-
 
 ## Configuration Requirements
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0988b6d8/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 085e349..6e5bfb5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,7 +108,7 @@
 
     <properties>
         <!-- Compilation -->
-        <java.version>1.6</java.version>
+        <java.version>1.7</java.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0988b6d8/utils/common/src/main/java/brooklyn/util/time/Time.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/brooklyn/util/time/Time.java b/utils/common/src/main/java/brooklyn/util/time/Time.java
index 8fa52cb..ea433a1 100644
--- a/utils/common/src/main/java/brooklyn/util/time/Time.java
+++ b/utils/common/src/main/java/brooklyn/util/time/Time.java
@@ -540,8 +540,7 @@ public class Time {
     private final static String COMMON_SEPARATORS = "-\\.";
     private final static String TIME_SEPARATOR = COMMON_SEPARATORS+":";
     private final static String DATE_SEPARATOR = COMMON_SEPARATORS+"/ ";
-    private final static String TIME_ZONE_SEPARATOR = COMMON_SEPARATORS+":/ ,";
-    private final static String DATE_TIME_SEPARATOR = TIME_ZONE_SEPARATOR+"T'";
+    private final static String DATE_TIME_ANY_ORDER_GROUP_SEPARATOR = COMMON_SEPARATORS+":/ ";
 
     private final static String DATE_ONLY_WITH_INNER_SEPARATORS = 
             namedGroup("year", DIGIT+DIGIT+DIGIT+DIGIT)
@@ -589,12 +588,20 @@ public class Time {
         notMatching(MERIDIAN+options("$", anyChar("^"+LETTER))) // not AM or PM
         + anyChar(LETTER)+"+"+anyChar(LETTER+DIGIT+"\\/\\-\\' _")+"*");
     private final static String TIME_ZONE_SIGNED_OFFSET = namedGroup("tz", options(namedGroup("tzOffset", options("\\+", "-")+
-            DIGIT+optionally(DIGIT)+options("h", "H", "", optionally(":")+DIGIT+DIGIT)), 
+            DIGIT+optionally(DIGIT)+optionally(optionally(":")+DIGIT+DIGIT)), 
         optionally("\\+")+TZ_CODE));
-    private final static String TIME_ZONE_OPTIONALLY_SIGNED_OFFSET = namedGroup("tz", options(namedGroup("tzOffset", options("\\+", "-", " ")+
-            options(optionally(DIGIT)+DIGIT+options("h", "H"), options("0"+DIGIT, "10", "11", "12")+optionally(":")+DIGIT+DIGIT)), 
-        TZ_CODE));
+    private final static String TIME_ZONE_OPTIONALLY_SIGNED_OFFSET = namedGroup("tz", 
+        options(
+            namedGroup("tzOffset", options("\\+", "-", " ")+
+                options("0"+DIGIT, "10", "11", "12")+optionally(optionally(":")+DIGIT+DIGIT)), 
+            TZ_CODE));
 
+    private static String getDateTimeSeparatorPattern(String extraChars) {
+        return options(" +"+optionally(anyChar(DATE_TIME_ANY_ORDER_GROUP_SEPARATOR+extraChars+",")),
+                anyChar(DATE_TIME_ANY_ORDER_GROUP_SEPARATOR+extraChars+","))
+            + anyChar(DATE_TIME_ANY_ORDER_GROUP_SEPARATOR+extraChars)+"*";
+    }
+    
     @SuppressWarnings("deprecation")
     private static Maybe<Date> parseDateSimpleFlexibleFormatParser(String input) {
         input = input.trim();
@@ -611,11 +618,11 @@ public class Time {
         };
         String[] TZ_PATTERNS = new String[] {
             // space then time zone with sign (+-) or code is preferred
-            " " + TIME_ZONE_SIGNED_OFFSET,
+            optionally(getDateTimeSeparatorPattern("")) + " " + TIME_ZONE_SIGNED_OFFSET,
             // then no TZ - but declare the named groups
             namedGroup("tz", namedGroup("tzOffset", "")+namedGroup("tzCode", "")),
             // then any separator then offset with sign
-            anyChar(TIME_ZONE_SEPARATOR)+"+" + TIME_ZONE_SIGNED_OFFSET,
+            getDateTimeSeparatorPattern("") + TIME_ZONE_SIGNED_OFFSET,
             
             // try parsing with enforced separators before TZ first 
             // (so e.g. in the case of DATE-0100, the -0100 is the time, not the timezone)
@@ -623,8 +630,8 @@ public class Time {
             
             // finally match DATE-TIME-1000 as time zone -1000
             // or DATE-TIME 1000 as TZ +1000 in case a + was supplied but converted to ' ' by web
-            // (but be stricter about the format, 2h or 0200 required, and hours <= 12 so as not to confuse with a year)
-            anyChar(TIME_ZONE_SEPARATOR)+"*" + TIME_ZONE_OPTIONALLY_SIGNED_OFFSET
+            // (but be stricter about the format, two or four digits required, and hours <= 12 so as not to confuse with a year)
+            optionally(getDateTimeSeparatorPattern("")) + TIME_ZONE_OPTIONALLY_SIGNED_OFFSET
         };
         
         List<String> basePatterns = MutableList.of();
@@ -632,28 +639,28 @@ public class Time {
         // patterns with date first
         String[] DATE_PATTERNS_UNCLOSED = new String[] {
             // separator before time *required* if date had separators
-            DATE_ONLY_WITH_INNER_SEPARATORS + "(,?"+(namedGroup("sep", anyChar(DATE_TIME_SEPARATOR)+"+")),
+            DATE_ONLY_WITH_INNER_SEPARATORS + "("+getDateTimeSeparatorPattern("T"),
             // separator before time optional if date did not have separators
-            DATE_ONLY_NO_SEPARATORS + "("+(namedGroup("sep", anyChar(DATE_TIME_SEPARATOR)+"*")),
-            // separator before time required if date had words, comma allowed but needs something else (e.g. space), 'T' for UTC not supported
-            DATE_WORDS_2 + "(,?"+anyChar(DATE_TIME_SEPARATOR)+"+"+namedGroup("sep",""),
-            DATE_WORDS_3 + "(,?"+anyChar(DATE_TIME_SEPARATOR)+"+"+namedGroup("sep",""),
+            DATE_ONLY_NO_SEPARATORS + "("+optionally(getDateTimeSeparatorPattern("T")),
+            // separator before time required if date has words
+            DATE_WORDS_2 + "("+getDateTimeSeparatorPattern("T"),
+            DATE_WORDS_3 + "("+getDateTimeSeparatorPattern("T"),
         };
         for (String tzP: TZ_PATTERNS)
             for (String dateP: DATE_PATTERNS_UNCLOSED)
                 for (String timeP: TIME_PATTERNS)
                     basePatterns.add("^" + dateP + timeP+")?" + tzP + "$");
         
-        // also allow time first, with TZ after, then before; separator needed but sep T for UTC not supported
+        // also allow time first, with TZ after, then before
         for (String tzP: TZ_PATTERNS)
             for (String dateP: DATE_PATTERNS)
                 for (String timeP: TIME_PATTERNS)
-                    basePatterns.add("^" + timeP + ",?"+anyChar(DATE_TIME_SEPARATOR)+"+" +namedGroup("sep","") + dateP + tzP + "$");
-        // also allow time first, with TZ after, then before; separator needed but sep T for UTC not supported
+                    basePatterns.add("^" + timeP + getDateTimeSeparatorPattern("") + dateP + tzP + "$");
+        // also allow time first, with TZ after, then before
         for (String tzP: TZ_PATTERNS)
             for (String dateP: DATE_PATTERNS)
                 for (String timeP: TIME_PATTERNS)
-                    basePatterns.add("^" + timeP + tzP + ",?"+anyChar(DATE_TIME_SEPARATOR)+"+" +namedGroup("sep","") + dateP + "$");
+                    basePatterns.add("^" + timeP + tzP + getDateTimeSeparatorPattern("") + dateP + "$");
 
         Maybe<Matcher> mm = Maybe.absent();
         for (String p: basePatterns) {
@@ -665,13 +672,6 @@ public class Time {
             Calendar result;
 
             String tz = m.group("tz");
-            String sep = m.group("sep");
-            if (sep!=null && sep.trim().equals("T")) {
-                if (Strings.isNonBlank(tz)) {
-                    return Maybe.absent("Cannot use 'T' separator and specify time zone ("+tz+")");
-                }
-                tz = "UTC";
-            }
             
             int year = Integer.parseInt(m.group("year"));
             int day = Integer.parseInt(m.group("day"));
@@ -701,7 +701,7 @@ public class Time {
                     tzz = getTimeZone(tz);
                 }
                 if (tzz==null) {
-                    Maybe<Matcher> tmm = match("^ ?(?<tzH>(\\+|\\-||)"+DIGIT+optionally(DIGIT)+")(h|H||"+optionally(":")+"(?<tzM>"+DIGIT+DIGIT+"))$", tz);
+                    Maybe<Matcher> tmm = match("^ ?(?<tzH>(\\+|\\-||)"+DIGIT+optionally(DIGIT)+")"+optionally(optionally(":")+namedGroup("tzM", DIGIT+DIGIT))+"$", tz);
                     if (tmm.isAbsent()) {
                         return Maybe.absent("Unknown date format '"+input+"': invalid timezone '"+tz+"'; try 'yyyy-MM-dd HH:mm:ss.SSS +0000'");
                     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0988b6d8/utils/common/src/test/java/brooklyn/util/time/TimeTest.java
----------------------------------------------------------------------
diff --git a/utils/common/src/test/java/brooklyn/util/time/TimeTest.java b/utils/common/src/test/java/brooklyn/util/time/TimeTest.java
index ae9f78e..774217e 100644
--- a/utils/common/src/test/java/brooklyn/util/time/TimeTest.java
+++ b/utils/common/src/test/java/brooklyn/util/time/TimeTest.java
@@ -213,6 +213,9 @@ public class TimeTest {
         }
         assertDatesParseToEqual("2015.6.4+0100", "2015-06-04-0000+0100");
         assertDatesParseToEqual("20150604-+0100", "2015-06-04 +0100");
+        assertDatesParseToEqual("20150604, +0100", "2015-06-04 +0100");
+        assertDatesParseToEqual("201506040000, 0100", "2015-06-04 +0100");
+        assertDatesParseToEqual("20150604  , 0000  , 0100", "2015-06-04 +0100");
         assertDatesParseToEqual("2015-6-4 +0100", "2015-06-04-0000 +0100");
         assertDatesParseToEqual("2015-6-4 -0100", "2015-06-04-0000 -0100");
         assertDatesParseToEqual("20150604-0000//-0100", "2015-06-04 -0100");
@@ -239,8 +242,8 @@ public class TimeTest {
         // perverse, but accepted for the time being:
         Assert.assertEquals(Time.parseDate("2013-2-29").getTime(), Time.parseDate("2013-3-1").getTime());
         
-        assertDatesParseToEqual("20150604T080012.345", "2015-06-04-080012.345+0000");
-        assertDatesParseToEqual("20150604080012.345Z", "2015-06-04-080012.345+0000");
+        assertDatesParseToEqual("20150604T080012.345", "2015-06-04-080012.345");
+        assertDatesParseToEqual("20150604T080012.345Z", "2015-06-04-080012.345+0000");
         
         // accept am and pm
         assertDatesParseToEqual("20150604 08:00:12.345a", "2015-06-04-080012.345");
@@ -284,7 +287,7 @@ public class TimeTest {
         if (integration) assertDatesParseToEqual("16 Dec 1 2015", "2015-12-01-1600");
         if (integration) assertDatesParseToEqual("16:30 1067 Dec 1 1066", "1067-12-01-1630 +1066");
         assertDatesParseToEqual("1040 1045 12 1", "1045-12-01-1040");
-        assertDatesParseToEqual("1040 1045 12 1 +0h", "1045-12-01-1040Z");
+        assertDatesParseToEqual("1040 1045 12 1 +0", "1045-12-01-1040Z");
         if (integration) assertDatesParseToEqual("1045 Dec 1 1040", "1045-12-01-1040");
         if (integration) assertDatesParseToEqual("10:40 Dec 1 1045", "1045-12-01-1040");
         assertDatesParseToEqual("10.11-2020-12.01", "2020-12-01-1011");