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/01/09 11:59:08 UTC
svn commit: r610336 - in /poi/trunk/src: documentation/content/xdocs/
java/org/apache/poi/hssf/record/ testcases/org/apache/poi/hssf/data/
testcases/org/apache/poi/hssf/usermodel/
Author: nick
Date: Wed Jan 9 02:59:04 2008
New Revision: 610336
URL: http://svn.apache.org/viewvc?rev=610336&view=rev
Log:
Add clone methods to DrawingRecord and AbstractEscherHolderRecord, which allows cloning of some sheets with drawing objects on them. Fixes bug #31795
Added:
poi/trunk/src/testcases/org/apache/poi/hssf/data/SheetWithDrawing.xls (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/hssf/record/AbstractEscherHolderRecord.java
poi/trunk/src/java/org/apache/poi/hssf/record/DrawingRecord.java
poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.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=610336&r1=610335&r2=610336&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/changes.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/changes.xml Wed Jan 9 02:59:04 2008
@@ -36,6 +36,7 @@
<!-- Don't forget to update status.xml too! -->
<release version="3.0.2-FINAL" date="2008-??-??">
+ <action dev="POI-DEVELOPERS" type="fix">31795 - Support cloning of sheets with certain drawing objects on them</action>
<action dev="POI-DEVELOPERS" type="fix">43902 - Don't consider merged regions when auto-sizing columns</action>
<action dev="POI-DEVELOPERS" type="fix">42464 - Avoid "Expected ExpPtg to be converted from Shared to Non-Shared Formula" on large, formula heavy worksheets</action>
<action dev="POI-DEVELOPERS" type="add">42033 - Add support for named ranges with unicode names</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=610336&r1=610335&r2=610336&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Wed Jan 9 02:59:04 2008
@@ -33,6 +33,7 @@
<!-- Don't forget to update changes.xml too! -->
<changes>
<release version="3.0.2-FINAL" date="2008-??-??">
+ <action dev="POI-DEVELOPERS" type="fix">31795 - Support cloning of sheets with certain drawing objects on them</action>
<action dev="POI-DEVELOPERS" type="fix">43902 - Don't consider merged regions when auto-sizing columns</action>
<action dev="POI-DEVELOPERS" type="fix">42464 - Avoid "Expected ExpPtg to be converted from Shared to Non-Shared Formula" on large, formula heavy worksheets</action>
<action dev="POI-DEVELOPERS" type="add">42033 - Add support for named ranges with unicode names</action>
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/AbstractEscherHolderRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/AbstractEscherHolderRecord.java?rev=610336&r1=610335&r2=610336&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/AbstractEscherHolderRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/AbstractEscherHolderRecord.java Wed Jan 9 02:59:04 2008
@@ -24,6 +24,9 @@
import org.apache.poi.ddf.NullEscherSerializationListener;
import org.apache.poi.util.LittleEndian;
+import java.io.ByteArrayInputStream;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -76,7 +79,7 @@
{
if (id != getSid())
{
- throw new RecordFormatException("Not an escher record");
+ throw new RecordFormatException("Not an escher record! (sid was " + id + ", expecting " + getSid() + ")");
}
}
@@ -227,7 +230,19 @@
public Object clone()
{
- throw new IllegalStateException("Not implemented yet.");
+ // Do it via a re-serialise
+ // It's a cheat, but it works...
+ byte[] b = serialize();
+ RecordInputStream rinp = new RecordInputStream(
+ new ByteArrayInputStream(b)
+ );
+ rinp.nextRecord();
+
+ Record[] r = RecordFactory.createRecord(rinp);
+ if(r.length != 1) {
+ throw new IllegalStateException("Re-serialised a record to clone it, but got " + r.length + " records back!");
+ }
+ return r[0];
}
public void addEscherRecord(int index, EscherRecord element)
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/DrawingRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/DrawingRecord.java?rev=610336&r1=610335&r2=610336&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/DrawingRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/DrawingRecord.java Wed Jan 9 02:59:04 2008
@@ -107,15 +107,16 @@
}
public Object clone() {
- if (recordData == null) {
- recordData = new byte[ 0 ];
- }
-
DrawingRecord rec = new DrawingRecord();
- rec.recordData = new byte[ recordData.length ];
- rec.contd = new byte[ contd.length ];
- System.arraycopy(recordData, 0, rec.recordData, 0, recordData.length);
- System.arraycopy(contd, 0, rec.contd, 0, contd.length);
+
+ if (recordData != null) {
+ rec.recordData = new byte[ recordData.length ];
+ System.arraycopy(recordData, 0, rec.recordData, 0, recordData.length);
+ }
+ if (contd != null) {
+ System.arraycopy(contd, 0, rec.contd, 0, contd.length);
+ rec.contd = new byte[ contd.length ];
+ }
return rec;
}
Added: poi/trunk/src/testcases/org/apache/poi/hssf/data/SheetWithDrawing.xls
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/data/SheetWithDrawing.xls?rev=610336&view=auto
==============================================================================
Binary file - no diff available.
Propchange: poi/trunk/src/testcases/org/apache/poi/hssf/data/SheetWithDrawing.xls
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java?rev=610336&r1=610335&r2=610336&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java Wed Jan 9 02:59:04 2008
@@ -109,4 +109,24 @@
assertEquals(b.getSelectedTab(), 1);
assertEquals(b.getDisplayedTab(), 1);
}
+
+ public void testSheetClone() throws Exception {
+ // First up, try a simple file
+ HSSFWorkbook b = new HSSFWorkbook();
+ assertEquals(0, b.getNumberOfSheets());
+ b.createSheet("Sheet One");
+ b.createSheet("Sheet Two");
+
+ assertEquals(2, b.getNumberOfSheets());
+ b.cloneSheet(0);
+ assertEquals(3, b.getNumberOfSheets());
+
+ // Now try a problem one with drawing records in it
+ b = new HSSFWorkbook(
+ new FileInputStream(new File(filename,"SheetWithDrawing.xls"))
+ );
+ assertEquals(1, b.getNumberOfSheets());
+ b.cloneSheet(0);
+ assertEquals(2, b.getNumberOfSheets());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org