JCRVLT-276 Switch to timezone designators being understood by ISO8601.parse (Fix #14)

git-svn-id: https://svn.apache.org/repos/asf/jackrabbit/commons/filevault-package-maven-plugin/trunk@1828487 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 63f8f50..c9ad0a6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -440,6 +440,12 @@
             <version>3.2.0</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>jackrabbit-jcr-commons</artifactId>
+            <version>2.17.1</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <!-- ====================================================================== -->
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java
index 5481918..dc0d9e5 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java
@@ -81,7 +81,12 @@
 )
 public class GenerateMetadataMojo extends AbstractPackageMojo {
 
-    private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
+    /**
+     *  A date format which is compliant with {@code org.apache.jackrabbit.util.ISO8601.parse(...)}
+     *  @see <a href="https://www.w3.org/TR/NOTE-datetime">Restricted profile for ISO8601</a>
+     *  @see <a href="https://issues.apache.org/jira/browse/JCR-4267">JCR-4267</a>
+     */
+    private final DateFormat iso8601DateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
 
     public static final String MF_KEY_PACKAGE_TYPE = "Content-Package-Type";
 
@@ -785,7 +790,7 @@
         if (!props.containsKey("createdBy")) {
             props.put("createdBy", System.getProperty("user.name"));
         }
-        props.put("created", DATE_FORMAT.format(new Date()));
+        props.put("created", iso8601DateFormat.format(new Date()));
 
         // configurable properties
         props.put("requiresRoot", String.valueOf(requiresRoot));
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/DefaultProjectIT.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/DefaultProjectIT.java
index 44a2abc..2f0e295 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/DefaultProjectIT.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/DefaultProjectIT.java
@@ -16,17 +16,23 @@
  */
 package org.apache.jackrabbit.filevault.maven.packaging.it;
 
-import java.io.IOException;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
 
+import java.io.IOException;
+import java.util.Calendar;
+
+import org.apache.jackrabbit.util.ISO8601;
 import org.apache.maven.it.VerificationException;
+import org.hamcrest.number.OrderingComparison;
 import org.junit.Test;
 
 public class DefaultProjectIT {
 
     private static final String TEST_PROJECT_NAME = "/default-test-projects/";
 
-    private void verify(String projectName) throws VerificationException, IOException {
-        new ProjectBuilder()
+    private ProjectBuilder verify(String projectName) throws VerificationException, IOException {
+        return new ProjectBuilder()
                 .setTestProjectDir(TEST_PROJECT_NAME + projectName)
                 .build()
                 .verifyExpectedFiles()
@@ -37,7 +43,14 @@
 
     @Test
     public void generic_project_package_contains_correct_files() throws Exception {
-        verify("generic");
+        Calendar dateBeforeRun = Calendar.getInstance();
+        String createdDate = verify("generic").getPackageProperty("created");
+        Calendar dateAfterRun = Calendar.getInstance();
+        Calendar date = ISO8601.parse(createdDate);
+        assertNotNull("The created date is not compliant to the ISO8601 profile defined in https://www.w3.org/TR/NOTE-datetime", date);
+        // check actual value
+        assertThat(date, OrderingComparison.greaterThan(dateBeforeRun));
+        assertThat(date, OrderingComparison.lessThan(dateAfterRun));
     }
 
     @Test
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
index 4e9ff04..f339d45 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
@@ -33,6 +33,7 @@
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
 
 import org.apache.maven.it.VerificationException;
@@ -225,6 +226,11 @@
         if (buildExpectedToFail) {
             return this;
         }
+        assertEquals("Property '" + key + "' has correct value", value, getPackageProperty(key));
+        return this;
+    }
+
+    public String getPackageProperty(String key) throws ZipException, IOException {
         Properties properties;
         try (ZipFile zip = new ZipFile(testPackageFile)) {
             ZipEntry propertiesFile = zip.getEntry("META-INF/vault/properties.xml");
@@ -233,9 +239,7 @@
             properties = new Properties();
             properties.loadFromXML(zip.getInputStream(propertiesFile));
         }
-
-        assertEquals("Property '" + key + "' has correct value", value, properties.getProperty(key));
-        return this;
+        return properties.getProperty(key);
     }
 
     public ProjectBuilder verifyExpectedManifest() throws IOException {