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:13 UTC
[jackrabbit-filevault] 01/01: JCRVLT-526 improved support of legacy
timezone designators "+hhmm"
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());
}