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/08 13:53:52 UTC
[jackrabbit-filevault] branch master updated: JCRVLT-526 improved
support of legacy timezone designators "+hhmm" (#144)
This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git
The following commit(s) were added to refs/heads/master by this push:
new c821515 JCRVLT-526 improved support of legacy timezone designators "+hhmm" (#144)
c821515 is described below
commit c821515bfca32f957c89d4a68d1e349c4be45a1f
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Tue Jun 8 15:53:45 2021 +0200
JCRVLT-526 improved support of legacy timezone designators "+hhmm" (#144)
---
.../packaging/impl/PackagePropertiesImpl.java | 32 ++++++++++------------
.../packaging/impl/JcrPackageDefinitionImplIT.java | 7 +++--
.../packaging/impl/PackagePropertiesImplTest.java | 8 ++----
3 files changed, 22 insertions(+), 25 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..af24eb6 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,8 +49,10 @@ 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)?");
+ /** supports parsing dates given out via {@code SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")} */
+ private static final DateTimeFormatter DATE_TIME_FORMATTER_LEGACY = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX");
+ /** supports parsing dates given out via {@code SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX")}" */
+ private static final DateTimeFormatter DATE_TIME_FORMATTER_ISO_8601 = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
private PackageId id;
@@ -224,21 +227,16 @@ 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 {
+ zonedDateTime = ZonedDateTime.parse(p, DATE_TIME_FORMATTER_ISO_8601);
+ } catch (DateTimeParseException e) {
+ // support dates in legacy format (used in package-maven-plugin till version 1.0.3, compare with https://issues.apache.org/jira/browse/JCRVLT-276)
+ zonedDateTime = ZonedDateTime.parse(p, DATE_TIME_FORMATTER_LEGACY);
}
+ 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/JcrPackageDefinitionImplIT.java b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImplIT.java
index aa84b84..32019ae 100644
--- a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImplIT.java
+++ b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImplIT.java
@@ -54,11 +54,12 @@ public class JcrPackageDefinitionImplIT extends IntegrationTestBase {
}
void assertPackagePropertiesEquals(PackageProperties expectedProperties, PackageProperties actualProperties) {
- Assert.assertEquals("lastModified is different", expectedProperties.getLastModified(), actualProperties.getLastModified());
+ // only compare dates, as JCR disregards time zone information from Calendar
+ Assert.assertEquals("lastModified is different", expectedProperties.getLastModified().getTime(), actualProperties.getLastModified().getTime());
Assert.assertEquals("lastModifiedBy is different", expectedProperties.getLastModifiedBy(), actualProperties.getLastModifiedBy());
- Assert.assertEquals("created is different", expectedProperties.getCreated(), actualProperties.getCreated());
+ Assert.assertEquals("created is different", expectedProperties.getCreated().getTime(), actualProperties.getCreated().getTime());
Assert.assertEquals("createdBy is different", expectedProperties.getCreatedBy(), actualProperties.getCreatedBy());
- Assert.assertEquals("lastWrapped is different", expectedProperties.getLastWrapped(), actualProperties.getLastWrapped());
+ Assert.assertEquals("lastWrapped is different", expectedProperties.getLastWrapped().getTime(), actualProperties.getLastWrapped().getTime());
Assert.assertEquals("lastWrappedBy is different", expectedProperties.getLastWrappedBy(), actualProperties.getLastWrappedBy());
Assert.assertEquals("description is different", expectedProperties.getDescription(), actualProperties.getDescription());
Assert.assertEquals("acHandling is different", expectedProperties.getACHandling(), actualProperties.getACHandling());
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());
}