aboutsummaryrefslogtreecommitdiffstats
path: root/src/ooxml
diff options
context:
space:
mode:
authorYegor Kozlov <yegor@apache.org>2010-04-20 12:57:27 +0000
committerYegor Kozlov <yegor@apache.org>2010-04-20 12:57:27 +0000
commitc0ffa079026170a091681c6eefb3e173e91de1eb (patch)
tree0509f3603e1ea9cf0a4a66021be6b81923a3c936 /src/ooxml
parente75b83a2e8530e28adcd1ee193688237c317effb (diff)
downloadpoi-c0ffa079026170a091681c6eefb3e173e91de1eb.tar.gz
poi-c0ffa079026170a091681c6eefb3e173e91de1eb.zip
Fixed locale-sensitive formatters in PackagePropertiesPart, see Bugzilla 49138
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@935896 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml')
-rw-r--r--src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java4
-rw-r--r--src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java46
-rw-r--r--src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java3
3 files changed, 48 insertions, 5 deletions
diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java
index f27d05cbac..800895df6c 100644
--- a/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java
+++ b/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java
@@ -22,6 +22,8 @@ import java.io.OutputStream;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
@@ -561,6 +563,7 @@ public final class PackagePropertiesPart extends PackagePart implements
}
SimpleDateFormat df = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss'Z'");
+ df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date d = df.parse(s, new ParsePosition(0));
if (d == null) {
throw new InvalidFormatException("Date not well formated");
@@ -582,6 +585,7 @@ public final class PackagePropertiesPart extends PackagePart implements
}
SimpleDateFormat df = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss'Z'");
+ df.setTimeZone(TimeZone.getTimeZone("UTC"));
return df.format(d.getValue());
}
diff --git a/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java b/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java
index 1aac08740b..56f1db4613 100644
--- a/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java
+++ b/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java
@@ -17,8 +17,7 @@
package org.apache.poi;
-import java.text.SimpleDateFormat;
-import java.util.Date;
+import java.util.*;
import junit.framework.TestCase;
@@ -27,7 +26,7 @@ import org.apache.poi.xssf.XSSFTestDataSamples;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.XWPFTestDataSamples;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
-import org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProperties;
+import org.apache.poi.openxml4j.util.Nullable;
/**
* Test setting extended and custom OOXML properties
@@ -143,8 +142,8 @@ public final class TestPOIXMLProperties extends TestCase {
_coreProperties.setContentStatus(contentStatus);
assertEquals("Draft", contentStatus);
Date created = _coreProperties.getCreated();
- SimpleDateFormat formatter = new SimpleDateFormat("EEE, MMM d, ''yy");
- assertEquals("Mon, Jul 20, '09", formatter.format(created));
+ // the original file contains a following value: 2009-07-20T13:12:00Z
+ assertTrue(dateTimeEqualToUTCString(created, "2009-07-20T13:12:00Z"));
String creator = _coreProperties.getCreator();
assertEquals("Paolo Mottadelli", creator);
String subject = _coreProperties.getSubject();
@@ -153,6 +152,21 @@ public final class TestPOIXMLProperties extends TestCase {
assertEquals("Hello World", title);
}
+ public void testTransitiveSetters() {
+ XWPFDocument doc = new XWPFDocument();
+ CoreProperties cp = doc.getProperties().getCoreProperties();
+
+ Date dateCreated = new GregorianCalendar(2010, 6, 15, 10, 0, 0).getTime();
+ cp.setCreated(new Nullable<Date>(dateCreated));
+ assertEquals(dateCreated.toString(), cp.getCreated().toString());
+
+ doc = XWPFTestDataSamples.writeOutAndReadBack(doc);
+ cp = doc.getProperties().getCoreProperties();
+ Date dt3 = cp.getCreated();
+ assertEquals(dateCreated.toString(), dt3.toString());
+
+ }
+
public void testGetSetRevision() {
String revision = _coreProperties.getRevision();
assertTrue("Revision number is 1", Integer.parseInt(revision) > 1);
@@ -161,4 +175,26 @@ public final class TestPOIXMLProperties extends TestCase {
_coreProperties.setRevision("20xx");
assertEquals("20", _coreProperties.getRevision());
}
+
+ public static boolean dateTimeEqualToUTCString(Date dateTime, String utcString) {
+ Calendar utcCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.UK);
+ utcCalendar.setTimeInMillis(dateTime.getTime());
+ String dateTimeUtcString = utcCalendar.get(Calendar.YEAR) + "-" +
+ zeroPad((utcCalendar.get(Calendar.MONTH)+1)) + "-" +
+ zeroPad(utcCalendar.get(Calendar.DAY_OF_MONTH)) + "T" +
+ zeroPad(utcCalendar.get(Calendar.HOUR_OF_DAY)) + ":" +
+ zeroPad(utcCalendar.get(Calendar.MINUTE)) + ":" +
+ zeroPad(utcCalendar.get(Calendar.SECOND)) + "Z";
+
+
+ return utcString.equals(dateTimeUtcString);
+ }
+
+ private static String zeroPad(long i) {
+ if (i >= 0 && i <=9) {
+ return "0" + i;
+ } else {
+ return String.valueOf(i);
+ }
+ }
}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java
index d76c24b0c2..b934aa308e 100644
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.TimeZone;
import junit.framework.TestCase;
@@ -64,6 +65,7 @@ public final class TestPackageCoreProperties extends TestCase {
OPCPackage p = OPCPackage.open(inputPath, PackageAccess.READ_WRITE);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+ df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date dateToInsert = df.parse("2007-05-12T08:00:00Z", new ParsePosition(
0));
@@ -96,6 +98,7 @@ public final class TestPackageCoreProperties extends TestCase {
private void compareProperties(OPCPackage p) throws InvalidFormatException {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+ df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date expectedDate = df.parse("2007-05-12T08:00:00Z", new ParsePosition(
0));