You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2008/03/03 16:10:47 UTC
svn commit: r633118 - in /poi/trunk/src: documentation/content/xdocs/
java/org/apache/poi/ java/org/apache/poi/hssf/usermodel/
testcases/org/apache/poi/ testcases/org/apache/poi/hssf/usermodel/
Author: nick
Date: Mon Mar 3 07:10:46 2008
New Revision: 633118
URL: http://svn.apache.org/viewvc?rev=633118&view=rev
Log:
Fix from Yegor from bug #44491 - don't have the new style handy POIDocument property stuff break old style hpsf+hssf use
Added:
poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java (with props)
Modified:
poi/trunk/src/documentation/content/xdocs/changes.xml
poi/trunk/src/documentation/content/xdocs/status.xml
poi/trunk/src/java/org/apache/poi/POIDocument.java
poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
poi/trunk/src/testcases/org/apache/poi/TestPOIDocumentMain.java
Modified: poi/trunk/src/documentation/content/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/changes.xml?rev=633118&r1=633117&r2=633118&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/changes.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/changes.xml Mon Mar 3 07:10:46 2008
@@ -36,6 +36,7 @@
<!-- Don't forget to update status.xml too! -->
<release version="3.1-beta1" date="2008-??-??">
+ <action dev="POI-DEVELOPERS" type="fix">44491 - Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF</action>
<action dev="POI-DEVELOPERS" type="fix">44471 - Crystal Reports generates files with short StyleRecords, which isn't allowed in the spec. Work around this</action>
<action dev="POI-DEVELOPERS" type="add">44450 - Support for Lookup, HLookup and VLookup functions</action>
<action dev="POI-DEVELOPERS" type="fix">44449 - Avoid getting confused when two sheets have shared formulas for the same areas, and when the shared formula is set incorrectly</action>
Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=633118&r1=633117&r2=633118&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Mon Mar 3 07:10:46 2008
@@ -33,6 +33,7 @@
<!-- Don't forget to update changes.xml too! -->
<changes>
<release version="3.1-beta1" date="2008-??-??">
+ <action dev="POI-DEVELOPERS" type="fix">44491 - Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF</action>
<action dev="POI-DEVELOPERS" type="fix">44471 - Crystal Reports generates files with short StyleRecords, which isn't allowed in the spec. Work around this</action>
<action dev="POI-DEVELOPERS" type="add">44450 - Support for Lookup, HLookup and VLookup functions</action>
<action dev="POI-DEVELOPERS" type="fix">44449 - Avoid getting confused when two sheets have shared formulas for the same areas, and when the shared formula is set incorrectly</action>
Modified: poi/trunk/src/java/org/apache/poi/POIDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/POIDocument.java?rev=633118&r1=633117&r2=633118&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/POIDocument.java (original)
+++ poi/trunk/src/java/org/apache/poi/POIDocument.java Mon Mar 3 07:10:46 2008
@@ -54,16 +54,24 @@
/** For our own logging use */
protected POILogger logger = POILogFactory.getLogger(this.getClass());
-
- /**
+ /* Have the property streams been read yet? (Only done on-demand) */
+ protected boolean initialized = false;
+
+ /**
* Fetch the Document Summary Information of the document
*/
- public DocumentSummaryInformation getDocumentSummaryInformation() { return dsInf; }
+ public DocumentSummaryInformation getDocumentSummaryInformation() {
+ if(!initialized) readProperties();
+ return dsInf;
+ }
/**
* Fetch the Summary Information of the document
*/
- public SummaryInformation getSummaryInformation() { return sInf; }
+ public SummaryInformation getSummaryInformation() {
+ if(!initialized) readProperties();
+ return sInf;
+ }
/**
* Find, and create objects for, the standard
@@ -89,6 +97,9 @@
} else if(ps != null) {
logger.log(POILogger.WARN, "SummaryInformation property set came back with wrong class - ", ps.getClass());
}
+
+ // Mark the fact that we've now loaded up the properties
+ initialized = true;
}
/**
@@ -133,7 +144,7 @@
* @param writtenEntries a list of POIFS entries to add the property names too
*/
protected void writeProperties(POIFSFileSystem outFS, List writtenEntries) throws IOException {
- if(sInf != null) {
+ if(sInf != null) {
writePropertySet(SummaryInformation.DEFAULT_STREAM_NAME,sInf,outFS);
if(writtenEntries != null) {
writtenEntries.add(SummaryInformation.DEFAULT_STREAM_NAME);
Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java?rev=633118&r1=633117&r2=633118&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java Mon Mar 3 07:10:46 2008
@@ -165,10 +165,7 @@
throws IOException
{
this.preserveNodes = preserveNodes;
-
- // Read in the HPSF properties
this.filesystem = fs;
- readProperties();
// If we're not preserving nodes, don't track the
// POIFS any more
Modified: poi/trunk/src/testcases/org/apache/poi/TestPOIDocumentMain.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/TestPOIDocumentMain.java?rev=633118&r1=633117&r2=633118&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/TestPOIDocumentMain.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/TestPOIDocumentMain.java Mon Mar 3 07:10:46 2008
@@ -85,7 +85,8 @@
public void testWriteProperties() throws Exception {
// Just check we can write them back out into a filesystem
POIFSFileSystem outFS = new POIFSFileSystem();
- doc.writeProperties(outFS);
+ doc.readProperties();
+ doc.writeProperties(outFS);
// Should now hold them
assertNotNull(
@@ -101,7 +102,8 @@
// Write them out
POIFSFileSystem outFS = new POIFSFileSystem();
- doc.writeProperties(outFS);
+ doc.readProperties();
+ doc.writeProperties(outFS);
outFS.writeFilesystem(baos);
// Create a new version
Added: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java?rev=633118&view=auto
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java (added)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java Mon Mar 3 07:10:46 2008
@@ -0,0 +1,98 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hssf.usermodel;
+
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.hpsf.SummaryInformation;
+import org.apache.poi.hpsf.PropertySetFactory;
+
+import java.io.FileInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+
+import junit.framework.TestCase;
+
+/**
+ * Old-style setting of POIFS properties doesn't work with POI 3.0.2
+ *
+ * @author Yegor Kozlov
+ */
+public class TestPOIFSProperties extends TestCase{
+ protected String cwd = System.getProperty("HSSF.testdata.path");
+
+ protected String title = "Testing POIFS properties";
+
+ public void testFail() throws Exception {
+ FileInputStream is = new FileInputStream(new File(cwd, "Simple.xls"));
+ POIFSFileSystem fs = new POIFSFileSystem(is);
+ is.close();
+
+ HSSFWorkbook wb = new HSSFWorkbook(fs);
+
+ //set POIFS properties after constructing HSSFWorkbook
+ //(a piece of code that used to work up to POI 3.0.2)
+ SummaryInformation summary1 = (SummaryInformation)PropertySetFactory.create(fs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME));
+ summary1.setTitle(title);
+ //write the modified property back to POIFS
+ fs.getRoot().getEntry(SummaryInformation.DEFAULT_STREAM_NAME).delete();
+ fs.createDocument(summary1.toInputStream(), SummaryInformation.DEFAULT_STREAM_NAME);
+
+ //save the workbook and read the property
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ wb.write(out);
+ out.close();
+
+ POIFSFileSystem fs2 = new POIFSFileSystem(new ByteArrayInputStream(out.toByteArray()));
+ SummaryInformation summary2 = (SummaryInformation)PropertySetFactory.create(fs2.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME));
+
+ try {
+ //failing assertion
+ assertEquals(title, summary2.getTitle());
+
+ } catch (AssertionError e){
+ assertTrue(true);
+ }
+ }
+
+ public void testOK() throws Exception {
+ FileInputStream is = new FileInputStream(new File(cwd, "Simple.xls"));
+ POIFSFileSystem fs = new POIFSFileSystem(is);
+ is.close();
+
+ //set POIFS properties before constructing HSSFWorkbook
+ SummaryInformation summary1 = (SummaryInformation)PropertySetFactory.create(fs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME));
+ summary1.setTitle(title);
+
+ fs.getRoot().getEntry(SummaryInformation.DEFAULT_STREAM_NAME).delete();
+ fs.createDocument(summary1.toInputStream(), SummaryInformation.DEFAULT_STREAM_NAME);
+
+ HSSFWorkbook wb = new HSSFWorkbook(fs);
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ wb.write(out);
+ out.close();
+
+ //read the property
+ POIFSFileSystem fs2 = new POIFSFileSystem(new ByteArrayInputStream(out.toByteArray()));
+ SummaryInformation summary2 = (SummaryInformation)PropertySetFactory.create(fs2.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME));
+ assertEquals(title, summary2.getTitle());
+
+ }
+}
Propchange: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org