fixed clone sheet bug. Thanks to:

Alessandro Vernet for a patch thats part of this commit
Toshiaki Kamoshida for a testcase and lots of debugging
Dennis Doubleday & Henning Boeger for reporting the bugs
Jason Height who wrote cloneSheet in the first place.
Sorry it took so long to patch.


git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353017 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Avik Sengupta 2003-03-01 14:27:43 +00:00
parent 292a412bd2
commit e17139a5d3
9 changed files with 135 additions and 3 deletions

View File

@ -283,6 +283,10 @@ public class Sheet implements Model
/** /**
* Clones the low level records of this sheet and returns the new sheet instance. * Clones the low level records of this sheet and returns the new sheet instance.
* This method is implemented by adding methods for deep cloning to all records that
* can be added to a sheet. The <b>Record</b> object does not implement cloneable.
* When adding a new record, implement a public clone method if and only if the record
* belongs to a sheet.
*/ */
public Sheet cloneSheet() public Sheet cloneSheet()
{ {

View File

@ -178,6 +178,12 @@ public class BottomMarginRecord
this.field_1_margin = field_1_margin; this.field_1_margin = field_1_margin;
} }
public Object clone() {
BottomMarginRecord rec = new BottomMarginRecord();
rec.field_1_margin = this.field_1_margin;
return rec;
}
} // END OF CLASS } // END OF CLASS

View File

@ -355,4 +355,15 @@ public class ColumnInfoRecord
buffer.append("[/COLINFO]\n"); buffer.append("[/COLINFO]\n");
return buffer.toString(); return buffer.toString();
} }
public Object clone() {
ColumnInfoRecord rec = new ColumnInfoRecord();
rec.field_1_first_col = field_1_first_col;
rec.field_2_last_col = field_2_last_col;
rec.field_3_col_width = field_3_col_width;
rec.field_4_xf_index = field_4_xf_index;
rec.field_5_options = field_5_options;
rec.field_6_reserved = field_6_reserved;
return rec;
}
} }

View File

@ -178,6 +178,11 @@ public class LeftMarginRecord
this.field_1_margin = field_1_margin; this.field_1_margin = field_1_margin;
} }
public Object clone() {
LeftMarginRecord rec = new LeftMarginRecord();
rec.field_1_margin = this.field_1_margin;
return rec;
}
} // END OF CLASS } // END OF CLASS

View File

@ -322,4 +322,11 @@ public class MergeCellsRecord
public short col_to; public short col_to;
} }
public Object clone() {
MergeCellsRecord rec = new MergeCellsRecord();
rec.field_1_num_areas = field_1_num_areas;
rec.field_2_regions = field_2_regions;
return rec;
}
} }

View File

@ -173,4 +173,10 @@ public class ProtectRecord
{ {
return this.sid; return this.sid;
} }
public Object clone() {
ProtectRecord rec = new ProtectRecord();
rec.field_1_protect = field_1_protect;
return rec;
}
} }

View File

@ -178,7 +178,11 @@ public class RightMarginRecord
this.field_1_margin = field_1_margin; this.field_1_margin = field_1_margin;
} }
public Object clone() {
RightMarginRecord rec = new RightMarginRecord();
rec.field_1_margin = this.field_1_margin;
return rec;
}
} // END OF CLASS } // END OF CLASS

View File

@ -178,7 +178,11 @@ public class TopMarginRecord
this.field_1_margin = field_1_margin; this.field_1_margin = field_1_margin;
} }
public Object clone() {
TopMarginRecord rec = new TopMarginRecord();
rec.field_1_margin = this.field_1_margin;
return rec;
}
} // END OF CLASS } // END OF CLASS

View File

@ -0,0 +1,85 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache POI" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache POI", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.poi.hssf.usermodel;
import junit.framework.TestCase;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;
/**
* Test the ability to clone a sheet.
* If adding new records that belong to a sheet (as opposed to a book)
* add that record to the sheet in the testCloneSheetBasic method.
* @author avik
*/
public class TestCloneSheet extends TestCase {
public TestCloneSheet(String arg0) {
super(arg0);
}
public void testCloneSheetBasic(){
try{
HSSFWorkbook b = new HSSFWorkbook();
HSSFSheet s = b.createSheet("Test");
s.addMergedRegion(new Region((short)0,(short)0,(short)1,(short)1));
b.cloneSheet(0);
}
catch(Exception e){fail(e.getMessage());}
}
}