You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2018/08/22 19:31:56 UTC
svn commit: r1838677 - in /pdfbox/branches/2.0/preflight/src:
main/java/org/apache/pdfbox/preflight/metadata/SynchronizedMetaDataValidation.java
test/java/org/apache/pdfbox/preflight/metadata/TestSynchronizedMetadataValidation.java
Author: tilman
Date: Wed Aug 22 19:31:56 2018
New Revision: 1838677
URL: http://svn.apache.org/viewvc?rev=1838677&view=rev
Log:
PDFBOX-4292: compare calendar objects instead of ISO 8601 values to avoid false differences when time zones are different, as suggested by Alonso Gonzalez; set milliseconds to 0 in test for xmp values because these milliseconds are kept, but not in COS values; add a test
Modified:
pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/SynchronizedMetaDataValidation.java
pdfbox/branches/2.0/preflight/src/test/java/org/apache/pdfbox/preflight/metadata/TestSynchronizedMetadataValidation.java
Modified: pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/SynchronizedMetaDataValidation.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/SynchronizedMetaDataValidation.java?rev=1838677&r1=1838676&r2=1838677&view=diff
==============================================================================
--- pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/SynchronizedMetaDataValidation.java (original)
+++ pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/SynchronizedMetaDataValidation.java Wed Aug 22 19:31:56 2018
@@ -35,7 +35,6 @@ import org.apache.pdfbox.pdmodel.PDDocum
import org.apache.pdfbox.preflight.PreflightConstants;
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
import org.apache.pdfbox.preflight.exception.ValidationException;
-import org.apache.xmpbox.DateConverter;
import org.apache.xmpbox.XMPMetadata;
import org.apache.xmpbox.schema.AdobePDFSchema;
import org.apache.xmpbox.schema.DublinCoreSchema;
@@ -352,7 +351,7 @@ public class SynchronizedMetaDataValidat
}
else
{
- if (!DateConverter.toISO8601(xmpCreationDate).equals(DateConverter.toISO8601(creationDate)))
+ if (xmpCreationDate.compareTo(creationDate) != 0)
{
ve.add(unsynchronizedMetaDataError("CreationDate"));
}
@@ -395,7 +394,7 @@ public class SynchronizedMetaDataValidat
}
else
{
- if (!DateConverter.toISO8601(xmpModifyDate).equals(DateConverter.toISO8601(modifyDate)))
+ if (xmpModifyDate.compareTo(modifyDate) != 0)
{
ve.add(unsynchronizedMetaDataError("ModificationDate"));
}
Modified: pdfbox/branches/2.0/preflight/src/test/java/org/apache/pdfbox/preflight/metadata/TestSynchronizedMetadataValidation.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/preflight/src/test/java/org/apache/pdfbox/preflight/metadata/TestSynchronizedMetadataValidation.java?rev=1838677&r1=1838676&r2=1838677&view=diff
==============================================================================
--- pdfbox/branches/2.0/preflight/src/test/java/org/apache/pdfbox/preflight/metadata/TestSynchronizedMetadataValidation.java (original)
+++ pdfbox/branches/2.0/preflight/src/test/java/org/apache/pdfbox/preflight/metadata/TestSynchronizedMetadataValidation.java Wed Aug 22 19:31:56 2018
@@ -123,14 +123,7 @@ public class TestSynchronizedMetadataVal
@Test
public void testEmptyXMP() throws Exception
{
- title = "TITLE";
- author = "AUTHOR(S)";
- subject = "SUBJECTS";
- keywords = "KEYWORD(S)";
- creator = "CREATOR";
- producer = "PRODUCER";
- creationDate = Calendar.getInstance();
- modifyDate = Calendar.getInstance();
+ initValues();
// Writing info in Document Information dictionary
// TITLE
@@ -173,14 +166,7 @@ public class TestSynchronizedMetadataVal
@Test
public void testEmptyXMPSchemas() throws Exception
{
- title = "TITLE";
- author = "AUTHOR(S)";
- subject = "SUBJECTS";
- keywords = "KEYWORD(S)";
- creator = "CREATOR";
- producer = "PRODUCER";
- creationDate = Calendar.getInstance();
- modifyDate = Calendar.getInstance();
+ initValues();
// building temporary XMP metadata (but empty)
metadata.createAndAddDublinCoreSchema();
@@ -375,14 +361,7 @@ public class TestSynchronizedMetadataVal
@Test
public void testAllInfoSynhcronized() throws Exception
{
- title = "TITLE";
- author = "AUTHOR(S)";
- subject = "SUBJECTS";
- keywords = "KEYWORD(S)";
- creator = "CREATOR";
- producer = "PRODUCER";
- creationDate = Calendar.getInstance();
- modifyDate = Calendar.getInstance();
+ initValues();
// building temporary XMP metadata
DublinCoreSchema dc = metadata.createAndAddDublinCoreSchema();
@@ -447,14 +426,7 @@ public class TestSynchronizedMetadataVal
@Test
public void testBadPrefixSchemas() throws Exception
{
- title = "TITLE";
- author = "AUTHOR(S)";
- subject = "SUBJECTS";
- keywords = "KEYWORD(S)";
- creator = "CREATOR";
- producer = "PRODUCER";
- creationDate = Calendar.getInstance();
- modifyDate = Calendar.getInstance();
+ initValues();
// building temporary XMP metadata
DublinCoreSchema dc = new DublinCoreSchema(metadata, "dctest");
@@ -514,14 +486,7 @@ public class TestSynchronizedMetadataVal
@Test
public void testdoublePrefixSchemas() throws Exception
{
- title = "TITLE";
- author = "AUTHOR(S)";
- subject = "SUBJECTS";
- keywords = "KEYWORD(S)";
- creator = "CREATOR";
- producer = "PRODUCER";
- creationDate = Calendar.getInstance();
- modifyDate = Calendar.getInstance();
+ initValues();
// building temporary XMP metadata
DublinCoreSchema dc = metadata.createAndAddDublinCoreSchema();
@@ -575,7 +540,40 @@ public class TestSynchronizedMetadataVal
{
throw new Exception(e.getMessage());
}
+ }
+
+ /**
+ * Tests that two date values, which are from different time zones but
+ * really identical, are detected as such.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testPDFBox4292() throws Exception
+ {
+ initValues();
+
+ Calendar cal1 = org.apache.pdfbox.util.DateConverter.toCalendar("20180817115837+02'00'");
+ Calendar cal2 = org.apache.xmpbox.DateConverter.toCalendar("2018-08-17T09:58:37Z");
+
+ XMPBasicSchema xmp = metadata.createAndAddXMPBasicSchema();
+
+ dico.setCreationDate(cal1);
+ xmp.setCreateDate(cal2);
+ dico.setModificationDate(cal1);
+ xmp.setModifyDate(cal2);
+ // Launching synchronization test
+ try
+ {
+ ve = sync.validateMetadataSynchronization(doc, metadata);
+ // Test unsychronized value
+ Assert.assertEquals(0, ve.size());
+ }
+ catch (ValidationException e)
+ {
+ throw new Exception(e.getMessage());
+ }
}
@After
@@ -595,4 +593,21 @@ public class TestSynchronizedMetadataVal
*/
}
+ private void initValues()
+ {
+ title = "TITLE";
+ author = "AUTHOR(S)";
+ subject = "SUBJECTS";
+ keywords = "KEYWORD(S)";
+ creator = "CREATOR";
+ producer = "PRODUCER";
+ creationDate = Calendar.getInstance();
+ modifyDate = Calendar.getInstance();
+
+ // PDFBOX-4292: because xmp keeps the milliseconds before writing to XML,
+ // but COS doesn't, tests would fail when calendar values are compared
+ // so reset the milliseconds.
+ creationDate.set(Calendar.MILLISECOND, 0);
+ modifyDate.set(Calendar.MILLISECOND, 0);
+ }
}