You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by dm...@apache.org on 2004/02/09 23:41:27 UTC

cvs commit: jakarta-poi/src/testcases/org/apache/poi/hssf/model SheetTest.java

dmui        2004/02/09 14:41:27

  Modified:    src/testcases/org/apache/poi/hssf/usermodel Tag:
                        REL_2_BRANCH TestCloneSheet.java
                        TestSheetShiftRows.java TestHSSFSheet.java
               src/java/org/apache/poi/hssf/record Tag: REL_2_BRANCH
                        RecordFactory.java
               src/java/org/apache/poi/hssf/model Tag: REL_2_BRANCH
                        Sheet.java
               src/java/org/apache/poi/hssf/dev Tag: REL_2_BRANCH
                        BiffViewer.java
               src/java/org/apache/poi/hssf/usermodel Tag: REL_2_BRANCH
                        HSSFSheet.java
               src/testcases/org/apache/poi/hssf/model Tag: REL_2_BRANCH
                        SheetTest.java
  Added:       src/java/org/apache/poi/hssf/record Tag: REL_2_BRANCH
                        VerticalPageBreakRecord.java
                        HorizontalPageBreakRecord.java PageBreakRecord.java
               src/testcases/org/apache/poi/hssf/data Tag: REL_2_BRANCH
                        SimpleWithPageBreaks.xls
  Log:
  Patch to support Horizontal and Vertical Page breaks, included testcases
  and files.
  PR:
  Obtained from:
  Submitted by:	
  Reviewed by:	
  CVS: ----------------------------------------------------------------------
  CVS: PR:
  CVS:   If this change addresses a PR in the problem report tracking
  CVS:   database, then enter the PR number(s) here.
  CVS: Obtained from:
  CVS:   If this change has been taken from another system, such as NCSA,
  CVS:   then name the system in this line, otherwise delete it.
  CVS: Submitted by:
  CVS:   If this code has been contributed to Apache by someone else; i.e.,
  CVS:   they sent us a patch or a new module, then include their name/email
  CVS:   address here. If this is your work then delete this line.
  CVS: Reviewed by:
  CVS:   If we are doing pre-commit code reviews and someone else has
  CVS:   reviewed your changes, include their name(s) here.
  CVS:   If you have not had it reviewed then delete this line.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.2.2.2   +19 -0     jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestCloneSheet.java
  
  Index: TestCloneSheet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestCloneSheet.java,v
  retrieving revision 1.2.2.1
  retrieving revision 1.2.2.2
  diff -u -r1.2.2.1 -r1.2.2.2
  --- TestCloneSheet.java	13 Oct 2003 16:45:01 -0000	1.2.2.1
  +++ TestCloneSheet.java	9 Feb 2004 22:41:26 -0000	1.2.2.2
  @@ -82,4 +82,23 @@
   		catch(Exception e){e.printStackTrace();fail(e.getMessage());}
   	}
   
  +   /**
  +    * Ensures that pagebreak cloning works properly
  +    *
  +    */
  +   public void testPageBreakClones() {
  +      HSSFWorkbook b = new HSSFWorkbook();
  +      HSSFSheet s = b.createSheet("Test");
  +      s.setRowBreak(3);
  +      s.setColumnBreak((short)6);
  +      
  +      HSSFSheet clone = b.cloneSheet(0);
  +      assertTrue("Row 3 not broken", clone.isRowBroken(3));
  +      assertTrue("Column 6 not broken", clone.isColumnBroken((short)6));
  +      
  +      s.removeRowBreak(3);
  +      
  +      assertTrue("Row 3 still should be broken", clone.isRowBroken(3));
  +   }
  +   
   }
  
  
  
  1.2.2.2   +26 -10    jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestSheetShiftRows.java
  
  Index: TestSheetShiftRows.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestSheetShiftRows.java,v
  retrieving revision 1.2.2.1
  retrieving revision 1.2.2.2
  diff -u -r1.2.2.1 -r1.2.2.2
  --- TestSheetShiftRows.java	23 Oct 2003 17:16:03 -0000	1.2.2.1
  +++ TestSheetShiftRows.java	9 Feb 2004 22:41:26 -0000	1.2.2.2
  @@ -169,11 +169,11 @@
        * @author Toshiaki Kamoshida (kamoshida.toshiaki at future dot co dot jp)
        */
       public void testShiftRow(){
  -	HSSFWorkbook b = new HSSFWorkbook();
  -	HSSFSheet s    = b.createSheet();
  -	s.createRow(0).createCell((short)0).setCellValue("TEST1");
  -	s.createRow(3).createCell((short)0).setCellValue("TEST2");
  -	s.shiftRows(0,4,1);
  +   	HSSFWorkbook b = new HSSFWorkbook();
  +   	HSSFSheet s    = b.createSheet();
  +   	s.createRow(0).createCell((short)0).setCellValue("TEST1");
  +   	s.createRow(3).createCell((short)0).setCellValue("TEST2");
  +   	s.shiftRows(0,4,1);
       }
   
       /**
  @@ -182,11 +182,27 @@
        * @author Toshiaki Kamoshida (kamoshida.toshiaki at future dot co dot jp)
        */
       public void testShiftRow0(){
  -	HSSFWorkbook b = new HSSFWorkbook();
  -	HSSFSheet s    = b.createSheet();
  -	s.createRow(0).createCell((short)0).setCellValue("TEST1");
  -	s.createRow(3).createCell((short)0).setCellValue("TEST2");
  -	s.shiftRows(0,4,1);
  +   	HSSFWorkbook b = new HSSFWorkbook();
  +   	HSSFSheet s    = b.createSheet();
  +   	s.createRow(0).createCell((short)0).setCellValue("TEST1");
  +   	s.createRow(3).createCell((short)0).setCellValue("TEST2");
  +   	s.shiftRows(0,4,1);
  +    }
  +    
  +    /**
  +     * When shifting rows, the page breaks should go with it
  +     *
  +     */
  +    public void testShiftRowBreaks(){
  +      HSSFWorkbook b = new HSSFWorkbook();
  +      HSSFSheet s    = b.createSheet();
  +      HSSFRow row = s.createRow(4);
  +      row.createCell((short)0).setCellValue("test");
  +      s.setRowBreak(4);
  +      
  +      s.shiftRows(4, 4, 2);
  +      assertTrue("Row number 6 should have a pagebreak", s.isRowBroken(6));
  +      
       }
   }
   
  
  
  
  1.12.2.6  +66 -17    jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
  
  Index: TestHSSFSheet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java,v
  retrieving revision 1.12.2.5
  retrieving revision 1.12.2.6
  diff -u -r1.12.2.5 -r1.12.2.6
  --- TestHSSFSheet.java	23 Aug 2003 18:54:28 -0000	1.12.2.5
  +++ TestHSSFSheet.java	9 Feb 2004 22:41:26 -0000	1.12.2.6
  @@ -1,7 +1,7 @@
   /* ====================================================================
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2003 The Apache Software Foundation.  All rights
  + * Copyright (c) 2004 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -345,8 +345,8 @@
        * @author Shawn Laubach (slaubach at apache dot org)
        */
       public void testDisplayOptions() throws Exception {
  -	HSSFWorkbook wb = new HSSFWorkbook();
  -	HSSFSheet sheet = wb.createSheet();
  +    	HSSFWorkbook wb = new HSSFWorkbook();
  +    	HSSFSheet sheet = wb.createSheet();
   	
           File tempFile = File.createTempFile("display", "test.xls");
           FileOutputStream stream = new FileOutputStream(tempFile);
  @@ -356,15 +356,15 @@
           FileInputStream readStream = new FileInputStream(tempFile);
           wb = new HSSFWorkbook(readStream);
           sheet = wb.getSheetAt(0);
  -	readStream.close();
  -
  -	assertEquals(sheet.isDisplayGridlines(), true);
  -	assertEquals(sheet.isDisplayRowColHeadings(), true);
  -	assertEquals(sheet.isDisplayFormulas(), false);
  -
  -	sheet.setDisplayGridlines(false);
  -	sheet.setDisplayRowColHeadings(false);
  -	sheet.setDisplayFormulas(true);
  +    	readStream.close();
  +    
  +    	assertEquals(sheet.isDisplayGridlines(), true);
  +    	assertEquals(sheet.isDisplayRowColHeadings(), true);
  +    	assertEquals(sheet.isDisplayFormulas(), false);
  +    
  +    	sheet.setDisplayGridlines(false);
  +    	sheet.setDisplayRowColHeadings(false);
  +    	sheet.setDisplayFormulas(true);
   
           tempFile = File.createTempFile("display", "test.xls");
           stream = new FileOutputStream(tempFile);
  @@ -374,14 +374,63 @@
           readStream = new FileInputStream(tempFile);
           wb = new HSSFWorkbook(readStream);
           sheet = wb.getSheetAt(0);
  -	readStream.close();
  +    	readStream.close();
  +    
  +    
  +    	assertEquals(sheet.isDisplayGridlines(), false);
  +    	assertEquals(sheet.isDisplayRowColHeadings(), false);
  +    	assertEquals(sheet.isDisplayFormulas(), true);
  +    }
  +
  +    
  +    /**
  +     * Make sure the excel file loads work
  +     *
  +     */
  +    public void testPageBreakFiles() throws Exception{
  +        FileInputStream fis = null;
  +        HSSFWorkbook wb     = null;
  +        
  +        String filename = System.getProperty("HSSF.testdata.path");
   
  +        filename = filename + "/SimpleWithPageBreaks.xls";
  +        fis = new FileInputStream(filename);
  +        wb = new HSSFWorkbook(fis);
  +        fis.close();
  +        
  +        HSSFSheet sheet = wb.getSheetAt(0);
  +        assertNotNull(sheet);
  +        
  +        assertEquals("1 row page break", 1, sheet.getRowBreaks().length);
  +        assertEquals("1 column page break", 1, sheet.getColumnBreaks().length);
   
  -	assertEquals(sheet.isDisplayGridlines(), false);
  -	assertEquals(sheet.isDisplayRowColHeadings(), false);
  -	assertEquals(sheet.isDisplayFormulas(), true);
  -    }
  +        assertTrue("No row page break", sheet.isRowBroken(22));
  +        assertTrue("No column page break", sheet.isColumnBroken((short)4));
  +        
  +        sheet.setRowBreak(10);        
  +        sheet.setColumnBreak((short)13);
  +
  +        assertEquals("row breaks number", 2, sheet.getRowBreaks().length);
  +        assertEquals("column breaks number", 2, sheet.getColumnBreaks().length);
  +        
  +        File tempFile = File.createTempFile("display", "testPagebreaks.xls");
  +        FileOutputStream stream = new FileOutputStream(tempFile);
  +        wb.write(stream);
  +        stream.close();
  +        
  +        wb = new HSSFWorkbook(new FileInputStream(tempFile));
  +        sheet = wb.getSheetAt(0);
  +
  +        assertTrue("No row page break", sheet.isRowBroken(22));
  +        assertTrue("No column page break", sheet.isColumnBroken((short)4));
   
  +        
  +        assertEquals("row breaks number", 2, sheet.getRowBreaks().length);
  +        assertEquals("column breaks number", 2, sheet.getColumnBreaks().length);
  +        
  +        
  +    }
  +    
   	public static void main(java.lang.String[] args) {
   		 junit.textui.TestRunner.run(TestHSSFSheet.class);
   	}    
  
  
  
  No                   revision
  No                   revision
  1.16.2.1  +5 -3      jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java
  
  Index: RecordFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java,v
  retrieving revision 1.16
  retrieving revision 1.16.2.1
  diff -u -r1.16 -r1.16.2.1
  --- RecordFactory.java	8 May 2003 00:02:03 -0000	1.16
  +++ RecordFactory.java	9 Feb 2004 22:41:26 -0000	1.16.2.1
  @@ -2,7 +2,7 @@
   /* ====================================================================
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2003 The Apache Software Foundation.  All rights
  + * Copyright (c) 2004 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -112,7 +112,8 @@
                   FormulaRecord.class, BoolErrRecord.class, ExternSheetRecord.class,
                   NameRecord.class, LeftMarginRecord.class, RightMarginRecord.class,
                   TopMarginRecord.class, BottomMarginRecord.class,
  -                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class
  +                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class,
  +                HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class
               };
           } else {
               records = new Class[]
  @@ -143,7 +144,8 @@
                   BoolErrRecord.class, ExternSheetRecord.class, NameRecord.class,
                   LeftMarginRecord.class, RightMarginRecord.class,
                   TopMarginRecord.class, BottomMarginRecord.class,
  -                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class
  +                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class,
  +                HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class
               };
   
           }
  
  
  
  No                   revision
  
  Index: RecordFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java,v
  retrieving revision 1.16
  retrieving revision 1.16.2.1
  diff -u -r1.16 -r1.16.2.1
  --- RecordFactory.java	8 May 2003 00:02:03 -0000	1.16
  +++ RecordFactory.java	9 Feb 2004 22:41:26 -0000	1.16.2.1
  @@ -2,7 +2,7 @@
   /* ====================================================================
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2003 The Apache Software Foundation.  All rights
  + * Copyright (c) 2004 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -112,7 +112,8 @@
                   FormulaRecord.class, BoolErrRecord.class, ExternSheetRecord.class,
                   NameRecord.class, LeftMarginRecord.class, RightMarginRecord.class,
                   TopMarginRecord.class, BottomMarginRecord.class,
  -                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class
  +                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class,
  +                HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class
               };
           } else {
               records = new Class[]
  @@ -143,7 +144,8 @@
                   BoolErrRecord.class, ExternSheetRecord.class, NameRecord.class,
                   LeftMarginRecord.class, RightMarginRecord.class,
                   TopMarginRecord.class, BottomMarginRecord.class,
  -                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class
  +                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class,
  +                HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class
               };
   
           }
  
  
  
  No                   revision
  
  Index: RecordFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java,v
  retrieving revision 1.16
  retrieving revision 1.16.2.1
  diff -u -r1.16 -r1.16.2.1
  --- RecordFactory.java	8 May 2003 00:02:03 -0000	1.16
  +++ RecordFactory.java	9 Feb 2004 22:41:26 -0000	1.16.2.1
  @@ -2,7 +2,7 @@
   /* ====================================================================
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2003 The Apache Software Foundation.  All rights
  + * Copyright (c) 2004 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -112,7 +112,8 @@
                   FormulaRecord.class, BoolErrRecord.class, ExternSheetRecord.class,
                   NameRecord.class, LeftMarginRecord.class, RightMarginRecord.class,
                   TopMarginRecord.class, BottomMarginRecord.class,
  -                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class
  +                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class,
  +                HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class
               };
           } else {
               records = new Class[]
  @@ -143,7 +144,8 @@
                   BoolErrRecord.class, ExternSheetRecord.class, NameRecord.class,
                   LeftMarginRecord.class, RightMarginRecord.class,
                   TopMarginRecord.class, BottomMarginRecord.class,
  -                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class
  +                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class,
  +                HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class
               };
   
           }
  
  
  
  1.1.2.1   +107 -0    jakarta-poi/src/java/org/apache/poi/hssf/record/Attic/VerticalPageBreakRecord.java
  
  
  
  
  1.1.2.1   +107 -0    jakarta-poi/src/java/org/apache/poi/hssf/record/Attic/HorizontalPageBreakRecord.java
  
  
  
  
  1.1.2.1   +304 -0    jakarta-poi/src/java/org/apache/poi/hssf/record/Attic/PageBreakRecord.java
  
  
  
  
  No                   revision
  No                   revision
  1.31.2.9  +200 -49   jakarta-poi/src/java/org/apache/poi/hssf/model/Sheet.java
  
  Index: Sheet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/model/Sheet.java,v
  retrieving revision 1.31.2.8
  retrieving revision 1.31.2.9
  diff -u -r1.31.2.8 -r1.31.2.9
  --- Sheet.java	21 Sep 2003 09:58:24 -0000	1.31.2.8
  +++ Sheet.java	9 Feb 2004 22:41:26 -0000	1.31.2.9
  @@ -2,7 +2,7 @@
   /* ====================================================================
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2003 The Apache Software Foundation.  All rights
  + * Copyright (c) 2004 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -111,7 +111,7 @@
       protected WindowTwoRecord           windowTwo        = null;
       protected MergeCellsRecord          merged           = null;
       protected Margin                    margins[]        = null;
  -    protected List                 		mergedRecords    = new ArrayList();
  +    protected List                 		 mergedRecords    = new ArrayList();
       protected int                       numMergedRegions = 0;
       protected SelectionRecord           selection        = null;
       private static POILogger            log              = POILogFactory.getLogger(Sheet.class);
  @@ -121,8 +121,11 @@
       private Iterator                    valueRecIterator = null;
       private Iterator                    rowRecIterator   = null;
       protected int                       eofLoc           = 0;
  -	protected ProtectRecord             protect          = null;
  -
  +	 protected ProtectRecord             protect          = null;
  +	 protected PageBreakRecord 			 rowBreaks		   = null;
  +	 protected PageBreakRecord 			 colBreaks		   = null;
  +	
  +	
       public static final byte PANE_LOWER_RIGHT = (byte)0;
       public static final byte PANE_UPPER_RIGHT = (byte)1;
       public static final byte PANE_LOWER_LEFT = (byte)2;
  @@ -155,7 +158,7 @@
        */
       public static Sheet createSheet(List recs, int sheetnum, int offset)
       {
  -        log.logFormatted(log.DEBUG,
  +        log.logFormatted(POILogger.DEBUG,
                            "Sheet createSheet (existing file) with %",
                            new Integer(recs.size()));
           Sheet     retval             = new Sheet();
  @@ -170,18 +173,18 @@
   
               if (rec.getSid() == LabelRecord.sid)
               {
  -                log.log(log.DEBUG, "Hit label record.");
  +                log.log(POILogger.DEBUG, "Hit label record.");
                   retval.containsLabels = true;
               }
               else if (rec.getSid() == BOFRecord.sid)
               {
                   bofEofNestingLevel++;
  -                log.log(log.DEBUG, "Hit BOF record. Nesting increased to " + bofEofNestingLevel);
  +                log.log(POILogger.DEBUG, "Hit BOF record. Nesting increased to " + bofEofNestingLevel);
               }
               else if (rec.getSid() == EOFRecord.sid)
               {
                   --bofEofNestingLevel;
  -                log.log(log.DEBUG, "Hit EOF record. Nesting decreased to " + bofEofNestingLevel);
  +                log.log(POILogger.DEBUG, "Hit EOF record. Nesting decreased to " + bofEofNestingLevel);
                   if (bofEofNestingLevel == 0) {
                       records.add(rec);
                       retval.eofLoc = k;
  @@ -289,8 +292,16 @@
   			else if ( rec.getSid() == ProtectRecord.sid )
   			{
   				retval.protect = (ProtectRecord) rec;
  +			} 
  +			else if (rec.getSid() == PageBreakRecord.HORIZONTAL_SID) 
  +			{	
  +				retval.rowBreaks = (PageBreakRecord)rec;				
   			}
  -
  +			else if (rec.getSid() == PageBreakRecord.VERTICAL_SID) 
  +			{	
  +				retval.colBreaks = (PageBreakRecord)rec;				
  +			}
  +            
               if (rec != null)
               {
                   records.add(rec);
  @@ -307,7 +318,7 @@
   //        {
   //            retval.cells = new ValueRecordsAggregate();
   //        }
  -        log.log(log.DEBUG, "sheet createSheet (existing file) exited");
  +        log.log(POILogger.DEBUG, "sheet createSheet (existing file) exited");
           return retval;
       }
   
  @@ -366,7 +377,7 @@
   
       public static Sheet createSheet(List records, int sheetnum)
       {
  -        log.log(log.DEBUG,
  +        log.log(POILogger.DEBUG,
                   "Sheet createSheet (exisiting file) assumed offset 0");
           return createSheet(records, sheetnum, 0);
       }
  @@ -381,7 +392,7 @@
   
       public static Sheet createSheet()
       {
  -        log.log(log.DEBUG, "Sheet createsheet from scratch called");
  +        log.log(POILogger.DEBUG, "Sheet createsheet from scratch called");
           Sheet     retval  = new Sheet();
           ArrayList records = new ArrayList(30);
   
  @@ -404,8 +415,14 @@
                   (DefaultRowHeightRecord) retval.createDefaultRowHeight();
           records.add( retval.defaultrowheight );
           records.add( retval.createWSBool() );
  +
  +        retval.rowBreaks = new PageBreakRecord(PageBreakRecord.HORIZONTAL_SID);
  +        records.add(retval.rowBreaks);
  +        retval.colBreaks = new PageBreakRecord(PageBreakRecord.VERTICAL_SID);
  +        records.add(retval.colBreaks);
  +        
           retval.header = (HeaderRecord) retval.createHeader();
  -        records.add( retval.header );
  +        records.add( retval.header );        
           retval.footer = (FooterRecord) retval.createFooter();
           records.add( retval.footer );
           records.add( retval.createHCenter() );
  @@ -415,9 +432,9 @@
           retval.defaultcolwidth =
                   (DefaultColWidthRecord) retval.createDefaultColWidth();
           records.add( retval.defaultcolwidth);
  -        retval.dims    = ( DimensionsRecord ) retval.createDimensions();
  -        retval.dimsloc = 19;
  +        retval.dims    = ( DimensionsRecord ) retval.createDimensions();        
           records.add(retval.dims);
  +        retval.dimsloc = records.size()-1;
           records.add(retval.windowTwo = retval.createWindowTwo());
           retval.setLoc(records.size() - 1);
           retval.selection = 
  @@ -426,8 +443,9 @@
   		retval.protect = (ProtectRecord) retval.createProtect();
   		records.add(retval.protect);
           records.add(retval.createEOF());
  +        
           retval.records = records;
  -        log.log(log.DEBUG, "Sheet createsheet from scratch exit");
  +        log.log(POILogger.DEBUG, "Sheet createsheet from scratch exit");
           return retval;
       }
   
  @@ -566,7 +584,7 @@
   
       public void convertLabelRecords(Workbook wb)
       {
  -        log.log(log.DEBUG, "convertLabelRecords called");
  +        log.log(POILogger.DEBUG, "convertLabelRecords called");
           if (containsLabels)
           {
               for (int k = 0; k < records.size(); k++)
  @@ -590,7 +608,7 @@
                   }
               }
           }
  -        log.log(log.DEBUG, "convertLabelRecords exit");
  +        log.log(POILogger.DEBUG, "convertLabelRecords exit");
       }
   
       /**
  @@ -604,8 +622,8 @@
       {
           checkCells();
           checkRows();
  -        log.log(log.DEBUG, "Sheet.getNumRecords");
  -        log.logFormatted(log.DEBUG, "returning % + % + % - 2 = %", new int[]
  +        log.log(POILogger.DEBUG, "Sheet.getNumRecords");
  +        log.logFormatted(POILogger.DEBUG, "returning % + % + % - 2 = %", new int[]
           {
               records.size(), cells.getPhysicalNumberOfCells(),
               rows.getPhysicalNumberOfRows(),
  @@ -628,8 +646,8 @@
       public void setDimensions(int firstrow, short firstcol, int lastrow,
                                 short lastcol)
       {
  -        log.log(log.DEBUG, "Sheet.setDimensions");
  -        log.log(log.DEBUG,
  +        log.log(POILogger.DEBUG, "Sheet.setDimensions");
  +        log.log(POILogger.DEBUG,
                   (new StringBuffer("firstrow")).append(firstrow)
                       .append("firstcol").append(firstcol).append("lastrow")
                       .append(lastrow).append("lastcol").append(lastcol)
  @@ -638,7 +656,7 @@
           dims.setFirstRow(firstrow);
           dims.setLastCol(lastcol);
           dims.setLastRow(lastrow);
  -        log.log(log.DEBUG, "Sheet.setDimensions exiting");
  +        log.log(POILogger.DEBUG, "Sheet.setDimensions exiting");
       }
   
       /**
  @@ -660,7 +678,7 @@
       public void setLoc(int loc)
       {
           valueRecIterator = null;
  -        log.log(log.DEBUG, "sheet.setLoc(): " + loc);
  +        log.log(POILogger.DEBUG, "sheet.setLoc(): " + loc);
           this.loc = loc;
       }
   
  @@ -671,7 +689,7 @@
   
       public int getLoc()
       {
  -        log.log(log.DEBUG, "sheet.getLoc():" + loc);
  +        log.log(POILogger.DEBUG, "sheet.getLoc():" + loc);
           return loc;
       }
   
  @@ -709,7 +727,7 @@
   
       public byte [] serialize()
       {
  -        log.log(log.DEBUG, "Sheet.serialize");
  +        log.log(POILogger.DEBUG, "Sheet.serialize");
   
           // addDBCellRecords();
           byte[] retval    = null;
  @@ -726,7 +744,7 @@
           // for (int k = 0; k < bytes.size(); k++)
           // {
           // arraysize += (( byte [] ) bytes.get(k)).length;
  -        // log.debug((new StringBuffer("arraysize=")).append(arraysize)
  +        // POILogger.DEBUG((new StringBuffer("arraysize=")).append(arraysize)
           // .toString());
           // }
           retval = new byte[ arraysize ];
  @@ -738,7 +756,7 @@
               pos += (( Record ) records.get(k)).serialize(pos,
                       retval);   // rec.length;
           }
  -        log.log(log.DEBUG, "Sheet.serialize returning " + retval);
  +        log.log(POILogger.DEBUG, "Sheet.serialize returning " + retval);
           return retval;
       }
   
  @@ -753,7 +771,7 @@
   
       public int serialize(int offset, byte [] data)
       {
  -        log.log(log.DEBUG, "Sheet.serialize using offsets");
  +        log.log(POILogger.DEBUG, "Sheet.serialize using offsets");
   
           // addDBCellRecords();
           // ArrayList bytes     = new ArrayList(4096);
  @@ -768,7 +786,7 @@
           // for (int k = 0; k < bytes.size(); k++)
           // {
           // arraysize += (( byte [] ) bytes.get(k)).length;
  -        // log.debug((new StringBuffer("arraysize=")).append(arraysize)
  +        // POILogger.DEBUG((new StringBuffer("arraysize=")).append(arraysize)
           // .toString());
           // }
           for (int k = 0; k < records.size(); k++)
  @@ -787,7 +805,7 @@
               pos += record.serialize(pos + offset, data );   // rec.length;
   
           }
  -        log.log(log.DEBUG, "Sheet.serialize returning ");
  +        log.log(POILogger.DEBUG, "Sheet.serialize returning ");
           return pos;
       }
   
  @@ -801,7 +819,7 @@
   
       public RowRecord createRow(int row)
       {
  -        log.log(log.DEBUG, "create row number " + row);
  +        log.log(POILogger.DEBUG, "create row number " + row);
           RowRecord rowrec = new RowRecord();
   
           //rowrec.setRowNumber(( short ) row);
  @@ -826,7 +844,7 @@
       //public LabelSSTRecord createLabelSST(short row, short col, int index)
       public LabelSSTRecord createLabelSST(int row, short col, int index)
       {
  -        log.logFormatted(log.DEBUG, "create labelsst row,col,index %,%,%",
  +        log.logFormatted(POILogger.DEBUG, "create labelsst row,col,index %,%,%",
                            new int[]
           {
               row, col, index
  @@ -853,7 +871,7 @@
       //public NumberRecord createNumber(short row, short col, double value)
       public NumberRecord createNumber(int row, short col, double value)
       {
  -        log.logFormatted(log.DEBUG, "create number row,col,value %,%,%",
  +        log.logFormatted(POILogger.DEBUG, "create number row,col,value %,%,%",
                            new double[]
           {
               row, col, value
  @@ -878,8 +896,8 @@
       //public BlankRecord createBlank(short row, short col)
       public BlankRecord createBlank(int row, short col)
       {
  -        //log.logFormatted(log.DEBUG, "create blank row,col %,%", new short[]
  -        log.logFormatted(log.DEBUG, "create blank row,col %,%", new int[]
  +        //log.logFormatted(POILogger.DEBUG, "create blank row,col %,%", new short[]
  +        log.logFormatted(POILogger.DEBUG, "create blank row,col %,%", new int[]
           {
               row, col
           });
  @@ -905,7 +923,7 @@
       //public FormulaRecord createFormula(short row, short col, String formula)
       public FormulaRecord createFormula(int row, short col, String formula)
       {
  -        log.logFormatted(log.DEBUG, "create formula row,col,formula %,%,%",
  +        log.logFormatted(POILogger.DEBUG, "create formula row,col,formula %,%,%",
                            //new short[]
                            new int[]
           {
  @@ -949,7 +967,7 @@
       public void addValueRecord(int row, CellValueRecordInterface col)
       {
           checkCells();
  -        log.logFormatted(log.DEBUG, "add value record  row,loc %,%", new int[]
  +        log.logFormatted(POILogger.DEBUG, "add value record  row,loc %,%", new int[]
           {
               row, loc
           });
  @@ -1003,7 +1021,7 @@
       public void removeValueRecord(int row, CellValueRecordInterface col)
       {
           checkCells();
  -        log.logFormatted(log.DEBUG, "remove value record row,dimsloc %,%",
  +        log.logFormatted(POILogger.DEBUG, "remove value record row,dimsloc %,%",
                            new int[]{row, dimsloc} );
           loc = dimsloc;
           cells.removeCell(col);
  @@ -1044,7 +1062,7 @@
       {
           checkCells();
           setLoc(dimsloc);
  -        log.log(log.DEBUG, "replaceValueRecord ");
  +        log.log(POILogger.DEBUG, "replaceValueRecord ");
           cells.insertCell(newval);
   
           /*
  @@ -1080,7 +1098,7 @@
       public void addRow(RowRecord row)
       {
           checkRows();
  -        log.log(log.DEBUG, "addRow ");
  +        log.log(POILogger.DEBUG, "addRow ");
           DimensionsRecord d = ( DimensionsRecord ) records.get(getDimsLoc());
   
           if (row.getRowNumber() > d.getLastRow())
  @@ -1134,7 +1152,7 @@
            *   }
            * }
            */
  -        log.log(log.DEBUG, "exit addRow");
  +        log.log(POILogger.DEBUG, "exit addRow");
       }
   
       /**
  @@ -1194,7 +1212,7 @@
   
       public CellValueRecordInterface getNextValueRecord()
       {
  -        log.log(log.DEBUG, "getNextValue loc= " + loc);
  +        log.log(POILogger.DEBUG, "getNextValue loc= " + loc);
           if (valueRecIterator == null)
           {
               valueRecIterator = cells.getIterator();
  @@ -1241,7 +1259,7 @@
   
   /*    public Record getNextRowOrValue()
       {
  -        log.debug((new StringBuffer("getNextRow loc= ")).append(loc)
  +        POILogger.DEBUG((new StringBuffer("getNextRow loc= ")).append(loc)
               .toString());
           if (this.getLoc() < records.size())
           {
  @@ -1281,7 +1299,7 @@
   
       public RowRecord getNextRow()
       {
  -        log.log(log.DEBUG, "getNextRow loc= " + loc);
  +        log.log(POILogger.DEBUG, "getNextRow loc= " + loc);
           if (rowRecIterator == null)
           {
               rowRecIterator = rows.getIterator();
  @@ -1327,7 +1345,7 @@
       //public RowRecord getRow(short rownum)
       public RowRecord getRow(int rownum)
       {
  -        log.log(log.DEBUG, "getNextRow loc= " + loc);
  +        log.log(POILogger.DEBUG, "getNextRow loc= " + loc);
           return rows.getRow(rownum);
   
           /*
  @@ -1543,7 +1561,7 @@
       {
           RefModeRecord retval = new RefModeRecord();
   
  -        retval.setMode(retval.USE_A1_MODE);
  +        retval.setMode(RefModeRecord.USE_A1_MODE);
           return retval;
       }
   
  @@ -2161,7 +2179,7 @@
   
       public int getDimsLoc()
       {
  -        log.log(log.DEBUG, "getDimsLoc dimsloc= " + dimsloc);
  +        log.log(POILogger.DEBUG, "getDimsLoc dimsloc= " + dimsloc);
           return dimsloc;
       }
   
  @@ -2533,7 +2551,7 @@
   
          protected Record createProtect()
          {
  -               log.log(log.DEBUG, "create protect record with protection disabled");
  +               log.log(POILogger.DEBUG, "create protect record with protection disabled");
                  ProtectRecord retval = new ProtectRecord();
   
                  retval.setProtect(false);
  @@ -2603,5 +2621,138 @@
           if (margins == null)
               margins = new Margin[4];
   	return margins;
  +    }
  +    
  +    /**
  +     * Shifts all the page breaks in the range "count" number of rows/columns
  +     * @param breaks The page record to be shifted
  +     * @param start Starting "main" value to shift breaks
  +     * @param stop Ending "main" value to shift breaks
  +     * @param count number of units (rows/columns) to shift by 
  +     */
  +    public void shiftBreaks(PageBreakRecord breaks, short start, short stop, int count) {
  +   	
  +    	if(rowBreaks == null)
  +    		return;
  +    	Iterator iterator = breaks.getBreaksIterator();
  +    	List shiftedBreak = new ArrayList();
  +    	while(iterator.hasNext()) 
  +    	{
  +    		PageBreakRecord.Break breakItem = (PageBreakRecord.Break)iterator.next();
  +    		short breakLocation = breakItem.main;
  +    		boolean inStart = (breakLocation >= start);
  +    		boolean inEnd = (breakLocation <= stop);
  +    		if(inStart && inEnd)
  +    			shiftedBreak.add(breakItem);
  +    	}
  +    	
  +    	iterator = shiftedBreak.iterator();
  +    	while (iterator.hasNext()) {    		
  +			PageBreakRecord.Break breakItem = (PageBreakRecord.Break)iterator.next();
  +    		breaks.removeBreak(breakItem.main);
  +    		breaks.addBreak((short)(breakItem.main+count), breakItem.subFrom, breakItem.subTo);
  +    	}
  +    }
  +    
  +    /**
  +     * Sets a page break at the indicated row
  +     * @param row
  +     */
  +    public void setRowBreak(int row, short fromCol, short toCol) {    	
  +    	rowBreaks.addBreak((short)row, fromCol, toCol);
  +    }
  +
  +    /**
  +     * Removes a page break at the indicated row
  +     * @param row
  +     */
  +    public void removeRowBreak(int row) {
  +    	rowBreaks.removeBreak((short)row);
  +    }
  +
  +    /**
  +     * Queries if the specified row has a page break
  +     * @param row
  +     * @return true if the specified row has a page break
  +     */
  +    public boolean isRowBroken(int row) {
  +    	return rowBreaks.getBreak((short)row) != null;
  +    }
  +
  +    /**
  +     * Sets a page break at the indicated column
  +     * @param row
  +     */
  +    public void setColumnBreak(short column, short fromRow, short toRow) {    	
  +    	colBreaks.addBreak(column, fromRow, toRow);
  +    }
  +
  +    /**
  +     * Removes a page break at the indicated column
  +     * @param row
  +     */
  +    public void removeColumnBreak(short column) {
  +    	colBreaks.removeBreak(column);
  +    }
  +
  +    /**
  +     * Queries if the specified column has a page break
  +     * @param row
  +     * @return true if the specified column has a page break
  +     */
  +    public boolean isColumnBroken(short column) {
  +    	return colBreaks.getBreak(column) != null;
  +    }
  +    
  +    /**
  +     * Shifts the horizontal page breaks for the indicated count
  +     * @param startingRow
  +     * @param endingRow
  +     * @param count
  +     */
  +    public void shiftRowBreaks(int startingRow, int endingRow, int count) {
  +    	shiftBreaks(rowBreaks, (short)startingRow, (short)endingRow, (short)count);
  +    }
  +
  +    /**
  +     * Shifts the vertical page breaks for the indicated count
  +     * @param startingCol
  +     * @param endingCol
  +     * @param count
  +     */
  +    public void shiftColumnBreaks(short startingCol, short endingCol, short count) {
  +    	shiftBreaks(colBreaks, startingCol, endingCol, count);
  +    }
  +    
  +    /**
  +     * Returns all the row page breaks
  +     * @return
  +     */
  +    public Iterator getRowBreaks() {
  +    	return rowBreaks.getBreaksIterator();
  +    }
  +    
  +    /**
  +     * Returns the number of row page breaks
  +     * @return
  +     */
  +    public int getNumRowBreaks(){
  +    	return (int)rowBreaks.getNumBreaks();
  +    }
  +    
  +    /**
  +     * Returns all the column page breaks
  +     * @return
  +     */
  +    public Iterator getColumnBreaks(){
  +    	return colBreaks.getBreaksIterator();
  +    }
  +    
  +    /**
  +     * Returns the number of column page breaks
  +     * @return
  +     */
  +    public int getNumColumnBreaks(){
  +    	return (int)colBreaks.getNumBreaks();
       }
   }
  
  
  
  No                   revision
  No                   revision
  1.31.2.1  +9 -1      jakarta-poi/src/java/org/apache/poi/hssf/dev/BiffViewer.java
  
  Index: BiffViewer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/dev/BiffViewer.java,v
  retrieving revision 1.31
  retrieving revision 1.31.2.1
  diff -u -r1.31 -r1.31.2.1
  --- BiffViewer.java	8 May 2003 00:02:03 -0000	1.31
  +++ BiffViewer.java	9 Feb 2004 22:41:27 -0000	1.31.2.1
  @@ -2,7 +2,7 @@
    *  ====================================================================
    *  The Apache Software License, Version 1.1
    *
  - *  Copyright (c) 2003 The Apache Software Foundation.  All rights
  + *  Copyright (c) 2004 The Apache Software Foundation.  All rights
    *  reserved.
    *
    *  Redistribution and use in source and binary forms, with or without
  @@ -633,6 +633,14 @@
               case SharedFormulaRecord.sid:
               	 retval = new SharedFormulaRecord( rectype, size, data);
               	 break;
  +            case HorizontalPageBreakRecord.sid:
  +                retval = new HorizontalPageBreakRecord( rectype, size, data);
  +                break;
  +            case VerticalPageBreakRecord.sid:
  +                retval = new VerticalPageBreakRecord( rectype, size, data);
  +                break;
  +                
  +                 
               default:
                   retval = new UnknownRecord( rectype, size, data );
           }
  
  
  
  No                   revision
  No                   revision
  1.1.2.1   +23 -0     jakarta-poi/src/testcases/org/apache/poi/hssf/data/Attic/SimpleWithPageBreaks.xls
  
  	<<Binary file>>
  
  
  No                   revision
  No                   revision
  1.21.2.4  +111 -4    jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
  
  Index: HSSFSheet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java,v
  retrieving revision 1.21.2.3
  retrieving revision 1.21.2.4
  diff -u -r1.21.2.3 -r1.21.2.4
  --- HSSFSheet.java	23 Aug 2003 18:54:28 -0000	1.21.2.3
  +++ HSSFSheet.java	9 Feb 2004 22:41:27 -0000	1.21.2.4
  @@ -1,7 +1,7 @@
   /* ====================================================================
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2003 The Apache Software Foundation.  All rights
  + * Copyright (c) 2004 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -68,6 +68,7 @@
   import org.apache.poi.hssf.model.Workbook;
   import org.apache.poi.hssf.record.CellValueRecordInterface;
   import org.apache.poi.hssf.record.HCenterRecord;
  +import org.apache.poi.hssf.record.PageBreakRecord;
   import org.apache.poi.hssf.record.Record;
   import org.apache.poi.hssf.record.RowRecord;
   import org.apache.poi.hssf.record.SCLRecord;
  @@ -981,6 +982,8 @@
        * <p>
        * Additionally shifts merged regions that are completely defined in these
        * rows (ie. merged 2 cells on a row to be shifted).
  +     * <p>
  +     * TODO Might want to add bounds checking here
        * @param startRow the row to start shifting
        * @param endRow the row to end shifting
        * @param n the number of rows to shift
  @@ -1004,7 +1007,8 @@
           }
   
   			shiftMerged(startRow, endRow, n, true);        
  -        
  +			sheet.shiftRowBreaks(startRow, endRow, n);
  +			
           for ( int rowNum = s; rowNum >= startRow && rowNum <= endRow && rowNum >= 0 && rowNum < 65536; rowNum += inc )
           {
               HSSFRow row = getRow( rowNum );
  @@ -1130,7 +1134,7 @@
        * @return whether formulas are displayed
        */
       public boolean isDisplayFormulas() {
  -	return sheet.isDisplayFormulas();
  +    	return sheet.isDisplayFormulas();
       }
   
       /**
  @@ -1146,6 +1150,109 @@
        * @return whether RowColHeadings are displayed
        */
       public boolean isDisplayRowColHeadings() {
  -	return sheet.isDisplayRowColHeadings();
  +    	return sheet.isDisplayRowColHeadings();
  +    }
  +    
  +    /**
  +     * Sets a page break at the indicated row
  +     * @param row
  +     */
  +    public void setRowBreak(int row) {
  +    	validateRow(row);
  +    	sheet.setRowBreak(row, (short)0, (short)255);
  +    }
  +
  +    /**
  +     * Determines if there is a page break at the indicated row
  +     * @param row
  +     * @return
  +     */
  +    public boolean isRowBroken(int row) {
  +    	return sheet.isRowBroken(row);
  +    }
  +    
  +    /**
  +     * Removes the page break at the indicated row
  +     * @param row
  +     */
  +    public void removeRowBreak(int row) {
  +    	sheet.removeRowBreak(row);
  +    }
  +    
  +    /**
  +     * Retrieves all the horizontal page breaks
  +     * @return
  +     */
  +    public int[] getRowBreaks(){
  +    	//we can probably cache this information, but this should be a sparsely used function 
  +    	int[] returnValue = new int[sheet.getNumRowBreaks()];
  +    	Iterator iterator = sheet.getRowBreaks();
  +    	int i = 0;
  +    	while (iterator.hasNext()) {
  +    		PageBreakRecord.Break breakItem = (PageBreakRecord.Break)iterator.next();
  +    		returnValue[i++] = (int)breakItem.main;
  +    	}
  +    	return returnValue;
  +    }
  +
  +    /**
  +     * Retrieves all the vertical page breaks
  +     * @return
  +     */
  +    public short[] getColumnBreaks(){
  +    	//we can probably cache this information, but this should be a sparsely used function 
  +    	short[] returnValue = new short[sheet.getNumColumnBreaks()];
  +    	Iterator iterator = sheet.getColumnBreaks();
  +    	int i = 0;
  +    	while (iterator.hasNext()) {
  +    		PageBreakRecord.Break breakItem = (PageBreakRecord.Break)iterator.next();
  +    		returnValue[i++] = breakItem.main;
  +    	}
  +    	return returnValue;
  +    }
  +    
  +    
  +    /**
  +     * Sets a page break at the indicated column
  +     * @param column
  +     */
  +    public void setColumnBreak(short column) {
  +    	validateColumn(column);
  +    	sheet.setColumnBreak(column, (short)0, (short)65535);
  +    }
  +
  +    /**
  +     * Determines if there is a page break at the indicated column
  +     * @param column
  +     * @return
  +     */
  +    public boolean isColumnBroken(short column) {
  +    	return sheet.isColumnBroken(column);
  +    }
  +    
  +    /**
  +     * Removes a page break at the indicated column
  +     * @param column
  +     */
  +    public void removeColumnBreak(short column) {
  +    	sheet.removeColumnBreak(column);
  +    }
  +    
  +    /**
  +     * Runs a bounds check for row numbers
  +     * @param row
  +     */
  +    protected void validateRow(int row) {
  +    	if (row > 65535) throw new IllegalArgumentException("Maximum row number is 65535");
  +    	if (row < 0) throw new IllegalArgumentException("Minumum row number is 0");
  +    }
  +    
  +    /**
  +     * Runs a bounds check for column numbers
  +     * @param column
  +     */
  +    protected void validateColumn(short column) {
  +    	if (column > 255) throw new IllegalArgumentException("Maximum column number is 255");
  +    	if (column < 0)	throw new IllegalArgumentException("Minimum column number is 0");
       }
   }
  
  
  
  No                   revision
  No                   revision
  1.3.2.2   +121 -0    jakarta-poi/src/testcases/org/apache/poi/hssf/model/SheetTest.java
  
  Index: SheetTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/model/SheetTest.java,v
  retrieving revision 1.3.2.1
  retrieving revision 1.3.2.2
  diff -u -r1.3.2.1 -r1.3.2.2
  --- SheetTest.java	6 Sep 2003 18:56:29 -0000	1.3.2.1
  +++ SheetTest.java	9 Feb 2004 22:41:27 -0000	1.3.2.2
  @@ -2,12 +2,14 @@
   
   import java.lang.reflect.Field;
   import java.util.ArrayList;
  +import java.util.Iterator;
   import java.util.List;
   
   import junit.framework.TestCase;
   
   import org.apache.poi.hssf.record.ColumnInfoRecord;
   import org.apache.poi.hssf.record.MergeCellsRecord;
  +import org.apache.poi.hssf.record.PageBreakRecord;
   import org.apache.poi.hssf.record.RowRecord;
   import org.apache.poi.hssf.record.StringRecord;
   
  @@ -171,6 +173,125 @@
   		Sheet sheet = Sheet.createSheet(records, 0);
   		assertNotNull("Row [2] was skipped", sheet.getRow(2));
   		
  +	}
  +	
  +	/**
  +	 * Make sure page break functionality works (in memory)
  +	 *
  +	 */
  +	public void testRowPageBreaks(){
  +		short colFrom = 0;
  +		short colTo = 255;
  +		
  +		Sheet sheet = Sheet.createSheet();
  +		sheet.setRowBreak(0, colFrom, colTo);
  +		
  +		assertTrue("no row break at 0", sheet.isRowBroken(0));
  +		assertEquals("1 row break available", 1, sheet.getNumRowBreaks());
  +		
  +		sheet.setRowBreak(0, colFrom, colTo);		
  +		sheet.setRowBreak(0, colFrom, colTo);		
  +
  +		assertTrue("no row break at 0", sheet.isRowBroken(0));
  +		assertEquals("1 row break available", 1, sheet.getNumRowBreaks());
  +		
  +		sheet.setRowBreak(10, colFrom, colTo);
  +		sheet.setRowBreak(11, colFrom, colTo);
  +
  +		assertTrue("no row break at 10", sheet.isRowBroken(10));
  +		assertTrue("no row break at 11", sheet.isRowBroken(11));
  +		assertEquals("3 row break available", 3, sheet.getNumRowBreaks());
  +		
  +		
  +		boolean is10 = false;
  +		boolean is0 = false;
  +		boolean is11 = false;
  +		
  +		Iterator iterator = sheet.getRowBreaks();
  +		while (iterator.hasNext()) {
  +			PageBreakRecord.Break breakItem = (PageBreakRecord.Break)iterator.next();
  +			int main = (int)breakItem.main;
  +			if (main != 0 && main != 10 && main != 11) fail("Invalid page break");
  +			if (main == 0) 	is0 = true;
  +			if (main == 10) is10= true;
  +			if (main == 11) is11 = true;
  +		}
  +		
  +		assertTrue("one of the breaks didnt make it", is0 && is10 && is11); 
  +		
  +		sheet.removeRowBreak(11);
  +		assertFalse("row should be removed", sheet.isRowBroken(11));
  +		
  +		sheet.removeRowBreak(0);
  +		assertFalse("row should be removed", sheet.isRowBroken(0));
  +		
  +		sheet.removeRowBreak(10);
  +		assertFalse("row should be removed", sheet.isRowBroken(10));
  +		
  +		assertEquals("no more breaks", 0, sheet.getNumRowBreaks());
  +		
  +		
  +	}
  +	
  +	/**
  +	 * Make sure column pag breaks works properly (in-memory)
  +	 *
  +	 */
  +	public void testColPageBreaks(){
  +		short rowFrom = 0;
  +		short rowTo = (short)65535;
  +		
  +		Sheet sheet = Sheet.createSheet();
  +		sheet.setColumnBreak((short)0, rowFrom, rowTo); 
  +		
  +		assertTrue("no col break at 0", sheet.isColumnBroken((short)0));
  +		assertEquals("1 col break available", 1, sheet.getNumColumnBreaks());		
  +		
  +		sheet.setColumnBreak((short)0, rowFrom, rowTo);
  +		
  +		assertTrue("no col break at 0", sheet.isColumnBroken((short)0));
  +		assertEquals("1 col break available", 1, sheet.getNumColumnBreaks());		
  +		
  +		sheet.setColumnBreak((short)1, rowFrom, rowTo);
  +		sheet.setColumnBreak((short)10, rowFrom, rowTo);
  +		sheet.setColumnBreak((short)15, rowFrom, rowTo);
  +		
  +		assertTrue("no col break at 1", sheet.isColumnBroken((short)1));
  +		assertTrue("no col break at 10", sheet.isColumnBroken((short)10));
  +		assertTrue("no col break at 15", sheet.isColumnBroken((short)15));
  +		assertEquals("4 col break available", 4, sheet.getNumColumnBreaks());		
  +
  +		boolean is10 = false;
  +		boolean is0 = false;
  +		boolean is1 = false;
  +		boolean is15 = false;
  +		
  +		Iterator iterator = sheet.getColumnBreaks();
  +		while (iterator.hasNext()) {
  +			PageBreakRecord.Break breakItem = (PageBreakRecord.Break)iterator.next();
  +			int main = (int)breakItem.main;
  +			if (main != 0 && main != 1 && main != 10 && main != 15) fail("Invalid page break");
  +			if (main == 0) 	is0 = true;
  +			if (main == 1) 	is1 = true;
  +			if (main == 10) is10= true;
  +			if (main == 15) is15 = true;
  +		}
  +		
  +		assertTrue("one of the breaks didnt make it", is0 && is1 && is10 && is15); 
  +		
  +		sheet.removeColumnBreak((short)15);
  +		assertFalse("column break should not be there", sheet.isColumnBroken((short)15));
  +
  +		sheet.removeColumnBreak((short)0);
  +		assertFalse("column break should not be there", sheet.isColumnBroken((short)0));
  +		
  +		sheet.removeColumnBreak((short)1);
  +		assertFalse("column break should not be there", sheet.isColumnBroken((short)1));
  +		
  +		sheet.removeColumnBreak((short)10);
  +		assertFalse("column break should not be there", sheet.isColumnBroken((short)10));
  +		
  +		assertEquals("no more breaks", 0, sheet.getNumColumnBreaks());
   	}
   
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: poi-dev-help@jakarta.apache.org


Re: Commits branches and features oh my

Posted by "Andrew C. Oliver" <ac...@apache.org>.
I don't feel strongly about it but it may be confusing as that¹s how we used
to denote development releases.  IIRC we voted to go to more of a
Linux-style scheme (but no one including me noted it on the resolutions page
so I promptly forgot the results -- bad me).

I'd hate to just call this 2.01 though...I mean this is a fat feature
change...  I guess I don't feel that strongly about it, just we should
branch just in case and leave a little room for point releases along the
BRANCH_2 stuff...  I mean I'm sure its perfect and we have no serious bugs,
but just in case.

-Andy
-- 
Andrew C. Oliver
http://www.superlinksoftware.com/poi.jsp
Custom enhancements and Commercial Implementation for Jakarta POI

http://jakarta.apache.org/poi
For Java and Excel, Got POI?

The views expressed in this email are those of the author and are almost
definitely not shared by the Apache Software Foundation, its board or its
general membership.  In fact they probably most definitively disagree with
everything espoused in the above email.

> From: Glen Stampoultzis <gs...@iinet.net.au>
> Reply-To: "POI Developers List" <po...@jakarta.apache.org>
> Date: Tue, 10 Feb 2004 10:22:51 +1100
> To: "POI Developers List" <po...@jakarta.apache.org>
> Subject: Re: Commits branches and features oh my
> 
> At 10:16 AM 10/02/2004, you wrote:
>> I'd like to propose that we do a 2.5. . . . Oh I know I know
>> we said never again, but this feature is far too mature for 3.0 and far to
>> sweeping for a 2.01 release in my opinion.
> 
> 2.1?
> 
> 
> 
> 
> 
> Glen Stampoultzis
> gstamp@iinet.net.au
> http://members.iinet.net.au/~gstamp/glen/
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: poi-dev-help@jakarta.apache.org


Re: Commits branches and features oh my

Posted by Glen Stampoultzis <gs...@iinet.net.au>.
At 10:16 AM 10/02/2004, you wrote:
>I'd like to propose that we do a 2.5. . . . Oh I know I know
>we said never again, but this feature is far too mature for 3.0 and far to
>sweeping for a 2.01 release in my opinion.

2.1?





Glen Stampoultzis
gstamp@iinet.net.au
http://members.iinet.net.au/~gstamp/glen/

Re: Commits branches and features oh my

Posted by Danny Mui <da...@muibros.com>.
I'm actually trying to make this work on HEAD at the moment.  I promised 
the users that they would have this today and they're not brave enough 
for 3.0...YET.

I'd like to see the drawing stuff in the "release" branch as well.  Your 
characterization of that feature set is dead on...so version number is 
pretty insignificant?

Andrew C. Oliver wrote:
> Don't forget to add this to 3.0!  We need to start moving on 3.0 again.  I
> need everyone's help to make the HSSF stuff work.  There was too much stuff
> I didn't work on for me to be able to do it myself.
> 
> Lets also get the discussion on TNEF and POIFS2 rolling again.
> 
> SuperLink also has a significant new feature to add in the coming days:
> Escher images.  I'd like to propose that we do a 2.5. . . . Oh I know I know
> we said never again, but this feature is far too mature for 3.0 and far to
> sweeping for a 2.01 release in my opinion.  I'd like to hear what others
> think.  Based on this you can now draw company logos on the reports and
> more.  
> 
> Alternatively, we could make the HEAD 4.0 and do the drawing stuff as
> 3.0....
> 
> Thoughts?

---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: poi-dev-help@jakarta.apache.org


Re: Commits branches and features oh my

Posted by "Andrew C. Oliver" <ac...@apache.org>.
Will do.  I'll probably put it on a wiki.
-- 
Andrew C. Oliver
http://www.superlinksoftware.com/poi.jsp
Custom enhancements and Commercial Implementation for Jakarta POI

http://jakarta.apache.org/poi
For Java and Excel, Got POI?

The views expressed in this email are those of the author and are almost
definitely not shared by the Apache Software Foundation, its board or its
general membership.  In fact they probably most definitively disagree with
everything espoused in the above email.

> From: Avik Sengupta <av...@itellix.com>
> Organization: Itellix Software Solutions Pvt Ltd
> Reply-To: "POI Developers List" <po...@jakarta.apache.org>
> Date: 11 Feb 2004 17:23:03 +0530
> To: POI Developers List <po...@jakarta.apache.org>
> Subject: Re: Commits branches and features oh my
> 
>> We need to start moving on 3.0 again.
> 
> The testcases were initially failing in hpsf (testcase issues) which I
> have fixed. The next block was the shared formula stuff that does not
> work in 3.0. Jason has put a patch in bugzilla to fix that (very
> different from 2.0) .. while I looked at it yet, I am not too concerned
> since its a reasonably well defined/encapsulated issue, with a patch.
> The testcases then stop working on the hssf.usermodel.TestBugs tests,
> which are primarily higher level/functional sort of tests, meaning that
> they are catching things which aren't being caught in our unit tests.
> Which in turn means that they require significantly more debugging
> effort. 
> 
> Anyways, that was just by way of a status check.
> 
> Andy, what would be useful if you could do a couple of paragraphs of
> "architecture documentation" about how records are now stored and
> manipulated into higher level objects?
> 
> Another thing that struck me while I was debugging was that there were
> only a few tests for ValueRecordAggregate, given the amount of
> functionality in that class.. we need to write more tests for that..
> i'll try and do some.
> 
> Regards
> -
> Avik
> 
> 
> On Tue, 2004-02-10 at 04:46, Andrew C. Oliver wrote:
>> Don't forget to add this to 3.0!  We need to start moving on 3.0 again.  I
>> need everyone's help to make the HSSF stuff work.  There was too much stuff
>> I didn't work on for me to be able to do it myself.
>> 
>> Lets also get the discussion on TNEF and POIFS2 rolling again.
>> 
>> SuperLink also has a significant new feature to add in the coming days:
>> Escher images.  I'd like to propose that we do a 2.5. . . . Oh I know I know
>> we said never again, but this feature is far too mature for 3.0 and far to
>> sweeping for a 2.01 release in my opinion.  I'd like to hear what others
>> think.  Based on this you can now draw company logos on the reports and
>> more.  
>> 
>> Alternatively, we could make the HEAD 4.0 and do the drawing stuff as
>> 3.0....
>> 
>> Thoughts?
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: poi-dev-help@jakarta.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: poi-dev-help@jakarta.apache.org


Re: Commits branches and features oh my

Posted by Avik Sengupta <av...@itellix.com>.
> We need to start moving on 3.0 again.

The testcases were initially failing in hpsf (testcase issues) which I
have fixed. The next block was the shared formula stuff that does not
work in 3.0. Jason has put a patch in bugzilla to fix that (very
different from 2.0) .. while I looked at it yet, I am not too concerned
since its a reasonably well defined/encapsulated issue, with a patch.
The testcases then stop working on the hssf.usermodel.TestBugs tests,
which are primarily higher level/functional sort of tests, meaning that
they are catching things which aren't being caught in our unit tests.
Which in turn means that they require significantly more debugging
effort. 

Anyways, that was just by way of a status check. 

Andy, what would be useful if you could do a couple of paragraphs of
"architecture documentation" about how records are now stored and
manipulated into higher level objects?

Another thing that struck me while I was debugging was that there were
only a few tests for ValueRecordAggregate, given the amount of
functionality in that class.. we need to write more tests for that..
i'll try and do some. 

Regards
-
Avik


On Tue, 2004-02-10 at 04:46, Andrew C. Oliver wrote:
> Don't forget to add this to 3.0!  We need to start moving on 3.0 again.  I
> need everyone's help to make the HSSF stuff work.  There was too much stuff
> I didn't work on for me to be able to do it myself.
> 
> Lets also get the discussion on TNEF and POIFS2 rolling again.
> 
> SuperLink also has a significant new feature to add in the coming days:
> Escher images.  I'd like to propose that we do a 2.5. . . . Oh I know I know
> we said never again, but this feature is far too mature for 3.0 and far to
> sweeping for a 2.01 release in my opinion.  I'd like to hear what others
> think.  Based on this you can now draw company logos on the reports and
> more.  
> 
> Alternatively, we could make the HEAD 4.0 and do the drawing stuff as
> 3.0....
> 
> Thoughts?


---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: poi-dev-help@jakarta.apache.org


Commits branches and features oh my

Posted by "Andrew C. Oliver" <ac...@apache.org>.
Don't forget to add this to 3.0!  We need to start moving on 3.0 again.  I
need everyone's help to make the HSSF stuff work.  There was too much stuff
I didn't work on for me to be able to do it myself.

Lets also get the discussion on TNEF and POIFS2 rolling again.

SuperLink also has a significant new feature to add in the coming days:
Escher images.  I'd like to propose that we do a 2.5. . . . Oh I know I know
we said never again, but this feature is far too mature for 3.0 and far to
sweeping for a 2.01 release in my opinion.  I'd like to hear what others
think.  Based on this you can now draw company logos on the reports and
more.  

Alternatively, we could make the HEAD 4.0 and do the drawing stuff as
3.0....

Thoughts?
-- 
Andrew C. Oliver
http://www.superlinksoftware.com/poi.jsp
Custom enhancements and Commercial Implementation for Jakarta POI

http://jakarta.apache.org/poi
For Java and Excel, Got POI?


> From: dmui@apache.org
> Reply-To: "POI Developers List" <po...@jakarta.apache.org>
> Date: 9 Feb 2004 22:41:27 -0000
> To: jakarta-poi-cvs@apache.org
> Subject: cvs commit: jakarta-poi/src/testcases/org/apache/poi/hssf/model
> SheetTest.java
> 
> dmui        2004/02/09 14:41:27
> 
> Modified:    src/testcases/org/apache/poi/hssf/usermodel Tag:
>                       REL_2_BRANCH TestCloneSheet.java
>                       TestSheetShiftRows.java TestHSSFSheet.java
>              src/java/org/apache/poi/hssf/record Tag: REL_2_BRANCH
>                       RecordFactory.java
>              src/java/org/apache/poi/hssf/model Tag: REL_2_BRANCH
>                       Sheet.java
>              src/java/org/apache/poi/hssf/dev Tag: REL_2_BRANCH
>                       BiffViewer.java
>              src/java/org/apache/poi/hssf/usermodel Tag: REL_2_BRANCH
>                       HSSFSheet.java
>              src/testcases/org/apache/poi/hssf/model Tag: REL_2_BRANCH
>                       SheetTest.java
> Added:       src/java/org/apache/poi/hssf/record Tag: REL_2_BRANCH
>                       VerticalPageBreakRecord.java
>                       HorizontalPageBreakRecord.java PageBreakRecord.java
>              src/testcases/org/apache/poi/hssf/data Tag: REL_2_BRANCH
>                       SimpleWithPageBreaks.xls
> Log:
> Patch to support Horizontal and Vertical Page breaks, included testcases
> and files.
> PR:
> Obtained from:
> Submitted by:    
> Reviewed by:    
> CVS: ----------------------------------------------------------------------
> CVS: PR:
> CVS:   If this change addresses a PR in the problem report tracking
> CVS:   database, then enter the PR number(s) here.
> CVS: Obtained from:
> CVS:   If this change has been taken from another system, such as NCSA,
> CVS:   then name the system in this line, otherwise delete it.
> CVS: Submitted by:
> CVS:   If this code has been contributed to Apache by someone else; i.e.,
> CVS:   they sent us a patch or a new module, then include their name/email
> CVS:   address here. If this is your work then delete this line.
> CVS: Reviewed by:
> CVS:   If we are doing pre-commit code reviews and someone else has
> CVS:   reviewed your changes, include their name(s) here.
> CVS:   If you have not had it reviewed then delete this line.
> 
> Revision  Changes    Path
> No                   revision
> No                   revision
> 1.2.2.2   +19 -0 
> jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestCloneSheet.java
> 
> Index: TestCloneSheet.java
> ===================================================================
> RCS file: 
> /home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestCloneShe
> et.java,v
> retrieving revision 1.2.2.1
> retrieving revision 1.2.2.2
> diff -u -r1.2.2.1 -r1.2.2.2
> --- TestCloneSheet.java    13 Oct 2003 16:45:01 -0000    1.2.2.1
> +++ TestCloneSheet.java    9 Feb 2004 22:41:26 -0000    1.2.2.2
> @@ -82,4 +82,23 @@
> catch(Exception e){e.printStackTrace();fail(e.getMessage());}
> }
>  
> +   /**
> +    * Ensures that pagebreak cloning works properly
> +    *
> +    */
> +   public void testPageBreakClones() {
> +      HSSFWorkbook b = new HSSFWorkbook();
> +      HSSFSheet s = b.createSheet("Test");
> +      s.setRowBreak(3);
> +      s.setColumnBreak((short)6);
> +      
> +      HSSFSheet clone = b.cloneSheet(0);
> +      assertTrue("Row 3 not broken", clone.isRowBroken(3));
> +      assertTrue("Column 6 not broken", clone.isColumnBroken((short)6));
> +      
> +      s.removeRowBreak(3);
> +      
> +      assertTrue("Row 3 still should be broken", clone.isRowBroken(3));
> +   }
> +   
>  }
> 
> 
> 
> 1.2.2.2   +26 -10
> 
jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestSheetShiftRows.jav>
a
> 
> Index: TestSheetShiftRows.java
> ===================================================================
> RCS file: 
> /home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestSheetShi
> ftRows.java,v
> retrieving revision 1.2.2.1
> retrieving revision 1.2.2.2
> diff -u -r1.2.2.1 -r1.2.2.2
> --- TestSheetShiftRows.java    23 Oct 2003 17:16:03 -0000    1.2.2.1
> +++ TestSheetShiftRows.java    9 Feb 2004 22:41:26 -0000    1.2.2.2
> @@ -169,11 +169,11 @@
>       * @author Toshiaki Kamoshida (kamoshida.toshiaki at future dot co dot
> jp)
>       */
>      public void testShiftRow(){
> -    HSSFWorkbook b = new HSSFWorkbook();
> -    HSSFSheet s    = b.createSheet();
> -    s.createRow(0).createCell((short)0).setCellValue("TEST1");
> -    s.createRow(3).createCell((short)0).setCellValue("TEST2");
> -    s.shiftRows(0,4,1);
> +       HSSFWorkbook b = new HSSFWorkbook();
> +       HSSFSheet s    = b.createSheet();
> +       s.createRow(0).createCell((short)0).setCellValue("TEST1");
> +       s.createRow(3).createCell((short)0).setCellValue("TEST2");
> +       s.shiftRows(0,4,1);
>      }
>  
>      /**
> @@ -182,11 +182,27 @@
>       * @author Toshiaki Kamoshida (kamoshida.toshiaki at future dot co dot
> jp)
>       */
>      public void testShiftRow0(){
> -    HSSFWorkbook b = new HSSFWorkbook();
> -    HSSFSheet s    = b.createSheet();
> -    s.createRow(0).createCell((short)0).setCellValue("TEST1");
> -    s.createRow(3).createCell((short)0).setCellValue("TEST2");
> -    s.shiftRows(0,4,1);
> +       HSSFWorkbook b = new HSSFWorkbook();
> +       HSSFSheet s    = b.createSheet();
> +       s.createRow(0).createCell((short)0).setCellValue("TEST1");
> +       s.createRow(3).createCell((short)0).setCellValue("TEST2");
> +       s.shiftRows(0,4,1);
> +    }
> +    
> +    /**
> +     * When shifting rows, the page breaks should go with it
> +     *
> +     */
> +    public void testShiftRowBreaks(){
> +      HSSFWorkbook b = new HSSFWorkbook();
> +      HSSFSheet s    = b.createSheet();
> +      HSSFRow row = s.createRow(4);
> +      row.createCell((short)0).setCellValue("test");
> +      s.setRowBreak(4);
> +      
> +      s.shiftRows(4, 4, 2);
> +      assertTrue("Row number 6 should have a pagebreak", s.isRowBroken(6));
> +      
>      }
>  }
>  
> 
> 
> 
> 1.12.2.6  +66 -17
> jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
> 
> Index: TestHSSFSheet.java
> ===================================================================
> RCS file: 
> /home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFShee
> t.java,v
> retrieving revision 1.12.2.5
> retrieving revision 1.12.2.6
> diff -u -r1.12.2.5 -r1.12.2.6
> --- TestHSSFSheet.java    23 Aug 2003 18:54:28 -0000    1.12.2.5
> +++ TestHSSFSheet.java    9 Feb 2004 22:41:26 -0000    1.12.2.6
> @@ -1,7 +1,7 @@
>  /* ====================================================================
>   * The Apache Software License, Version 1.1
>   *
> - * Copyright (c) 2003 The Apache Software Foundation.  All rights
> + * Copyright (c) 2004 The Apache Software Foundation.  All rights
>   * reserved.
>   *
>   * Redistribution and use in source and binary forms, with or without
> @@ -345,8 +345,8 @@
>       * @author Shawn Laubach (slaubach at apache dot org)
>       */
>      public void testDisplayOptions() throws Exception {
> -    HSSFWorkbook wb = new HSSFWorkbook();
> -    HSSFSheet sheet = wb.createSheet();
> +        HSSFWorkbook wb = new HSSFWorkbook();
> +        HSSFSheet sheet = wb.createSheet();
> 
>          File tempFile = File.createTempFile("display", "test.xls");
>          FileOutputStream stream = new FileOutputStream(tempFile);
> @@ -356,15 +356,15 @@
>          FileInputStream readStream = new FileInputStream(tempFile);
>          wb = new HSSFWorkbook(readStream);
>          sheet = wb.getSheetAt(0);
> -    readStream.close();
> -
> -    assertEquals(sheet.isDisplayGridlines(), true);
> -    assertEquals(sheet.isDisplayRowColHeadings(), true);
> -    assertEquals(sheet.isDisplayFormulas(), false);
> -
> -    sheet.setDisplayGridlines(false);
> -    sheet.setDisplayRowColHeadings(false);
> -    sheet.setDisplayFormulas(true);
> +        readStream.close();
> +    
> +        assertEquals(sheet.isDisplayGridlines(), true);
> +        assertEquals(sheet.isDisplayRowColHeadings(), true);
> +        assertEquals(sheet.isDisplayFormulas(), false);
> +    
> +        sheet.setDisplayGridlines(false);
> +        sheet.setDisplayRowColHeadings(false);
> +        sheet.setDisplayFormulas(true);
>  
>          tempFile = File.createTempFile("display", "test.xls");
>          stream = new FileOutputStream(tempFile);
> @@ -374,14 +374,63 @@
>          readStream = new FileInputStream(tempFile);
>          wb = new HSSFWorkbook(readStream);
>          sheet = wb.getSheetAt(0);
> -    readStream.close();
> +        readStream.close();
> +    
> +    
> +        assertEquals(sheet.isDisplayGridlines(), false);
> +        assertEquals(sheet.isDisplayRowColHeadings(), false);
> +        assertEquals(sheet.isDisplayFormulas(), true);
> +    }
> +
> +    
> +    /**
> +     * Make sure the excel file loads work
> +     *
> +     */
> +    public void testPageBreakFiles() throws Exception{
> +        FileInputStream fis = null;
> +        HSSFWorkbook wb     = null;
> +        
> +        String filename = System.getProperty("HSSF.testdata.path");
>  
> +        filename = filename + "/SimpleWithPageBreaks.xls";
> +        fis = new FileInputStream(filename);
> +        wb = new HSSFWorkbook(fis);
> +        fis.close();
> +        
> +        HSSFSheet sheet = wb.getSheetAt(0);
> +        assertNotNull(sheet);
> +        
> +        assertEquals("1 row page break", 1, sheet.getRowBreaks().length);
> +        assertEquals("1 column page break", 1,
> sheet.getColumnBreaks().length);
>  
> -    assertEquals(sheet.isDisplayGridlines(), false);
> -    assertEquals(sheet.isDisplayRowColHeadings(), false);
> -    assertEquals(sheet.isDisplayFormulas(), true);
> -    }
> +        assertTrue("No row page break", sheet.isRowBroken(22));
> +        assertTrue("No column page break", sheet.isColumnBroken((short)4));
> +        
> +        sheet.setRowBreak(10);
> +        sheet.setColumnBreak((short)13);
> +
> +        assertEquals("row breaks number", 2, sheet.getRowBreaks().length);
> +        assertEquals("column breaks number", 2,
> sheet.getColumnBreaks().length);
> +        
> +        File tempFile = File.createTempFile("display", "testPagebreaks.xls");
> +        FileOutputStream stream = new FileOutputStream(tempFile);
> +        wb.write(stream);
> +        stream.close();
> +        
> +        wb = new HSSFWorkbook(new FileInputStream(tempFile));
> +        sheet = wb.getSheetAt(0);
> +
> +        assertTrue("No row page break", sheet.isRowBroken(22));
> +        assertTrue("No column page break", sheet.isColumnBroken((short)4));
>  
> +        
> +        assertEquals("row breaks number", 2, sheet.getRowBreaks().length);
> +        assertEquals("column breaks number", 2,
> sheet.getColumnBreaks().length);
> +        
> +        
> +    }
> +    
> public static void main(java.lang.String[] args) {
> junit.textui.TestRunner.run(TestHSSFSheet.class);
> }    
> 
> 
> 
> No                   revision
> No                   revision
> 1.16.2.1  +5 -3  
> jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java
> 
> Index: RecordFactory.java
> ===================================================================
> RCS file: 
> /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java,v
> retrieving revision 1.16
> retrieving revision 1.16.2.1
> diff -u -r1.16 -r1.16.2.1
> --- RecordFactory.java    8 May 2003 00:02:03 -0000    1.16
> +++ RecordFactory.java    9 Feb 2004 22:41:26 -0000    1.16.2.1
> @@ -2,7 +2,7 @@
>  /* ====================================================================
>   * The Apache Software License, Version 1.1
>   *
> - * Copyright (c) 2003 The Apache Software Foundation.  All rights
> + * Copyright (c) 2004 The Apache Software Foundation.  All rights
>   * reserved.
>   *
>   * Redistribution and use in source and binary forms, with or without
> @@ -112,7 +112,8 @@
>                  FormulaRecord.class, BoolErrRecord.class,
> ExternSheetRecord.class,
>                  NameRecord.class, LeftMarginRecord.class,
> RightMarginRecord.class,
>                  TopMarginRecord.class, BottomMarginRecord.class,
> -                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class
> +                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class,
> +                HorizontalPageBreakRecord.class,
> VerticalPageBreakRecord.class
>              };
>          } else {
>              records = new Class[]
> @@ -143,7 +144,8 @@
>                  BoolErrRecord.class, ExternSheetRecord.class,
> NameRecord.class,
>                  LeftMarginRecord.class, RightMarginRecord.class,
>                  TopMarginRecord.class, BottomMarginRecord.class,
> -                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class
> +                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class,
> +                HorizontalPageBreakRecord.class,
> VerticalPageBreakRecord.class
>              };
>  
>          }
> 
> 
> 
> No                   revision
> 
> Index: RecordFactory.java
> ===================================================================
> RCS file: 
> /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java,v
> retrieving revision 1.16
> retrieving revision 1.16.2.1
> diff -u -r1.16 -r1.16.2.1
> --- RecordFactory.java    8 May 2003 00:02:03 -0000    1.16
> +++ RecordFactory.java    9 Feb 2004 22:41:26 -0000    1.16.2.1
> @@ -2,7 +2,7 @@
>  /* ====================================================================
>   * The Apache Software License, Version 1.1
>   *
> - * Copyright (c) 2003 The Apache Software Foundation.  All rights
> + * Copyright (c) 2004 The Apache Software Foundation.  All rights
>   * reserved.
>   *
>   * Redistribution and use in source and binary forms, with or without
> @@ -112,7 +112,8 @@
>                  FormulaRecord.class, BoolErrRecord.class,
> ExternSheetRecord.class,
>                  NameRecord.class, LeftMarginRecord.class,
> RightMarginRecord.class,
>                  TopMarginRecord.class, BottomMarginRecord.class,
> -                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class
> +                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class,
> +                HorizontalPageBreakRecord.class,
> VerticalPageBreakRecord.class
>              };
>          } else {
>              records = new Class[]
> @@ -143,7 +144,8 @@
>                  BoolErrRecord.class, ExternSheetRecord.class,
> NameRecord.class,
>                  LeftMarginRecord.class, RightMarginRecord.class,
>                  TopMarginRecord.class, BottomMarginRecord.class,
> -                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class
> +                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class,
> +                HorizontalPageBreakRecord.class,
> VerticalPageBreakRecord.class
>              };
>  
>          }
> 
> 
> 
> No                   revision
> 
> Index: RecordFactory.java
> ===================================================================
> RCS file: 
> /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java,v
> retrieving revision 1.16
> retrieving revision 1.16.2.1
> diff -u -r1.16 -r1.16.2.1
> --- RecordFactory.java    8 May 2003 00:02:03 -0000    1.16
> +++ RecordFactory.java    9 Feb 2004 22:41:26 -0000    1.16.2.1
> @@ -2,7 +2,7 @@
>  /* ====================================================================
>   * The Apache Software License, Version 1.1
>   *
> - * Copyright (c) 2003 The Apache Software Foundation.  All rights
> + * Copyright (c) 2004 The Apache Software Foundation.  All rights
>   * reserved.
>   *
>   * Redistribution and use in source and binary forms, with or without
> @@ -112,7 +112,8 @@
>                  FormulaRecord.class, BoolErrRecord.class,
> ExternSheetRecord.class,
>                  NameRecord.class, LeftMarginRecord.class,
> RightMarginRecord.class,
>                  TopMarginRecord.class, BottomMarginRecord.class,
> -                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class
> +                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class,
> +                HorizontalPageBreakRecord.class,
> VerticalPageBreakRecord.class
>              };
>          } else {
>              records = new Class[]
> @@ -143,7 +144,8 @@
>                  BoolErrRecord.class, ExternSheetRecord.class,
> NameRecord.class,
>                  LeftMarginRecord.class, RightMarginRecord.class,
>                  TopMarginRecord.class, BottomMarginRecord.class,
> -                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class
> +                PaletteRecord.class, StringRecord.class,
> RecalcIdRecord.class, SharedFormulaRecord.class,
> +                HorizontalPageBreakRecord.class,
> VerticalPageBreakRecord.class
>              };
>  
>          }
> 
> 
> 
> 1.1.2.1   +107 -0
> jakarta-poi/src/java/org/apache/poi/hssf/record/Attic/VerticalPageBreakRecord.
> java
> 
> 
> 
> 
> 1.1.2.1   +107 -0
> jakarta-poi/src/java/org/apache/poi/hssf/record/Attic/HorizontalPageBreakRecor
> d.java
> 
> 
> 
> 
> 1.1.2.1   +304 -0
> jakarta-poi/src/java/org/apache/poi/hssf/record/Attic/PageBreakRecord.java
> 
> 
> 
> 
> No                   revision
> No                   revision
> 1.31.2.9  +200 -49   jakarta-poi/src/java/org/apache/poi/hssf/model/Sheet.java
> 
> Index: Sheet.java
> ===================================================================
> RCS file: 
> /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/model/Sheet.java,v
> retrieving revision 1.31.2.8
> retrieving revision 1.31.2.9
> diff -u -r1.31.2.8 -r1.31.2.9
> --- Sheet.java    21 Sep 2003 09:58:24 -0000    1.31.2.8
> +++ Sheet.java    9 Feb 2004 22:41:26 -0000    1.31.2.9
> @@ -2,7 +2,7 @@
>  /* ====================================================================
>   * The Apache Software License, Version 1.1
>   *
> - * Copyright (c) 2003 The Apache Software Foundation.  All rights
> + * Copyright (c) 2004 The Apache Software Foundation.  All rights
>   * reserved.
>   *
>   * Redistribution and use in source and binary forms, with or without
> @@ -111,7 +111,7 @@
>      protected WindowTwoRecord           windowTwo        = null;
>      protected MergeCellsRecord          merged           = null;
>      protected Margin                    margins[]        = null;
> -    protected List                         mergedRecords    = new
ArrayList();
> +    protected List                          mergedRecords    = new
ArrayList();
>      protected int                       numMergedRegions = 0;
>      protected SelectionRecord           selection        = null;
>      private static POILogger            log              =
> POILogFactory.getLogger(Sheet.class);
> @@ -121,8 +121,11 @@
>      private Iterator                    valueRecIterator = null;
>      private Iterator                    rowRecIterator   = null;
>      protected int                       eofLoc           = 0;
> -    protected ProtectRecord             protect          = null;
> -
> +     protected ProtectRecord             protect          = null;
> +     protected PageBreakRecord              rowBreaks           = null;
> +     protected PageBreakRecord              colBreaks           = null;
> +    
> +    
>      public static final byte PANE_LOWER_RIGHT = (byte)0;
>      public static final byte PANE_UPPER_RIGHT = (byte)1;
>      public static final byte PANE_LOWER_LEFT = (byte)2;
> @@ -155,7 +158,7 @@
>       */
>      public static Sheet createSheet(List recs, int sheetnum, int offset)
>      {
> -        log.logFormatted(log.DEBUG,
> +        log.logFormatted(POILogger.DEBUG,
>                           "Sheet createSheet (existing file) with %",
>                           new Integer(recs.size()));
>          Sheet     retval             = new Sheet();
> @@ -170,18 +173,18 @@
>  
>              if (rec.getSid() == LabelRecord.sid)
>              {
> -                log.log(log.DEBUG, "Hit label record.");
> +                log.log(POILogger.DEBUG, "Hit label record.");
>                  retval.containsLabels = true;
>              }
>              else if (rec.getSid() == BOFRecord.sid)
>              {
>                  bofEofNestingLevel++;
> -                log.log(log.DEBUG, "Hit BOF record. Nesting increased to " +
> bofEofNestingLevel);
> +                log.log(POILogger.DEBUG, "Hit BOF record. Nesting increased
> to " + bofEofNestingLevel);
>              }
>              else if (rec.getSid() == EOFRecord.sid)
>              {
>                  --bofEofNestingLevel;
> -                log.log(log.DEBUG, "Hit EOF record. Nesting decreased to " +
> bofEofNestingLevel);
> +                log.log(POILogger.DEBUG, "Hit EOF record. Nesting decreased
> to " + bofEofNestingLevel);
>                  if (bofEofNestingLevel == 0) {
>                      records.add(rec);
>                      retval.eofLoc = k;
> @@ -289,8 +292,16 @@
> else if ( rec.getSid() == ProtectRecord.sid )
> {
> retval.protect = (ProtectRecord) rec;
> +            } 
> +            else if (rec.getSid() == PageBreakRecord.HORIZONTAL_SID)
> +            {   
> +                retval.rowBreaks = (PageBreakRecord)rec;
> }
> -
> +            else if (rec.getSid() == PageBreakRecord.VERTICAL_SID)
> +            {   
> +                retval.colBreaks = (PageBreakRecord)rec;
> +            }
> +            
>              if (rec != null)
>              {
>                  records.add(rec);
> @@ -307,7 +318,7 @@
>  //        {
>  //            retval.cells = new ValueRecordsAggregate();
>  //        }
> -        log.log(log.DEBUG, "sheet createSheet (existing file) exited");
> +        log.log(POILogger.DEBUG, "sheet createSheet (existing file) exited");
>          return retval;
>      }
>  
> @@ -366,7 +377,7 @@
>  
>      public static Sheet createSheet(List records, int sheetnum)
>      {
> -        log.log(log.DEBUG,
> +        log.log(POILogger.DEBUG,
>                  "Sheet createSheet (exisiting file) assumed offset 0");
>          return createSheet(records, sheetnum, 0);
>      }
> @@ -381,7 +392,7 @@
>  
>      public static Sheet createSheet()
>      {
> -        log.log(log.DEBUG, "Sheet createsheet from scratch called");
> +        log.log(POILogger.DEBUG, "Sheet createsheet from scratch called");
>          Sheet     retval  = new Sheet();
>          ArrayList records = new ArrayList(30);
>  
> @@ -404,8 +415,14 @@
>                  (DefaultRowHeightRecord) retval.createDefaultRowHeight();
>          records.add( retval.defaultrowheight );
>          records.add( retval.createWSBool() );
> +
> +        retval.rowBreaks = new
> PageBreakRecord(PageBreakRecord.HORIZONTAL_SID);
> +        records.add(retval.rowBreaks);
> +        retval.colBreaks = new PageBreakRecord(PageBreakRecord.VERTICAL_SID);
> +        records.add(retval.colBreaks);
> +        
>          retval.header = (HeaderRecord) retval.createHeader();
> -        records.add( retval.header );
> +        records.add( retval.header );
>          retval.footer = (FooterRecord) retval.createFooter();
>          records.add( retval.footer );
>          records.add( retval.createHCenter() );
> @@ -415,9 +432,9 @@
>          retval.defaultcolwidth =
>                  (DefaultColWidthRecord) retval.createDefaultColWidth();
>          records.add( retval.defaultcolwidth);
> -        retval.dims    = ( DimensionsRecord ) retval.createDimensions();
> -        retval.dimsloc = 19;
> +        retval.dims    = ( DimensionsRecord ) retval.createDimensions();
>          records.add(retval.dims);
> +        retval.dimsloc = records.size()-1;
>          records.add(retval.windowTwo = retval.createWindowTwo());
>          retval.setLoc(records.size() - 1);
>          retval.selection =
> @@ -426,8 +443,9 @@
> retval.protect = (ProtectRecord) retval.createProtect();
> records.add(retval.protect);
>          records.add(retval.createEOF());
> +        
>          retval.records = records;
> -        log.log(log.DEBUG, "Sheet createsheet from scratch exit");
> +        log.log(POILogger.DEBUG, "Sheet createsheet from scratch exit");
>          return retval;
>      }
>  
> @@ -566,7 +584,7 @@
>  
>      public void convertLabelRecords(Workbook wb)
>      {
> -        log.log(log.DEBUG, "convertLabelRecords called");
> +        log.log(POILogger.DEBUG, "convertLabelRecords called");
>          if (containsLabels)
>          {
>              for (int k = 0; k < records.size(); k++)
> @@ -590,7 +608,7 @@
>                  }
>              }
>          }
> -        log.log(log.DEBUG, "convertLabelRecords exit");
> +        log.log(POILogger.DEBUG, "convertLabelRecords exit");
>      }
>  
>      /**
> @@ -604,8 +622,8 @@
>      {
>          checkCells();
>          checkRows();
> -        log.log(log.DEBUG, "Sheet.getNumRecords");
> -        log.logFormatted(log.DEBUG, "returning % + % + % - 2 = %", new int[]
> +        log.log(POILogger.DEBUG, "Sheet.getNumRecords");
> +        log.logFormatted(POILogger.DEBUG, "returning % + % + % - 2 = %", new
> int[]
>          {
>              records.size(), cells.getPhysicalNumberOfCells(),
>              rows.getPhysicalNumberOfRows(),
> @@ -628,8 +646,8 @@
>      public void setDimensions(int firstrow, short firstcol, int lastrow,
>                                short lastcol)
>      {
> -        log.log(log.DEBUG, "Sheet.setDimensions");
> -        log.log(log.DEBUG,
> +        log.log(POILogger.DEBUG, "Sheet.setDimensions");
> +        log.log(POILogger.DEBUG,
>                  (new StringBuffer("firstrow")).append(firstrow)
>                      .append("firstcol").append(firstcol).append("lastrow")
>                      .append(lastrow).append("lastcol").append(lastcol)
> @@ -638,7 +656,7 @@
>          dims.setFirstRow(firstrow);
>          dims.setLastCol(lastcol);
>          dims.setLastRow(lastrow);
> -        log.log(log.DEBUG, "Sheet.setDimensions exiting");
> +        log.log(POILogger.DEBUG, "Sheet.setDimensions exiting");
>      }
>  
>      /**
> @@ -660,7 +678,7 @@
>      public void setLoc(int loc)
>      {
>          valueRecIterator = null;
> -        log.log(log.DEBUG, "sheet.setLoc(): " + loc);
> +        log.log(POILogger.DEBUG, "sheet.setLoc(): " + loc);
>          this.loc = loc;
>      }
>  
> @@ -671,7 +689,7 @@
>  
>      public int getLoc()
>      {
> -        log.log(log.DEBUG, "sheet.getLoc():" + loc);
> +        log.log(POILogger.DEBUG, "sheet.getLoc():" + loc);
>          return loc;
>      }
>  
> @@ -709,7 +727,7 @@
>  
>      public byte [] serialize()
>      {
> -        log.log(log.DEBUG, "Sheet.serialize");
> +        log.log(POILogger.DEBUG, "Sheet.serialize");
>  
>          // addDBCellRecords();
>          byte[] retval    = null;
> @@ -726,7 +744,7 @@
>          // for (int k = 0; k < bytes.size(); k++)
>          // {
>          // arraysize += (( byte [] ) bytes.get(k)).length;
> -        // log.debug((new StringBuffer("arraysize=")).append(arraysize)
> +        // POILogger.DEBUG((new StringBuffer("arraysize=")).append(arraysize)
>          // .toString());
>          // }
>          retval = new byte[ arraysize ];
> @@ -738,7 +756,7 @@
>              pos += (( Record ) records.get(k)).serialize(pos,
>                      retval);   // rec.length;
>          }
> -        log.log(log.DEBUG, "Sheet.serialize returning " + retval);
> +        log.log(POILogger.DEBUG, "Sheet.serialize returning " + retval);
>          return retval;
>      }
>  
> @@ -753,7 +771,7 @@
>  
>      public int serialize(int offset, byte [] data)
>      {
> -        log.log(log.DEBUG, "Sheet.serialize using offsets");
> +        log.log(POILogger.DEBUG, "Sheet.serialize using offsets");
>  
>          // addDBCellRecords();
>          // ArrayList bytes     = new ArrayList(4096);
> @@ -768,7 +786,7 @@
>          // for (int k = 0; k < bytes.size(); k++)
>          // {
>          // arraysize += (( byte [] ) bytes.get(k)).length;
> -        // log.debug((new StringBuffer("arraysize=")).append(arraysize)
> +        // POILogger.DEBUG((new StringBuffer("arraysize=")).append(arraysize)
>          // .toString());
>          // }
>          for (int k = 0; k < records.size(); k++)
> @@ -787,7 +805,7 @@
>              pos += record.serialize(pos + offset, data );   // rec.length;
>  
>          }
> -        log.log(log.DEBUG, "Sheet.serialize returning ");
> +        log.log(POILogger.DEBUG, "Sheet.serialize returning ");
>          return pos;
>      }
>  
> @@ -801,7 +819,7 @@
>  
>      public RowRecord createRow(int row)
>      {
> -        log.log(log.DEBUG, "create row number " + row);
> +        log.log(POILogger.DEBUG, "create row number " + row);
>          RowRecord rowrec = new RowRecord();
>  
>          //rowrec.setRowNumber(( short ) row);
> @@ -826,7 +844,7 @@
>      //public LabelSSTRecord createLabelSST(short row, short col, int index)
>      public LabelSSTRecord createLabelSST(int row, short col, int index)
>      {
> -        log.logFormatted(log.DEBUG, "create labelsst row,col,index %,%,%",
> +        log.logFormatted(POILogger.DEBUG, "create labelsst row,col,index
> %,%,%",
>                           new int[]
>          {
>              row, col, index
> @@ -853,7 +871,7 @@
>      //public NumberRecord createNumber(short row, short col, double value)
>      public NumberRecord createNumber(int row, short col, double value)
>      {
> -        log.logFormatted(log.DEBUG, "create number row,col,value %,%,%",
> +        log.logFormatted(POILogger.DEBUG, "create number row,col,value
> %,%,%",
>                           new double[]
>          {
>              row, col, value
> @@ -878,8 +896,8 @@
>      //public BlankRecord createBlank(short row, short col)
>      public BlankRecord createBlank(int row, short col)
>      {
> -        //log.logFormatted(log.DEBUG, "create blank row,col %,%", new short[]
> -        log.logFormatted(log.DEBUG, "create blank row,col %,%", new int[]
> +        //log.logFormatted(POILogger.DEBUG, "create blank row,col %,%", new
> short[]
> +        log.logFormatted(POILogger.DEBUG, "create blank row,col %,%", new
> int[]
>          {
>              row, col
>          });
> @@ -905,7 +923,7 @@
>      //public FormulaRecord createFormula(short row, short col, String
> formula)
>      public FormulaRecord createFormula(int row, short col, String formula)
>      {
> -        log.logFormatted(log.DEBUG, "create formula row,col,formula %,%,%",
> +        log.logFormatted(POILogger.DEBUG, "create formula row,col,formula
> %,%,%",
>                           //new short[]
>                           new int[]
>          {
> @@ -949,7 +967,7 @@
>      public void addValueRecord(int row, CellValueRecordInterface col)
>      {
>          checkCells();
> -        log.logFormatted(log.DEBUG, "add value record  row,loc %,%", new
> int[]
> +        log.logFormatted(POILogger.DEBUG, "add value record  row,loc %,%",
> new int[]
>          {
>              row, loc
>          });
> @@ -1003,7 +1021,7 @@
>      public void removeValueRecord(int row, CellValueRecordInterface col)
>      {
>          checkCells();
> -        log.logFormatted(log.DEBUG, "remove value record row,dimsloc %,%",
> +        log.logFormatted(POILogger.DEBUG, "remove value record row,dimsloc
> %,%",
>                           new int[]{row, dimsloc} );
>          loc = dimsloc;
>          cells.removeCell(col);
> @@ -1044,7 +1062,7 @@
>      {
>          checkCells();
>          setLoc(dimsloc);
> -        log.log(log.DEBUG, "replaceValueRecord ");
> +        log.log(POILogger.DEBUG, "replaceValueRecord ");
>          cells.insertCell(newval);
>  
>          /*
> @@ -1080,7 +1098,7 @@
>      public void addRow(RowRecord row)
>      {
>          checkRows();
> -        log.log(log.DEBUG, "addRow ");
> +        log.log(POILogger.DEBUG, "addRow ");
>          DimensionsRecord d = ( DimensionsRecord ) records.get(getDimsLoc());
>  
>          if (row.getRowNumber() > d.getLastRow())
> @@ -1134,7 +1152,7 @@
>           *   }
>           * }
>           */
> -        log.log(log.DEBUG, "exit addRow");
> +        log.log(POILogger.DEBUG, "exit addRow");
>      }
>  
>      /**
> @@ -1194,7 +1212,7 @@
>  
>      public CellValueRecordInterface getNextValueRecord()
>      {
> -        log.log(log.DEBUG, "getNextValue loc= " + loc);
> +        log.log(POILogger.DEBUG, "getNextValue loc= " + loc);
>          if (valueRecIterator == null)
>          {
>              valueRecIterator = cells.getIterator();
> @@ -1241,7 +1259,7 @@
>  
>  /*    public Record getNextRowOrValue()
>      {
> -        log.debug((new StringBuffer("getNextRow loc= ")).append(loc)
> +        POILogger.DEBUG((new StringBuffer("getNextRow loc= ")).append(loc)
>              .toString());
>          if (this.getLoc() < records.size())
>          {
> @@ -1281,7 +1299,7 @@
>  
>      public RowRecord getNextRow()
>      {
> -        log.log(log.DEBUG, "getNextRow loc= " + loc);
> +        log.log(POILogger.DEBUG, "getNextRow loc= " + loc);
>          if (rowRecIterator == null)
>          {
>              rowRecIterator = rows.getIterator();
> @@ -1327,7 +1345,7 @@
>      //public RowRecord getRow(short rownum)
>      public RowRecord getRow(int rownum)
>      {
> -        log.log(log.DEBUG, "getNextRow loc= " + loc);
> +        log.log(POILogger.DEBUG, "getNextRow loc= " + loc);
>          return rows.getRow(rownum);
>  
>          /*
> @@ -1543,7 +1561,7 @@
>      {
>          RefModeRecord retval = new RefModeRecord();
>  
> -        retval.setMode(retval.USE_A1_MODE);
> +        retval.setMode(RefModeRecord.USE_A1_MODE);
>          return retval;
>      }
>  
> @@ -2161,7 +2179,7 @@
>  
>      public int getDimsLoc()
>      {
> -        log.log(log.DEBUG, "getDimsLoc dimsloc= " + dimsloc);
> +        log.log(POILogger.DEBUG, "getDimsLoc dimsloc= " + dimsloc);
>          return dimsloc;
>      }
>  
> @@ -2533,7 +2551,7 @@
>  
>         protected Record createProtect()
>         {
> -               log.log(log.DEBUG, "create protect record with protection
> disabled");
> +               log.log(POILogger.DEBUG, "create protect record with
> protection disabled");
>                 ProtectRecord retval = new ProtectRecord();
>  
>                 retval.setProtect(false);
> @@ -2603,5 +2621,138 @@
>          if (margins == null)
>              margins = new Margin[4];
> return margins;
> +    }
> +    
> +    /**
> +     * Shifts all the page breaks in the range "count" number of rows/columns
> +     * @param breaks The page record to be shifted
> +     * @param start Starting "main" value to shift breaks
> +     * @param stop Ending "main" value to shift breaks
> +     * @param count number of units (rows/columns) to shift by
> +     */
> +    public void shiftBreaks(PageBreakRecord breaks, short start, short stop,
> int count) {
> +       
> +        if(rowBreaks == null)
> +            return;
> +        Iterator iterator = breaks.getBreaksIterator();
> +        List shiftedBreak = new ArrayList();
> +        while(iterator.hasNext())
> +        {
> +            PageBreakRecord.Break breakItem =
> (PageBreakRecord.Break)iterator.next();
> +            short breakLocation = breakItem.main;
> +            boolean inStart = (breakLocation >= start);
> +            boolean inEnd = (breakLocation <= stop);
> +            if(inStart && inEnd)
> +                shiftedBreak.add(breakItem);
> +        }
> +        
> +        iterator = shiftedBreak.iterator();
> +        while (iterator.hasNext()) {
> +            PageBreakRecord.Break breakItem =
(PageBreakRecord.Break)iterator.next();
> +            breaks.removeBreak(breakItem.main);
> +            breaks.addBreak((short)(breakItem.main+count), breakItem.subFrom,
> breakItem.subTo);
> +        }
> +    }
> +    
> +    /**
> +     * Sets a page break at the indicated row
> +     * @param row
> +     */
> +    public void setRowBreak(int row, short fromCol, short toCol) {
> +        rowBreaks.addBreak((short)row, fromCol, toCol);
> +    }
> +
> +    /**
> +     * Removes a page break at the indicated row
> +     * @param row
> +     */
> +    public void removeRowBreak(int row) {
> +        rowBreaks.removeBreak((short)row);
> +    }
> +
> +    /**
> +     * Queries if the specified row has a page break
> +     * @param row
> +     * @return true if the specified row has a page break
> +     */
> +    public boolean isRowBroken(int row) {
> +        return rowBreaks.getBreak((short)row) != null;
> +    }
> +
> +    /**
> +     * Sets a page break at the indicated column
> +     * @param row
> +     */
> +    public void setColumnBreak(short column, short fromRow, short toRow) {
>     
> +        colBreaks.addBreak(column, fromRow, toRow);
> +    }
> +
> +    /**
> +     * Removes a page break at the indicated column
> +     * @param row
> +     */
> +    public void removeColumnBreak(short column) {
> +        colBreaks.removeBreak(column);
> +    }
> +
> +    /**
> +     * Queries if the specified column has a page break
> +     * @param row
> +     * @return true if the specified column has a page break
> +     */
> +    public boolean isColumnBroken(short column) {
> +        return colBreaks.getBreak(column) != null;
> +    }
> +    
> +    /**
> +     * Shifts the horizontal page breaks for the indicated count
> +     * @param startingRow
> +     * @param endingRow
> +     * @param count
> +     */
> +    public void shiftRowBreaks(int startingRow, int endingRow, int count) {
> +        shiftBreaks(rowBreaks, (short)startingRow, (short)endingRow,
> (short)count);
> +    }
> +
> +    /**
> +     * Shifts the vertical page breaks for the indicated count
> +     * @param startingCol
> +     * @param endingCol
> +     * @param count
> +     */
> +    public void shiftColumnBreaks(short startingCol, short endingCol, short
> count) {
> +        shiftBreaks(colBreaks, startingCol, endingCol, count);
> +    }
> +    
> +    /**
> +     * Returns all the row page breaks
> +     * @return
> +     */
> +    public Iterator getRowBreaks() {
> +        return rowBreaks.getBreaksIterator();
> +    }
> +    
> +    /**
> +     * Returns the number of row page breaks
> +     * @return
> +     */
> +    public int getNumRowBreaks(){
> +        return (int)rowBreaks.getNumBreaks();
> +    }
> +    
> +    /**
> +     * Returns all the column page breaks
> +     * @return
> +     */
> +    public Iterator getColumnBreaks(){
> +        return colBreaks.getBreaksIterator();
> +    }
> +    
> +    /**
> +     * Returns the number of column page breaks
> +     * @return
> +     */
> +    public int getNumColumnBreaks(){
> +        return (int)colBreaks.getNumBreaks();
>      }
>  }
> 
> 
> 
> No                   revision
> No                   revision
> 1.31.2.1  +9 -1  
> jakarta-poi/src/java/org/apache/poi/hssf/dev/BiffViewer.java
> 
> Index: BiffViewer.java
> ===================================================================
> RCS file: 
> /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/dev/BiffViewer.java,v
> retrieving revision 1.31
> retrieving revision 1.31.2.1
> diff -u -r1.31 -r1.31.2.1
> --- BiffViewer.java    8 May 2003 00:02:03 -0000    1.31
> +++ BiffViewer.java    9 Feb 2004 22:41:27 -0000    1.31.2.1
> @@ -2,7 +2,7 @@
>   *  ====================================================================
>   *  The Apache Software License, Version 1.1
>   *
> - *  Copyright (c) 2003 The Apache Software Foundation.  All rights
> + *  Copyright (c) 2004 The Apache Software Foundation.  All rights
>   *  reserved.
>   *
>   *  Redistribution and use in source and binary forms, with or without
> @@ -633,6 +633,14 @@
>              case SharedFormulaRecord.sid:
> retval = new SharedFormulaRecord( rectype, size, data);
> break;
> +            case HorizontalPageBreakRecord.sid:
> +                retval = new HorizontalPageBreakRecord( rectype, size, data);
> +                break;
> +            case VerticalPageBreakRecord.sid:
> +                retval = new VerticalPageBreakRecord( rectype, size, data);
> +                break;
> +                
> +                
>              default:
>                  retval = new UnknownRecord( rectype, size, data );
>          }
> 
> 
> 
> No                   revision
> No                   revision
> 1.1.2.1   +23 -0 
> jakarta-poi/src/testcases/org/apache/poi/hssf/data/Attic/SimpleWithPageBreaks.
> xls
> 
> <<Binary file>>
> 
> 
> No                   revision
> No                   revision
> 1.21.2.4  +111 -4
> jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
> 
> Index: HSSFSheet.java
> ===================================================================
> RCS file: 
> /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java,v
> retrieving revision 1.21.2.3
> retrieving revision 1.21.2.4
> diff -u -r1.21.2.3 -r1.21.2.4
> --- HSSFSheet.java    23 Aug 2003 18:54:28 -0000    1.21.2.3
> +++ HSSFSheet.java    9 Feb 2004 22:41:27 -0000    1.21.2.4
> @@ -1,7 +1,7 @@
>  /* ====================================================================
>   * The Apache Software License, Version 1.1
>   *
> - * Copyright (c) 2003 The Apache Software Foundation.  All rights
> + * Copyright (c) 2004 The Apache Software Foundation.  All rights
>   * reserved.
>   *
>   * Redistribution and use in source and binary forms, with or without
> @@ -68,6 +68,7 @@
>  import org.apache.poi.hssf.model.Workbook;
>  import org.apache.poi.hssf.record.CellValueRecordInterface;
>  import org.apache.poi.hssf.record.HCenterRecord;
> +import org.apache.poi.hssf.record.PageBreakRecord;
>  import org.apache.poi.hssf.record.Record;
>  import org.apache.poi.hssf.record.RowRecord;
>  import org.apache.poi.hssf.record.SCLRecord;
> @@ -981,6 +982,8 @@
>       * <p>
>       * Additionally shifts merged regions that are completely defined in
> these
>       * rows (ie. merged 2 cells on a row to be shifted).
> +     * <p>
> +     * TODO Might want to add bounds checking here
>       * @param startRow the row to start shifting
>       * @param endRow the row to end shifting
>       * @param n the number of rows to shift
> @@ -1004,7 +1007,8 @@
>          }
>  
> shiftMerged(startRow, endRow, n, true);
> -        
> +            sheet.shiftRowBreaks(startRow, endRow, n);
> +            
>          for ( int rowNum = s; rowNum >= startRow && rowNum <= endRow &&
> rowNum >= 0 && rowNum < 65536; rowNum += inc )
>          {
>              HSSFRow row = getRow( rowNum );
> @@ -1130,7 +1134,7 @@
>       * @return whether formulas are displayed
>       */
>      public boolean isDisplayFormulas() {
> -    return sheet.isDisplayFormulas();
> +        return sheet.isDisplayFormulas();
>      }
>  
>      /**
> @@ -1146,6 +1150,109 @@
>       * @return whether RowColHeadings are displayed
>       */
>      public boolean isDisplayRowColHeadings() {
> -    return sheet.isDisplayRowColHeadings();
> +        return sheet.isDisplayRowColHeadings();
> +    }
> +    
> +    /**
> +     * Sets a page break at the indicated row
> +     * @param row
> +     */
> +    public void setRowBreak(int row) {
> +        validateRow(row);
> +        sheet.setRowBreak(row, (short)0, (short)255);
> +    }
> +
> +    /**
> +     * Determines if there is a page break at the indicated row
> +     * @param row
> +     * @return
> +     */
> +    public boolean isRowBroken(int row) {
> +        return sheet.isRowBroken(row);
> +    }
> +    
> +    /**
> +     * Removes the page break at the indicated row
> +     * @param row
> +     */
> +    public void removeRowBreak(int row) {
> +        sheet.removeRowBreak(row);
> +    }
> +    
> +    /**
> +     * Retrieves all the horizontal page breaks
> +     * @return
> +     */
> +    public int[] getRowBreaks(){
> +        //we can probably cache this information, but this should be a
sparsely 
> used function 
> +        int[] returnValue = new int[sheet.getNumRowBreaks()];
> +        Iterator iterator = sheet.getRowBreaks();
> +        int i = 0;
> +        while (iterator.hasNext()) {
> +            PageBreakRecord.Break breakItem =
> (PageBreakRecord.Break)iterator.next();
> +            returnValue[i++] = (int)breakItem.main;
> +        }
> +        return returnValue;
> +    }
> +
> +    /**
> +     * Retrieves all the vertical page breaks
> +     * @return
> +     */
> +    public short[] getColumnBreaks(){
> +        //we can probably cache this information, but this should be a
sparsely 
> used function 
> +        short[] returnValue = new short[sheet.getNumColumnBreaks()];
> +        Iterator iterator = sheet.getColumnBreaks();
> +        int i = 0;
> +        while (iterator.hasNext()) {
> +            PageBreakRecord.Break breakItem =
> (PageBreakRecord.Break)iterator.next();
> +            returnValue[i++] = breakItem.main;
> +        }
> +        return returnValue;
> +    }
> +    
> +    
> +    /**
> +     * Sets a page break at the indicated column
> +     * @param column
> +     */
> +    public void setColumnBreak(short column) {
> +        validateColumn(column);
> +        sheet.setColumnBreak(column, (short)0, (short)65535);
> +    }
> +
> +    /**
> +     * Determines if there is a page break at the indicated column
> +     * @param column
> +     * @return
> +     */
> +    public boolean isColumnBroken(short column) {
> +        return sheet.isColumnBroken(column);
> +    }
> +    
> +    /**
> +     * Removes a page break at the indicated column
> +     * @param column
> +     */
> +    public void removeColumnBreak(short column) {
> +        sheet.removeColumnBreak(column);
> +    }
> +    
> +    /**
> +     * Runs a bounds check for row numbers
> +     * @param row
> +     */
> +    protected void validateRow(int row) {
> +        if (row > 65535) throw new IllegalArgumentException("Maximum row
number 
> is 65535");
> +        if (row < 0) throw new IllegalArgumentException("Minumum row number
is 
> 0");
> +    }
> +    
> +    /**
> +     * Runs a bounds check for column numbers
> +     * @param column
> +     */
> +    protected void validateColumn(short column) {
> +        if (column > 255) throw new IllegalArgumentException("Maximum column
> number is 255");
> +        if (column < 0)    throw new IllegalArgumentException("Minimum column
> number is 0");
>      }
>  }
> 
> 
> 
> No                   revision
> No                   revision
> 1.3.2.2   +121 -0
> jakarta-poi/src/testcases/org/apache/poi/hssf/model/SheetTest.java
> 
> Index: SheetTest.java
> ===================================================================
> RCS file: 
> /home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/model/SheetTest.java,v
> retrieving revision 1.3.2.1
> retrieving revision 1.3.2.2
> diff -u -r1.3.2.1 -r1.3.2.2
> --- SheetTest.java    6 Sep 2003 18:56:29 -0000    1.3.2.1
> +++ SheetTest.java    9 Feb 2004 22:41:27 -0000    1.3.2.2
> @@ -2,12 +2,14 @@
>  
>  import java.lang.reflect.Field;
>  import java.util.ArrayList;
> +import java.util.Iterator;
>  import java.util.List;
>  
>  import junit.framework.TestCase;
>  
>  import org.apache.poi.hssf.record.ColumnInfoRecord;
>  import org.apache.poi.hssf.record.MergeCellsRecord;
> +import org.apache.poi.hssf.record.PageBreakRecord;
>  import org.apache.poi.hssf.record.RowRecord;
>  import org.apache.poi.hssf.record.StringRecord;
>  
> @@ -171,6 +173,125 @@
> Sheet sheet = Sheet.createSheet(records, 0);
> assertNotNull("Row [2] was skipped", sheet.getRow(2));
> 
> +    }
> +    
> +    /**
> +     * Make sure page break functionality works (in memory)
> +     *
> +     */
> +    public void testRowPageBreaks(){
> +        short colFrom = 0;
> +        short colTo = 255;
> +        
> +        Sheet sheet = Sheet.createSheet();
> +        sheet.setRowBreak(0, colFrom, colTo);
> +        
> +        assertTrue("no row break at 0", sheet.isRowBroken(0));
> +        assertEquals("1 row break available", 1, sheet.getNumRowBreaks());
> +        
> +        sheet.setRowBreak(0, colFrom, colTo);
> +        sheet.setRowBreak(0, colFrom, colTo);
> +
> +        assertTrue("no row break at 0", sheet.isRowBroken(0));
> +        assertEquals("1 row break available", 1, sheet.getNumRowBreaks());
> +        
> +        sheet.setRowBreak(10, colFrom, colTo);
> +        sheet.setRowBreak(11, colFrom, colTo);
> +
> +        assertTrue("no row break at 10", sheet.isRowBroken(10));
> +        assertTrue("no row break at 11", sheet.isRowBroken(11));
> +        assertEquals("3 row break available", 3, sheet.getNumRowBreaks());
> +        
> +        
> +        boolean is10 = false;
> +        boolean is0 = false;
> +        boolean is11 = false;
> +        
> +        Iterator iterator = sheet.getRowBreaks();
> +        while (iterator.hasNext()) {
> +            PageBreakRecord.Break breakItem =
(PageBreakRecord.Break)iterator.next();
> +            int main = (int)breakItem.main;
> +            if (main != 0 && main != 10 && main != 11) fail("Invalid page
break");
> +            if (main == 0)     is0 = true;
> +            if (main == 10) is10= true;
> +            if (main == 11) is11 = true;
> +        }
> +        
> +        assertTrue("one of the breaks didnt make it", is0 && is10 && is11);
> +        
> +        sheet.removeRowBreak(11);
> +        assertFalse("row should be removed", sheet.isRowBroken(11));
> +        
> +        sheet.removeRowBreak(0);
> +        assertFalse("row should be removed", sheet.isRowBroken(0));
> +        
> +        sheet.removeRowBreak(10);
> +        assertFalse("row should be removed", sheet.isRowBroken(10));
> +        
> +        assertEquals("no more breaks", 0, sheet.getNumRowBreaks());
> +        
> +        
> +    }
> +    
> +    /**
> +     * Make sure column pag breaks works properly (in-memory)
> +     *
> +     */
> +    public void testColPageBreaks(){
> +        short rowFrom = 0;
> +        short rowTo = (short)65535;
> +        
> +        Sheet sheet = Sheet.createSheet();
> +        sheet.setColumnBreak((short)0, rowFrom, rowTo);
> +        
> +        assertTrue("no col break at 0", sheet.isColumnBroken((short)0));
> +        assertEquals("1 col break available", 1, sheet.getNumColumnBreaks());
> +        
> +        sheet.setColumnBreak((short)0, rowFrom, rowTo);
> +        
> +        assertTrue("no col break at 0", sheet.isColumnBroken((short)0));
> +        assertEquals("1 col break available", 1, sheet.getNumColumnBreaks());
> +        
> +        sheet.setColumnBreak((short)1, rowFrom, rowTo);
> +        sheet.setColumnBreak((short)10, rowFrom, rowTo);
> +        sheet.setColumnBreak((short)15, rowFrom, rowTo);
> +        
> +        assertTrue("no col break at 1", sheet.isColumnBroken((short)1));
> +        assertTrue("no col break at 10", sheet.isColumnBroken((short)10));
> +        assertTrue("no col break at 15", sheet.isColumnBroken((short)15));
> +        assertEquals("4 col break available", 4, sheet.getNumColumnBreaks());
> +
> +        boolean is10 = false;
> +        boolean is0 = false;
> +        boolean is1 = false;
> +        boolean is15 = false;
> +        
> +        Iterator iterator = sheet.getColumnBreaks();
> +        while (iterator.hasNext()) {
> +            PageBreakRecord.Break breakItem =
(PageBreakRecord.Break)iterator.next();
> +            int main = (int)breakItem.main;
> +            if (main != 0 && main != 1 && main != 10 && main != 15)
fail("Invalid page 
> break");
> +            if (main == 0)     is0 = true;
> +            if (main == 1)     is1 = true;
> +            if (main == 10) is10= true;
> +            if (main == 15) is15 = true;
> +        }
> +        
> +        assertTrue("one of the breaks didnt make it", is0 && is1 && is10 &&
is15); 
> +        
> +        sheet.removeColumnBreak((short)15);
> +        assertFalse("column break should not be there",
> sheet.isColumnBroken((short)15));
> +
> +        sheet.removeColumnBreak((short)0);
> +        assertFalse("column break should not be there",
> sheet.isColumnBroken((short)0));
> +        
> +        sheet.removeColumnBreak((short)1);
> +        assertFalse("column break should not be there",
> sheet.isColumnBroken((short)1));
> +        
> +        sheet.removeColumnBreak((short)10);
> +        assertFalse("column break should not be there",
> sheet.isColumnBroken((short)10));
> +        
> +        assertEquals("no more breaks", 0, sheet.getNumColumnBreaks());
> }
>  
>  }
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: poi-dev-help@jakarta.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: poi-dev-help@jakarta.apache.org