You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by jh...@apache.org on 2006/01/05 08:30:06 UTC

svn commit: r366110 - in /jakarta/poi/trunk/src: java/org/apache/poi/hssf/record/ java/org/apache/poi/hssf/record/aggregates/ java/org/apache/poi/hssf/usermodel/ testcases/org/apache/poi/hssf/usermodel/

Author: jheight
Date: Wed Jan  4 23:29:36 2006
New Revision: 366110

URL: http://svn.apache.org/viewcvs?rev=366110&view=rev
Log:
Multiple clone of same sheet now generates unique sheet name BUG 37416 fixed.

Modified:
    jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java
    jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/TextObjectRecord.java
    jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java
    jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
    jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
    jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java

Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java Wed Jan  4 23:29:36 2006
@@ -169,7 +169,7 @@
                                 lastDGRecord.join((AbstractEscherHolderRecord) record);
                             }
                         else if (record.getSid() == ContinueRecord.sid &&
-                                 (lastRecord instanceof ObjRecord)) {
+                                 ((lastRecord instanceof ObjRecord) || (lastRecord instanceof TextObjectRecord))) {
                           // Drawing records have a very strange continue behaviour.
                           //There can actually be OBJ records mixed between the continues.
                           lastDrawingRecord.processContinueRecord( ((ContinueRecord)record).getData() );
@@ -181,7 +181,8 @@
                             //Gracefully handle records that we dont know about,
                             //that happen to be continued
                             records.add(record);
-                          } else throw new RecordFormatException("Unhandled Continue Record");
+                          } else 
+                        	  throw new RecordFormatException("Unhandled Continue Record");
                             }
                         else {
                             lastRecord = record;

Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/TextObjectRecord.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/TextObjectRecord.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/TextObjectRecord.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/TextObjectRecord.java Wed Jan  4 23:29:36 2006
@@ -24,7 +24,7 @@
 public class TextObjectRecord
         extends TextObjectBaseRecord
 {
-    HSSFRichTextString str = new HSSFRichTextString( "" );
+    HSSFRichTextString str;
 
     public TextObjectRecord()
     {
@@ -33,6 +33,8 @@
     public TextObjectRecord( RecordInputStream in )
     {
         super( in );
+        if (str == null)
+        	str = new HSSFRichTextString("");
     }
 
     protected void fillFields(RecordInputStream in)

Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java Wed Jan  4 23:29:36 2006
@@ -190,6 +190,8 @@
 
     /** Returns true if the row has cells attached to it */
     public boolean rowHasCells(int row) {
+    	if (row > records.length)
+    		return false;
       CellValueRecordInterface[] rowCells=records[row];
       if(rowCells==null) return false;
       for(int col=0;col<rowCells.length;col++) {

Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java Wed Jan  4 23:29:36 2006
@@ -473,10 +473,20 @@
         windowTwo.setPaged(sheets.size() == 1);
 
         sheets.add(clonedSheet);
-        if (srcName.length()<28) {
-            workbook.setSheetName(sheets.size()-1, srcName+"(2)");
-        }else {
-            workbook.setSheetName(sheets.size()-1,srcName.substring(0,28)+"(2)");
+        int i=1;
+        while (true) {
+        	//Try and find the next sheet name that is unique
+        	String name = srcName;
+        	String index = Integer.toString(i++);
+        	if (name.length()+index.length()+2<31)
+        	  name = name + "("+index+")";
+        	else name = name.substring(0, 31-index.length()-2)+"("+index+")";
+        	
+        	//If the sheet name is unique, then set it otherwise move on to the next number.
+        	if (workbook.getSheetIndex(name) == -1) {
+              workbook.setSheetName(sheets.size()-1, name);
+              break;
+        	}
         }
         return clonedSheet;
       }

Modified: jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java (original)
+++ jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java Wed Jan  4 23:29:36 2006
@@ -204,6 +204,24 @@
         cell.setCellValue("Difference Check");
         assertEquals(cloned.getRow((short)0).getCell((short)0).getStringCellValue(), "clone_test");
     }
+
+    /** tests that the sheet name for multiple clones of the same sheet is unique
+     * BUG 37416
+     */    
+    public void testCloneSheetMultipleTimes() {
+        HSSFWorkbook workbook = new HSSFWorkbook();
+        HSSFSheet sheet = workbook.createSheet("Test Clone");
+        HSSFRow row = sheet.createRow((short) 0);
+        HSSFCell cell = row.createCell((short) 0);
+        cell.setCellValue("clone_test");
+        //Clone the sheet multiple times
+        workbook.cloneSheet(0);
+        workbook.cloneSheet(0);
+        
+        assertNotNull(workbook.getSheet("Test Clone"));
+        assertNotNull(workbook.getSheet("Test Clone(1)"));
+        assertNotNull(workbook.getSheet("Test Clone(2)"));  
+    }
     
 	/**
 	 * Test that the ProtectRecord is included when creating or cloning a sheet

Modified: jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java (original)
+++ jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java Wed Jan  4 23:29:36 2006
@@ -46,15 +46,15 @@
 
         try
         {
-            b.setSheetName( 3,  "name1"/*JMH, HSSFWorkbook.ENCODING_UTF_16*/ );
+            b.setSheetName( 3,  "name1" );
             fail();
         }
         catch ( IllegalArgumentException pass )
         {
         }
 
-        b.setSheetName( 3,  "name2"/*JMH, HSSFWorkbook.ENCODING_UTF_16*/ );
-        b.setSheetName( 3,  "name2"/*JMH, HSSFWorkbook.ENCODING_UTF_16*/ );
+        b.setSheetName( 3,  "name2" );
+        b.setSheetName( 3,  "name2" );
         b.setSheetName( 3,  "name2" );
         
         HSSFWorkbook c = new HSSFWorkbook( );



---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/