You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2009/07/24 09:29:22 UTC
svn commit: r797350 - in /poi/trunk/src: documentation/content/xdocs/
documentation/content/xdocs/spreadsheet/
ooxml/java/org/apache/poi/openxml4j/opc/
ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/
ooxml/java/org/apache/poi/xssf/usermod...
Author: yegor
Date: Fri Jul 24 07:29:22 2009
New Revision: 797350
URL: http://svn.apache.org/viewvc?rev=797350&view=rev
Log:
fixed compatibility issues with OpenOffice 3.0 and Excel 2008 Mac sp2, see Bugzilla #46419 and #47559
Modified:
poi/trunk/src/documentation/content/xdocs/spreadsheet/quick-guide.xml
poi/trunk/src/documentation/content/xdocs/status.xml
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationship.java
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackagingURIHelper.java
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackagingURIHelper.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java
Modified: poi/trunk/src/documentation/content/xdocs/spreadsheet/quick-guide.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/spreadsheet/quick-guide.xml?rev=797350&r1=797349&r2=797350&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/spreadsheet/quick-guide.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/spreadsheet/quick-guide.xml Fri Jul 24 07:29:22 2009
@@ -22,10 +22,6 @@
<document>
<header>
<title>Busy Developers' Guide to HSSF and XSSF Features</title>
- <authors>
- <person email="user@poi.apache.org" name="Glen Stampoultzis" id="CO"/>
- <person email="user@poi.apache.org" name="Yegor Kozlov" id="YK"/>
- </authors>
</header>
<body>
<section><title>Busy Developers' Guide to Features</title>
Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=797350&r1=797349&r2=797350&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Fri Jul 24 07:29:22 2009
@@ -33,6 +33,8 @@
<changes>
<release version="3.5-beta7" date="2009-??-??">
+ <action dev="POI-DEVELOPERS" type="fix">46419 - Fixed compatibility issue with OpenOffice 3.0</action>
+ <action dev="POI-DEVELOPERS" type="fix">47559 - Fixed compatibility issue with Excel 2008 Max sp2</action>
<action dev="POI-DEVELOPERS" type="fix">47540 - Fix for saving custom and extended OOXML properties</action>
<action dev="POI-DEVELOPERS" type="fix">47535 - Fixed WordExtractor to tolerate files with empty footnote block</action>
<action dev="POI-DEVELOPERS" type="fix">47517 - Fixed ExtractorFactory to support .xltx and .dotx files</action>
Modified: poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationship.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationship.java?rev=797350&r1=797349&r2=797350&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationship.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationship.java Fri Jul 24 07:29:22 2009
@@ -136,7 +136,7 @@
/* Getters */
- public URI getContainerPartRelationship() {
+ public static URI getContainerPartRelationship() {
return containerRelationshipPart;
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackagingURIHelper.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackagingURIHelper.java?rev=797350&r1=797349&r2=797350&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackagingURIHelper.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackagingURIHelper.java Fri Jul 24 07:29:22 2009
@@ -259,11 +259,14 @@
* The source part URI.
* @param targetURI
* The target part URI.
+ * @param msCompatible if true then remove leading slash from the relativized URI.
+ * This flag violates [M1.4]: A part name shall start with a forward slash ('/') character, but
+ * allows generating URIs compatible with MS Office and OpenOffice.
* @return A fully relativize part name URI ('word/media/image1.gif',
* '/word/document.xml' => 'media/image1.gif') else
* <code>null</code>.
*/
- public static URI relativizeURI(URI sourceURI, URI targetURI) {
+ public static URI relativizeURI(URI sourceURI, URI targetURI, boolean msCompatible) {
StringBuilder retVal = new StringBuilder();
String[] segmentsSource = sourceURI.getPath().split("/", -1);
String[] segmentsTarget = targetURI.getPath().split("/", -1);
@@ -283,6 +286,15 @@
// If the source is the root, then the relativized
// form must actually be an absolute URI
if(sourceURI.toString().equals("/")) {
+ String path = targetURI.getPath();
+ if(msCompatible && path.charAt(0) == '/') {
+ try {
+ targetURI = new URI(path.substring(1));
+ } catch (Exception e) {
+ System.err.println(e);
+ return null;
+ }
+ }
return targetURI;
}
@@ -358,7 +370,22 @@
}
}
- /**
+ /**
+ * Fully relativize the source part URI against the target part URI.
+ *
+ * @param sourceURI
+ * The source part URI.
+ * @param targetURI
+ * The target part URI.
+ * @return A fully relativize part name URI ('word/media/image1.gif',
+ * '/word/document.xml' => 'media/image1.gif') else
+ * <code>null</code>.
+ */
+ public static URI relativizeURI(URI sourceURI, URI targetURI) {
+ return relativizeURI(sourceURI, targetURI, false);
+ }
+
+ /**
* Resolve a source uri against a target.
*
* @param sourcePartUri
Modified: poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java?rev=797350&r1=797349&r2=797350&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java Fri Jul 24 07:29:22 2009
@@ -163,7 +163,7 @@
} else {
URI targetURI = rel.getTargetURI();
targetValue = PackagingURIHelper.relativizeURI(
- sourcePartURI, targetURI).getPath();
+ sourcePartURI, targetURI, true).getPath();
if (targetURI.getRawFragment() != null) {
targetValue += "#" + targetURI.getRawFragment();
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java?rev=797350&r1=797349&r2=797350&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java Fri Jul 24 07:29:22 2009
@@ -30,6 +30,7 @@
import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.POIXMLException;
+import org.apache.poi.POIXMLProperties;
import org.apache.poi.hssf.record.formula.SheetNameFormatter;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage;
@@ -228,6 +229,10 @@
bv.setActiveTab(0);
workbook.addNewSheets();
+ //required by Excel 2008 Mac sp2, see Bugzilla #47559
+ POIXMLProperties.ExtendedProperties expProps = getProperties().getExtendedProperties();
+ expProps.getUnderlyingProperties().setApplication("Microsoft Excel");
+
sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, XSSFFactory.getInstance());
stylesSource = (StylesTable)createRelationship(XSSFRelation.STYLES, XSSFFactory.getInstance());
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java?rev=797350&r1=797349&r2=797350&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java Fri Jul 24 07:29:22 2009
@@ -23,6 +23,7 @@
import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLException;
import org.apache.poi.POIXMLDocumentPart;
+import org.apache.poi.POIXMLProperties;
import org.apache.poi.util.PackageHelper;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.xmlbeans.XmlException;
@@ -187,6 +188,9 @@
ctDocument = CTDocument1.Factory.newInstance();
ctDocument.addNewBody();
+
+ POIXMLProperties.ExtendedProperties expProps = getProperties().getExtendedProperties();
+ expProps.getUnderlyingProperties().setApplication("Microsoft Office Word");
}
/**
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java?rev=797350&r1=797349&r2=797350&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java Fri Jul 24 07:29:22 2009
@@ -27,6 +27,7 @@
import java.lang.reflect.Field;
import java.net.URI;
import java.util.TreeMap;
+import java.util.Iterator;
import junit.framework.TestCase;
@@ -36,11 +37,14 @@
import org.apache.poi.openxml4j.opc.internal.ContentTypeManager;
import org.apache.poi.openxml4j.opc.internal.FileHelper;
import org.apache.poi.util.TempFile;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.util.POILogger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.dom4j.QName;
+import org.dom4j.io.SAXReader;
public final class TestPackage extends TestCase {
private static Logger logger = Logger.getLogger("org.apache.poi.openxml4j.test");
@@ -185,16 +189,17 @@
// Save and re-load
pkg.close();
File tmp = TempFile.createTempFile("testCreatePackageWithCoreDocument", ".zip");
- FileOutputStream fout = new FileOutputStream(tmp);
+ FileOutputStream fout = new FileOutputStream(tmp);
fout.write(baos.toByteArray());
fout.close();
pkg = OPCPackage.open(tmp.getPath());
//tmp.delete();
-
+
// Check still right
coreRels = pkg.getRelationshipsByType(PackageRelationshipTypes.CORE_DOCUMENT);
assertEquals(1, coreRels.size());
coreRel = coreRels.getRelationship(0);
+
assertEquals("/", coreRel.getSourceURI().toString());
assertEquals("/xl/workbook.xml", coreRel.getTargetURI().toString());
corePart = pkg.getPart(coreRel);
@@ -205,10 +210,30 @@
rel = rels.getRelationship(0);
assertEquals("Sheet1!A1", rel.getTargetURI().getRawFragment());
+ assertMSCompatibility(pkg);
+ }
+
+ private void assertMSCompatibility(OPCPackage pkg) throws Exception {
+ PackagePartName relName = PackagingURIHelper.createPartName(PackageRelationship.getContainerPartRelationship());
+ PackagePart relPart = pkg.getPart(relName);
+ SAXReader reader = new SAXReader();
+ Document xmlRelationshipsDoc = reader
+ .read(relPart.getInputStream());
+
+ Element root = xmlRelationshipsDoc.getRootElement();
+ for (Iterator i = root
+ .elementIterator(PackageRelationship.RELATIONSHIP_TAG_NAME); i
+ .hasNext();) {
+ Element element = (Element) i.next();
+ String value = element.attribute(
+ PackageRelationship.TARGET_ATTRIBUTE_NAME)
+ .getValue();
+ assertTrue("Root target must not start with a leadng slash ('/'): " + value, value.charAt(0) != '/');
+ }
}
- /**
+ /**
* Test package opening.
*/
public void testOpenPackage() throws Exception {
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackagingURIHelper.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackagingURIHelper.java?rev=797350&r1=797349&r2=797350&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackagingURIHelper.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackagingURIHelper.java Fri Jul 24 07:29:22 2009
@@ -31,8 +31,6 @@
/**
* Test relativizePartName() method.
- *
- * TODO: fix and unable
*/
public void testRelativizeURI() throws Exception {
URI uri1 = new URI("/word/document.xml");
@@ -54,23 +52,15 @@
URI retURI2 = PackagingURIHelper.relativizeURI(uri1, uri1);
assertEquals("", retURI2.getPath());
- // Document and root totally different
- URI uri4 = new URI("/");
- try {
- PackagingURIHelper.relativizeURI(uri1, uri4);
- //TODO: figure oout why the assertion fails
- //fail("Must throw an exception ! Can't relativize with an empty URI");
- } catch (Exception e) {
- // Do nothing
- }
- try {
- PackagingURIHelper.relativizeURI(uri4, uri1);
- //TODO: figure oout why the assertion fails
- //fail("Must throw an exception ! Can't relativize with an empty URI");
- } catch (Exception e) {
- // Do nothing
- }
- }
+ // relativization against root
+ URI root = new URI("/");
+ uriRes = PackagingURIHelper.relativizeURI(root, uri1);
+ assertEquals("/word/document.xml", uriRes.toString());
+
+ //URI compatible with MS Office and OpenOffice: leading slash is removed
+ uriRes = PackagingURIHelper.relativizeURI(root, uri1, true);
+ assertEquals("word/document.xml", uriRes.toString());
+ }
/**
* Test createPartName(String, y)
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java?rev=797350&r1=797349&r2=797350&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java Fri Jul 24 07:29:22 2009
@@ -260,6 +260,8 @@
XSSFWorkbook workbook = new XSSFWorkbook();
POIXMLProperties props = workbook.getProperties();
assertNotNull(props);
+ //the Application property must be set for new workbooks, see Bugzilla #47559
+ assertEquals("Microsoft Excel", props.getExtendedProperties().getUnderlyingProperties().getApplication());
PackagePropertiesPart opcProps = props.getCoreProperties().getUnderlyingProperties();
assertNotNull(opcProps);
@@ -269,6 +271,7 @@
opcProps.setCreatorProperty("poi-dev@poi.apache.org");
workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook);
+ assertEquals("Microsoft Excel", workbook.getProperties().getExtendedProperties().getUnderlyingProperties().getApplication());
opcProps = workbook.getProperties().getCoreProperties().getUnderlyingProperties();
assertEquals("Testing Bugzilla #47460", opcProps.getTitleProperty().getValue());
assertEquals("poi-dev@poi.apache.org", opcProps.getCreatorProperty().getValue());
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java?rev=797350&r1=797349&r2=797350&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java Fri Jul 24 07:29:22 2009
@@ -21,6 +21,7 @@
import junit.framework.TestCase;
import org.apache.poi.POIXMLDocument;
+import org.apache.poi.POIXMLProperties;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
@@ -119,4 +120,12 @@
assertEquals(" ", xml.getProperties().getCoreProperties().getTitle());
assertEquals(" ", xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty().getValue());
}
+
+ public void testWorkbookProperties() throws Exception {
+ XWPFDocument doc = new XWPFDocument();
+ POIXMLProperties props = doc.getProperties();
+ assertNotNull(props);
+ assertEquals("Microsoft Office Word", props.getExtendedProperties().getUnderlyingProperties().getApplication());
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org