You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2021/06/07 15:40:12 UTC

[jackrabbit-filevault] branch bugfix/JCRVLT-526-improve-deprecated-timezone-designator-support created (now 606330d)

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a change to branch bugfix/JCRVLT-526-improve-deprecated-timezone-designator-support
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git.


      at 606330d  JCRVLT-526 improved support of legacy timezone designators "+hhmm"

This branch includes the following new commits:

     new 606330d  JCRVLT-526 improved support of legacy timezone designators "+hhmm"

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[jackrabbit-filevault] 01/01: JCRVLT-526 improved support of legacy timezone designators "+hhmm"

Posted by kw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch bugfix/JCRVLT-526-improve-deprecated-timezone-designator-support
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git

commit 606330da2e1ac5935cdbb5388b14fa906ae06ad6
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Mon Jun 7 17:39:57 2021 +0200

    JCRVLT-526 improved support of legacy timezone designators "+hhmm"
    
    Based on a suggestion by Julian Sedding
---
 .../packaging/impl/PackagePropertiesImpl.java      | 30 +++++++++-------------
 .../packaging/impl/PackagePropertiesImplTest.java  |  8 +++---
 2 files changed, 15 insertions(+), 23 deletions(-)

diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImpl.java
index 8a56e98..112cc91 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImpl.java
@@ -19,16 +19,17 @@ package org.apache.jackrabbit.vault.packaging.impl;
 
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.Enumeration;
+import java.util.GregorianCalendar;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
-import org.apache.jackrabbit.util.ISO8601;
 import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.packaging.Dependency;
 import org.apache.jackrabbit.vault.packaging.PackageId;
@@ -48,9 +49,6 @@ public abstract class PackagePropertiesImpl implements PackageProperties {
 
     private static final Logger log = LoggerFactory.getLogger(PackagePropertiesImpl.class);
 
-    /** Matches dates with timezone like +02 or +0200 so that these can be transformed to +02:00 in {@link #getDateProperty(String)}. */
-    private static final Pattern TIMEZONE_FIX_PATTERN = Pattern.compile("(?<dateUptoTzHours>.*[+-]\\d\\d)(?<tzMinutes>\\d\\d)?");
-
     private PackageId id;
 
     @Override
@@ -224,21 +222,17 @@ public abstract class PackagePropertiesImpl implements PackageProperties {
     public Calendar getDateProperty(String name) {
         Calendar result = null;
         try {
-            // TODO: add timezone if not there?
             String p = getProperty(name);
             if (p != null) {
-                result = ISO8601.parse(p);
-                if (result == null) {
-                    // Perhaps this is due to unusual timezone format +02 or +0200 that aren't supported by ISO8601.parse
-                    // but sometimes produced by maven plugins, compare https://issues.apache.org/jira/browse/JCRVLT-276
-                    Matcher splittedDate = TIMEZONE_FIX_PATTERN.matcher(p);
-                    if (splittedDate.matches()) {
-                        String tzminutes = splittedDate.group("tzMinutes");
-                        tzminutes = tzminutes != null ? tzminutes : "00";
-                        String reformattedDate = splittedDate.group("dateUptoTzHours") + ":" + tzminutes;
-                        result = ISO8601.parse(reformattedDate);
-                    }
+                ZonedDateTime zonedDateTime;
+                try {
+                    // supports date in format new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
+                    zonedDateTime = ZonedDateTime.parse(p, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
+                } catch (DateTimeParseException e) {
+                    // support dates given out via new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); as well (used in package-maven-plugin till version 1.0.3, compare with https://issues.apache.org/jira/browse/JCRVLT-276)
+                    zonedDateTime = ZonedDateTime.parse(p, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX"));
                 }
+                result = GregorianCalendar.from(zonedDateTime);
             }
         } catch (Exception e) {
             log.error("Error while converting date property", e);
diff --git a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImplTest.java b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImplTest.java
index 43a40eb..7586235 100644
--- a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImplTest.java
+++ b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImplTest.java
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.vault.packaging.impl;
 
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.time.ZoneOffset;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.HashMap;
@@ -93,9 +94,6 @@ public class PackagePropertiesImplTest {
         checkDateParsing("2021-05-26T15:12:21.673+0200","2021-05-26T13:12:21.673Z");
         checkDateParsing("2021-05-26T15:12:21.673-0230","2021-05-26T17:42:21.673Z");
 
-        // missing timezone is treated as UTC. TODO is that right?
-        checkDateParsing("2021-05-26T15:12:21.673","2021-05-26T15:12:21.673Z");
-
         // check that some edge cases don't break
         checkDateParsing("nonsense",null);
         checkDateParsing("",null);
@@ -106,8 +104,8 @@ public class PackagePropertiesImplTest {
         PackageProperties packageProperties = new SimplePackageProperties(Collections.singletonMap(PackageProperties.NAME_CREATED, original));
         Calendar created = packageProperties.getCreated();
         if (expected != null) {
-            MatcherAssert.assertThat("Date was not be parsed: " + original, created, Matchers.notNullValue());
-            MatcherAssert.assertThat(created.toInstant().toString(), Matchers.equalTo(expected));
+            MatcherAssert.assertThat("Date could not be parsed: " + original, created, Matchers.notNullValue());
+            MatcherAssert.assertThat(created.toInstant().atOffset(ZoneOffset.UTC).toString(), Matchers.equalTo(expected));
         } else {
             MatcherAssert.assertThat("Invalid date must return null when parsing: " + original, created, Matchers.nullValue());
         }