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: [EMAIL PROTECTED] Mailing List: http://jakarta.apache.org/site/mail2.html#poi The Apache Jakarta POI Project: http://jakarta.apache.org/poi/