diff --git a/src/java/org/apache/poi/hssf/model/Sheet.java b/src/java/org/apache/poi/hssf/model/Sheet.java
index eb924b3e73..475d2cfc3f 100644
--- a/src/java/org/apache/poi/hssf/model/Sheet.java
+++ b/src/java/org/apache/poi/hssf/model/Sheet.java
@@ -283,6 +283,10 @@ public class Sheet implements Model
/**
* 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 Record 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()
{
diff --git a/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java b/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java
index faa5cef4e7..fbe68ae407 100644
--- a/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java
+++ b/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java
@@ -177,6 +177,12 @@ public class BottomMarginRecord
{
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
diff --git a/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java b/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java
index 2e95e8a35a..77681be155 100644
--- a/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java
+++ b/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java
@@ -355,4 +355,15 @@ public class ColumnInfoRecord
buffer.append("[/COLINFO]\n");
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;
+ }
}
diff --git a/src/java/org/apache/poi/hssf/record/LeftMarginRecord.java b/src/java/org/apache/poi/hssf/record/LeftMarginRecord.java
index 17c26639a3..eb9948df71 100644
--- a/src/java/org/apache/poi/hssf/record/LeftMarginRecord.java
+++ b/src/java/org/apache/poi/hssf/record/LeftMarginRecord.java
@@ -178,7 +178,12 @@ public class LeftMarginRecord
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
diff --git a/src/java/org/apache/poi/hssf/record/MergeCellsRecord.java b/src/java/org/apache/poi/hssf/record/MergeCellsRecord.java
index ddda8b9476..85e20a8c02 100644
--- a/src/java/org/apache/poi/hssf/record/MergeCellsRecord.java
+++ b/src/java/org/apache/poi/hssf/record/MergeCellsRecord.java
@@ -322,4 +322,11 @@ public class MergeCellsRecord
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;
+ }
}
diff --git a/src/java/org/apache/poi/hssf/record/ProtectRecord.java b/src/java/org/apache/poi/hssf/record/ProtectRecord.java
index 1f71b90e33..8ff2d2356a 100644
--- a/src/java/org/apache/poi/hssf/record/ProtectRecord.java
+++ b/src/java/org/apache/poi/hssf/record/ProtectRecord.java
@@ -173,4 +173,10 @@ public class ProtectRecord
{
return this.sid;
}
+
+ public Object clone() {
+ ProtectRecord rec = new ProtectRecord();
+ rec.field_1_protect = field_1_protect;
+ return rec;
+ }
}
diff --git a/src/java/org/apache/poi/hssf/record/RightMarginRecord.java b/src/java/org/apache/poi/hssf/record/RightMarginRecord.java
index 00e9ba5216..8db7faf6d6 100644
--- a/src/java/org/apache/poi/hssf/record/RightMarginRecord.java
+++ b/src/java/org/apache/poi/hssf/record/RightMarginRecord.java
@@ -178,7 +178,11 @@ public class RightMarginRecord
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
diff --git a/src/java/org/apache/poi/hssf/record/TopMarginRecord.java b/src/java/org/apache/poi/hssf/record/TopMarginRecord.java
index 7126cae4eb..cea7e1f1ea 100644
--- a/src/java/org/apache/poi/hssf/record/TopMarginRecord.java
+++ b/src/java/org/apache/poi/hssf/record/TopMarginRecord.java
@@ -178,7 +178,11 @@ public class TopMarginRecord
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
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestCloneSheet.java b/src/testcases/org/apache/poi/hssf/usermodel/TestCloneSheet.java
new file mode 100644
index 0000000000..55fe019c86
--- /dev/null
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestCloneSheet.java
@@ -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
+ * .
+ */
+
+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());}
+ }
+
+}