From fd95f8dfcb827aea1dbc6bbd6dc437c2b022c18a Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@unknown> Date: Sun, 2 Nov 2003 11:20:31 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'REL_2_0_RC1'. git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/tags/REL_2_0_RC1@353435 13f79535-47bb-0310-9956-ffa450edef68 --- .classpath | 10 - .cvsignore | 3 + .project | 17 - build.xml | 91 ++-- src/documentation/content/xdocs/book.xml | 2 +- src/documentation/content/xdocs/changes.xml | 129 ------ .../xdocs/dtd/book-cocoon-v10.dtd | 0 .../{ => content}/xdocs/dtd/changes-v11.dtd | 0 .../{ => content}/xdocs/dtd/document-v11.dtd | 0 .../{ => content}/xdocs/dtd/faq-v11.dtd | 0 .../xdocs/dtd/javadoc-v04draft.dtd | 0 .../xdocs/dtd/specification-v11.dtd | 0 .../{ => content}/xdocs/dtd/todo-v11.dtd | 0 .../content/xdocs/howtobuild.xml | 4 + .../content/xdocs/hssf/chart.xml | 5 +- .../content/xdocs/hssf/quick-guide.xml | 10 +- src/documentation/content/xdocs/index.xml | 10 +- src/documentation/content/xdocs/site.xml | 4 +- src/documentation/content/xdocs/status.xml | 284 +++++++----- src/documentation/content/xdocs/tabs.xml | 6 +- .../content/xdocs/trans/de/book.xml | 2 +- .../content/xdocs/trans/es/book.xml | 2 +- .../content/xdocs/trans/es/changes.xml | 106 ----- .../resources/images/group-logo.gif | Bin 8146 -> 5258 bytes src/documentation/skinconf.xml | 18 +- .../usermodel/examples/ReadWriteWorkbook.java | 2 + src/java/org/apache/poi/hpsf/ClassID.java | 101 ++++- src/java/org/apache/poi/hpsf/TypeReader.java | 74 ++-- src/java/org/apache/poi/hpsf/Variant.java | 108 +++-- .../apache/poi/hssf/dev/FormulaViewer.java | 7 +- .../apache/poi/hssf/model/FormulaParser.java | 107 +++-- src/java/org/apache/poi/hssf/model/Sheet.java | 300 ++++++++----- .../org/apache/poi/hssf/model/Workbook.java | 170 +++---- .../poi/hssf/model/WorkbookRecordList.java | 6 +- .../apache/poi/hssf/record/BoolErrRecord.java | 10 +- .../poi/hssf/record/BottomMarginRecord.java | 188 +++++++- .../poi/hssf/record/BoundSheetRecord.java | 12 + .../poi/hssf/record/ContinueRecord.java | 10 + .../poi/hssf/record/ExtSSTInfoSubRecord.java | 6 +- .../apache/poi/hssf/record/ExtSSTRecord.java | 67 ++- .../poi/hssf/record/ExternSheetRecord.java | 231 +++++++++- .../apache/poi/hssf/record/FormulaRecord.java | 14 +- .../apache/poi/hssf/record/LabelRecord.java | 34 +- .../apache/poi/hssf/record/NameRecord.java | 76 +++- .../poi/hssf/record/PasswordRecord.java | 10 + .../apache/poi/hssf/record/ProtectRecord.java | 10 +- .../poi/hssf/record/ProtectionRev4Record.java | 14 +- .../org/apache/poi/hssf/record/Record.java | 16 - .../poi/hssf/record/RecordProcessor.java | 5 + .../poi/hssf/record/SSTDeserializer.java | 89 ++-- .../org/apache/poi/hssf/record/SSTRecord.java | 70 ++- .../hssf/record/SSTRecordSizeCalculator.java | 4 +- .../apache/poi/hssf/record/SSTSerializer.java | 44 +- .../apache/poi/hssf/record/StringRecord.java | 5 + .../apache/poi/hssf/record/StyleRecord.java | 45 +- .../apache/poi/hssf/record/UnknownRecord.java | 13 +- .../aggregates/FormulaRecordAggregate.java | 41 +- .../record/formula/AbstractFunctionPtg.java | 12 +- .../poi/hssf/record/formula/AddPtg.java | 4 +- .../poi/hssf/record/formula/Area3DPtg.java | 5 +- .../poi/hssf/record/formula/AreaPtg.java | 5 +- .../poi/hssf/record/formula/AttrPtg.java | 10 +- .../poi/hssf/record/formula/BoolPtg.java | 4 +- .../poi/hssf/record/formula/ConcatPtg.java | 4 +- .../poi/hssf/record/formula/DividePtg.java | 6 +- .../poi/hssf/record/formula/EqualPtg.java | 6 +- .../poi/hssf/record/formula/ExpPtg.java | 9 +- .../poi/hssf/record/formula/FuncPtg.java | 3 +- .../poi/hssf/record/formula/FuncVarPtg.java | 1 + .../hssf/record/formula/GreaterEqualPtg.java | 8 +- .../hssf/record/formula/GreaterThanPtg.java | 6 +- .../poi/hssf/record/formula/IntPtg.java | 4 +- .../poi/hssf/record/formula/LessEqualPtg.java | 8 +- .../poi/hssf/record/formula/LessThanPtg.java | 7 +- .../poi/hssf/record/formula/MemErrPtg.java | 4 +- .../poi/hssf/record/formula/MemFuncPtg.java | 4 +- .../hssf/record/formula/MissingArgPtg.java | 6 +- .../poi/hssf/record/formula/MultiplyPtg.java | 10 +- .../poi/hssf/record/formula/NamePtg.java | 50 ++- .../poi/hssf/record/formula/NameXPtg.java | 7 +- .../poi/hssf/record/formula/NotEqualPtg.java | 8 +- .../poi/hssf/record/formula/NumberPtg.java | 5 +- .../hssf/record/formula/ParenthesisPtg.java | 5 +- .../poi/hssf/record/formula/PowerPtg.java | 6 +- .../apache/poi/hssf/record/formula/Ptg.java | 18 +- .../poi/hssf/record/formula/Ref3DPtg.java | 7 +- .../poi/hssf/record/formula/ReferencePtg.java | 5 +- .../poi/hssf/record/formula/StringPtg.java | 60 ++- .../poi/hssf/record/formula/SubtractPtg.java | 4 +- .../hssf/record/formula/UnaryMinusPtg.java | 127 ++++++ .../poi/hssf/record/formula/UnaryPlusPtg.java | 127 ++++++ .../poi/hssf/record/formula/UnionPtg.java | 4 +- .../poi/hssf/record/formula/UnknownPtg.java | 4 +- .../apache/poi/hssf/usermodel/HSSFCell.java | 9 +- .../apache/poi/hssf/usermodel/HSSFFont.java | 2 +- .../apache/poi/hssf/usermodel/HSSFName.java | 4 +- .../poi/hssf/usermodel/HSSFPalette.java | 2 +- .../apache/poi/hssf/usermodel/HSSFSheet.java | 140 +++++- .../poi/hssf/usermodel/HSSFWorkbook.java | 26 +- .../poi/poifs/filesystem/DirectoryEntry.java | 17 + .../poi/poifs/filesystem/DirectoryNode.java | 21 + .../poi/poifs/filesystem/POIFSFileSystem.java | 2 + .../apache/poi/poifs/property/Property.java | 35 +- .../poi/poifs/storage/DocumentBlock.java | 3 +- .../poi/poifs/storage/HeaderBlockReader.java | 3 +- .../poi/poifs/storage/RawDataBlock.java | 3 +- src/java/org/apache/poi/util/HexDump.java | 85 +++- src/java/org/apache/poi/util/HexRead.java | 226 +++++++++- src/java/org/apache/poi/util/IOUtils.java | 99 +++++ .../org/apache/poi/util/LittleEndian.java | 30 +- src/java/org/apache/poi/util/StringUtil.java | 364 ++++++++++++++- .../org/apache/poi/util/SystemOutLogger.java | 19 +- .../org/apache/poi/hpsf/basic/POIFile.java | 15 +- .../org/apache/poi/hpsf/basic/TestBasic.java | 188 ++++---- .../apache/poi/hpsf/basic/TestClassID.java | 171 ++++++++ .../poi/hpsf/basic/TestEmptyProperties.java | 189 ++++++++ .../apache/poi/hpsf/basic/TestUnicode.java | 81 ++-- .../org/apache/poi/hpsf/basic/Util.java | 143 +++--- .../org/apache/poi/hpsf/data/TestCorel.shw | Bin 0 -> 76800 bytes .../org/apache/poi/hssf/data/12561-1.xls | Bin 0 -> 32768 bytes .../org/apache/poi/hssf/data/12561-2.xls | Bin 0 -> 50176 bytes .../org/apache/poi/hssf/data/12843-1.xls | Bin 0 -> 302080 bytes .../org/apache/poi/hssf/data/12843-2.xls | Bin 0 -> 48128 bytes .../org/apache/poi/hssf/data/13224.xls | Bin 0 -> 13824 bytes .../org/apache/poi/hssf/data/13796.xls | Bin 0 -> 49152 bytes .../org/apache/poi/hssf/data/14330-1.xls | Bin 0 -> 48640 bytes .../org/apache/poi/hssf/data/14330-2.xls | Bin 0 -> 13824 bytes .../org/apache/poi/hssf/data/14460.xls | Bin 0 -> 18432 bytes .../org/apache/poi/hssf/data/15228.xls | Bin 0 -> 692224 bytes .../org/apache/poi/hssf/data/15375.xls | Bin 0 -> 28160 bytes .../org/apache/poi/hssf/data/15556.xls | Bin 0 -> 309760 bytes .../org/apache/poi/hssf/data/19599-1.xls | Bin 0 -> 128512 bytes .../org/apache/poi/hssf/data/19599-2.xls | Bin 0 -> 44544 bytes .../org/apache/poi/hssf/data/22742.xls | Bin 0 -> 53248 bytes .../org/apache/poi/hssf/data/24215.xls | Bin 0 -> 17408 bytes .../poi/hssf/data/EmbeddedChartHeaderTest.xls | Bin 0 -> 15360 bytes .../org/apache/poi/hssf/data/SquareMacro.xls | Bin 0 -> 25600 bytes .../apache/poi/hssf/data/blankworkbook.xls | Bin 0 -> 13824 bytes .../org/apache/poi/hssf/model/SheetTest.java | 33 +- .../poi/hssf/model/TestFormulaParser.java | 33 +- .../poi/hssf/record/TestBoundSheetRecord.java | 20 + .../poi/hssf/record/TestSSTDeserializer.java | 10 +- .../apache/poi/hssf/record/TestSSTRecord.java | 4 +- .../apache/poi/hssf/usermodel/TestBugs.java | 413 ++++++++++++++++++ .../poi/hssf/usermodel/TestCloneSheet.java | 2 +- .../poi/hssf/usermodel/TestFormulas.java | 72 ++- .../poi/hssf/usermodel/TestHSSFCell.java | 4 +- .../hssf/usermodel/TestHSSFHeaderFooter.java | 126 ++++++ .../poi/hssf/usermodel/TestHSSFSheet.java | 147 ++++++- .../hssf/usermodel/TestSheetShiftRows.java | 13 + .../poi/hssf/usermodel/TestWorkbook.java | 2 + .../poi/poifs/filesystem/SlowInputStream.java | 76 ++++ .../poi/poifs/filesystem/TestDocument.java | 2 +- .../poifs/property/TestDocumentProperty.java | 3 + .../poi/poifs/property/TestRootProperty.java | 5 +- .../org/apache/poi/util/TestHexDump.java | 3 + 156 files changed, 4655 insertions(+), 1345 deletions(-) delete mode 100644 .classpath delete mode 100644 .project delete mode 100644 src/documentation/content/xdocs/changes.xml rename src/documentation/{ => content}/xdocs/dtd/book-cocoon-v10.dtd (100%) mode change 100755 => 100644 rename src/documentation/{ => content}/xdocs/dtd/changes-v11.dtd (100%) rename src/documentation/{ => content}/xdocs/dtd/document-v11.dtd (100%) rename src/documentation/{ => content}/xdocs/dtd/faq-v11.dtd (100%) rename src/documentation/{ => content}/xdocs/dtd/javadoc-v04draft.dtd (100%) mode change 100755 => 100644 rename src/documentation/{ => content}/xdocs/dtd/specification-v11.dtd (100%) rename src/documentation/{ => content}/xdocs/dtd/todo-v11.dtd (100%) delete mode 100644 src/documentation/content/xdocs/trans/es/changes.xml create mode 100644 src/java/org/apache/poi/hssf/record/formula/UnaryMinusPtg.java create mode 100644 src/java/org/apache/poi/hssf/record/formula/UnaryPlusPtg.java create mode 100644 src/java/org/apache/poi/util/IOUtils.java create mode 100644 src/testcases/org/apache/poi/hpsf/basic/TestClassID.java create mode 100644 src/testcases/org/apache/poi/hpsf/basic/TestEmptyProperties.java create mode 100755 src/testcases/org/apache/poi/hpsf/data/TestCorel.shw create mode 100755 src/testcases/org/apache/poi/hssf/data/12561-1.xls create mode 100755 src/testcases/org/apache/poi/hssf/data/12561-2.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/12843-1.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/12843-2.xls create mode 100755 src/testcases/org/apache/poi/hssf/data/13224.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/13796.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/14330-1.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/14330-2.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/14460.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/15228.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/15375.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/15556.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/19599-1.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/19599-2.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/22742.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/24215.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/EmbeddedChartHeaderTest.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/SquareMacro.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/blankworkbook.xls create mode 100644 src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java create mode 100644 src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHeaderFooter.java create mode 100644 src/testcases/org/apache/poi/poifs/filesystem/SlowInputStream.java diff --git a/.classpath b/.classpath deleted file mode 100644 index 75589e24b1..0000000000 --- a/.classpath +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/.cvsignore b/.cvsignore index 558342ccee..6a33107942 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,4 +1,5 @@ dist +build scripts *.el *.ipr @@ -8,3 +9,5 @@ build.number log*.* *.log build +.classpath +.project diff --git a/.project b/.project deleted file mode 100644 index 2a90ecdda8..0000000000 --- a/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - POI - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/build.xml b/build.xml index 0ed314e0bf..3b6ba76afc 100644 --- a/build.xml +++ b/build.xml @@ -6,7 +6,7 @@ Glen Stampoultzis glens at apache.org - This build was tested with and 1.5.3 although it will probably work with + This build was tested with ant 1.5.3 although it will probably work with other versions. The following jar files should be installed into the ant lib directory: @@ -15,6 +15,7 @@ junit(3.8+) http://www.ibiblio.org/maven/junit/jars/ xerces http://www.ibiblio.org/maven/xerces/jars/ jdepend http://www.ibiblio.org/maven/jdepend/jars/ + xalan http://www.ibiblio.org/maven/xalan/jars/ The ant jar "optional.jar" should also be available otherwise the build will fail. @@ -82,7 +83,7 @@ - + @@ -141,14 +142,17 @@ + - - + + + + @@ -214,15 +218,16 @@ - - - + - + + + + @@ -238,14 +243,9 @@ - - - - - - - - + + + @@ -254,6 +254,24 @@ + + + + + + + + + + + + + + + + + + @@ -334,11 +352,10 @@ - - Please install apache forrest and set the - FORREST_HOME environment variable. - - + Please install Apache Forrest (see +<http://xml.apache.org/forrest/index.html>) and set the +FORREST_HOME environment variable! + @@ -386,6 +403,18 @@ + + + + + + @@ -425,15 +454,7 @@ out="${jdepend.report.out.dir}/index.html" style="jdepend.xsl"/> - - - + - - - + + + @@ -570,6 +591,6 @@ - + diff --git a/src/documentation/content/xdocs/book.xml b/src/documentation/content/xdocs/book.xml index 178ecadb59..7b054188a4 100644 --- a/src/documentation/content/xdocs/book.xml +++ b/src/documentation/content/xdocs/book.xml @@ -9,7 +9,7 @@ - + diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml deleted file mode 100644 index de73c7bc6c..0000000000 --- a/src/documentation/content/xdocs/changes.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - History of Changes - - - - - - - - - - - Patch applied for deep cloning of worksheets was provided - Patch applied to allow sheet reordering - Added additional print area setting methods using row/column numbers - HDF: Negative Array size fix - Added argument pointers to support the IF formula - Formulas: Added special character support for string literals, specifically for SUMIF formula support and addresses a bug as well - BlockingInputStream committed to help ensure reads - Fixed problem with NaN values differing from the investigated value from file reads in FormulaRecords - Patch for getColumnWidth in HSSF - Patch for dealing with mult-level numbered lists in HDF - Due to named reference work, several named-ranged bugs were closed - Patch applied to prevent sheet corruption after a template modification - Shared Formulas now Supported - Added GreaterEqual, LessEqual and NotEqual to Formula Parser - Added GreaterThan and LessThan functionality to formulas - Patches for i10n - POI Build System Updated - font names can now be null - - - Support for zoom level - Freeze and split pane support - Row and column headers on printouts - - - Custom Data Format Support - Enhanced Unicode Support for Russian and Japanese - Enhanced formula support including read-only for - "optimized if" statements. - Support for cloning objects - Fixes for header/footer - Spanish Documentation translations - Support for preserving VBA macros - - - Removed runtime dependency on commons logging. - Formula support - - - Removed depedency on commons logging. Now define poi.logging system property to enable logging to standard out. - Fixed SST string handling so that spreadsheets with rich text or extended text will be read correctly. - - - New project build. - New project documentation system based on Cocoon. - Package rename - Various bug fixes - Early stages of HSF development (not ready for development) - Initial low level record support for charting (not complete) - - - Created new event model - Optimizations made to HSSF including aggregate records for - values, rows, etc. - predictive sizing, offset based writing (instead of lots of - array copies) - minor re-factoring and bug fixes. - - - Minor documentation updates. - - - Added DataFormat helper class and exposed set and get format - on HSSFCellStyle - Fixed column width apis (unit wise) and various javadoc on - the subject - Fix for Dimensions record (again)... (one of these days I'll - write a unit test for this ;-p). - Some optimization on sheet creation. - - - Changes not recorded. - - - Added MulBlank, Blank, ColInfo - Added log4j facility and removed all sys.out type logging - Added support for adding font's, styles and corresponding - high level api for styling cells - added support for changing row height, cell width and default - row height/cell width. - Added fixes for internationalization (UTF-16 should work now - from HSSFCell.setStringValue, etc when the encoding is set) - added support for adding/removing and naming sheets. - - - Bugfix release. We were throwing an exception when reading - RKRecord objects. - - - Got continuation records to work (read/write) - Added various pre-support for formulas - Massive API reorganization, repackaging. - BiffViewer class added for validating HSSF & POI and/or - HSSF Output. - Better API support for modification. - - - Added encoding flag to high and low level api to use utf-16 - when needed (HSSFCell.setEncoding()) - added read only support for Label records (which are - reinterpreted as LabelSST when written) - Broken continuation record implementation (oops) - BiffViewer class added for validating HSSF & POI and/or - HSSF Output. - - - Support for read/write and modify. - Read only support for MulRK records (converted to Number when - writing) - - - - diff --git a/src/documentation/xdocs/dtd/book-cocoon-v10.dtd b/src/documentation/content/xdocs/dtd/book-cocoon-v10.dtd old mode 100755 new mode 100644 similarity index 100% rename from src/documentation/xdocs/dtd/book-cocoon-v10.dtd rename to src/documentation/content/xdocs/dtd/book-cocoon-v10.dtd diff --git a/src/documentation/xdocs/dtd/changes-v11.dtd b/src/documentation/content/xdocs/dtd/changes-v11.dtd similarity index 100% rename from src/documentation/xdocs/dtd/changes-v11.dtd rename to src/documentation/content/xdocs/dtd/changes-v11.dtd diff --git a/src/documentation/xdocs/dtd/document-v11.dtd b/src/documentation/content/xdocs/dtd/document-v11.dtd similarity index 100% rename from src/documentation/xdocs/dtd/document-v11.dtd rename to src/documentation/content/xdocs/dtd/document-v11.dtd diff --git a/src/documentation/xdocs/dtd/faq-v11.dtd b/src/documentation/content/xdocs/dtd/faq-v11.dtd similarity index 100% rename from src/documentation/xdocs/dtd/faq-v11.dtd rename to src/documentation/content/xdocs/dtd/faq-v11.dtd diff --git a/src/documentation/xdocs/dtd/javadoc-v04draft.dtd b/src/documentation/content/xdocs/dtd/javadoc-v04draft.dtd old mode 100755 new mode 100644 similarity index 100% rename from src/documentation/xdocs/dtd/javadoc-v04draft.dtd rename to src/documentation/content/xdocs/dtd/javadoc-v04draft.dtd diff --git a/src/documentation/xdocs/dtd/specification-v11.dtd b/src/documentation/content/xdocs/dtd/specification-v11.dtd similarity index 100% rename from src/documentation/xdocs/dtd/specification-v11.dtd rename to src/documentation/content/xdocs/dtd/specification-v11.dtd diff --git a/src/documentation/xdocs/dtd/todo-v11.dtd b/src/documentation/content/xdocs/dtd/todo-v11.dtd similarity index 100% rename from src/documentation/xdocs/dtd/todo-v11.dtd rename to src/documentation/content/xdocs/dtd/todo-v11.dtd diff --git a/src/documentation/content/xdocs/howtobuild.xml b/src/documentation/content/xdocs/howtobuild.xml index 30cca65161..9b99b26756 100644 --- a/src/documentation/content/xdocs/howtobuild.xml +++ b/src/documentation/content/xdocs/howtobuild.xml @@ -46,6 +46,10 @@ jdepend http://www.ibiblio.org/maven/jdepend/jars/ + + xalan + http://www.ibiblio.org/maven/xalan/jars/ +

Just pick the latest versions of these jars and place diff --git a/src/documentation/content/xdocs/hssf/chart.xml b/src/documentation/content/xdocs/hssf/chart.xml index 55d2c832b2..33b174bf05 100644 --- a/src/documentation/content/xdocs/hssf/chart.xml +++ b/src/documentation/content/xdocs/hssf/chart.xml @@ -478,7 +478,7 @@ recordid = 0x1034, size =0 [END] [/END] - + ============================================ Offset 0x1006 (4102) rectype = 0x1044, recsize = 0x4 @@ -801,6 +801,7 @@ .crossesFarRight = false .reversed = false [/CATSERRANGE] + ============================================ Offset 0x1124 (4388) @@ -1220,7 +1221,7 @@ [UNKNOWN RECORD] .id = 104f [/UNKNOWN RECORD] - + ============================================ Offset 0x12c4 (4804) rectype = 0x1051, recsize = 0x8 diff --git a/src/documentation/content/xdocs/hssf/quick-guide.xml b/src/documentation/content/xdocs/hssf/quick-guide.xml index b5203d2058..39a1753385 100644 --- a/src/documentation/content/xdocs/hssf/quick-guide.xml +++ b/src/documentation/content/xdocs/hssf/quick-guide.xml @@ -31,7 +31,7 @@

  • Reading and writing
  • Use newlines in cells.
  • Create user defined data formats.
  • -
  • Fit sheet to one page
  • +
  • Fit Sheet to One Page
  • Set print area for a sheet.
  • Set page numbers on the footer of a sheet.
  • Shift rows.
  • @@ -420,14 +420,14 @@ fileOut.close(); - -
    Set Print Area to One Page + +
    Fit Sheet to One Page HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("format sheet"); - HSSFPrintSetup ps = sheet.getPrintSetup() + HSSFPrintSetup ps = sheet.getPrintSetup(); - sheet.setAutobreaks(true) + sheet.setAutobreaks(true); ps.setFitHeight((short)1); ps.setFitWidth((short)1); diff --git a/src/documentation/content/xdocs/index.xml b/src/documentation/content/xdocs/index.xml index 274ebf30ef..634745e2df 100644 --- a/src/documentation/content/xdocs/index.xml +++ b/src/documentation/content/xdocs/index.xml @@ -18,11 +18,15 @@
    Purpose

    The POI project consists of APIs for manipulating various file formats - based upon Microsoft's OLE 2 Compound Document format using pure Java. + based upon Microsoft's OLE 2 Compound Document format using pure Java. In short, you can + read and write MS Excel files using Java. Soon, you'll be able to read and write + Word files using Java. POI is your Java Excel solution as well as your Word Excel solution. + However, we have a complete API for porting other OLE 2 Compound Document formats and welcome + others to participate.

    OLE 2 Compound Document Format based files include most Microsoft Office - files such as XLS and DOC. + files such as XLS and DOC as well as MFC serialization API based file formats.

    As a general policy we try to collaborate as much as possible with other projects to @@ -46,7 +50,7 @@ we say that POIFS is the most complete and correct port of this file format to date!

    - You'd use HSSF if you needed to read or write an XLS (Excel) file using Java. You can also read and modify + You'd use HSSF if you needed to read or write an Excel file using Java (XLS). You can also read and modify spreadsheets using this API, although right now writing is more mature.

    diff --git a/src/documentation/content/xdocs/site.xml b/src/documentation/content/xdocs/site.xml index 0d57b605dd..0f80defbaa 100644 --- a/src/documentation/content/xdocs/site.xml +++ b/src/documentation/content/xdocs/site.xml @@ -16,6 +16,7 @@ See http://xml.apache.org/forrest/linking.html for more info + @@ -31,7 +32,8 @@ See http://xml.apache.org/forrest/linking.html for more info - + + diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 6a21002c8e..2cf814ae0e 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -1,18 +1,191 @@ - + - + + + + + + 12561 (Min) HSSFWorkbook throws Exceptions + 12730 (Nor) values dont get copied to another sheet. + 13224 (Maj) Exception thrown when cell has =Names call + 13796 (Nor) Error Reading Formula Record (optimized if, external link) + 13921 (Nor) Sheet name cannot exceed 31 characters and cannot contain : + 14330 (Nor) Error reading FormulaRecord + 14460 (Nor) Name in Formula - ArrayOutOfBoundsException + 15228 (Cri) [Urgent] ArrayIndexoutofbounds Exception. POI - Version 1.8 + 16488 (Maj) Unable to open written spreadsheet in Excel, but can in Open + 16559 (Nor) testCustomPalette.xls crashes Excel 97 + 16560 (Nor) testBoolErr.xls crashes Excel '97 + 17374 (Min) HSSFFont - BOLDWEIGHT_NORMAL + 18800 (Maj) The sheet made by HSSFWorkbook#cloneSheet() doesn't work cor + 18846 (Min) [PATCH][RFE]Refactor the transformation between byte array a + 19599 (Min) java.lang.IllegalArgumentException + 19961 (Nor) [PATCH] Sheet.getColumnWidth() returns wrong value + 21066 (Blo) Can not modify a blank spreadsheet + 21444 (Enh) [PATCH] Macro functions + 21447 (Nor) [RFE]String Formula Cells + 21674 (Enh) [PATCH] Documentation changes for @(Greater|Less|Not)EqualPt + 21863 (Enh) [PATCH] build.xml fixes + 22195 (Nor) [RFE] [PATCH] Support for Storage Class ID + 22742 (Cri) Failed to create HSSFWorkbook! + 22922 (Cri) HSSFSheet.shiftRows() throws java.lang.IndexOutOfBoundsExcep + 22963 (Nor) org.apache.poi.hpsf.SummaryInformation.getEditTime() should + 24149 (Maj) Error passing inputstream to POIFSFileSystem + 21722 (Nor) [PATCH] Add a ProtectRecord to Sheets and give control over + 9576 (Nor) [PATCH] DBCELL, INDEX EXTSST (was Acess 97 import) + 13478 (Blo) [PATCH] [RFE] POIFS, RawDataBlock: Missing workaround for lo + 14824 (Nor) Unable to modify empty sheets + 12843 (Cri) [PATCH] Make POI handle chinese better + 15353 (Nor) [RFE] creating a cell with a hyperlink + 15375 (Blo) Post 1.5.1 POI causes spreadsheet to become unopenable. + + + + HPSF is now able to read properties which are given in the property set stream but which don't have a value ("variant" type VT_EMPTY). The getXXX() methods of the PropertySet class return null if their return type is a reference (like a string) or 0 if the return type is numeric. Details about the return types and about how to distinguish between a property value of zero and a property value that is not present can be found in the API documentation. + Gridlines can now be turned on and off + NamePTG refactoring/fixes + minor fixes to ExternSheet and formula strings + Sheet comparisons now ignore case + + + + A nasty concurrency problem has been fixed. Any users working in a multithreaded environment should seriously consider upgrading to this release. + The EXTSST record has been implemented. This record is used by excel for optimized reading of strings. + When rows are shifted, the merged regions now move with them. If a row contains 2 merged cells, the resulting shifted row should have those cells merged as well. + There were some issues when removing merged + regions (specifically, removing all of them and then adding some more) and have been resolved. + When a sheet contained shared formulas (when a formula is + dragged across greater than 6 cells), the clone would fail. We now support cloning of + sheets that contain this Excel optimization. + Support added for reading formulas with UnaryPlus and UnaryMinus operators. + + + Patch applied for deep cloning of worksheets was provided + Patch applied to allow sheet reordering + Added additional print area setting methods using row/column numbers + HDF: Negative Array size fix + Added argument pointers to support the IF formula + Formulas: Added special character support for string literals, specifically for SUMIF formula support and addresses a bug as well + BlockingInputStream committed to help ensure reads + Fixed problem with NaN values differing from the investigated value from file reads in FormulaRecords + Patch for getColumnWidth in HSSF + Patch for dealing with mult-level numbered lists in HDF + Due to named reference work, several named-ranged bugs were closed + Patch applied to prevent sheet corruption after a template modification + Shared Formulas now Supported + Added GreaterEqual, LessEqual and NotEqual to Formula Parser + Added GreaterThan and LessThan functionality to formulas + Patches for i10n + POI Build System Updated + font names can now be null + + + Support for zoom level + Freeze and split pane support + Row and column headers on printouts + + + Custom Data Format Support + Enhanced Unicode Support for Russian and Japanese + Enhanced formula support including read-only for + "optimized if" statements. + Support for cloning objects + Fixes for header/footer + Spanish Documentation translations + Support for preserving VBA macros + + + Removed runtime dependency on commons logging. + Formula support + + + Removed depedency on commons logging. Now define poi.logging system property to enable logging to standard out. + Fixed SST string handling so that spreadsheets with rich text or extended text will be read correctly. + + + New project build. + New project documentation system based on Cocoon. + Package rename + Various bug fixes + Early stages of HSF development (not ready for development) + Initial low level record support for charting (not complete) + + + Created new event model + Optimizations made to HSSF including aggregate records for + values, rows, etc. + predictive sizing, offset based writing (instead of lots of + array copies) + minor re-factoring and bug fixes. + + + Minor documentation updates. + + + Added DataFormat helper class and exposed set and get format + on HSSFCellStyle + Fixed column width apis (unit wise) and various javadoc on + the subject + Fix for Dimensions record (again)... (one of these days I'll + write a unit test for this ;-p). + Some optimization on sheet creation. + + + Changes not recorded. + + + Added MulBlank, Blank, ColInfo + Added log4j facility and removed all sys.out type logging + Added support for adding font's, styles and corresponding + high level api for styling cells + added support for changing row height, cell width and default + row height/cell width. + Added fixes for internationalization (UTF-16 should work now + from HSSFCell.setStringValue, etc when the encoding is set) + added support for adding/removing and naming sheets. + + + Bugfix release. We were throwing an exception when reading + RKRecord objects. + + + Got continuation records to work (read/write) + Added various pre-support for formulas + Massive API reorganization, repackaging. + BiffViewer class added for validating HSSF & POI and/or + HSSF Output. + Better API support for modification. + + + Added encoding flag to high and low level api to use utf-16 + when needed (HSSFCell.setEncoding()) + added read only support for Label records (which are + reinterpreted as LabelSST when written) + Broken continuation record implementation (oops) + BiffViewer class added for validating HSSF & POI and/or + HSSF Output. + + + Support for read/write and modify. + Read only support for MulRK records (converted to Number when + writing) + + + + + - Things To Do for POI + - + Finish HDF @@ -24,7 +197,7 @@ - + Expose functionality in low level records in higher level API @@ -50,103 +223,4 @@ - - - History of Changes - - - Support for zoom level - Freeze and split pane support - Row and column headers on printouts - - - Custom Data Format Support - Enhanced Unicode Support for Russian and Japanese - Enhanced formula support including read-only for - "optimized if" statements. - Support for cloning objects - Fixes for header/footer - Spanish Documentation translations - Support for preserving VBA macros - - - Removed runtime dependency on commons logging. - Formula support - - - Removed depedency on commons logging. Now define poi.logging system property to enable logging to standard out. - Fixed SST string handling so that spreadsheets with rich text or extended text will be read correctly. - - - New project build. - New project documentation system based on Cocoon. - Package rename - Various bug fixes - Early stages of HSF development (not ready for development) - Initial low level record support for charting (not complete) - - - Created new event model - Optimizations made to HSSF including aggregate records for - values, rows, etc. - predictive sizing, offset based writing (instead of lots of - array copies) - minor re-factoring and bug fixes. - - - Minor documentation updates. - - - Added DataFormat helper class and exposed set and get format - on HSSFCellStyle - Fixed column width apis (unit wise) and various javadoc on - the subject - Fix for Dimensions record (again)... (one of these days I'll - write a unit test for this ;-p). - Some optimization on sheet creation. - - - Changes not recorded. - - - Added MulBlank, Blank, ColInfo - Added log4j facility and removed all sys.out type logging - Added support for adding font's, styles and corresponding - high level api for styling cells - added support for changing row height, cell width and default - row height/cell width. - Added fixes for internationalization (UTF-16 should work now - from HSSFCell.setStringValue, etc when the encoding is set) - added support for adding/removing and naming sheets. - - - Bugfix release. We were throwing an exception when reading - RKRecord objects. - - - Got continuation records to work (read/write) - Added various pre-support for formulas - Massive API reorganization, repackaging. - BiffViewer class added for validating HSSF & POI and/or - HSSF Output. - Better API support for modification. - - - Added encoding flag to high and low level api to use utf-16 - when needed (HSSFCell.setEncoding()) - added read only support for Label records (which are - reinterpreted as LabelSST when written) - Broken continuation record implementation (oops) - BiffViewer class added for validating HSSF & POI and/or - HSSF Output. - - - Support for read/write and modify. - Read only support for MulRK records (converted to Number when - writing) - - - - - - \ No newline at end of file + diff --git a/src/documentation/content/xdocs/tabs.xml b/src/documentation/content/xdocs/tabs.xml index 761cf495b4..7a4b189814 100644 --- a/src/documentation/content/xdocs/tabs.xml +++ b/src/documentation/content/xdocs/tabs.xml @@ -1,9 +1,9 @@ - - - - - - - - - Soporte para Formato de Datos Personalizado (Custom) - Soporte Unicode Mejorado para Ruso y Japonés - Soporte para Fórmulas Mejorado, incluyendo - sólo-lectura para sentencias tipo "optimizado si" (optimized if). - Soporte para la clonación de objetos - Arreglos en la cabecera/pie - Traducciones de la documentación al Español - Soporte para preservar macros VBA - - - Se quita la dependencia en tiempo de ejecución del registro - (logging) de "commons". - Soporte para fórmulas - - - Se quita la dependencia del registro de "commons". Ahora hay que definir la propiedad del sistema poi.loggin para permitir - que los registros (logs) vayan a la salida estándar. - Se arregla la gestión de la cadena SST para que las hojas de cálculo con texto rico (rich text) o texto - extendido se lean correctamente. - - - Nueva versión (build) del proyecto. - Nuevo sistema de documentación del proyecto basada en Cocoon. - Cambio de nombre del paquete - Varios errores (bugs) corregidos - Etapas preliminares del desarrollo de HFS (no esta listo para el desarrollo) - Soporte inicial de registros de bajo nivel para gráficas (no está completo) - - - Se crea un nuevo modelo de eventos - Se optimiza HSSF, incluyendo registros (records) para - valores, filas, etc. - predicción de tamaño, escritura basada en desplazamiento (en lugar de - multitud de copias de arrays) - un poco de re-factoring (¿re-factorización? mejor no) y corrección de errores. - - - Actualizaciones menores a la documentación. - - - Se añade la clase de ayuda DataFormat y se expone el formato set y get en - HSSFCellStyle - Correcciones a las apis de anchura de columna (en cuanto a las unidades) y - varios comentarios javadoc al respecto - Corrección para el registro de "Dimensions" (de nuevo)... (uno de estos días - escribiré una prueba unitaria (unit test) para esto ;-p). - Alguna optimización en la creación de páginas. - - - Mejoras no registradas - - - Se añaden MulBlank, Blank, ColInfo - Se añade facilidad log4j y se quitan las anotaciones (logs) del tipo sys.out - Se añade soporte para la adición de fuentes, estilos y el api de alto - nivel correspondiente para dar estilo a las celdas - Se añade soporte para cambiar el alto de una fila, el ancho de una celda, y - sus valores por defecto. - Correcciones para internacionalización (UTF-16 debería funcionar ahora - desde HSSFCell.setStringValue, etc cuando se define la codificación) - Soporte para la adición / eliminación y cambio de nombre de hojas. - - - Distribución de corrección de errores. - Lanzamos una excepción cuando leemos objetos de tipo RKRecord. - - - Registros de continuación ya funcionan (lectura/escritura) - Se añade soporte previo para fórmulas - Reorganización del API masiva, re-enpaquetado. - Se añade la clase BiffViewer para validar HSSF & POI y/o la - salida de HSSF. - Se mejora el soporte a la modificación del API. - - - Se añade una bandera de codificación para que las apis de alto - y bajo nivel utilicen utf-16 cuando sea necesario (HSSFCell.setEncoding()) - Se añade soporte de sólo lectura a registros de Etiqueta - (que son reinterpretados como LabelSST cuando se escriben) - Se rompe la implementación del registro de continuación (oops) - Se añade la clase BiffViewer - para validar HSSF & POI y/o la - salida de HSSF. - - - Soporte para lectura/escritura y modificación. - Soporte de sólo lectura para registros de tipo MulRK - (convertidos a Number cuando se escriben) - - - - diff --git a/src/documentation/resources/images/group-logo.gif b/src/documentation/resources/images/group-logo.gif index 543f6863a34fbfa9b8a270a74f34910dc76a5d23..472e47fd76ea1651984b5f4258cfd3c7c82154bc 100644 GIT binary patch literal 5258 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 bAM>3bCz(G!DlbVrqxzonIB_!x0381h#(|+` literal 8146 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 EKYY6w=>Px# diff --git a/src/documentation/skinconf.xml b/src/documentation/skinconf.xml index 4606684523..86dcc52eeb 100644 --- a/src/documentation/skinconf.xml +++ b/src/documentation/skinconf.xml @@ -9,22 +9,29 @@ be used to configure the chosen Forrest skin. - + + + + + - + + + @@ -44,12 +51,15 @@ be used to configure the chosen Forrest skin. + + ]> false false + true jakarta.apache.org jakarta diff --git a/src/examples/src/org/apache/poi/hssf/usermodel/examples/ReadWriteWorkbook.java b/src/examples/src/org/apache/poi/hssf/usermodel/examples/ReadWriteWorkbook.java index f80afb95fd..4080a4dc3d 100644 --- a/src/examples/src/org/apache/poi/hssf/usermodel/examples/ReadWriteWorkbook.java +++ b/src/examples/src/org/apache/poi/hssf/usermodel/examples/ReadWriteWorkbook.java @@ -80,6 +80,8 @@ public class ReadWriteWorkbook HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet sheet = wb.getSheetAt(0); HSSFRow row = sheet.getRow(2); + if (row == null) + row = sheet.createRow(2); HSSFCell cell = row.getCell((short)3); if (cell == null) cell = row.createCell((short)3); diff --git a/src/java/org/apache/poi/hpsf/ClassID.java b/src/java/org/apache/poi/hpsf/ClassID.java index 6d56767030..e9939af46b 100644 --- a/src/java/org/apache/poi/hpsf/ClassID.java +++ b/src/java/org/apache/poi/hpsf/ClassID.java @@ -56,6 +56,8 @@ package org.apache.poi.hpsf; import java.io.*; + +import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndian; /** @@ -98,15 +100,21 @@ public class ClassID */ public ClassID() { - bytes = new byte[LENGTH]; - for (int i = 0; i < LENGTH; i++) - bytes[i] = 0x00; + bytes = new byte[LENGTH]; + for (int i = 0; i < LENGTH; i++) + bytes[i] = 0x00; } - public final static int LENGTH = 16; + /**

    The number of bytes occupied by this object in the byte + * stream.

    */ + public static final int LENGTH = 16; + /** + * @return The number of bytes occupied by this object in the byte + * stream. + */ public int length() { return LENGTH; @@ -117,10 +125,12 @@ public class ClassID /** *

    Gets the bytes making out the class ID. They are returned in * correct order, i.e. big-endian.

    + * + * @return the bytes making out the class ID. */ public byte[] getBytes() { - return bytes; + return bytes; } @@ -153,9 +163,9 @@ public class ClassID bytes[6] = src[7 + offset]; bytes[7] = src[6 + offset]; - /* Read 8 bytes. */ - for (int i = 8; i < 16; i++) - bytes[i] = src[i + offset]; + /* Read 8 bytes. */ + for (int i = 8; i < 16; i++) + bytes[i] = src[i + offset]; return bytes; } @@ -170,30 +180,75 @@ public class ClassID * * @param offset The offset within the dst byte array. * - * @throws ArrayIndexOutOfBoundsException if there is not enough - * room for the class ID in the byte array. There must be at least - * 16 bytes in the byte array after the offset - * position. + * @exception ArrayStoreException if there is not enough room for the class + * ID 16 bytes in the byte array after the offset position. */ public void write(final byte[] dst, final int offset) + throws ArrayStoreException { + /* Check array size: */ + if (dst.length < 16) + throw new ArrayStoreException + ("Destination byte[] must have room for at least 16 bytes, " + + "but has a length of only " + dst.length + "."); /* Write double word. */ - dst[0 + offset] = bytes[3]; - dst[1 + offset] = bytes[2]; - dst[2 + offset] = bytes[1]; - dst[3 + offset] = bytes[0]; + dst[0 + offset] = bytes[3]; + dst[1 + offset] = bytes[2]; + dst[2 + offset] = bytes[1]; + dst[3 + offset] = bytes[0]; /* Write first word. */ - dst[4 + offset] = bytes[5]; - dst[5 + offset] = bytes[4]; + dst[4 + offset] = bytes[5]; + dst[5 + offset] = bytes[4]; /* Write second word. */ - dst[6 + offset] = bytes[7]; - dst[7 + offset] = bytes[6]; + dst[6 + offset] = bytes[7]; + dst[7 + offset] = bytes[6]; - /* Write 8 bytes. */ - for (int i = 8; i < 16; i++) - dst[i + offset] = bytes[i]; + /* Write 8 bytes. */ + for (int i = 8; i < 16; i++) + dst[i + offset] = bytes[i]; } + + + /** + *

    Checks whether this ClassID is equal to another + * object.

    + * + * @param o the object to compare this PropertySet with + * @return true if the objects are equal, else + * false.

    + */ + public boolean equals(final Object o) + { + if (o == null || !(o instanceof ClassID)) + return false; + final ClassID cid = (ClassID) o; + if (bytes.length != cid.bytes.length) + return false; + for (int i = 0; i < bytes.length; i++) + if (bytes[i] != cid.bytes[i]) + return false; + return true; + } + /** + * Returns a human readable representation of the Class ID + * in standard format "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" + * @return String representation of the Class ID represented + * by this object. + */ + public String toString() + { + StringBuffer sbClassId = new StringBuffer( 38); + sbClassId.append( '{'); + for( int i=0; i < 16; i++) { + sbClassId.append( HexDump.toHex( bytes[ i])); + if( i == 3 || i == 5 || i == 7 || i == 9) { + sbClassId.append( '-'); + } + } + sbClassId.append( '}'); + return sbClassId.toString(); + } } diff --git a/src/java/org/apache/poi/hpsf/TypeReader.java b/src/java/org/apache/poi/hpsf/TypeReader.java index a6264f75d7..dc441b4b7c 100644 --- a/src/java/org/apache/poi/hpsf/TypeReader.java +++ b/src/java/org/apache/poi/hpsf/TypeReader.java @@ -62,7 +62,6 @@ */ package org.apache.poi.hpsf; -import java.util.*; import org.apache.poi.util.LittleEndian; /** @@ -85,6 +84,7 @@ public class TypeReader * starts * @param length The length of the variant including the variant * type field + * @param type The variant type to read * @return A Java object that corresponds best to the variant * field. For example, a VT_I4 is returned as a {@link Long}, a * VT_LPSTR as a {@link String}. @@ -92,15 +92,25 @@ public class TypeReader * @see Variant */ public static Object read(final byte[] src, int offset, int length, - final int type) + final int type) { - /* - * FIXME: Support reading more types and clean up this code! - */ - Object value; - length = length - LittleEndian.INT_SIZE; + /* + * FIXME: Support reading more types and clean up this code! + */ + Object value; + length = length - LittleEndian.INT_SIZE; switch (type) - { + { + case Variant.VT_EMPTY: + { + /* + * FIXME: The value returned by this case relies on the + * assumption that the value VT_EMPTY denotes consists of zero + * bytes. I'd be glad if some could confirm or correct this. + */ + value = null; + break; + } case Variant.VT_I2: { /* @@ -137,11 +147,11 @@ public class TypeReader * Read a byte string. In Java it is represented as a * String object. The 0x00 bytes at the end must be * stripped. - * - * FIXME: Reading an 8-bit string should pay attention - * to the codepage. Currently the byte making out the - * property's value are interpreted according to the - * platform's default character set. + * + * FIXME: Reading an 8-bit string should pay attention + * to the codepage. Currently the byte making out the + * property's value are interpreted according to the + * platform's default character set. */ final int first = offset + LittleEndian.INT_SIZE; long last = first + LittleEndian.getUInt(src, offset) - 1; @@ -149,7 +159,7 @@ public class TypeReader while (src[(int) last] == 0 && first <= last) last--; value = new String(src, (int) first, (int) (last - first + 1)); - break; + break; } case Variant.VT_LPWSTR: { @@ -160,27 +170,27 @@ public class TypeReader */ final int first = offset + LittleEndian.INT_SIZE; long last = first + LittleEndian.getUInt(src, offset) - 1; - long l = last - first; + long l = last - first; offset += LittleEndian.INT_SIZE; - StringBuffer b = new StringBuffer((int) (last - first)); - for (int i = 0; i <= l; i++) - { - final int i1 = offset + (i * 2); - final int i2 = i1 + 1; - b.append((char) ((src[i2] << 8) + src[i1])); - } - /* Strip 0x00 characters from the end of the string: */ - while (b.charAt(b.length() - 1) == 0x00) - b.setLength(b.length() - 1); - value = b.toString(); - break; + StringBuffer b = new StringBuffer((int) (last - first)); + for (int i = 0; i <= l; i++) + { + final int i1 = offset + (i * 2); + final int i2 = i1 + 1; + b.append((char) ((src[i2] << 8) + src[i1])); + } + /* Strip 0x00 characters from the end of the string: */ + while (b.charAt(b.length() - 1) == 0x00) + b.setLength(b.length() - 1); + value = b.toString(); + break; } case Variant.VT_CF: { final byte[] v = new byte[length]; for (int i = 0; i < length; i++) v[i] = src[(int) (offset + i)]; - value = v; + value = v; break; } case Variant.VT_BOOL: @@ -190,24 +200,24 @@ public class TypeReader * src[offset + 3] contain the DWord for VT_BOOL, so * skip it, we don't need it. */ - final int first = offset + LittleEndian.INT_SIZE; + // final int first = offset + LittleEndian.INT_SIZE; long bool = LittleEndian.getUInt(src, offset); if (bool != 0) value = new Boolean(true); else value = new Boolean(false); - break; + break; } default: { final byte[] v = new byte[length]; for (int i = 0; i < length; i++) v[i] = src[(int) (offset + i)]; - value = v; + value = v; break; } } - return value; + return value; } } diff --git a/src/java/org/apache/poi/hpsf/Variant.java b/src/java/org/apache/poi/hpsf/Variant.java index f49ce4a2e4..e40685d5bf 100644 --- a/src/java/org/apache/poi/hpsf/Variant.java +++ b/src/java/org/apache/poi/hpsf/Variant.java @@ -76,178 +76,178 @@ public class Variant /** *

    [V][P] Nothing.

    */ - public final static int VT_EMPTY = 0; + public static final int VT_EMPTY = 0; /** *

    [V][P] SQL style Null.

    */ - public final static int VT_NULL = 1; + public static final int VT_NULL = 1; /** *

    [V][T][P][S] 2 byte signed int.

    */ - public final static int VT_I2 = 2; + public static final int VT_I2 = 2; /** *

    [V][T][P][S] 4 byte signed int.

    */ - public final static int VT_I4 = 3; + public static final int VT_I4 = 3; /** *

    [V][T][P][S] 4 byte real.

    */ - public final static int VT_R4 = 4; + public static final int VT_R4 = 4; /** *

    [V][T][P][S] 8 byte real.

    */ - public final static int VT_R8 = 5; + public static final int VT_R8 = 5; /** *

    [V][T][P][S] currency. How long is this? How is it to be * interpreted?

    */ - public final static int VT_CY = 6; + public static final int VT_CY = 6; /** *

    [V][T][P][S] date. How long is this? How is it to be * interpreted?

    */ - public final static int VT_DATE = 7; + public static final int VT_DATE = 7; /** *

    [V][T][P][S] OLE Automation string. How long is this? How is it * to be interpreted?

    */ - public final static int VT_BSTR = 8; + public static final int VT_BSTR = 8; /** *

    [V][T][P][S] IDispatch *. How long is this? How is it to be * interpreted?

    */ - public final static int VT_DISPATCH = 9; + public static final int VT_DISPATCH = 9; /** *

    [V][T][S] SCODE. How * long is this? How is it to be interpreted?

    */ - public final static int VT_ERROR = 10; + public static final int VT_ERROR = 10; /** *

    [V][T][P][S] True=-1, False=0.

    */ - public final static int VT_BOOL = 11; + public static final int VT_BOOL = 11; /** *

    [V][T][P][S] VARIANT *. How long is this? How is it to be * interpreted?

    */ - public final static int VT_VARIANT = 12; + public static final int VT_VARIANT = 12; /** *

    [V][T][S] IUnknown *. How long is this? How is it to be * interpreted?

    */ - public final static int VT_UNKNOWN = 13; + public static final int VT_UNKNOWN = 13; /** *

    [V][T][S] 16 byte fixed point.

    */ - public final static int VT_DECIMAL = 14; + public static final int VT_DECIMAL = 14; /** *

    [T] signed char.

    */ - public final static int VT_I1 = 16; + public static final int VT_I1 = 16; /** *

    [V][T][P][S] unsigned char.

    */ - public final static int VT_UI1 = 17; + public static final int VT_UI1 = 17; /** *

    [T][P] unsigned short.

    */ - public final static int VT_UI2 = 18; + public static final int VT_UI2 = 18; /** *

    [T][P] unsigned int.

    */ - public final static int VT_UI4 = 19; + public static final int VT_UI4 = 19; /** *

    [T][P] signed 64-bit int.

    */ - public final static int VT_I8 = 20; + public static final int VT_I8 = 20; /** *

    [T][P] unsigned 64-bit int.

    */ - public final static int VT_UI8 = 21; + public static final int VT_UI8 = 21; /** *

    [T] signed machine int.

    */ - public final static int VT_INT = 22; + public static final int VT_INT = 22; /** *

    [T] unsigned machine int.

    */ - public final static int VT_UINT = 23; + public static final int VT_UINT = 23; /** *

    [T] C style void.

    */ - public final static int VT_VOID = 24; + public static final int VT_VOID = 24; /** *

    [T] Standard return type. How long is this? How is it to be * interpreted?

    */ - public final static int VT_HRESULT = 25; + public static final int VT_HRESULT = 25; /** *

    [T] pointer type. How long is this? How is it to be * interpreted?

    */ - public final static int VT_PTR = 26; + public static final int VT_PTR = 26; /** *

    [T] (use VT_ARRAY in VARIANT).

    */ - public final static int VT_SAFEARRAY = 27; + public static final int VT_SAFEARRAY = 27; /** *

    [T] C style array. How long is this? How is it to be * interpreted?

    */ - public final static int VT_CARRAY = 28; + public static final int VT_CARRAY = 28; /** *

    [T] user defined type. How long is this? How is it to be * interpreted?

    */ - public final static int VT_USERDEFINED = 29; + public static final int VT_USERDEFINED = 29; /** *

    [T][P] null terminated string.

    */ - public final static int VT_LPSTR = 30; + public static final int VT_LPSTR = 30; /** *

    [T][P] wide (Unicode) null terminated string.

    */ - public final static int VT_LPWSTR = 31; + public static final int VT_LPWSTR = 31; /** *

    [P] FILETIME. The FILETIME structure holds a date and time @@ -256,50 +256,50 @@ public class Variant * have passed since January 1, 1601. This 64-bit value is split * into the two dwords stored in the structure.

    */ - public final static int VT_FILETIME = 64; + public static final int VT_FILETIME = 64; /** *

    [P] Length prefixed bytes.

    */ - public final static int VT_BLOB = 65; + public static final int VT_BLOB = 65; /** *

    [P] Name of the stream follows.

    */ - public final static int VT_STREAM = 66; + public static final int VT_STREAM = 66; /** *

    [P] Name of the storage follows.

    */ - public final static int VT_STORAGE = 67; + public static final int VT_STORAGE = 67; /** *

    [P] Stream contains an object. How long is this? How is it * to be interpreted?

    */ - public final static int VT_STREAMED_OBJECT = 68; + public static final int VT_STREAMED_OBJECT = 68; /** *

    [P] Storage contains an object. How long is this? How is it * to be interpreted?

    */ - public final static int VT_STORED_OBJECT = 69; + public static final int VT_STORED_OBJECT = 69; /** *

    [P] Blob contains an object. How long is this? How is it to be * interpreted?

    */ - public final static int VT_BLOB_OBJECT = 70; + public static final int VT_BLOB_OBJECT = 70; /** *

    [P] Clipboard format. How long is this? How is it to be * interpreted?

    */ - public final static int VT_CF = 71; + public static final int VT_CF = 71; /** *

    [P] A Class ID.

    @@ -331,34 +331,46 @@ public class Variant * target="_blank"> * msdn.microsoft.com/library/en-us/com/stgrstrc_0uwk.asp.

    */ - public final static int VT_CLSID = 72; + public static final int VT_CLSID = 72; /** *

    [P] simple counted array. How long is this? How is it to be * interpreted?

    */ - public final static int VT_VECTOR = 0x1000; + public static final int VT_VECTOR = 0x1000; /** *

    [V] SAFEARRAY*. How * long is this? How is it to be interpreted?

    */ - public final static int VT_ARRAY = 0x2000; + public static final int VT_ARRAY = 0x2000; /** *

    [V] void* for local use. How long is this? How is it to be * interpreted?

    */ - public final static int VT_BYREF = 0x4000; + public static final int VT_BYREF = 0x4000; - public final static int VT_RESERVED = 0x8000; + /** + *

    FIXME: Document this!

    + */ + public static final int VT_RESERVED = 0x8000; - public final static int VT_ILLEGAL = 0xFFFF; + /** + *

    FIXME: Document this!

    + */ + public static final int VT_ILLEGAL = 0xFFFF; - public final static int VT_ILLEGALMASKED = 0xFFF; + /** + *

    FIXME: Document this!

    + */ + public static final int VT_ILLEGALMASKED = 0xFFF; - public final static int VT_TYPEMASK = 0xFFF; + /** + *

    FIXME: Document this!

    + */ + public static final int VT_TYPEMASK = 0xFFF; -} +} \ No newline at end of file diff --git a/src/java/org/apache/poi/hssf/dev/FormulaViewer.java b/src/java/org/apache/poi/hssf/dev/FormulaViewer.java index 1e7fd95965..3443fda1a6 100644 --- a/src/java/org/apache/poi/hssf/dev/FormulaViewer.java +++ b/src/java/org/apache/poi/hssf/dev/FormulaViewer.java @@ -77,7 +77,6 @@ import org.apache.poi.hssf.record.*; import org.apache.poi.hssf.record.formula.*; import org.apache.poi.hssf.model.*; import org.apache.poi.hssf.usermodel.*; -import org.apache.poi.hssf.util.SheetReferences; /** * FormulaViewer - finds formulas in a BIFF8 file and attempts to read them/display @@ -144,7 +143,7 @@ public class FormulaViewer StringBuffer buf = new StringBuffer(); if (token instanceof ExpPtg) return; - buf.append(name=((OperationPtg) token).toFormulaString((SheetReferences)null)); + buf.append(name=((OperationPtg) token).toFormulaString((Workbook)null)); buf.append(sep); switch (token.getPtgClass()) { case Ptg.CLASS_REF : @@ -213,7 +212,7 @@ public class FormulaViewer StringBuffer buf = new StringBuffer(); for (int i=0;i0) { - o = (OperationPtg) ptgs[i]; + stack.push(ptgs[0].toFormulaString(book)); - if (o instanceof AttrPtg && ((AttrPtg)o).isOptimizedIf()) { - ifptg=(AttrPtg)o; - } else { + for (int i = 1; i < ptgs.length; i++) { + if (! (ptgs[i] instanceof OperationPtg)) { + stack.push(ptgs[i].toFormulaString(book)); + continue; + } - numOperands = o.getNumberOfOperands(); - operands = new String[numOperands]; + if (ptgs[i] instanceof AttrPtg && ((AttrPtg) ptgs[i]).isOptimizedIf()) { + ifptg = (AttrPtg) ptgs[i]; + continue; + } - for (int j=0;j 0; j--) { + //TODO: catch stack underflow and throw parse exception. + operands[j - 1] = (String) stack.pop(); } - if ( (o instanceof AbstractFunctionPtg) && - ((AbstractFunctionPtg)o).getName().equals("specialflag") && - ifptg != null - ) { + stack.push(o.toFormulaString(operands)); + if (!(o instanceof AbstractFunctionPtg)) continue; + + final AbstractFunctionPtg f = (AbstractFunctionPtg) o; + final String fname = f.getName(); + if (fname == null) continue; + + if ((ifptg != null) && (fname.equals("specialflag"))) { // this special case will be way different. - result = ifptg.toFormulaString( - new String[] {(o.toFormulaString(operands))} - ); - ifptg = null; - } else { - result = o.toFormulaString(operands); + stack.push(ifptg.toFormulaString(new String[]{(String) stack.pop()})); + continue; } - stack.push(result); + if (fname.equals("externalflag")) { + final String top = (String) stack.pop(); + final int paren = top.indexOf('('); + final int comma = top.indexOf(','); + if (comma == -1) { + final int rparen = top.indexOf(')'); + stack.push(top.substring(paren + 1, rparen) + "()"); } - - - } else { - stack.push(ptgs[i].toFormulaString(refs)); + else { + stack.push(top.substring(paren + 1, comma) + '(' + + top.substring(comma + 1)); } } - return (String) stack.pop(); //TODO: catch stack underflow and throw parse exception. } + // TODO: catch stack underflow and throw parse exception. + return (String) stack.pop(); + } + + /** Create a tree representation of the RPN token array *used to run the class(RVA) change algo */ @@ -890,11 +909,9 @@ end; * Useful for testing */ public String toString() { - SheetReferences refs = null; - if (book!=null) book.getSheetReferences(); StringBuffer buf = new StringBuffer(); for (int i=0;i 0) { + merged = (MergeCellsRecord) mergedRecords.get(mergedRecords.size() - 1); + } else { + merged = null; + } + } } } @@ -970,10 +1004,7 @@ public class Sheet implements Model { checkCells(); log.logFormatted(log.DEBUG, "remove value record row,dimsloc %,%", - new int[] - { - row, dimsloc - }); + new int[]{row, dimsloc} ); loc = dimsloc; cells.removeCell(col); @@ -2011,7 +2042,7 @@ public class Sheet implements Model * @return record containing a WindowTwoRecord */ - protected Record createWindowTwo() + protected WindowTwoRecord createWindowTwo() { WindowTwoRecord retval = new WindowTwoRecord(); @@ -2312,7 +2343,6 @@ public class Sheet implements Model * @param sel True to select the sheet, false otherwise. */ public void setSelected(boolean sel) { - WindowTwoRecord windowTwo = (WindowTwoRecord) findFirstRecordBySid(WindowTwoRecord.sid); windowTwo.setSelected(sel); } @@ -2321,82 +2351,59 @@ public class Sheet implements Model * @param margin which margin to get * @return the size of the margin */ - public double getMargin(short margin) { - Margin m; - switch ( margin ) - { - case LeftMargin: - m = (Margin) findFirstRecordBySid( LeftMarginRecord.sid ); - if ( m == null ) - return .75; - break; - case RightMargin: - m = (Margin) findFirstRecordBySid( RightMarginRecord.sid ); - if ( m == null ) - return .75; - break; - case TopMargin: - m = (Margin) findFirstRecordBySid( TopMarginRecord.sid ); - if ( m == null ) - return 1.0; - break; - case BottomMargin: - m = (Margin) findFirstRecordBySid( BottomMarginRecord.sid ); - if ( m == null ) - return 1.0; - break; - default : - throw new RuntimeException( "Unknown margin constant: " + margin ); - } - return m.getMargin(); - } + public double getMargin(short margin) { + if (getMargins()[margin] != null) + return margins[margin].getMargin(); + else { + switch ( margin ) + { + case LeftMargin: + return .75; + case RightMargin: + return .75; + case TopMargin: + return 1.0; + case BottomMargin: + return 1.0; + default : + throw new RuntimeException( "Unknown margin constant: " + margin ); + } + } + } /** * Sets the size of the margin in inches. * @param margin which margin to get * @param size the size of the margin */ - public void setMargin(short margin, double size) { - Margin m; - switch ( margin ) - { - case LeftMargin: - m = (Margin) findFirstRecordBySid( LeftMarginRecord.sid ); - if ( m == null ) - { - m = new LeftMarginRecord(); - records.add( getDimsLoc() + 1, m ); - } - break; - case RightMargin: - m = (Margin) findFirstRecordBySid( RightMarginRecord.sid ); - if ( m == null ) - { - m = new RightMarginRecord(); - records.add( getDimsLoc() + 1, m ); - } - break; - case TopMargin: - m = (Margin) findFirstRecordBySid( TopMarginRecord.sid ); - if ( m == null ) - { - m = new TopMarginRecord(); - records.add( getDimsLoc() + 1, m ); - } - break; - case BottomMargin: - m = (Margin) findFirstRecordBySid( BottomMarginRecord.sid ); - if ( m == null ) - { - m = new BottomMarginRecord(); - records.add( getDimsLoc() + 1, m ); - } - break; - default : - throw new RuntimeException( "Unknown margin constant: " + margin ); - } - m.setMargin( size ); - } + public void setMargin(short margin, double size) { + Margin m = getMargins()[margin]; + if (m == null) { + switch ( margin ) + { + case LeftMargin: + m = new LeftMarginRecord(); + records.add( getDimsLoc() + 1, m ); + break; + case RightMargin: + m = new RightMarginRecord(); + records.add( getDimsLoc() + 1, m ); + break; + case TopMargin: + m = new TopMarginRecord(); + records.add( getDimsLoc() + 1, m ); + break; + case BottomMargin: + m = new BottomMarginRecord(); + records.add( getDimsLoc() + 1, m ); + break; + default : + throw new RuntimeException( "Unknown margin constant: " + margin ); + } + margins[margin] = m; + } + m.setMargin( size ); + } public int getEofLoc() { @@ -2434,9 +2441,8 @@ public class Sheet implements Model } records.add(loc+1, pane); - WindowTwoRecord windowRecord = (WindowTwoRecord) records.get(loc); - windowRecord.setFreezePanes(true); - windowRecord.setFreezePanesNoSplit(true); + windowTwo.setFreezePanes(true); + windowTwo.setFreezePanesNoSplit(true); SelectionRecord sel = (SelectionRecord) findFirstRecordBySid(SelectionRecord.sid); // SelectionRecord sel2 = (SelectionRecord) sel.clone(); @@ -2484,9 +2490,8 @@ public class Sheet implements Model r.setActivePane((short) activePane); records.add(loc+1, r); - WindowTwoRecord windowRecord = (WindowTwoRecord) records.get(loc); - windowRecord.setFreezePanes(false); - windowRecord.setFreezePanesNoSplit(false); + windowTwo.setFreezePanes(false); + windowTwo.setFreezePanesNoSplit(false); SelectionRecord sel = (SelectionRecord) findFirstRecordBySid(SelectionRecord.sid); // SelectionRecord sel2 = (SelectionRecord) sel.clone(); @@ -2519,5 +2524,84 @@ public class Sheet implements Model { this.selection = selection; } + /** + * creates a Protect record with protect set to false. + * @see org.apache.poi.hssf.record.ProtectRecord + * @see org.apache.poi.hssf.record.Record + * @return a ProtectRecord + */ + protected Record createProtect() + { + log.log(log.DEBUG, "create protect record with protection disabled"); + ProtectRecord retval = new ProtectRecord(); + + retval.setProtect(false); + // by default even when we support encryption we won't + return retval; + } + + public ProtectRecord getProtect() + { + return protect; + } + + /** + * Sets whether the gridlines are shown in a viewer. + * @param show whether to show gridlines or not + */ + public void setDisplayGridlines(boolean show) { + windowTwo.setDisplayGridlines(show); + } + + /** + * Returns if gridlines are displayed. + * @return whether gridlines are displayed + */ + public boolean isDisplayGridlines() { + return windowTwo.getDisplayGridlines(); + } + + /** + * Sets whether the formulas are shown in a viewer. + * @param show whether to show formulas or not + */ + public void setDisplayFormulas(boolean show) { + windowTwo.setDisplayFormulas(show); + } + + /** + * Returns if formulas are displayed. + * @return whether formulas are displayed + */ + public boolean isDisplayFormulas() { + return windowTwo.getDisplayFormulas(); + } + + /** + * Sets whether the RowColHeadings are shown in a viewer. + * @param show whether to show RowColHeadings or not + */ + public void setDisplayRowColHeadings(boolean show) { + windowTwo.setDisplayRowColHeadings(show); + } + + /** + * Returns if RowColHeadings are displayed. + * @return whether RowColHeadings are displayed + */ + public boolean isDisplayRowColHeadings() { + return windowTwo.getDisplayRowColHeadings(); + } + + /** + * Returns the array of margins. If not created, will create. + * + * @return the array of marings. + */ + protected Margin[] getMargins() { + if (margins == null) + margins = new Margin[4]; + return margins; + } } diff --git a/src/java/org/apache/poi/hssf/model/Workbook.java b/src/java/org/apache/poi/hssf/model/Workbook.java index cad91171e8..4696d8985f 100644 --- a/src/java/org/apache/poi/hssf/model/Workbook.java +++ b/src/java/org/apache/poi/hssf/model/Workbook.java @@ -513,7 +513,7 @@ public class Workbook implements Model { for (int k = 0; k < boundsheets.size(); k++) { String sheet = getSheetName(k); - if (sheet.equals(name)) { + if (sheet.equalsIgnoreCase(name)) { retval = k; break; } @@ -686,37 +686,27 @@ public class Workbook implements Model { * * @return byte array containing the HSSF-only portions of the POIFS file. */ - - public byte [] serialize() { - log.log(DEBUG, "Serializing Workbook!"); - byte[] retval = null; - - // ArrayList bytes = new ArrayList(records.size()); - int arraysize = getSize(); - int pos = 0; - - // for (int k = 0; k < records.size(); k++) - // { - // bytes.add((( Record ) records.get(k)).serialize()); - // } - // for (int k = 0; k < bytes.size(); k++) - // { - // arraysize += (( byte [] ) bytes.get(k)).length; - // } - retval = new byte[ arraysize ]; - for (int k = 0; k < records.size(); k++) { - - // byte[] rec = (( byte [] ) bytes.get(k)); - // System.arraycopy(rec, 0, retval, pos, rec.length); - Record record = records.get(k); - // Let's skip RECALCID records, as they are only use for optimization - if(record.getSid() != RecalcIdRecord.sid || ((RecalcIdRecord)record).isNeeded()) { - pos += record.serialize(pos, retval); // rec.length; - } - } - log.log(DEBUG, "Exiting serialize workbook"); - return retval; - } + // GJS: Not used so why keep it. +// public byte [] serialize() { +// log.log(DEBUG, "Serializing Workbook!"); +// byte[] retval = null; +// +//// ArrayList bytes = new ArrayList(records.size()); +// int arraysize = getSize(); +// int pos = 0; +// +// retval = new byte[ arraysize ]; +// for (int k = 0; k < records.size(); k++) { +// +// Record record = records.get(k); +//// Let's skip RECALCID records, as they are only use for optimization +// if(record.getSid() != RecalcIdRecord.sid || ((RecalcIdRecord)record).isNeeded()) { +// pos += record.serialize(pos, retval); // rec.length; +// } +// } +// log.log(DEBUG, "Exiting serialize workbook"); +// return retval; +// } /** * Serializes all records int the worksheet section into a big byte array. Use @@ -725,44 +715,54 @@ public class Workbook implements Model { * @param data array of bytes to write this to */ - public int serialize(int offset, byte [] data) { - log.log(DEBUG, "Serializing Workbook with offsets"); + public int serialize( int offset, byte[] data ) + { + log.log( DEBUG, "Serializing Workbook with offsets" ); - // ArrayList bytes = new ArrayList(records.size()); - // int arraysize = getSize(); // 0; - int pos = 0; + int pos = 0; - // for (int k = 0; k < records.size(); k++) - // { - // bytes.add((( Record ) records.get(k)).serialize()); - // - // } - // for (int k = 0; k < bytes.size(); k++) - // { - // arraysize += (( byte [] ) bytes.get(k)).length; - // } - for (int k = 0; k < records.size(); k++) { + SSTRecord sst = null; + int sstPos = 0; + for ( int k = 0; k < records.size(); k++ ) + { - // byte[] rec = (( byte [] ) bytes.get(k)); - // System.arraycopy(rec, 0, data, offset + pos, rec.length); - Record record = records.get(k); + Record record = records.get( k ); // Let's skip RECALCID records, as they are only use for optimization - if(record.getSid() != RecalcIdRecord.sid || ((RecalcIdRecord)record).isNeeded()) { - pos += record.serialize(pos + offset, data); // rec.length; + if ( record.getSid() != RecalcIdRecord.sid || ( (RecalcIdRecord) record ).isNeeded() ) + { + if (record instanceof SSTRecord) + { + sst = (SSTRecord)record; + sstPos = pos; + } + if (record.getSid() == ExtSSTRecord.sid && sst != null) + { + record = sst.createExtSSTRecord(sstPos + offset); + } + pos += record.serialize( pos + offset, data ); // rec.length; } } - log.log(DEBUG, "Exiting serialize workbook"); + log.log( DEBUG, "Exiting serialize workbook" ); return pos; } - public int getSize() { + public int getSize() + { int retval = 0; - for (int k = 0; k < records.size(); k++) { - Record record = records.get(k); + SSTRecord sst = null; + for ( int k = 0; k < records.size(); k++ ) + { + Record record = records.get( k ); // Let's skip RECALCID records, as they are only use for optimization - if(record.getSid() != RecalcIdRecord.sid || ((RecalcIdRecord)record).isNeeded()) { - retval += record.getRecordSize(); + if ( record.getSid() != RecalcIdRecord.sid || ( (RecalcIdRecord) record ).isNeeded() ) + { + if (record instanceof SSTRecord) + sst = (SSTRecord)record; + if (record.getSid() == ExtSSTRecord.sid && sst != null) + retval += sst.calcExtSSTRecordSize(); + else + retval += record.getRecordSize(); } } return retval; @@ -1729,15 +1729,17 @@ public class Workbook implements Model { } public SheetReferences getSheetReferences() { - SheetReferences refs = new SheetReferences(); - - if (externSheet != null) { - for (int k = 0; k < externSheet.getNumOfREFStructures(); k++) { - String sheetName = findSheetNameFromExternSheet((short)k); - refs.addSheetReference(sheetName, k); - } - } - return refs; + SheetReferences refs = new SheetReferences(); + + if (externSheet != null) { + for (int k = 0; k < externSheet.getNumOfREFStructures(); k++) { + + String sheetName = findSheetNameFromExternSheet((short)k); + refs.addSheetReference(sheetName, k); + + } + } + return refs; } /** finds the sheet name by his extern sheet index @@ -1745,10 +1747,12 @@ public class Workbook implements Model { * @return sheet name */ public String findSheetNameFromExternSheet(short num){ - String result; + String result=""; short indexToSheet = externSheet.getREFRecordAt(num).getIndexToFirstSupBook(); - result = getSheetName(indexToSheet); + if (indexToSheet>-1) { //error check, bail out gracefully! + result = getSheetName(indexToSheet); + } return result; } @@ -2060,18 +2064,22 @@ public class Workbook implements Model { */ public PaletteRecord getCustomPalette() { - PaletteRecord palette; - Record rec = records.get(records.getPalettepos()); - if (rec instanceof PaletteRecord) - { - palette = (PaletteRecord) rec; - } - else - { - palette = createPalette(); - records.add(records.getPalettepos(), palette); - } - return palette; + PaletteRecord palette; + int palettePos = records.getPalettepos(); + if (palettePos != -1) { + Record rec = records.get(palettePos); + if (rec instanceof PaletteRecord) { + palette = (PaletteRecord) rec; + } else throw new RuntimeException("InternalError: Expected PaletteRecord but got a '"+rec+"'"); + } + else + { + palette = createPalette(); + //Add the palette record after the bof which is always the first record + records.add(1, palette); + records.setPalettepos(1); + } + return palette; } diff --git a/src/java/org/apache/poi/hssf/model/WorkbookRecordList.java b/src/java/org/apache/poi/hssf/model/WorkbookRecordList.java index 0f2fa32540..654ea88782 100644 --- a/src/java/org/apache/poi/hssf/model/WorkbookRecordList.java +++ b/src/java/org/apache/poi/hssf/model/WorkbookRecordList.java @@ -74,7 +74,7 @@ public class WorkbookRecordList private int namepos = 0; // holds the position of last name record private int supbookpos = 0; // holds the position of sup book private int externsheetPos = 0;// holds the position of the extern sheet - private int palettepos = 0; // hold the position of the palette, if applicable + private int palettepos = -1; // hold the position of the palette, if applicable public void setRecords( List records ) @@ -103,7 +103,7 @@ public class WorkbookRecordList if (getBackuppos() >= pos) setBackuppos( backuppos + 1 ); if (getNamepos() >= pos) setNamepos(namepos+1); if (getSupbookpos() >= pos) setSupbookpos(supbookpos+1); - if (getPalettepos() >= pos) setPalettepos( palettepos + 1 ); + if ((getPalettepos() != -1) && (getPalettepos() >= pos)) setPalettepos( palettepos + 1 ); if (getExternsheetPos() >= pos) setExternsheetPos(getExternsheetPos() + 1); } @@ -128,7 +128,7 @@ public class WorkbookRecordList if (getBackuppos() >= pos) setBackuppos( backuppos - 1 ); if (getNamepos() >= pos) setNamepos(getNamepos()-1); if (getSupbookpos() >= pos) setSupbookpos(getSupbookpos()-1); - if (getPalettepos() >= pos) setPalettepos( palettepos - 1 ); + if ((getPalettepos() != -1) && (getPalettepos() >= pos)) setPalettepos( palettepos - 1 ); if (getExternsheetPos() >= pos) setExternsheetPos( getExternsheetPos() -1); } diff --git a/src/java/org/apache/poi/hssf/record/BoolErrRecord.java b/src/java/org/apache/poi/hssf/record/BoolErrRecord.java index 859748a84a..4391fc43aa 100644 --- a/src/java/org/apache/poi/hssf/record/BoolErrRecord.java +++ b/src/java/org/apache/poi/hssf/record/BoolErrRecord.java @@ -172,12 +172,18 @@ public class BoolErrRecord * set the error value for the cell * * @param value error representing the error value + * this value can only be 0,7,15,23,29,36 or 42 + * see bugzilla bug 16560 for an explanation */ public void setValue(byte value) { - field_4_bBoolErr = value; - field_5_fError = ( byte ) 1; + if ( (value==0)||(value==7)||(value==15)||(value==23)||(value==29)||(value==36)||(value==42)) { + field_4_bBoolErr = value; + field_5_fError = ( byte ) 1; + } else { + throw new RuntimeException("Error Value can only be 0,7,15,23,29,36 or 42. It cannot be "+value); + } } //public short getRow() diff --git a/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java b/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java index a74be0f6c9..fcab41a1f2 100644 --- a/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java +++ b/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java @@ -1 +1,187 @@ -/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache POI" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * "Apache POI", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . */package org.apache.poi.hssf.record;import org.apache.poi.util.*;/** * Record for the bottom margin. * NOTE: This source was automatically generated. * @author Shawn Laubach (slaubach at apache dot org) */public class BottomMarginRecord extends Record implements Margin{ public final static short sid = 0x29; private double field_1_margin; public BottomMarginRecord() { } /** * Constructs a BottomMargin record and sets its fields appropriately. * * @param id id must be 0x29 or an exception * will be throw upon validation * @param size size the size of the data area of the record * @param data data of the record (should not contain sid/len) */ public BottomMarginRecord(short id, short size, byte [] data) { super(id, size, data); } /** * Constructs a BottomMargin record and sets its fields appropriately. * * @param id id must be 0x29 or an exception * will be throw upon validation * @param size size the size of the data area of the record * @param data data of the record (should not contain sid/len) * @param offset of the record's data */ public BottomMarginRecord(short id, short size, byte [] data, int offset) { super(id, size, data, offset); } /** * Checks the sid matches the expected side for this record * * @param id the expected sid. */ protected void validateSid(short id) { if (id != sid) { throw new RecordFormatException("Not a BottomMargin record"); } } protected void fillFields(byte [] data, short size, int offset) { field_1_margin = LittleEndian.getDouble(data, 0x0 + offset); } public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("[BottomMargin]\n"); buffer.append(" .margin = ") .append(" (").append(getMargin()).append(" )\n"); buffer.append("[/BottomMargin]\n"); return buffer.toString(); } public int serialize(int offset, byte[] data) { LittleEndian.putShort(data, 0 + offset, sid); LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4)); LittleEndian.putDouble(data, 4 + offset, field_1_margin); return getRecordSize(); } /** * Size of record (exluding 4 byte header) */ public int getRecordSize() { return 4 + 8; } public short getSid() { return this.sid; } /** * Get the margin field for the BottomMargin record. */ public double getMargin() { return field_1_margin; } /** * Set the margin field for the BottomMargin record. */ public void setMargin(double field_1_margin) { this.field_1_margin = field_1_margin; } public Object clone() { BottomMarginRecord rec = new BottomMarginRecord(); rec.field_1_margin = this.field_1_margin; return rec; }} // END OF CLASS \ No newline at end of file +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2003 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + + +package org.apache.poi.hssf.record; + + + +import org.apache.poi.util.*; + +/** + * Record for the bottom margin. + * NOTE: This source was automatically generated. + * @author Shawn Laubach (slaubach at apache dot org) + */ +public class BottomMarginRecord + extends Record implements Margin +{ + public final static short sid = 0x29; + private double field_1_margin; + + + public BottomMarginRecord() + { + + } + + /** + * Constructs a BottomMargin record and sets its fields appropriately. + * + * @param id id must be 0x29 or an exception + * will be throw upon validation + * @param size size the size of the data area of the record + * @param data data of the record (should not contain sid/len) + */ + + public BottomMarginRecord(short id, short size, byte [] data) + { + super(id, size, data); + } + + /** + * Constructs a BottomMargin record and sets its fields appropriately. + * + * @param id id must be 0x29 or an exception + * will be throw upon validation + * @param size size the size of the data area of the record + * @param data data of the record (should not contain sid/len) + * @param offset of the record's data + */ + + public BottomMarginRecord(short id, short size, byte [] data, int offset) + { + super(id, size, data, offset); + } + + /** + * Checks the sid matches the expected side for this record + * + * @param id the expected sid. + */ + protected void validateSid(short id) + { + if (id != sid) + { + throw new RecordFormatException("Not a BottomMargin record"); + } + } + + protected void fillFields(byte [] data, short size, int offset) + { + field_1_margin = LittleEndian.getDouble(data, 0x0 + offset); + + } + + public String toString() + { + StringBuffer buffer = new StringBuffer(); + + buffer.append("[BottomMargin]\n"); + + buffer.append(" .margin = ") + .append(" (").append(getMargin()).append(" )\n"); + + buffer.append("[/BottomMargin]\n"); + return buffer.toString(); + } + + public int serialize(int offset, byte[] data) + { + LittleEndian.putShort(data, 0 + offset, sid); + LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4)); + + LittleEndian.putDouble(data, 4 + offset, field_1_margin); + + return getRecordSize(); + } + + /** + * Size of record (exluding 4 byte header) + */ + public int getRecordSize() + { + return 4 + 8; + } + + public short getSid() + { + return this.sid; + } + + + /** + * Get the margin field for the BottomMargin record. + */ + public double getMargin() + { + return field_1_margin; + } + + /** + * Set the margin field for the BottomMargin record. + */ + public void setMargin(double field_1_margin) + { + this.field_1_margin = field_1_margin; + } + + public Object clone() { + BottomMarginRecord rec = new BottomMarginRecord(); + rec.field_1_margin = this.field_1_margin; + return rec; + } + + +} // END OF CLASS \ No newline at end of file diff --git a/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java b/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java index 6e01246a65..95c5878064 100644 --- a/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java +++ b/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java @@ -194,10 +194,22 @@ public class BoundSheetRecord /** * Set the sheetname for this sheet. (this appears in the tabs at the bottom) * @param sheetname the name of the sheet + * @thows IllegalArgumentException if sheet name will cause excel to crash. */ public void setSheetname( String sheetname ) { + + if ((sheetname == null) || (sheetname.length()==0) + || (sheetname.length()>31) + || (sheetname.indexOf("/") > -1) + || (sheetname.indexOf("\\") > -1) + || (sheetname.indexOf("?") > -1) + || (sheetname.indexOf("*") > -1) + || (sheetname.indexOf("]") > -1) + || (sheetname.indexOf("[") > -1) ){ + throw new IllegalArgumentException("Sheet name cannot be blank, greater than 31 chars, or contain any of /\\*?[]"); + } field_5_sheetname = sheetname; } diff --git a/src/java/org/apache/poi/hssf/record/ContinueRecord.java b/src/java/org/apache/poi/hssf/record/ContinueRecord.java index dbe00e52eb..8d7eee7f72 100644 --- a/src/java/org/apache/poi/hssf/record/ContinueRecord.java +++ b/src/java/org/apache/poi/hssf/record/ContinueRecord.java @@ -267,4 +267,14 @@ public class ContinueRecord protected void fillFields(byte [] ignored_parm1, short ignored_parm2, int ignored_parm3) { } + + /** + * Clone this record. + */ + public Object clone() { + ContinueRecord clone = new ContinueRecord(); + clone.setData(field_1_data); + return clone; + } + } diff --git a/src/java/org/apache/poi/hssf/record/ExtSSTInfoSubRecord.java b/src/java/org/apache/poi/hssf/record/ExtSSTInfoSubRecord.java index e80c8affdf..d98f466aff 100644 --- a/src/java/org/apache/poi/hssf/record/ExtSSTInfoSubRecord.java +++ b/src/java/org/apache/poi/hssf/record/ExtSSTInfoSubRecord.java @@ -65,7 +65,6 @@ import org.apache.poi.util.LittleEndian; /** * Extended SST table info subrecord

    * contains the elements of "info" in the SST's array field

    - * WE HAVE VERY LITTLE INFORMATION ON HOW TO IMPLEMENT THIS RECORD! (EXTSSST)

    * @author Andrew C. Oliver (acoliver at apache dot org) * @version 2.0-pre * @see org.apache.poi.hssf.record.ExtSSTRecord @@ -74,6 +73,7 @@ import org.apache.poi.util.LittleEndian; public class ExtSSTInfoSubRecord extends Record { + public static final int INFO_SIZE = 8; public final static short sid = 0xFFF; // only here for conformance, doesn't really have an sid private int field_1_stream_pos; // stream pointer to the SST record @@ -114,7 +114,7 @@ public class ExtSSTInfoSubRecord field_1_stream_pos = pos; } - public void setBucketSSTOffset(short offset) + public void setBucketRecordOffset(short offset) { field_2_bucket_sst_offset = offset; } @@ -159,6 +159,6 @@ public class ExtSSTInfoSubRecord public short getSid() { - return this.sid; + return sid; } } diff --git a/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java b/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java index 7a8e2391e9..9a85e5966d 100644 --- a/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java +++ b/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java @@ -61,13 +61,13 @@ import java.util.ArrayList; /** * Title: Extended Static String Table

    - * Description: I really don't understand this thing... its supposed to be "a hash - * table for optimizing external copy operations" -- - *

    - * This sounds like a job for Marc "BitMaster" Johnson aka the - * "Hawaiian Master Chef".

    + * Description: This record is used for a quick lookup into the SST record. This + * record breaks the SST table into a set of buckets. The offsets + * to these buckets within the SST record are kept as well as the + * position relative to the start of the SST record. * REFERENCE: PG 313 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)

    * @author Andrew C. Oliver (acoliver at apache dot org) + * @author Jason Height (jheight at apache dot org) * @version 2.0-pre * @see org.apache.poi.hssf.record.ExtSSTInfoSubRecord */ @@ -75,10 +75,15 @@ import java.util.ArrayList; public class ExtSSTRecord extends Record { + public static final int DEFAULT_BUCKET_SIZE = 8; + //Cant seem to find this documented but from the biffviewer it is clear that + //Excel only records the indexes for the first 128 buckets. + public static final int MAX_BUCKETS = 128; public final static short sid = 0xff; - private short field_1_strings_per_bucket; + private short field_1_strings_per_bucket = DEFAULT_BUCKET_SIZE; private ArrayList field_2_sst_info; + public ExtSSTRecord() { field_2_sst_info = new ArrayList(); @@ -119,12 +124,11 @@ public class ExtSSTRecord } } - // this probably doesn't work but we don't really care at this point protected void fillFields(byte [] data, short size, int offset) { field_2_sst_info = new ArrayList(); field_1_strings_per_bucket = LittleEndian.getShort(data, 0 + offset); - for (int k = 2; k < ((data.length - offset) - size); k += 8) + for (int k = 2; k < (size-offset); k += 8) { byte[] tempdata = new byte[ 8 + offset ]; @@ -189,26 +193,55 @@ public class ExtSSTRecord public int serialize(int offset, byte [] data) { LittleEndian.putShort(data, 0 + offset, sid); - -// LittleEndian.putShort(data,2,(short)(2 + (getNumInfoRecords() *8))); - LittleEndian.putShort(data, 2 + offset, ( short ) (2 + (0x3fa - 2))); - int pos = 4; + LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4)); + LittleEndian.putShort(data, 4 + offset, field_1_strings_per_bucket); + int pos = 6; for (int k = 0; k < getNumInfoRecords(); k++) { - System.arraycopy(getInfoRecordAt(k).serialize(), 0, data, - pos + offset, 8); + ExtSSTInfoSubRecord rec = getInfoRecordAt(k); + pos += rec.serialize(pos + offset, data); } - return getRecordSize(); + return pos; } + /** Returns the size of this record */ public int getRecordSize() { - return 6 + 0x3fa - 2; + return 6 + 8*getNumInfoRecords(); + } + + public static final int getNumberOfInfoRecsForStrings(int numStrings) { + int infoRecs = (numStrings / DEFAULT_BUCKET_SIZE); + if ((numStrings % DEFAULT_BUCKET_SIZE) != 0) + infoRecs ++; + //Excel seems to max out after 128 info records. + //This isnt really documented anywhere... + if (infoRecs > MAX_BUCKETS) + infoRecs = MAX_BUCKETS; + return infoRecs; + } + + /** Given a number of strings (in the sst), returns the size of the extsst record*/ + public static final int getRecordSizeForStrings(int numStrings) { + return 4 + 2 + (getNumberOfInfoRecsForStrings(numStrings) * 8); } public short getSid() { - return this.sid; + return sid; } + + public void setBucketOffsets( int[] bucketAbsoluteOffsets, int[] bucketRelativeOffsets ) + { + this.field_2_sst_info = new ArrayList(bucketAbsoluteOffsets.length); + for ( int i = 0; i < bucketAbsoluteOffsets.length; i++ ) + { + ExtSSTInfoSubRecord r = new ExtSSTInfoSubRecord(); + r.setBucketRecordOffset((short)bucketRelativeOffsets[i]); + r.setStreamPos(bucketAbsoluteOffsets[i]); + field_2_sst_info.add(r); + } + } + } diff --git a/src/java/org/apache/poi/hssf/record/ExternSheetRecord.java b/src/java/org/apache/poi/hssf/record/ExternSheetRecord.java index 761d400522..048fb443ff 100644 --- a/src/java/org/apache/poi/hssf/record/ExternSheetRecord.java +++ b/src/java/org/apache/poi/hssf/record/ExternSheetRecord.java @@ -1 +1,230 @@ -/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache POI" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * "Apache POI", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . */package org.apache.poi.hssf.record;import org.apache.poi.util.LittleEndian;import java.util.ArrayList;/** * Title: Extern Sheet

    * Description: A List of Inndexes to SupBook

    * REFERENCE:

    * @author Libin Roman (Vista Portal LDT. Developer) * @version 1.0-pre */public class ExternSheetRecord extends Record { public final static short sid = 0x17; private short field_1_number_of_REF_sturcutres; private ArrayList field_2_REF_structures; public ExternSheetRecord() { field_2_REF_structures = new ArrayList(); } /** * Constructs a Extern Sheet record and sets its fields appropriately. * * @param id id must be 0x16 or an exception will be throw upon validation * @param size the size of the data area of the record * @param data data of the record (should not contain sid/len) */ public ExternSheetRecord(short id, short size, byte[] data) { super(id, size, data); } /** * Constructs a Extern Sheet record and sets its fields appropriately. * * @param id id must be 0x16 or an exception will be throw upon validation * @param size the size of the data area of the record * @param data data of the record (should not contain sid/len) * @param offset of the record's data */ public ExternSheetRecord(short id, short size, byte[] data, int offset) { super(id, size, data, offset); } /** * called by constructor, should throw runtime exception in the event of a * record passed with a differing ID. * * @param id alleged id for this record */ protected void validateSid(short id) { if (id != sid) { throw new RecordFormatException("NOT An ExternSheet RECORD"); } } /** * called by the constructor, should set class level fields. Should throw * runtime exception for bad/icomplete data. * * @param data raw data * @param size size of data * @param offset of the record's data (provided a big array of the file) */ protected void fillFields(byte [] data, short size, int offset) { field_2_REF_structures = new ArrayList(); field_1_number_of_REF_sturcutres = LittleEndian.getShort(data, 0 + offset); int pos = 2 + offset; for (int i = 0 ; i < field_1_number_of_REF_sturcutres ; ++i) { ExternSheetSubRecord rec = new ExternSheetSubRecord((short)0, (short)6 , data , pos); pos += 6; field_2_REF_structures.add( rec); } } /** * sets the number of the REF structors , that is in Excel file * @param numStruct number of REF structs */ public void setNumOfREFStructures(short numStruct) { field_1_number_of_REF_sturcutres = numStruct; } /** * return the number of the REF structors , that is in Excel file * @return number of REF structs */ public short getNumOfREFStructures() { return field_1_number_of_REF_sturcutres; } /** * adds REF struct (ExternSheetSubRecord) * @param rec REF struct */ public void addREFRecord(ExternSheetSubRecord rec) { field_2_REF_structures.add(rec); } /** returns the number of REF Records, which is in model * @return number of REF records */ public int getNumOfREFRecords() { return field_2_REF_structures.size(); } /** returns the REF record (ExternSheetSubRecord) * @param elem index to place * @return REF record */ public ExternSheetSubRecord getREFRecordAt(int elem) { ExternSheetSubRecord result = ( ExternSheetSubRecord ) field_2_REF_structures.get(elem); return result; } public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("[EXTERNSHEET]\n"); buffer.append(" numOfRefs = ").append(getNumOfREFStructures()).append("\n"); for (int k=0; k < this.getNumOfREFRecords(); k++) { buffer.append("refrec #").append(k).append('\n'); buffer.append(getREFRecordAt(k).toString()); buffer.append("----refrec #").append(k).append('\n'); } buffer.append("[/EXTERNSHEET]\n"); return buffer.toString(); } /** * called by the class that is responsible for writing this sucker. * Subclasses should implement this so that their data is passed back in a * byte array. * * @param offset to begin writing at * @param data byte array containing instance data * @return number of bytes written */ public int serialize(int offset, byte [] data) { LittleEndian.putShort(data, 0 + offset, sid); LittleEndian.putShort(data, 2 + offset,(short)(2 + (getNumOfREFRecords() *6))); LittleEndian.putShort(data, 4 + offset, getNumOfREFStructures()); int pos = 6 ; for (int k = 0; k < getNumOfREFRecords(); k++) { ExternSheetSubRecord record = getREFRecordAt(k); System.arraycopy(record.serialize(), 0, data, pos + offset, 6); pos +=6; } return getRecordSize(); } public int getRecordSize() { return 4 + 2 + getNumOfREFRecords() * 6; } /** * return the non static version of the id for this record. */ public short getSid() { return this.sid; }} \ No newline at end of file +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.poi.hssf.record; + +import org.apache.poi.util.LittleEndian; + +import java.util.ArrayList; + +/** + * Title: Extern Sheet

    + * Description: A List of Inndexes to SupBook

    + * REFERENCE:

    + * @author Libin Roman (Vista Portal LDT. Developer) + * @version 1.0-pre + */ + +public class ExternSheetRecord extends Record { + public final static short sid = 0x17; + private short field_1_number_of_REF_sturcutres; + private ArrayList field_2_REF_structures; + + public ExternSheetRecord() { + field_2_REF_structures = new ArrayList(); + } + + /** + * Constructs a Extern Sheet record and sets its fields appropriately. + * + * @param id id must be 0x16 or an exception will be throw upon validation + * @param size the size of the data area of the record + * @param data data of the record (should not contain sid/len) + */ + + public ExternSheetRecord(short id, short size, byte[] data) { + super(id, size, data); + } + + /** + * Constructs a Extern Sheet record and sets its fields appropriately. + * + * @param id id must be 0x16 or an exception will be throw upon validation + * @param size the size of the data area of the record + * @param data data of the record (should not contain sid/len) + * @param offset of the record's data + */ + public ExternSheetRecord(short id, short size, byte[] data, int offset) { + super(id, size, data, offset); + } + + /** + * called by constructor, should throw runtime exception in the event of a + * record passed with a differing ID. + * + * @param id alleged id for this record + */ + protected void validateSid(short id) { + if (id != sid) { + throw new RecordFormatException("NOT An ExternSheet RECORD"); + } + } + + /** + * called by the constructor, should set class level fields. Should throw + * runtime exception for bad/icomplete data. + * + * @param data raw data + * @param size size of data + * @param offset of the record's data (provided a big array of the file) + */ + protected void fillFields(byte [] data, short size, int offset) { + field_2_REF_structures = new ArrayList(); + + field_1_number_of_REF_sturcutres = LittleEndian.getShort(data, 0 + offset); + + int pos = 2 + offset; + for (int i = 0 ; i < field_1_number_of_REF_sturcutres ; ++i) { + ExternSheetSubRecord rec = new ExternSheetSubRecord((short)0, (short)6 , data , pos); + + pos += 6; + + field_2_REF_structures.add( rec); + } + } + + /** + * sets the number of the REF structors , that is in Excel file + * @param numStruct number of REF structs + */ + public void setNumOfREFStructures(short numStruct) { + field_1_number_of_REF_sturcutres = numStruct; + } + + /** + * return the number of the REF structors , that is in Excel file + * @return number of REF structs + */ + public short getNumOfREFStructures() { + return field_1_number_of_REF_sturcutres; + } + + /** + * adds REF struct (ExternSheetSubRecord) + * @param rec REF struct + */ + public void addREFRecord(ExternSheetSubRecord rec) { + field_2_REF_structures.add(rec); + } + + /** returns the number of REF Records, which is in model + * @return number of REF records + */ + public int getNumOfREFRecords() { + return field_2_REF_structures.size(); + } + + /** returns the REF record (ExternSheetSubRecord) + * @param elem index to place + * @return REF record + */ + public ExternSheetSubRecord getREFRecordAt(int elem) { + ExternSheetSubRecord result = ( ExternSheetSubRecord ) field_2_REF_structures.get(elem); + + return result; + } + + public String toString() { + StringBuffer buffer = new StringBuffer(); + + buffer.append("[EXTERNSHEET]\n"); + buffer.append(" numOfRefs = ").append(getNumOfREFStructures()).append("\n"); + for (int k=0; k < this.getNumOfREFRecords(); k++) { + buffer.append("refrec #").append(k).append('\n'); + buffer.append(getREFRecordAt(k).toString()); + buffer.append("----refrec #").append(k).append('\n'); + } + buffer.append("[/EXTERNSHEET]\n"); + + + return buffer.toString(); + } + + /** + * called by the class that is responsible for writing this sucker. + * Subclasses should implement this so that their data is passed back in a + * byte array. + * + * @param offset to begin writing at + * @param data byte array containing instance data + * @return number of bytes written + */ + public int serialize(int offset, byte [] data) { + LittleEndian.putShort(data, 0 + offset, sid); + LittleEndian.putShort(data, 2 + offset,(short)(2 + (getNumOfREFRecords() *6))); + + LittleEndian.putShort(data, 4 + offset, getNumOfREFStructures()); + + int pos = 6 ; + + for (int k = 0; k < getNumOfREFRecords(); k++) { + ExternSheetSubRecord record = getREFRecordAt(k); + System.arraycopy(record.serialize(), 0, data, pos + offset, 6); + + pos +=6; + } + return getRecordSize(); + } + + public int getRecordSize() { + return 4 + 2 + getNumOfREFRecords() * 6; + } + + /** + * return the non static version of the id for this record. + */ + public short getSid() { + return this.sid; + } +} diff --git a/src/java/org/apache/poi/hssf/record/FormulaRecord.java b/src/java/org/apache/poi/hssf/record/FormulaRecord.java index ad926be474..050558739b 100644 --- a/src/java/org/apache/poi/hssf/record/FormulaRecord.java +++ b/src/java/org/apache/poi/hssf/record/FormulaRecord.java @@ -557,8 +557,13 @@ public class FormulaRecord .append("\n"); buffer.append(" .xf = ") .append(Integer.toHexString(getXFIndex())).append("\n"); - buffer.append(" .value = ").append(getValue()) - .append("\n"); + if (Double.isNaN(this.getValue()) && value_data != null) + buffer.append(" .value (NaN) = ") + .append(org.apache.poi.util.HexDump.dump(value_data,0,0)) + .append("\n"); + else + buffer.append(" .value = ").append(getValue()) + .append("\n"); buffer.append(" .options = ").append(getOptions()) .append("\n"); buffer.append(" .zero = ").append(field_6_zero) @@ -607,9 +612,10 @@ public class FormulaRecord if (field_8_parsed_expr != null) size = field_8_parsed_expr.size(); for (int i=0; i< size; i++) { - Ptg ptg = (Ptg)((Ptg)field_8_parsed_expr.get(i)).clone(); - rec.field_8_parsed_expr.set(i, ptg); + Ptg ptg = (Ptg)((Ptg)field_8_parsed_expr.get(i)).clone(); + rec.field_8_parsed_expr.add(i, ptg); } + rec.value_data = value_data; rec.all_data = all_data; return rec; } diff --git a/src/java/org/apache/poi/hssf/record/LabelRecord.java b/src/java/org/apache/poi/hssf/record/LabelRecord.java index 558584ba95..8755a062ab 100644 --- a/src/java/org/apache/poi/hssf/record/LabelRecord.java +++ b/src/java/org/apache/poi/hssf/record/LabelRecord.java @@ -150,15 +150,16 @@ public class LabelRecord field_3_xf_index = LittleEndian.getShort(data, 4 + offset); field_4_string_len = LittleEndian.getShort(data, 6 + offset); field_5_unicode_flag = data[ 8 + offset ]; - if (isUnCompressedUnicode()) - { - field_6_value = StringUtil.getFromUnicode(data, 8 + offset, + if (field_4_string_len > 0) { + if (isUnCompressedUnicode()) { + field_6_value = StringUtil.getFromUnicode(data, 9 + offset, field_4_string_len); } - else - { - field_6_value = StringUtil.getFromCompressedUnicode(data, 9 + offset, getStringLength()); + else { + field_6_value = StringUtil.getFromCompressedUnicode(data, 9 + offset, + getStringLength()); } + } else field_6_value = null; } /* READ ONLY ACCESS... THIS IS FOR COMPATIBILITY ONLY...USE LABELSST! @@ -237,6 +238,27 @@ public class LabelRecord return this.sid; } + public String toString() + { + StringBuffer buffer = new StringBuffer(); + buffer.append("[LABEL]\n"); + buffer.append(" .row = ") + .append(Integer.toHexString(getRow())).append("\n"); + buffer.append(" .column = ") + .append(Integer.toHexString(getColumn())).append("\n"); + buffer.append(" .xfindex = ") + .append(Integer.toHexString(getXFIndex())).append("\n"); + buffer.append(" .string_len = ") + .append(Integer.toHexString(field_4_string_len)).append("\n"); + buffer.append(" .unicode_flag = ") + .append(Integer.toHexString(field_5_unicode_flag)).append("\n"); + buffer.append(" .value = ") + .append(getValue()).append("\n"); + buffer.append("[/LABEL]\n"); + return buffer.toString(); + } + + public boolean isBefore(CellValueRecordInterface i) { if (this.getRow() > i.getRow()) diff --git a/src/java/org/apache/poi/hssf/record/NameRecord.java b/src/java/org/apache/poi/hssf/record/NameRecord.java index 09bf2a416d..b91c829b87 100644 --- a/src/java/org/apache/poi/hssf/record/NameRecord.java +++ b/src/java/org/apache/poi/hssf/record/NameRecord.java @@ -58,11 +58,11 @@ package org.apache.poi.hssf.record; import java.util.List; import java.util.Stack; +import org.apache.poi.hssf.model.Workbook; import org.apache.poi.hssf.record.formula.Area3DPtg; import org.apache.poi.hssf.record.formula.Ptg; import org.apache.poi.hssf.record.formula.Ref3DPtg; import org.apache.poi.hssf.util.RangeAddress; -import org.apache.poi.hssf.util.SheetReferences; import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.StringUtil; @@ -127,6 +127,14 @@ public class NameRecord extends Record { */ public final static byte BUILTIN_SHEET_TITLE = (byte)12; + public static final short OPT_HIDDEN_NAME = (short) 0x0001; + public static final short OPT_FUNCTION_NAME = (short) 0x0002; + public static final short OPT_COMMAND_NAME = (short) 0x0004; + public static final short OPT_MACRO = (short) 0x0008; + public static final short OPT_COMPLEX = (short) 0x0010; + public static final short OPT_BUILTIN = (short) 0x0020; + public static final short OPT_BINDATA = (short) 0x1000; + private short field_1_option_flag; private byte field_2_keyboard_shortcut; @@ -192,7 +200,7 @@ public class NameRecord extends Record { { this(); this.field_12_builtIn_name = builtin; - this.setOptionFlag((short)(this.getOptionFlag() | (short)0x20)); + this.setOptionFlag((short)(this.getOptionFlag() | OPT_BUILTIN)); this.setNameTextLength((byte)1); this.setEqualsToIndexToSheet(index); //the extern sheets are set through references @@ -252,13 +260,22 @@ public class NameRecord extends Record { /** * Convenience method to retrieve the index the name refers to. - * @see getEqualsToIndexToSheet() + * @see #getEqualsToIndexToSheet() * @return short */ public short getIndexToSheet() { return getEqualsToIndexToSheet(); } + /** + * @return function group + * @see FnGroupCountRecord + */ + public byte getFnGroup() { + int masked = field_1_option_flag & 0x0fc0; + return (byte) (masked >> 4); + } + public void setEqualsToIndexToSheet(short value) { field_6_equals_to_index_to_sheet = value; @@ -409,11 +426,47 @@ public class NameRecord extends Record { return field_11_compressed_unicode_flag; } + /** + * @return true if name is hidden + */ + public boolean isHiddenName() { + return (field_1_option_flag & OPT_HIDDEN_NAME) != 0; + } + + /** + * @return true if name is a function + */ + public boolean isFunctionName() { + return (field_1_option_flag & OPT_FUNCTION_NAME) != 0; + } + + /** + * @return true if name is a command + */ + public boolean isCommandName() { + return (field_1_option_flag & OPT_COMMAND_NAME) != 0; + } + + /** + * @return true if function macro or command macro + */ + public boolean isMacro() { + return (field_1_option_flag & OPT_MACRO) != 0; + } + + /** + * @return true if array formula or user defined + */ + public boolean isComplexFunction() { + return (field_1_option_flag & OPT_COMPLEX) != 0; + } + + /**Convenience Function to determine if the name is a built-in name */ public boolean isBuiltInName() { - return ((this.getOptionFlag() & (short)0x20) != 0); + return ((this.getOptionFlag() & OPT_BUILTIN) != 0); } @@ -511,7 +564,7 @@ public class NameRecord extends Record { data[18 + offset] = getCompressedUnicodeFlag(); /* temp: gjs - if ( ( field_1_option_flag & (short) 0x20 ) != 0 ) + if (isBuiltInName()) { LittleEndian.putShort( data, 2 + offset, (short) ( 16 + field_13_raw_name_definition.length ) ); @@ -647,16 +700,16 @@ public class NameRecord extends Record { /** gets the reference , the area only (range) * @return area reference */ - public String getAreaReference(SheetReferences refs){ + public String getAreaReference(Workbook book){ if (field_13_name_definition == null) return "#REF!"; Ptg ptg = (Ptg) field_13_name_definition.peek(); String result = ""; if (ptg.getClass() == Area3DPtg.class){ - result = ptg.toFormulaString(refs); + result = ptg.toFormulaString(book); } else if (ptg.getClass() == Ref3DPtg.class){ - result = ptg.toFormulaString(refs); + result = ptg.toFormulaString(book); } return result; @@ -727,7 +780,7 @@ public class NameRecord extends Record { /* temp: gjs - if ( ( field_1_option_flag & (short)0x20 ) != 0 ) { + if (isBuiltInName()) { // DEBUG // System.out.println( "Built-in name" ); @@ -794,6 +847,8 @@ public class NameRecord extends Record { pos += ptg.getSize(); sizeCounter += ptg.getSize(); stack.push(ptg); + field_13_raw_name_definition=new byte[size]; + System.arraycopy(data,offset,field_13_raw_name_definition,0,size); } } catch (java.lang.UnsupportedOperationException uoe) { System.err.println("[WARNING] Unknown Ptg " @@ -880,7 +935,7 @@ public class NameRecord extends Record { .append("\n"); buffer.append(" .unused = ").append( field_5_index_to_sheet ) .append("\n"); - buffer.append(" .( 0 = Global name, otherwise index to sheet (one-based) ) = ").append( field_6_equals_to_index_to_sheet ) + buffer.append(" .index to sheet (1-based, 0=Global) = ").append( field_6_equals_to_index_to_sheet ) .append("\n"); buffer.append(" .Length of menu text (character count) = ").append( field_7_length_custom_menu ) .append("\n"); @@ -906,6 +961,7 @@ public class NameRecord extends Record { .append("\n"); buffer.append(" .Status bar text (Unicode string without length field) = ").append( field_17_status_bar_text ) .append("\n"); + buffer.append(org.apache.poi.util.HexDump.dump(this.field_13_raw_name_definition,0,0)); buffer.append("[/NAME]\n"); return buffer.toString(); diff --git a/src/java/org/apache/poi/hssf/record/PasswordRecord.java b/src/java/org/apache/poi/hssf/record/PasswordRecord.java index 9feb6a2cbd..ba9cbfc5f0 100644 --- a/src/java/org/apache/poi/hssf/record/PasswordRecord.java +++ b/src/java/org/apache/poi/hssf/record/PasswordRecord.java @@ -166,4 +166,14 @@ public class PasswordRecord { return this.sid; } + + /** + * Clone this record. + */ + public Object clone() { + PasswordRecord clone = new PasswordRecord(); + clone.setPassword(field_1_password); + return clone; + } + } diff --git a/src/java/org/apache/poi/hssf/record/ProtectRecord.java b/src/java/org/apache/poi/hssf/record/ProtectRecord.java index 66978f9bf4..a633756d51 100644 --- a/src/java/org/apache/poi/hssf/record/ProtectRecord.java +++ b/src/java/org/apache/poi/hssf/record/ProtectRecord.java @@ -139,9 +139,9 @@ public class ProtectRecord * @return whether to protect the sheet or not */ - public short getProtect() + public boolean getProtect() { - return field_1_protect; + return (field_1_protect == 1); } public String toString() @@ -149,8 +149,8 @@ public class ProtectRecord StringBuffer buffer = new StringBuffer(); buffer.append("[PROTECT]\n"); - buffer.append(" .protected = ") - .append(Integer.toHexString(getProtect())).append("\n"); + buffer.append(" .protect = ").append(getProtect()) + .append("\n"); buffer.append("[/PROTECT]\n"); return buffer.toString(); } @@ -160,7 +160,7 @@ public class ProtectRecord LittleEndian.putShort(data, 0 + offset, sid); LittleEndian.putShort(data, 2 + offset, (( short ) 0x02)); // 2 bytes (6 total) - LittleEndian.putShort(data, 4 + offset, getProtect()); + LittleEndian.putShort(data, 4 + offset, field_1_protect); return getRecordSize(); } diff --git a/src/java/org/apache/poi/hssf/record/ProtectionRev4Record.java b/src/java/org/apache/poi/hssf/record/ProtectionRev4Record.java index e385a4adfc..be64938126 100644 --- a/src/java/org/apache/poi/hssf/record/ProtectionRev4Record.java +++ b/src/java/org/apache/poi/hssf/record/ProtectionRev4Record.java @@ -139,18 +139,18 @@ public class ProtectionRev4Record * @return whether to protect the workbook or not */ - public short getProtect() - { - return field_1_protect; - } + public boolean getProtect() + { + return (field_1_protect == 1); + } public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("[PROT4REV]\n"); - buffer.append(" .rowheight = ") - .append(Integer.toHexString(getProtect())).append("\n"); + buffer.append(" .protect = ").append(getProtect()) + .append("\n"); buffer.append("[/PROT4REV]\n"); return buffer.toString(); } @@ -160,7 +160,7 @@ public class ProtectionRev4Record LittleEndian.putShort(data, 0 + offset, sid); LittleEndian.putShort(data, 2 + offset, (( short ) 0x02)); // 2 bytes (6 total) - LittleEndian.putShort(data, 4 + offset, getProtect()); + LittleEndian.putShort(data, 4 + offset, field_1_protect); return getRecordSize(); } diff --git a/src/java/org/apache/poi/hssf/record/Record.java b/src/java/org/apache/poi/hssf/record/Record.java index 7783026054..bd4e73789f 100644 --- a/src/java/org/apache/poi/hssf/record/Record.java +++ b/src/java/org/apache/poi/hssf/record/Record.java @@ -70,16 +70,6 @@ package org.apache.poi.hssf.record; public abstract class Record { - /** - * The static ID, subclasses should override this value with the id for the - * record type they handle. - */ - - public short sid = 0; - private short id = 0; - private short size = 0; - private byte[] data = null; - /** * instantiates a blank record strictly for ID matching */ @@ -98,9 +88,6 @@ public abstract class Record public Record(short id, short size, byte [] data) { - this.id = id; - this.size = size; - this.data = data; validateSid(id); fillFields(data, size); } @@ -115,9 +102,6 @@ public abstract class Record public Record(short id, short size, byte [] data, int offset) { - this.id = id; - this.size = size; - this.data = data; validateSid(id); fillFields(data, size, offset); } diff --git a/src/java/org/apache/poi/hssf/record/RecordProcessor.java b/src/java/org/apache/poi/hssf/record/RecordProcessor.java index c8d659c259..ba86f678f8 100644 --- a/src/java/org/apache/poi/hssf/record/RecordProcessor.java +++ b/src/java/org/apache/poi/hssf/record/RecordProcessor.java @@ -156,5 +156,10 @@ class RecordProcessor recordOffset += amount; available -= amount; } + + public int getRecordOffset() + { + return recordOffset; + } } diff --git a/src/java/org/apache/poi/hssf/record/SSTDeserializer.java b/src/java/org/apache/poi/hssf/record/SSTDeserializer.java index dcf4e50b93..40fd4b02e2 100644 --- a/src/java/org/apache/poi/hssf/record/SSTDeserializer.java +++ b/src/java/org/apache/poi/hssf/record/SSTDeserializer.java @@ -62,13 +62,14 @@ import org.apache.poi.util.LittleEndianConsts; * Handles the task of deserializing a SST string. The two main entry points are * * @author Glen Stampoultzis (glens at apache.org) + * @author Jason Height (jheight at apache.org) */ class SSTDeserializer { private BinaryTree strings; - /** this is the number of characters we expect in the first sub-record in a subsequent continuation record */ - private int continuationExpectedChars; + /** this is the number of characters that have been read prior to the continuation */ + private int continuationReadChars; /** this is the string we were working on before hitting the end of the current record. This string is NOT finished. */ private String unfinishedString; /** this is true if the string uses wide characters */ @@ -82,6 +83,7 @@ class SSTDeserializer /** Number of characters in current string */ private int charCount; private int extensionLength; + private int continueSkipBytes = 0; public SSTDeserializer( BinaryTree strings ) @@ -93,13 +95,14 @@ class SSTDeserializer private void initVars() { runCount = 0; - continuationExpectedChars = 0; + continuationReadChars = 0; unfinishedString = ""; // bytesInCurrentSegment = 0; // stringDataOffset = 0; wideChar = false; richText = false; extendedText = false; + continueSkipBytes = 0; } /** @@ -107,14 +110,15 @@ class SSTDeserializer * strings may span across multiple continuations. Read the SST record * carefully before beginning to hack. */ - public void manufactureStrings( final byte[] data, final int initialOffset, short dataSize ) + public void manufactureStrings( final byte[] data, final int initialOffset) { initVars(); int offset = initialOffset; - while ( ( offset - initialOffset ) < dataSize ) + final int dataSize = data.length; + while ( offset < dataSize ) { - int remaining = dataSize - offset + initialOffset; + int remaining = dataSize - offset; if ( ( remaining > 0 ) && ( remaining < LittleEndianConsts.SHORT_SIZE ) ) { @@ -122,26 +126,31 @@ class SSTDeserializer } if ( remaining == LittleEndianConsts.SHORT_SIZE ) { - setContinuationExpectedChars( LittleEndian.getUShort( data, offset ) ); + //JMH Dont know about this + setContinuationCharsRead( 0 );//LittleEndian.getUShort( data, offset ) ); unfinishedString = ""; break; } charCount = LittleEndian.getUShort( data, offset ); + int charsRead = charCount; readStringHeader( data, offset ); boolean stringContinuesOverContinuation = remaining < totalStringSize(); if ( stringContinuesOverContinuation ) { - int remainingBytes = ( initialOffset + dataSize ) - offset - stringHeaderOverhead(); - setContinuationExpectedChars( charCount - calculateCharCount( remainingBytes ) ); - charCount -= getContinuationExpectedChars(); + int remainingBytes = dataSize - offset - stringHeaderOverhead(); + //Only read the size of the string or whatever is left before the + //continuation + charsRead = Math.min(charsRead, calculateCharCount( remainingBytes )); + setContinuationCharsRead( charsRead ); + if (charsRead == charCount) { + //Since all of the characters will have been read, but the entire string (including formatting runs etc) + //hasnt, Compute the number of bytes to skip when the continue record starts + continueSkipBytes = offsetForContinuedRecord(0) - (remainingBytes - calculateByteCount(charsRead)); + } } - else - { - setContinuationExpectedChars( 0 ); - } - processString( data, offset, charCount ); + processString( data, offset, charsRead ); offset += totalStringSize(); - if ( getContinuationExpectedChars() != 0 ) + if ( stringContinuesOverContinuation ) { break; } @@ -222,6 +231,7 @@ class SSTDeserializer UnicodeString string = new UnicodeString( UnicodeString.sid, (short) unicodeStringBuffer.length, unicodeStringBuffer ); + setContinuationCharsRead( calculateCharCount(bytesRead)); if ( isStringFinished() ) { @@ -238,7 +248,7 @@ class SSTDeserializer private boolean isStringFinished() { - return getContinuationExpectedChars() == 0; + return getContinuationCharsRead() == charCount; } /** @@ -301,8 +311,9 @@ class SSTDeserializer { if ( isStringFinished() ) { + final int offset = continueSkipBytes; initVars(); - manufactureStrings( record, 0, (short) record.length ); + manufactureStrings( record, offset); } else { @@ -330,13 +341,12 @@ class SSTDeserializer */ private void readStringRemainder( final byte[] record ) { - int stringRemainderSizeInBytes = calculateByteCount( getContinuationExpectedChars() ); -// stringDataOffset = LittleEndianConsts.BYTE_SIZE; + int stringRemainderSizeInBytes = calculateByteCount( charCount-getContinuationCharsRead() ); byte[] unicodeStringData = new byte[SSTRecord.STRING_MINIMAL_OVERHEAD - + calculateByteCount( getContinuationExpectedChars() )]; + + stringRemainderSizeInBytes]; // write the string length - LittleEndian.putShort( unicodeStringData, 0, (short) getContinuationExpectedChars() ); + LittleEndian.putShort( unicodeStringData, 0, (short) (charCount-getContinuationCharsRead()) ); // write the options flag unicodeStringData[LittleEndianConsts.SHORT_SIZE] = createOptionByte( wideChar, richText, extendedText ); @@ -345,7 +355,7 @@ class SSTDeserializer // past all the overhead of the str_data array arraycopy( record, LittleEndianConsts.BYTE_SIZE, unicodeStringData, SSTRecord.STRING_MINIMAL_OVERHEAD, - unicodeStringData.length - SSTRecord.STRING_MINIMAL_OVERHEAD ); + stringRemainderSizeInBytes ); // use special constructor to create the final string UnicodeString string = new UnicodeString( UnicodeString.sid, @@ -356,7 +366,7 @@ class SSTDeserializer addToStringTable( strings, integer, string ); int newOffset = offsetForContinuedRecord( stringRemainderSizeInBytes ); - manufactureStrings( record, newOffset, (short) ( record.length - newOffset ) ); + manufactureStrings( record, newOffset); } /** @@ -388,8 +398,12 @@ class SSTDeserializer private int offsetForContinuedRecord( int stringRemainderSizeInBytes ) { - return stringRemainderSizeInBytes + LittleEndianConsts.BYTE_SIZE - + runCount * LittleEndianConsts.INT_SIZE + extensionLength; + int offset = stringRemainderSizeInBytes + runCount * LittleEndianConsts.INT_SIZE + extensionLength; + if (stringRemainderSizeInBytes != 0) + //If a portion of the string remains then the wideChar options byte is repeated, + //so need to skip this. + offset += + LittleEndianConsts.BYTE_SIZE; + return offset; } private byte createOptionByte( boolean wideChar, boolean richText, boolean farEast ) @@ -409,17 +423,22 @@ class SSTDeserializer int dataLengthInBytes = record.length - LittleEndianConsts.BYTE_SIZE; byte[] unicodeStringData = new byte[record.length + LittleEndianConsts.SHORT_SIZE]; - LittleEndian.putShort( unicodeStringData, (byte) 0, (short) calculateCharCount( dataLengthInBytes ) ); + int charsRead = calculateCharCount( dataLengthInBytes ); + LittleEndian.putShort( unicodeStringData, (byte) 0, (short) charsRead ); arraycopy( record, 0, unicodeStringData, LittleEndianConsts.SHORT_SIZE, record.length ); - UnicodeString ucs = new UnicodeString( UnicodeString.sid, (short) unicodeStringData.length, unicodeStringData ); + UnicodeString ucs = new UnicodeString( UnicodeString.sid, (short) unicodeStringData.length, unicodeStringData, unfinishedString); - unfinishedString = unfinishedString + ucs.getString(); - setContinuationExpectedChars( getContinuationExpectedChars() - calculateCharCount( dataLengthInBytes ) ); + unfinishedString = ucs.getString(); + setContinuationCharsRead( getContinuationCharsRead() + charsRead ); + if (getContinuationCharsRead() == charCount) { + Integer integer = new Integer( strings.size() ); + addToStringTable( strings, integer, ucs ); + } } private boolean stringSpansContinuation( int continuationSizeInBytes ) { - return calculateByteCount( getContinuationExpectedChars() ) > continuationSizeInBytes; + return calculateByteCount( charCount - getContinuationCharsRead() ) > continuationSizeInBytes; } /** @@ -427,14 +446,14 @@ class SSTDeserializer * sub-record in a subsequent continuation record */ - int getContinuationExpectedChars() + int getContinuationCharsRead() { - return continuationExpectedChars; + return continuationReadChars; } - private void setContinuationExpectedChars( final int count ) + private void setContinuationCharsRead( final int count ) { - continuationExpectedChars = count; + continuationReadChars = count; } private int calculateByteCount( final int character_count ) diff --git a/src/java/org/apache/poi/hssf/record/SSTRecord.java b/src/java/org/apache/poi/hssf/record/SSTRecord.java index a3f0807021..7f703e7cd2 100644 --- a/src/java/org/apache/poi/hssf/record/SSTRecord.java +++ b/src/java/org/apache/poi/hssf/record/SSTRecord.java @@ -60,7 +60,6 @@ import org.apache.poi.util.LittleEndianConsts; import java.util.Iterator; import java.util.List; -import java.util.ArrayList; /** * Title: Static String Table Record @@ -73,7 +72,7 @@ import java.util.ArrayList; * @author Andrew C. Oliver (acoliver at apache dot org) * @author Marc Johnson (mjohnson at apache dot org) * @author Glen Stampoultzis (glens at apache.org) - * @version 2.0-pre + * * @see org.apache.poi.hssf.record.LabelSSTRecord * @see org.apache.poi.hssf.record.ContinueRecord */ @@ -112,10 +111,14 @@ public class SSTRecord private List _record_lengths = null; private SSTDeserializer deserializer; + /** Offsets from the beginning of the SST record (even across continuations) */ + int[] bucketAbsoluteOffsets; + /** Offsets relative the start of the current SST or continue record */ + int[] bucketRelativeOffsets; + /** * default constructor */ - public SSTRecord() { field_1_num_strings = 0; @@ -220,7 +223,7 @@ public class SSTRecord field_1_num_strings++; String str = ( string == null ) ? "" : string; - int rval = -1; + int rval; UnicodeString ucs = new UnicodeString(); ucs.setString( str ); @@ -334,7 +337,7 @@ public class SSTRecord for ( int k = 0; k < field_3_strings.size(); k++ ) { buffer.append( " .string_" + k + " = " ) - .append( ( (UnicodeString) field_3_strings + .append( ( field_3_strings .get( new Integer( k ) ) ).toString() ).append( "\n" ); } buffer.append( "[/SST]\n" ); @@ -394,7 +397,7 @@ public class SSTRecord * The data consists of sets of string data. This string data is * arranged as follows: *

    - * + *

          * short  string_length;   // length of string data
          * byte   string_flag;     // flag specifying special string
          *                         // handling
    @@ -407,7 +410,7 @@ public class SSTRecord
          *                         // array is run_count)
          * byte[] extension;       // optional extension (length of array
          *                         // is extend_length)
    -     * 
    +     * 
    *

    * The string_flag is bit mapped as follows: *

    @@ -479,7 +482,7 @@ public class SSTRecord field_2_num_unique_strings = LittleEndian.getInt( data, 4 + offset ); field_3_strings = new BinaryTree(); deserializer = new SSTDeserializer(field_3_strings); - deserializer.manufactureStrings( data, 8 + offset, (short)(size - 8) ); + deserializer.manufactureStrings( data, 8 + offset); } @@ -507,14 +510,22 @@ public class SSTRecord * Subclasses should implement this so that their data is passed back in a * byte array. * - * @return byte array containing instance data + * @return size */ public int serialize( int offset, byte[] data ) { SSTSerializer serializer = new SSTSerializer( _record_lengths, field_3_strings, getNumStrings(), getNumUniqueStrings() ); - return serializer.serialize( getRecordSize(), offset, data ); + int bytes = serializer.serialize( getRecordSize(), offset, data ); + bucketAbsoluteOffsets = serializer.getBucketAbsoluteOffsets(); + bucketRelativeOffsets = serializer.getBucketRelativeOffsets(); +// for ( int i = 0; i < bucketAbsoluteOffsets.length; i++ ) +// { +// System.out.println( "bucketAbsoluteOffset = " + bucketAbsoluteOffsets[i] ); +// System.out.println( "bucketRelativeOffset = " + bucketRelativeOffsets[i] ); +// } + return bytes; } @@ -538,6 +549,45 @@ public class SSTRecord { deserializer.processContinueRecord( record ); } + + /** + * Creates an extended string record based on the current contents of + * the current SST record. The offset within the stream to the SST record + * is required because the extended string record points directly to the + * strings in the SST record. + *

    + * NOTE: THIS FUNCTION MUST ONLY BE CALLED AFTER THE SST RECORD HAS BEEN + * SERIALIZED. + * + * @param sstOffset The offset in the stream to the start of the + * SST record. + * @return The new SST record. + */ + public ExtSSTRecord createExtSSTRecord(int sstOffset) + { + if (bucketAbsoluteOffsets == null || bucketAbsoluteOffsets == null) + throw new IllegalStateException("SST record has not yet been serialized."); + + ExtSSTRecord extSST = new ExtSSTRecord(); + extSST.setNumStringsPerBucket((short)8); + int[] absoluteOffsets = (int[]) bucketAbsoluteOffsets.clone(); + int[] relativeOffsets = (int[]) bucketRelativeOffsets.clone(); + for ( int i = 0; i < absoluteOffsets.length; i++ ) + absoluteOffsets[i] += sstOffset; + extSST.setBucketOffsets(absoluteOffsets, relativeOffsets); + return extSST; + } + + /** + * Calculates the size in bytes of the EXTSST record as it would be if the + * record was serialized. + * + * @return The size of the ExtSST record in bytes. + */ + public int calcExtSSTRecordSize() + { + return ExtSSTRecord.getRecordSizeForStrings(field_3_strings.size()); + } } diff --git a/src/java/org/apache/poi/hssf/record/SSTRecordSizeCalculator.java b/src/java/org/apache/poi/hssf/record/SSTRecordSizeCalculator.java index fbdfba50f3..15a52f9807 100644 --- a/src/java/org/apache/poi/hssf/record/SSTRecordSizeCalculator.java +++ b/src/java/org/apache/poi/hssf/record/SSTRecordSizeCalculator.java @@ -61,7 +61,9 @@ import java.util.List; import java.util.Map; /** - * Used to calculate the record sizes for a particular record. + * Used to calculate the record sizes for a particular record. This kind of + * sucks because it's similar to the SST serialization code. In general + * the SST serialization code needs to be rewritten. * * @author Glen Stampoultzis (glens at apache.org) */ diff --git a/src/java/org/apache/poi/hssf/record/SSTSerializer.java b/src/java/org/apache/poi/hssf/record/SSTSerializer.java index 8239eeb8b4..f4538bb704 100644 --- a/src/java/org/apache/poi/hssf/record/SSTSerializer.java +++ b/src/java/org/apache/poi/hssf/record/SSTSerializer.java @@ -77,6 +77,12 @@ class SSTSerializer private int numUniqueStrings; private SSTRecordHeader sstRecordHeader; + /** Offsets from the beginning of the SST record (even across continuations) */ + int[] bucketAbsoluteOffsets; + /** Offsets relative the start of the current SST or continue record */ + int[] bucketRelativeOffsets; + int startOfSST, startOfRecord; + public SSTSerializer( List recordLengths, BinaryTree strings, int numStrings, int numUniqueStrings ) { this.recordLengths = recordLengths; @@ -84,6 +90,10 @@ class SSTSerializer this.numStrings = numStrings; this.numUniqueStrings = numUniqueStrings; this.sstRecordHeader = new SSTRecordHeader( numStrings, numUniqueStrings ); + + int infoRecs = ExtSSTRecord.getNumberOfInfoRecsForStrings(strings.size()); + this.bucketAbsoluteOffsets = new int[infoRecs]; + this.bucketRelativeOffsets = new int[infoRecs]; } /** @@ -133,7 +143,6 @@ class SSTSerializer /** * This case is chosen when an SST record does not span over to a continue record. - * */ private void serializeSingleSSTRecord( byte[] data, int offset, int record_length_index ) { @@ -144,6 +153,15 @@ class SSTSerializer for ( int k = 0; k < strings.size(); k++ ) { + if (k % ExtSSTRecord.DEFAULT_BUCKET_SIZE == 0) + { + int index = k/ExtSSTRecord.DEFAULT_BUCKET_SIZE; + if (index < ExtSSTRecord.MAX_BUCKETS) { + //Excel only indexes the first 128 buckets. + bucketAbsoluteOffsets[index] = pos; + bucketRelativeOffsets[index] = pos; + } + } System.arraycopy( getUnicodeString( k ).serialize(), 0, data, pos + offset, getUnicodeString( k ).getRecordSize() ); pos += getUnicodeString( k ).getRecordSize(); } @@ -157,6 +175,8 @@ class SSTSerializer private void serializeLargeRecord( int record_size, int record_length_index, byte[] buffer, int offset ) { + startOfSST = offset; + byte[] stringReminant = null; int stringIndex = 0; boolean lastneedcontinue = false; @@ -170,6 +190,7 @@ class SSTSerializer recordLength, numStrings, numUniqueStrings ); // write the appropriate header + startOfRecord = offset + totalWritten; recordProcessor.writeRecordHeader( offset, totalWritten, recordLength, first_record ); first_record = false; @@ -189,6 +210,17 @@ class SSTSerializer { UnicodeString unistr = getUnicodeString( stringIndex ); + if (stringIndex % ExtSSTRecord.DEFAULT_BUCKET_SIZE == 0) + { + int index = stringIndex / ExtSSTRecord.DEFAULT_BUCKET_SIZE; + if (index < ExtSSTRecord.MAX_BUCKETS) { + bucketAbsoluteOffsets[index] = offset + totalWritten + + recordProcessor.getRecordOffset() - startOfSST; + bucketRelativeOffsets[index] = offset + totalWritten + + recordProcessor.getRecordOffset() - startOfRecord; + } + } + if ( unistr.getRecordSize() <= recordProcessor.getAvailable() ) { recordProcessor.writeWholeString( unistr, offset, totalWritten ); @@ -235,4 +267,14 @@ class SSTSerializer { return recordLengths; } + + public int[] getBucketAbsoluteOffsets() + { + return bucketAbsoluteOffsets; + } + + public int[] getBucketRelativeOffsets() + { + return bucketRelativeOffsets; + } } diff --git a/src/java/org/apache/poi/hssf/record/StringRecord.java b/src/java/org/apache/poi/hssf/record/StringRecord.java index ed157bb52a..914a92d8e3 100644 --- a/src/java/org/apache/poi/hssf/record/StringRecord.java +++ b/src/java/org/apache/poi/hssf/record/StringRecord.java @@ -138,6 +138,11 @@ public class StringRecord } } + public boolean isInValueSection() + { + return true; + } + private int getStringLength() { return field_1_string_length; diff --git a/src/java/org/apache/poi/hssf/record/StyleRecord.java b/src/java/org/apache/poi/hssf/record/StyleRecord.java index c4f8ee35cc..d6bb482e5c 100644 --- a/src/java/org/apache/poi/hssf/record/StyleRecord.java +++ b/src/java/org/apache/poi/hssf/record/StyleRecord.java @@ -57,12 +57,14 @@ package org.apache.poi.hssf.record; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.StringUtil; +import org.apache.poi.util.BitField; /** * Title: Style Record

    * Description: Describes a builtin to the gui or user defined style

    * REFERENCE: PG 390 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)

    * @author Andrew C. Oliver (acoliver at apache dot org) + * @author aviks : string fixes for UserDefined Style * @version 2.0-pre */ @@ -81,8 +83,10 @@ public class StyleRecord private byte field_3_outline_style_level; // only for user defined styles - private byte field_2_name_length; - private String field_3_name; + private short field_2_name_length; //OO doc says 16 bit length, so we believe + private byte field_3_string_options; + private BitField fHighByte; + private String field_4_name; public StyleRecord() { @@ -125,17 +129,24 @@ public class StyleRecord protected void fillFields(byte [] data, short size, int offset) { + fHighByte = new BitField(0x01); //have to init here, since we are being called + //from super, and class level init hasnt been done. field_1_xf_index = LittleEndian.getShort(data, 0 + offset); - if (getType() == 1) + if (getType() == STYLE_BUILT_IN) { field_2_builtin_style = data[ 2 + offset ]; field_3_outline_style_level = data[ 3 + offset ]; } - else if (getType() == 0) + else if (getType() == STYLE_USER_DEFINED) { - field_2_name_length = data[ 2 + offset ]; - field_3_name = StringUtil.getFromCompressedUnicode(data, 3 + offset, - LittleEndian.ubyteToInt(field_2_name_length)); + field_2_name_length = LittleEndian.getShort(data, 2 + offset ); + field_3_string_options = data[4+offset]; + + if (fHighByte.isSet(field_3_string_options)) { + field_4_name= StringUtil.getFromUnicode(data,offset+5,field_2_name_length); + }else { + field_4_name=StringUtil.getFromCompressedUnicode(data,offset+5,field_2_name_length); + } } // todo sanity check exception to make sure we're one or the other @@ -199,7 +210,8 @@ public class StyleRecord public void setName(String name) { - field_3_name = name; + field_4_name = name; + //TODO set name length and string options } // end user defined @@ -273,7 +285,7 @@ public class StyleRecord * @see #getName() */ - public byte getNameLength() + public short getNameLength() { return field_2_name_length; } @@ -286,7 +298,7 @@ public class StyleRecord public String getName() { - return field_3_name; + return field_4_name; } // end user defined @@ -361,7 +373,7 @@ public class StyleRecord else { LittleEndian.putShort(data, 2 + offset, - (( short ) (0x03 + getNameLength()))); + (( short ) (getRecordSize()-4))); } LittleEndian.putShort(data, 4 + offset, getIndex()); if (getType() == STYLE_BUILT_IN) @@ -371,8 +383,9 @@ public class StyleRecord } else { - data[ 6 + offset ] = getNameLength(); - StringUtil.putCompressedUnicode(getName(), data, 7 + offset); + LittleEndian.putShort(data, 6 + offset , getNameLength()); + data[8+offset]=this.field_3_string_options; + StringUtil.putCompressedUnicode(getName(), data, 9 + offset); } return getRecordSize(); } @@ -387,7 +400,11 @@ public class StyleRecord } else { - retval = 7 + getNameLength(); + if (fHighByte.isSet(field_3_string_options)) { + retval= 9+2*getNameLength(); + }else { + retval = 9 + getNameLength(); + } } return retval; } diff --git a/src/java/org/apache/poi/hssf/record/UnknownRecord.java b/src/java/org/apache/poi/hssf/record/UnknownRecord.java index 36b0595498..b88d22f455 100644 --- a/src/java/org/apache/poi/hssf/record/UnknownRecord.java +++ b/src/java/org/apache/poi/hssf/record/UnknownRecord.java @@ -65,16 +65,14 @@ import org.apache.poi.util.LittleEndian; * Company: SuperLink Software, Inc.

    * @author Andrew C. Oliver (acoliver at apache dot org) * @author Jason Height (jheight at chariot dot net dot au) - * @version 2.0-pre + * @author Glen Stampoultzis (glens at apache.org) */ public class UnknownRecord extends Record { - private short sid = 0; - private short size = 0; - private byte[] thedata = null; - int offset = 0; + private short sid = 0; + private byte[] thedata = null; public UnknownRecord() { @@ -91,7 +89,6 @@ public class UnknownRecord public UnknownRecord(short id, short size, byte [] data) { sid = id; - size = size; thedata = data; } @@ -127,7 +124,7 @@ public class UnknownRecord protected void fillFields(byte [] data, short sid) { - sid = sid; + this.sid = sid; thedata = data; } @@ -179,9 +176,7 @@ public class UnknownRecord /** Unlike the other Record.clone methods this is a shallow clone*/ public Object clone() { UnknownRecord rec = new UnknownRecord(); - rec.offset = offset; rec.sid = sid; - rec.size = size; rec.thedata = thedata; return rec; } diff --git a/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java b/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java index 7d5b0b048d..761d821dcf 100644 --- a/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java +++ b/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java @@ -82,6 +82,19 @@ public class FormulaRecordAggregate this.stringRecord = stringRecord; } + /** + * Used only in the clone + * @param formulaRecord + * @param stringRecord + * @param sharedRecord + */ + public FormulaRecordAggregate( FormulaRecord formulaRecord, StringRecord stringRecord, SharedFormulaRecord sharedRecord) + { + this.formulaRecord = formulaRecord; + this.stringRecord = stringRecord; + this.sharedFormulaRecord = sharedRecord; + } + protected void validateSid( short id ) @@ -106,14 +119,14 @@ public class FormulaRecordAggregate { int pos = offset; pos += formulaRecord.serialize(pos, data); - if (stringRecord != null) - { - pos += stringRecord.serialize(pos, data); - } if (this.getSharedFormulaRecord() != null) { pos += getSharedFormulaRecord().serialize(pos, data); } + if (stringRecord != null) + { + pos += stringRecord.serialize(pos, data); + } return pos - offset; } @@ -221,7 +234,10 @@ public class FormulaRecordAggregate * @see java.lang.Object#clone() */ public Object clone() { - return new FormulaRecordAggregate((FormulaRecord) this.formulaRecord.clone(), (StringRecord) this.stringRecord.clone()); + StringRecord clonedString = (stringRecord == null) ? null : (StringRecord)stringRecord.clone(); + SharedFormulaRecord clonedShared = (sharedFormulaRecord == null) ? null : (SharedFormulaRecord)sharedFormulaRecord.clone(); + + return new FormulaRecordAggregate((FormulaRecord) this.formulaRecord.clone(), clonedString, clonedShared); } @@ -241,4 +257,19 @@ public class FormulaRecordAggregate this.sharedFormulaRecord = sharedFormulaRecord; } + /* + * Setting to true so that this value does not abort the whole ValueAggregation + * (non-Javadoc) + * @see org.apache.poi.hssf.record.Record#isInValueSection() + */ + public boolean isInValueSection() { + + return true; + } + + public String getStringValue() { + if(stringRecord==null) return null; + return stringRecord.getString(); + } + } diff --git a/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java b/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java index da08a6dc3d..cd2660219e 100644 --- a/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java @@ -54,9 +54,8 @@ package org.apache.poi.hssf.record.formula; import org.apache.poi.util.BinaryTree; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; -import java.util.Stack; /** * This class provides the base functionality for Excel sheet functions @@ -69,7 +68,7 @@ public abstract class AbstractFunctionPtg extends OperationPtg { //constant used allow a ptgAttr to be mapped properly for its functionPtg public static final String ATTR_NAME = "specialflag"; - + public static final short INDEX_EXTERNAL = 255; private static BinaryTree map = produceHash(); protected static Object[][] functionData = produceFunctionData(); @@ -104,7 +103,7 @@ public abstract class AbstractFunctionPtg extends OperationPtg { return lookupName(field_2_fnc_index); } - public String toFormulaString(SheetReferences refs) { + public String toFormulaString(Workbook book) { return getName(); } @@ -140,7 +139,9 @@ public abstract class AbstractFunctionPtg extends OperationPtg { } protected short lookupIndex(String name) { - return (short)((Integer)map.getKeyForValue(name)).intValue(); + Integer index = (Integer) map.getKeyForValue(name); + if (index != null) return index.shortValue(); + return INDEX_EXTERNAL; } /** @@ -389,6 +390,7 @@ public abstract class AbstractFunctionPtg extends OperationPtg { dmap.put(new Integer(252),"FREQUENCY"); dmap.put(new Integer(253),"ADDTOOLBAR"); dmap.put(new Integer(254),"DELETETOOLBAR"); + dmap.put(new Integer(255),"externalflag"); dmap.put(new Integer(256),"RESETTOOLBAR"); dmap.put(new Integer(257),"EVALUATE"); dmap.put(new Integer(258),"GETTOOLBAR"); diff --git a/src/java/org/apache/poi/hssf/record/formula/AddPtg.java b/src/java/org/apache/poi/hssf/record/formula/AddPtg.java index ead8840677..3a519dceb4 100644 --- a/src/java/org/apache/poi/hssf/record/formula/AddPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/AddPtg.java @@ -62,7 +62,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * Addition operator PTG the "+" binomial operator. If you need more @@ -113,7 +113,7 @@ public class AddPtg } /** Implementation of method from Ptg */ - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "+"; } diff --git a/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java b/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java index 1e425669db..59c405c1e6 100644 --- a/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java @@ -291,8 +291,9 @@ public class Area3DPtg extends Ptg } - public String toFormulaString( SheetReferences refs ) + public String toFormulaString(Workbook book) { + SheetReferences refs = book == null ? null : book.getSheetReferences(); StringBuffer retval = new StringBuffer(); if ( refs != null ) { @@ -318,6 +319,7 @@ public class Area3DPtg extends Ptg ptg.field_3_last_row = field_3_last_row; ptg.field_4_first_column = field_4_first_column; ptg.field_5_last_column = field_5_last_column; + ptg.setClass(ptgClass); return ptg; } @@ -351,4 +353,3 @@ public class Area3DPtg extends Ptg } - diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java b/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java index 87ebb2c769..3189a2c856 100644 --- a/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java @@ -65,7 +65,7 @@ import org.apache.poi.util.BitField; import org.apache.poi.hssf.util.AreaReference; import org.apache.poi.hssf.util.CellReference; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * Specifies a rectangular area of cells A1:A4 for instance. @@ -305,7 +305,7 @@ public class AreaPtg field_4_last_column = column; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return (new CellReference(getFirstRow(),getFirstColumn(),!isFirstRowRelative(),!isFirstColRelative())).toString() + ":" + (new CellReference(getLastRow(),getLastColumn(),!isLastRowRelative(),!isLastColRelative())).toString(); @@ -321,6 +321,7 @@ public class AreaPtg ptg.field_2_last_row = field_2_last_row; ptg.field_3_first_column = field_3_first_column; ptg.field_4_last_column = field_4_last_column; + ptg.setClass(ptgClass); return ptg; } diff --git a/src/java/org/apache/poi/hssf/record/formula/AttrPtg.java b/src/java/org/apache/poi/hssf/record/formula/AttrPtg.java index d389094d7e..ebbfcba877 100644 --- a/src/java/org/apache/poi/hssf/record/formula/AttrPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/AttrPtg.java @@ -60,7 +60,7 @@ */ package org.apache.poi.hssf.record.formula; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.BitField; @@ -207,11 +207,11 @@ public class AttrPtg if(space.isSet(field_1_options)) { return operands[ 0 ]; } else if (optiIf.isSet(field_1_options)) { - return toFormulaString((SheetReferences)null) + "(" + operands[ 0 ] +")"; + return toFormulaString((Workbook)null) + "(" + operands[ 0 ] +")"; } else if (optGoto.isSet(field_1_options)) { - return toFormulaString((SheetReferences)null) + operands[0]; //goto isn't a real formula element should not show up + return toFormulaString((Workbook)null) + operands[0]; //goto isn't a real formula element should not show up } else { - return toFormulaString((SheetReferences)null) + "(" + operands[ 0 ] + ")"; + return toFormulaString((Workbook)null) + "(" + operands[ 0 ] + ")"; } } @@ -226,7 +226,7 @@ public class AttrPtg return -1; } - public String toFormulaString(SheetReferences refs) { + public String toFormulaString(Workbook book) { if(semiVolatile.isSet(field_1_options)) { return "ATTR(semiVolatile)"; } diff --git a/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java b/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java index 954eb0f80c..84ad7cfca5 100644 --- a/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java @@ -60,7 +60,7 @@ package org.apache.poi.hssf.record.formula; import org.apache.poi.util.LittleEndian; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * Boolean (boolean) @@ -114,7 +114,7 @@ public class BoolPtg return SIZE; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return field_1_value ? "TRUE" : "FALSE"; } diff --git a/src/java/org/apache/poi/hssf/record/formula/ConcatPtg.java b/src/java/org/apache/poi/hssf/record/formula/ConcatPtg.java index bed92e461a..e7249bfbc1 100644 --- a/src/java/org/apache/poi/hssf/record/formula/ConcatPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/ConcatPtg.java @@ -62,7 +62,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * @@ -108,7 +108,7 @@ public class ConcatPtg return 2; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return CONCAT; } diff --git a/src/java/org/apache/poi/hssf/record/formula/DividePtg.java b/src/java/org/apache/poi/hssf/record/formula/DividePtg.java index 124f25edef..6bb0d9420a 100644 --- a/src/java/org/apache/poi/hssf/record/formula/DividePtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/DividePtg.java @@ -62,7 +62,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * This PTG implements the standard binomial divide "/" @@ -108,7 +108,7 @@ public class DividePtg return 2; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "/"; } @@ -117,7 +117,7 @@ public class DividePtg StringBuffer buffer = new StringBuffer(); buffer.append(operands[ 0 ]); - buffer.append(toFormulaString((SheetReferences)null)); + buffer.append(toFormulaString((Workbook)null)); buffer.append(operands[ 1 ]); return buffer.toString(); } diff --git a/src/java/org/apache/poi/hssf/record/formula/EqualPtg.java b/src/java/org/apache/poi/hssf/record/formula/EqualPtg.java index 1ddff9ac64..12438a3397 100644 --- a/src/java/org/apache/poi/hssf/record/formula/EqualPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/EqualPtg.java @@ -62,7 +62,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * @@ -107,7 +107,7 @@ public class EqualPtg return 2; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "="; } @@ -117,7 +117,7 @@ public class EqualPtg buffer.append(operands[ 0 ]); - buffer.append(toFormulaString((SheetReferences)null)); + buffer.append(toFormulaString((Workbook)null)); buffer.append(operands[ 1 ]); return buffer.toString(); } diff --git a/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java b/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java index 576bce3316..d70e57968f 100644 --- a/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java @@ -60,7 +60,7 @@ */ package org.apache.poi.hssf.record.formula; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * @@ -102,7 +102,7 @@ public class ExpPtg return SIZE; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "NO IDEA SHARED FORMULA EXP PTG"; } @@ -110,7 +110,10 @@ public class ExpPtg public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;} public Object clone() { - throw new RuntimeException("NO IDEA SHARED FORMULA EXP PTG"); + //can't clone one that doesnt have data can we?? + if (this.existing == null) throw new RuntimeException("NO IDEA SHARED FORMULA EXP PTG"); + + return new ExpPtg(this.existing, 0); } } diff --git a/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java b/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java index 1c230c95a4..713d200b2d 100644 --- a/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java @@ -63,7 +63,8 @@ public class FuncPtg extends AbstractFunctionPtg{ FuncPtg ptg = new FuncPtg(); //ptg.field_1_num_args = field_1_num_args; ptg.field_2_fnc_index = field_2_fnc_index; - return ptg; + ptg.setClass(ptgClass); + return ptg; } public int getSize() { diff --git a/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java b/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java index f333ba694e..6bf4d7f540 100644 --- a/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java @@ -52,6 +52,7 @@ public class FuncVarPtg extends AbstractFunctionPtg{ FuncVarPtg ptg = new FuncVarPtg(); ptg.field_1_num_args = field_1_num_args; ptg.field_2_fnc_index = field_2_fnc_index; + ptg.setClass(ptgClass); return ptg; } diff --git a/src/java/org/apache/poi/hssf/record/formula/GreaterEqualPtg.java b/src/java/org/apache/poi/hssf/record/formula/GreaterEqualPtg.java index de0b6238d9..b387a5e842 100755 --- a/src/java/org/apache/poi/hssf/record/formula/GreaterEqualPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/GreaterEqualPtg.java @@ -54,7 +54,7 @@ package org.apache.poi.hssf.record.formula; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * PTG class to implement greater or equal to @@ -66,7 +66,7 @@ public class GreaterEqualPtg public final static int SIZE = 1; public final static byte sid = 0x0c; - /** Creates new AddPtg */ + /** Creates new GreaterEqualPtg */ public GreaterEqualPtg() { @@ -98,7 +98,7 @@ public class GreaterEqualPtg return 2; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return ">="; } @@ -108,7 +108,7 @@ public class GreaterEqualPtg buffer.append(operands[ 0 ]); - buffer.append(toFormulaString((SheetReferences)null)); + buffer.append(toFormulaString((Workbook)null)); buffer.append(operands[ 1 ]); return buffer.toString(); } diff --git a/src/java/org/apache/poi/hssf/record/formula/GreaterThanPtg.java b/src/java/org/apache/poi/hssf/record/formula/GreaterThanPtg.java index 5f7d6450e0..04fbcac2ef 100644 --- a/src/java/org/apache/poi/hssf/record/formula/GreaterThanPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/GreaterThanPtg.java @@ -61,7 +61,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * Greater than operator PTG ">" @@ -133,7 +133,7 @@ public class GreaterThanPtg * Implementation of method from Ptg * @param refs the Sheet References */ - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return this.GREATERTHAN; } @@ -171,5 +171,3 @@ public class GreaterThanPtg return new GreaterThanPtg(); } } - - diff --git a/src/java/org/apache/poi/hssf/record/formula/IntPtg.java b/src/java/org/apache/poi/hssf/record/formula/IntPtg.java index 200f5dc651..e06f1ecd25 100644 --- a/src/java/org/apache/poi/hssf/record/formula/IntPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/IntPtg.java @@ -61,7 +61,7 @@ package org.apache.poi.hssf.record.formula; import org.apache.poi.util.LittleEndian; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * Integer (short intger) @@ -116,7 +116,7 @@ public class IntPtg return SIZE; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "" + getValue(); } diff --git a/src/java/org/apache/poi/hssf/record/formula/LessEqualPtg.java b/src/java/org/apache/poi/hssf/record/formula/LessEqualPtg.java index 0c8165fb7c..c1c7570029 100755 --- a/src/java/org/apache/poi/hssf/record/formula/LessEqualPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/LessEqualPtg.java @@ -53,7 +53,7 @@ */ package org.apache.poi.hssf.record.formula; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** @@ -67,7 +67,7 @@ public class LessEqualPtg public final static int SIZE = 1; public final static byte sid = 0x0a; - /** Creates new AddPtg */ + /** Creates new LessEqualPtg */ public LessEqualPtg() { @@ -99,7 +99,7 @@ public class LessEqualPtg return 2; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "<="; } @@ -109,7 +109,7 @@ public class LessEqualPtg buffer.append(operands[ 0 ]); - buffer.append(toFormulaString((SheetReferences)null)); + buffer.append(toFormulaString((Workbook)null)); buffer.append(operands[ 1 ]); return buffer.toString(); } diff --git a/src/java/org/apache/poi/hssf/record/formula/LessThanPtg.java b/src/java/org/apache/poi/hssf/record/formula/LessThanPtg.java index cab99be9c3..a856b93bde 100644 --- a/src/java/org/apache/poi/hssf/record/formula/LessThanPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/LessThanPtg.java @@ -63,7 +63,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; //POI -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * Less than operator PTG "<". The SID is taken from the @@ -142,7 +142,7 @@ public class LessThanPtg * Implementation of method from Ptg * @param refs the Sheet References */ - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return this.LESSTHAN; } @@ -180,6 +180,3 @@ public class LessThanPtg } } - - - diff --git a/src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java b/src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java index c48ad8c3b1..31a1bcafec 100644 --- a/src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java @@ -61,7 +61,7 @@ package org.apache.poi.hssf.record.formula; import org.apache.poi.util.LittleEndian; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * @@ -118,7 +118,7 @@ public class MemErrPtg return SIZE; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "ERR#"; } diff --git a/src/java/org/apache/poi/hssf/record/formula/MemFuncPtg.java b/src/java/org/apache/poi/hssf/record/formula/MemFuncPtg.java index 2d422b1c7e..a8b63609c4 100644 --- a/src/java/org/apache/poi/hssf/record/formula/MemFuncPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/MemFuncPtg.java @@ -60,7 +60,7 @@ package org.apache.poi.hssf.record.formula; import org.apache.poi.util.LittleEndian; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * @author Glen Stampoultzis (glens at apache.org) @@ -96,7 +96,7 @@ public class MemFuncPtg extends ControlPtg LittleEndian.putShort( array, offset + 1, (short)field_1_len_ref_subexpression ); } - public String toFormulaString( SheetReferences refs ) + public String toFormulaString(Workbook book) { return ""; } diff --git a/src/java/org/apache/poi/hssf/record/formula/MissingArgPtg.java b/src/java/org/apache/poi/hssf/record/formula/MissingArgPtg.java index 3f88ded3b8..c65ab41f3d 100644 --- a/src/java/org/apache/poi/hssf/record/formula/MissingArgPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/MissingArgPtg.java @@ -54,7 +54,7 @@ package org.apache.poi.hssf.record.formula; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * Missing Function Arguments @@ -91,7 +91,7 @@ public class MissingArgPtg } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return " "; } @@ -103,5 +103,3 @@ public class MissingArgPtg } } - - diff --git a/src/java/org/apache/poi/hssf/record/formula/MultiplyPtg.java b/src/java/org/apache/poi/hssf/record/formula/MultiplyPtg.java index 143702ce16..6b33e619b6 100644 --- a/src/java/org/apache/poi/hssf/record/formula/MultiplyPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/MultiplyPtg.java @@ -61,7 +61,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * Implements the standard mathmatical multiplication - * @@ -114,7 +114,7 @@ public class MultiplyPtg } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "*"; } @@ -123,9 +123,9 @@ public class MultiplyPtg { StringBuffer buffer = new StringBuffer(); - buffer.append(operands[ 0 ].toFormulaString((SheetReferences)null)); + buffer.append(operands[ 0 ].toFormulaString((Workbook)null)); buffer.append("*"); - buffer.append(operands[ 1 ].toFormulaString((SheetReferences)null)); + buffer.append(operands[ 1 ].toFormulaString((Workbook)null)); return buffer.toString(); } @@ -133,7 +133,7 @@ public class MultiplyPtg StringBuffer buffer = new StringBuffer(); buffer.append(operands[ 0 ]); - buffer.append(toFormulaString((SheetReferences)null)); + buffer.append(toFormulaString((Workbook)null)); buffer.append(operands[ 1 ]); return buffer.toString(); } diff --git a/src/java/org/apache/poi/hssf/record/formula/NamePtg.java b/src/java/org/apache/poi/hssf/record/formula/NamePtg.java index c926d511a1..6cdee6af03 100644 --- a/src/java/org/apache/poi/hssf/record/formula/NamePtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/NamePtg.java @@ -61,7 +61,8 @@ package org.apache.poi.hssf.record.formula; import org.apache.poi.util.LittleEndian; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; +import org.apache.poi.hssf.record.NameRecord; /** * @@ -73,10 +74,10 @@ public class NamePtg extends Ptg { public final static short sid = 0x23; - private final static int SIZE = 7; - private short field_1_ixti; // unknown function - private short field_2_label_index; - private short field_3_zero; // reserved must be 0 + private final static int SIZE = 5; + private short field_1_label_index; + private short field_2_zero; // reserved must be 0 + boolean xtra=false; private NamePtg() { @@ -85,9 +86,22 @@ public class NamePtg /** Creates new NamePtg */ - public NamePtg(String name) + public NamePtg(String name, Workbook book) { - //TODO + final short n = (short) (book.getNumNames() + 1); + NameRecord rec; + for (short i = 1; i < n; i++) { + rec = book.getNameRecord(i - 1); + if (name.equals(rec.getNameText())) { + field_1_label_index = i; + return; + } + } + rec = new NameRecord(); + rec.setNameText(name); + rec.setNameTextLength((byte) name.length()); + book.addName(rec); + field_1_label_index = n; } /** Creates new NamePtg */ @@ -95,13 +109,17 @@ public class NamePtg public NamePtg(byte [] data, int offset) { offset++; - field_1_ixti = LittleEndian.getShort(data, offset); - field_2_label_index = LittleEndian.getShort(data, offset + 2); - field_3_zero = LittleEndian.getShort(data, offset + 4); + //field_1_ixti = LittleEndian.getShort(data, offset); + field_1_label_index = LittleEndian.getShort(data, offset ); + field_2_zero = LittleEndian.getShort(data, offset + 2); + //if (data[offset+6]==0) xtra=true; } public void writeBytes(byte [] array, int offset) { + array[offset+0]= (byte) (sid + ptgClass); + LittleEndian.putShort(array,offset+1,field_1_label_index); + LittleEndian.putShort(array,offset+3, field_2_zero); } public int getSize() @@ -109,18 +127,18 @@ public class NamePtg return SIZE; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { - return "NO IDEA - NAME"; + NameRecord rec = book.getNameRecord(field_1_label_index - 1); + return rec.getNameText(); } - public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;} + public byte getDefaultOperandClass() {return Ptg.CLASS_REF;} public Object clone() { NamePtg ptg = new NamePtg(); - ptg.field_1_ixti = field_1_ixti; - ptg.field_2_label_index = field_2_label_index; - ptg.field_3_zero = field_3_zero; + ptg.field_1_label_index = field_1_label_index; + ptg.field_2_zero = field_2_zero; return ptg; } } diff --git a/src/java/org/apache/poi/hssf/record/formula/NameXPtg.java b/src/java/org/apache/poi/hssf/record/formula/NameXPtg.java index b913f438a4..9b6225d809 100644 --- a/src/java/org/apache/poi/hssf/record/formula/NameXPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/NameXPtg.java @@ -61,7 +61,7 @@ package org.apache.poi.hssf.record.formula; import org.apache.poi.util.LittleEndian; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * @@ -102,7 +102,7 @@ public class NameXPtg extends Ptg public void writeBytes(byte [] array, int offset) { - array[ offset + 0 ] = sid; + array[ offset + 0 ] = (byte)(sid + ptgClass); LittleEndian.putShort(array, offset + 1, field_1_ixals); LittleEndian.putShort(array,offset+3, field_2_ilbl); LittleEndian.putShort(array, offset + 5, field_3_reserved); @@ -113,7 +113,7 @@ public class NameXPtg extends Ptg return SIZE; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "NO IDEA - NAME"; } @@ -125,6 +125,7 @@ public class NameXPtg extends Ptg ptg.field_1_ixals = field_1_ixals; ptg.field_3_reserved = field_3_reserved; ptg.field_2_ilbl = field_2_ilbl; + ptg.setClass(ptgClass); return ptg; } } diff --git a/src/java/org/apache/poi/hssf/record/formula/NotEqualPtg.java b/src/java/org/apache/poi/hssf/record/formula/NotEqualPtg.java index c43c196789..b12b16ae97 100755 --- a/src/java/org/apache/poi/hssf/record/formula/NotEqualPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/NotEqualPtg.java @@ -56,7 +56,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * Ptg class to implement not equal @@ -69,7 +69,7 @@ public class NotEqualPtg public final static int SIZE = 1; public final static byte sid = 0x0e; - /** Creates new AddPtg */ + /** Creates new NotEqualPtg */ public NotEqualPtg() { @@ -101,7 +101,7 @@ public class NotEqualPtg return 2; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "<>"; } @@ -111,7 +111,7 @@ public class NotEqualPtg buffer.append(operands[ 0 ]); - buffer.append(toFormulaString((SheetReferences)null)); + buffer.append(toFormulaString((Workbook)null)); buffer.append(operands[ 1 ]); return buffer.toString(); } diff --git a/src/java/org/apache/poi/hssf/record/formula/NumberPtg.java b/src/java/org/apache/poi/hssf/record/formula/NumberPtg.java index e071420bc5..b43c5536eb 100644 --- a/src/java/org/apache/poi/hssf/record/formula/NumberPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/NumberPtg.java @@ -55,7 +55,7 @@ package org.apache.poi.hssf.record.formula; import org.apache.poi.util.LittleEndian; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * Number * Stores a floating point value in a formula @@ -113,7 +113,7 @@ public class NumberPtg return SIZE; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "" + getValue(); } @@ -125,4 +125,3 @@ public class NumberPtg return ptg; } } - diff --git a/src/java/org/apache/poi/hssf/record/formula/ParenthesisPtg.java b/src/java/org/apache/poi/hssf/record/formula/ParenthesisPtg.java index c2118f151f..2abff9e73a 100644 --- a/src/java/org/apache/poi/hssf/record/formula/ParenthesisPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/ParenthesisPtg.java @@ -57,7 +57,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * While formula tokens are stored in RPN order and thus do not need parenthesis for @@ -107,7 +107,7 @@ public class ParenthesisPtg return 1; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "()"; } @@ -124,4 +124,3 @@ public class ParenthesisPtg } } - diff --git a/src/java/org/apache/poi/hssf/record/formula/PowerPtg.java b/src/java/org/apache/poi/hssf/record/formula/PowerPtg.java index ca7fa64863..161918abef 100644 --- a/src/java/org/apache/poi/hssf/record/formula/PowerPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/PowerPtg.java @@ -62,7 +62,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * @@ -108,7 +108,7 @@ public class PowerPtg return 2; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "^"; } @@ -118,7 +118,7 @@ public class PowerPtg buffer.append(operands[ 0 ]); - buffer.append(toFormulaString((SheetReferences)null)); + buffer.append(toFormulaString((Workbook)null)); buffer.append(operands[ 1 ]); return buffer.toString(); } diff --git a/src/java/org/apache/poi/hssf/record/formula/Ptg.java b/src/java/org/apache/poi/hssf/record/formula/Ptg.java index 3787d0056e..cdf584ed1a 100644 --- a/src/java/org/apache/poi/hssf/record/formula/Ptg.java +++ b/src/java/org/apache/poi/hssf/record/formula/Ptg.java @@ -63,7 +63,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; import java.util.ArrayList; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * @@ -307,6 +307,12 @@ public abstract class Ptg case MissingArgPtg.sid: retval = new MissingArgPtg(data,offset); break; + case UnaryPlusPtg.sid: + retval=new UnaryPlusPtg(data,offset); + break; + case UnaryMinusPtg.sid: + retval=new UnaryMinusPtg(data,offset); + break; default : @@ -341,7 +347,7 @@ public abstract class Ptg /** * return a string representation of this token alone */ - public abstract String toFormulaString(SheetReferences refs); + public abstract String toFormulaString(Workbook book); /** * dump a debug representation (hexdump) to a string */ @@ -357,6 +363,14 @@ public abstract class Ptg return retval; } + /** Overridden toString method to ensure object hash is not printed. + * This helps get rid of gratuitous diffs when comparing two dumps + * Subclasses may output more relevant information by overriding this method + **/ + public String toString(){ + return this.getClass().toString(); + } + public static final byte CLASS_REF = 0x00; public static final byte CLASS_VALUE = 0x20; public static final byte CLASS_ARRAY = 0x40; diff --git a/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java b/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java index 0d842955b9..4e175e85be 100644 --- a/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java @@ -61,6 +61,7 @@ import org.apache.poi.util.LittleEndian; import org.apache.poi.hssf.util.RangeAddress; import org.apache.poi.hssf.util.CellReference; import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; import org.apache.poi.util.BitField; import org.apache.poi.hssf.model.Workbook; @@ -104,7 +105,7 @@ public class Ref3DPtg extends Ptg { public String toString() { StringBuffer buffer = new StringBuffer(); - buffer.append("Ref3dPrg\n"); + buffer.append("Ref3dPtg\n"); buffer.append("Index to Extern Sheet = " + getExternSheetIndex()).append("\n"); buffer.append("Row = " + getRow()).append("\n"); buffer.append("Col = " + getColumn()).append("\n"); @@ -193,8 +194,9 @@ public class Ref3DPtg extends Ptg { } - public String toFormulaString(SheetReferences refs) { + public String toFormulaString(Workbook book) { StringBuffer retval = new StringBuffer(); + SheetReferences refs = book == null ? null : book.getSheetReferences(); if (refs != null) { retval.append(refs.getSheetName((int)this.field_1_index_extern_sheet)); retval.append('!'); @@ -210,6 +212,7 @@ public class Ref3DPtg extends Ptg { ptg.field_1_index_extern_sheet = field_1_index_extern_sheet; ptg.field_2_row = field_2_row; ptg.field_3_column = field_3_column; + ptg.setClass(ptgClass); return ptg; } diff --git a/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java b/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java index 90f7d899c8..4c14aaf55f 100644 --- a/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java @@ -64,7 +64,7 @@ import org.apache.poi.util.LittleEndian; import org.apache.poi.util.BitField; import org.apache.poi.hssf.util.CellReference; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * ReferencePtg - handles references (such as A1, A2, IA4) @@ -179,7 +179,7 @@ public class ReferencePtg extends Ptg return SIZE; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { //TODO -- should we store a cellreference instance in this ptg?? but .. memory is an issue, i believe! return (new CellReference(getRow(),getColumn(),!isRowRelative(),!isColRelative())).toString(); @@ -193,6 +193,7 @@ public class ReferencePtg extends Ptg ReferencePtg ptg = new ReferencePtg(); ptg.field_1_row = field_1_row; ptg.field_2_col = field_2_col; + ptg.setClass(ptgClass); return ptg; } } diff --git a/src/java/org/apache/poi/hssf/record/formula/StringPtg.java b/src/java/org/apache/poi/hssf/record/formula/StringPtg.java index 022fffd83c..1ad2789d47 100644 --- a/src/java/org/apache/poi/hssf/record/formula/StringPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/StringPtg.java @@ -55,8 +55,9 @@ package org.apache.poi.hssf.record.formula; import org.apache.poi.util.LittleEndian; - -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.util.BitField; +import org.apache.poi.hssf.model.Workbook; +import org.apache.poi.util.StringUtil; /** * Number @@ -70,7 +71,12 @@ public class StringPtg { public final static int SIZE = 9; public final static byte sid = 0x17; - private String field_1_value; + //NOTE: OO doc says 16bit lenght, but BiffViewer says 8 + // Book says something totally different, so dont look there! + byte field_1_length; + byte field_2_options; + BitField fHighByte = new BitField(0x01); + private String field_3_string; private StringPtg() { //Required for clone methods @@ -79,7 +85,16 @@ public class StringPtg /** Create a StringPtg from a byte array read from disk */ public StringPtg(byte [] data, int offset) { - setValue(new String(data, offset+3, data[offset+1] + 256*data[offset+2])); + offset++; + field_1_length = data[offset]; + field_2_options = data[offset+1]; + if (fHighByte.isSet(field_2_options)) { + field_3_string= StringUtil.getFromUnicode(data,offset+2,field_1_length); + }else { + field_3_string=StringUtil.getFromCompressedUnicode(data,offset+2,field_1_length); + } + + //setValue(new String(data, offset+3, data[offset+1] + 256*data[offset+2])); } /** Create a StringPtg from a string representation of the number @@ -88,35 +103,49 @@ public class StringPtg * @param value : String representation of a floating point number */ public StringPtg(String value) { - setValue(value); + if (value.length() >255) { + throw new IllegalArgumentException("String literals in formulas cant be bigger than 255 characters ASCII"); + } + this.field_2_options=0; + this.fHighByte.setBoolean(field_2_options, false); + this.field_3_string=value; + this.field_1_length=(byte)value.length(); //for the moment, we support only ASCII strings in formulas we create } - + /* public void setValue(String value) { field_1_value = value; - } + }*/ public String getValue() { - return field_1_value; + return field_3_string; } public void writeBytes(byte [] array, int offset) { array[ offset + 0 ] = sid; - array[ offset + 1 ] = (byte)(getValue().length() % 256); - array[ offset + 2 ] = (byte)(getValue().length() / 256); - System.arraycopy(getValue().getBytes(), 0, array, offset + 3, getValue().length()); + array[ offset + 1 ] = field_1_length; + array[ offset + 2 ] = field_2_options; + if (fHighByte.isSet(field_2_options)) { + StringUtil.putUncompressedUnicode(getValue(),array,offset+3); + }else { + StringUtil.putCompressedUnicode(getValue(),array,offset+3); + } } public int getSize() { - return field_1_value.length() + 3; + if (fHighByte.isSet(field_2_options)) { + return 2*field_1_length+3; + }else { + return field_1_length+3; + } } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "\""+getValue()+"\""; } @@ -126,9 +155,10 @@ public class StringPtg public Object clone() { StringPtg ptg = new StringPtg(); - ptg.field_1_value = field_1_value; + ptg.field_1_length = field_1_length; + ptg.field_2_options=field_2_options; + ptg.field_3_string=field_3_string; return ptg; } } - diff --git a/src/java/org/apache/poi/hssf/record/formula/SubtractPtg.java b/src/java/org/apache/poi/hssf/record/formula/SubtractPtg.java index 2c5588f3dd..cd9fa5fd78 100644 --- a/src/java/org/apache/poi/hssf/record/formula/SubtractPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/SubtractPtg.java @@ -61,7 +61,7 @@ package org.apache.poi.hssf.record.formula; import java.util.List; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * @@ -105,7 +105,7 @@ public class SubtractPtg return 2; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "-"; } diff --git a/src/java/org/apache/poi/hssf/record/formula/UnaryMinusPtg.java b/src/java/org/apache/poi/hssf/record/formula/UnaryMinusPtg.java new file mode 100644 index 0000000000..bb60dd09bc --- /dev/null +++ b/src/java/org/apache/poi/hssf/record/formula/UnaryMinusPtg.java @@ -0,0 +1,127 @@ + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2003 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ +package org.apache.poi.hssf.record.formula; + +import java.util.List; + +import org.apache.poi.hssf.model.Workbook; + +/** + * Unary Plus operator + * does not have any effect on the operand + * @author Avik Sengupta + */ + +public class UnaryMinusPtg extends OperationPtg +{ + public final static int SIZE = 1; + public final static byte sid = 0x13; + + private final static String MINUS = "-"; + + /** Creates new AddPtg */ + + public UnaryMinusPtg() + { + } + + public UnaryMinusPtg(byte[] data, int offset) + { + + // doesn't need anything + } + + + public void writeBytes(byte [] array, int offset) + { + array[ offset + 0 ] = sid; + } + + public int getSize() + { + return SIZE; + } + + public int getType() + { + return this.TYPE_UNARY; + } + + public int getNumberOfOperands() + { + return 1; + } + + /** Implementation of method from Ptg */ + public String toFormulaString(Workbook book) + { + return "+"; + } + + /** implementation of method from OperationsPtg*/ + public String toFormulaString(String[] operands) { + StringBuffer buffer = new StringBuffer(); + buffer.append(MINUS); + buffer.append(operands[ 0]); + return buffer.toString(); + } + + public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;} + + public Object clone() { + return new UnaryPlusPtg(); + } + +} diff --git a/src/java/org/apache/poi/hssf/record/formula/UnaryPlusPtg.java b/src/java/org/apache/poi/hssf/record/formula/UnaryPlusPtg.java new file mode 100644 index 0000000000..c7ec1e0e99 --- /dev/null +++ b/src/java/org/apache/poi/hssf/record/formula/UnaryPlusPtg.java @@ -0,0 +1,127 @@ + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2003 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ +package org.apache.poi.hssf.record.formula; + +import java.util.List; + +import org.apache.poi.hssf.model.Workbook; + +/** + * Unary Plus operator + * does not have any effect on the operand + * @author Avik Sengupta + */ + +public class UnaryPlusPtg extends OperationPtg +{ + public final static int SIZE = 1; + public final static byte sid = 0x12; + + private final static String ADD = "+"; + + /** Creates new AddPtg */ + + public UnaryPlusPtg() + { + } + + public UnaryPlusPtg(byte[] data, int offset) + { + + // doesn't need anything + } + + + public void writeBytes(byte [] array, int offset) + { + array[ offset + 0 ] = sid; + } + + public int getSize() + { + return SIZE; + } + + public int getType() + { + return this.TYPE_UNARY; + } + + public int getNumberOfOperands() + { + return 1; + } + + /** Implementation of method from Ptg */ + public String toFormulaString(Workbook book) + { + return "+"; + } + + /** implementation of method from OperationsPtg*/ + public String toFormulaString(String[] operands) { + StringBuffer buffer = new StringBuffer(); + buffer.append(ADD); + buffer.append(operands[ 0]); + return buffer.toString(); + } + + public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;} + + public Object clone() { + return new UnaryPlusPtg(); + } + +} diff --git a/src/java/org/apache/poi/hssf/record/formula/UnionPtg.java b/src/java/org/apache/poi/hssf/record/formula/UnionPtg.java index f84235055e..dea5997e05 100644 --- a/src/java/org/apache/poi/hssf/record/formula/UnionPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/UnionPtg.java @@ -54,7 +54,7 @@ package org.apache.poi.hssf.record.formula; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * @author Glen Stampoultzis (glens at apache.org) @@ -95,7 +95,7 @@ public class UnionPtg extends OperationPtg } /** Implementation of method from Ptg */ - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return ","; } diff --git a/src/java/org/apache/poi/hssf/record/formula/UnknownPtg.java b/src/java/org/apache/poi/hssf/record/formula/UnknownPtg.java index 2dd064973c..56d03f60c1 100644 --- a/src/java/org/apache/poi/hssf/record/formula/UnknownPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/UnknownPtg.java @@ -60,7 +60,7 @@ */ package org.apache.poi.hssf.record.formula; -import org.apache.poi.hssf.util.SheetReferences; +import org.apache.poi.hssf.model.Workbook; /** * @@ -94,7 +94,7 @@ public class UnknownPtg return size; } - public String toFormulaString(SheetReferences refs) + public String toFormulaString(Workbook book) { return "UNKNOWN"; } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java index 5986b84635..7ebd7e38d3 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java @@ -326,6 +326,7 @@ public class HSSFCell case CELL_TYPE_FORMULA : cellValue = (( FormulaRecordAggregate ) cval).getFormulaRecord().getValue(); + stringValue=((FormulaRecordAggregate) cval).getStringValue(); break; case CELL_TYPE_BOOLEAN : @@ -726,8 +727,7 @@ public class HSSFCell public String getCellFormula() { //Workbook.currentBook=book; - SheetReferences refs = book.getSheetReferences(); - String retval = FormulaParser.toFormulaString(refs, ((FormulaRecordAggregate)record).getFormulaRecord().getParsedExpression()); + String retval = FormulaParser.toFormulaString(book, ((FormulaRecordAggregate)record).getFormulaRecord().getParsedExpression()); //Workbook.currentBook=null; return retval; } @@ -798,6 +798,7 @@ public class HSSFCell /** * get the value of the cell as a string - for numeric cells we throw an exception. * For blank cells we return an empty string. + * For formulaCells that are not string Formulas, we return empty String */ public String getStringCellValue() @@ -821,6 +822,10 @@ public class HSSFCell throw new NumberFormatException( "You cannot get a string value from an error cell"); } + if (cellType == CELL_TYPE_FORMULA) + { + if (stringValue==null) return ""; + } return stringValue; } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java b/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java index bbde46a407..61b8c60de7 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java @@ -85,7 +85,7 @@ public class HSSFFont * Normal boldness (not bold) */ - public final static short BOLDWEIGHT_NORMAL = 190; + public final static short BOLDWEIGHT_NORMAL = 0x190; /** * Bold boldness (bold) diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFName.java b/src/java/org/apache/poi/hssf/usermodel/HSSFName.java index 0f7178225e..8c18634025 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFName.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFName.java @@ -123,8 +123,7 @@ public class HSSFName { public String getReference() { String result; - SheetReferences refs = book.getSheetReferences(); - result = name.getAreaReference(refs); + result = name.getAreaReference(book); return result; } @@ -167,4 +166,3 @@ public class HSSFName { } } - diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java b/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java index 6c5d0eed70..863533d455 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java @@ -103,7 +103,7 @@ public class HSSFPalette for (short i = (short) PaletteRecord.FIRST_COLOR_INDEX; b != null; b = palette.getColor(++i)) { - if (b[0] == red && b[1] == blue && b[2] == green) + if (b[0] == red && b[1] == green && b[2] == blue) { return new CustomColor(i, b); } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java index a1a6e795fc..9fe691724c 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java @@ -59,17 +59,25 @@ */ package org.apache.poi.hssf.usermodel; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.TreeMap; + import org.apache.poi.hssf.model.Sheet; import org.apache.poi.hssf.model.Workbook; -import org.apache.poi.hssf.record.*; +import org.apache.poi.hssf.record.CellValueRecordInterface; +import org.apache.poi.hssf.record.HCenterRecord; +import org.apache.poi.hssf.record.Record; +import org.apache.poi.hssf.record.RowRecord; +import org.apache.poi.hssf.record.SCLRecord; +import org.apache.poi.hssf.record.VCenterRecord; +import org.apache.poi.hssf.record.WSBoolRecord; +import org.apache.poi.hssf.record.WindowTwoRecord; import org.apache.poi.hssf.util.Region; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; -import java.util.Iterator; -import java.util.TreeMap; -import java.util.List; - /** * High level representation of a worksheet. * @author Andrew C. Oliver (acoliver at apache dot org) @@ -865,6 +873,22 @@ public class HSSFSheet { getSheet().setMargin( margin, size ); } + + /** + * Answer whether protection is enabled or disabled + * @return true => protection enabled; false => protection disabled + */ + public boolean getProtect() { + return getSheet().getProtect().getProtect(); + } + + /** + * Sets the protection on enabled or disabled + * @param protect true => protection enabled; false => protection disabled + */ + public void setProtect(boolean protect) { + getSheet().getProtect().setProtect(protect); + } /** * Sets the zoom magnication for the sheet. The zoom is expressed as a @@ -887,6 +911,50 @@ public class HSSFSheet getSheet().setSCLRecord(sclRecord); } + /** + * Shifts the merged regions left or right depending on mode + *

    + * TODO: MODE , this is only row specific + * @param startRow + * @param endRow + * @param n + * @param isRow + */ + protected void shiftMerged(int startRow, int endRow, int n, boolean isRow) { + List shiftedRegions = new ArrayList(); + //move merged regions completely if they fall within the new region boundaries when they are shifted + for (int i = 0; i < this.getNumMergedRegions(); i++) { + Region merged = this.getMergedRegionAt(i); + + boolean inStart = (merged.getRowFrom() >= startRow || merged.getRowTo() >= startRow); + boolean inEnd = (merged.getRowTo() <= endRow || merged.getRowFrom() <= endRow); + + //dont check if it's not within the shifted area + if (! (inStart && inEnd)) continue; + + //only shift if the region outside the shifted rows is not merged too + if (!merged.contains(startRow-1, (short)0) && !merged.contains(endRow+1, (short)0)){ + merged.setRowFrom(merged.getRowFrom()+n); + merged.setRowTo(merged.getRowTo()+n); + //have to remove/add it back + shiftedRegions.add(merged); + this.removeMergedRegion(i); + i = i -1; // we have to back up now since we removed one + + } + + } + + //readd so it doesn't get shifted again + Iterator iterator = shiftedRegions.iterator(); + while (iterator.hasNext()) { + Region region = (Region)iterator.next(); + + this.addMergedRegion(region); + } + + } + /** * Shifts rows between startRow and endRow n number of rows. * If you use a negative number, it will shift rows up. @@ -894,19 +962,25 @@ public class HSSFSheet * * Calls shiftRows(startRow, endRow, n, false, false); * + *

    + * Additionally shifts merged regions that are completely defined in these + * rows (ie. merged 2 cells on a row to be shifted). * @param startRow the row to start shifting * @param endRow the row to end shifting * @param n the number of rows to shift */ public void shiftRows( int startRow, int endRow, int n ) { - shiftRows(startRow, endRow, n, false, false); + shiftRows(startRow, endRow, n, false, false); } /** * Shifts rows between startRow and endRow n number of rows. * If you use a negative number, it will shift rows up. * Code ensures that rows don't wrap around - * + * + *

    + * Additionally shifts merged regions that are completely defined in these + * rows (ie. merged 2 cells on a row to be shifted). * @param startRow the row to start shifting * @param endRow the row to end shifting * @param n the number of rows to shift @@ -928,6 +1002,9 @@ public class HSSFSheet e = startRow; inc = -1; } + + shiftMerged(startRow, endRow, n, true); + for ( int rowNum = s; rowNum >= startRow && rowNum <= endRow && rowNum >= 0 && rowNum < 65536; rowNum += inc ) { HSSFRow row = getRow( rowNum ); @@ -937,6 +1014,9 @@ public class HSSFSheet HSSFCell cell; + + + // Removes the cells before over writting them. for ( short col = row2Replace.getFirstCellNum(); col <= row2Replace.getLastCellNum(); col++ ) { @@ -1021,5 +1101,51 @@ public class HSSFSheet getSheet().createSplitPane( xSplitPos, ySplitPos, topRow, leftmostColumn, activePane ); } + /** + * Sets whether the gridlines are shown in a viewer. + * @param show whether to show gridlines or not + */ + public void setDisplayGridlines(boolean show) { + sheet.setDisplayGridlines(show); + } + /** + * Returns if gridlines are displayed. + * @return whether gridlines are displayed + */ + public boolean isDisplayGridlines() { + return sheet.isDisplayGridlines(); + } + + /** + * Sets whether the formulas are shown in a viewer. + * @param show whether to show formulas or not + */ + public void setDisplayFormulas(boolean show) { + sheet.setDisplayFormulas(show); + } + + /** + * Returns if formulas are displayed. + * @return whether formulas are displayed + */ + public boolean isDisplayFormulas() { + return sheet.isDisplayFormulas(); + } + + /** + * Sets whether the RowColHeadings are shown in a viewer. + * @param show whether to show RowColHeadings or not + */ + public void setDisplayRowColHeadings(boolean show) { + sheet.setDisplayRowColHeadings(show); + } + + /** + * Returns if RowColHeadings are displayed. + * @return whether RowColHeadings are displayed + */ + public boolean isDisplayRowColHeadings() { + return sheet.isDisplayRowColHeadings(); + } } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java index 8420aa63b0..c1bfbd3182 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java @@ -147,6 +147,14 @@ public class HSSFWorkbook * memory. */ private POIFSFileSystem poifs; + + /** + * Used to keep track of the data formatter so that all + * createDataFormatter calls return the same one for a given + * book. This ensures that updates from one places is visible + * someplace else. + */ + private HSSFDataFormat formatter; private static POILogger log = POILogFactory.getLogger(HSSFWorkbook.class); @@ -273,7 +281,9 @@ public class HSSFWorkbook /** - * set the sheet name. + * set the sheet name. + * Will throw IllegalArgumentException if the name is greater than 31 chars + * or contains /\?*[] * @param sheet number (0 based) * @param sheet name */ @@ -374,7 +384,11 @@ public class HSSFWorkbook windowTwo.setPaged(sheets.size() == 1); sheets.add(clonedSheet); - workbook.setSheetName(sheets.size()-1, srcName+"[1]"); + if (srcName.length()<28) { + workbook.setSheetName(sheets.size()-1, srcName+"(2)"); + }else { + workbook.setSheetName(sheets.size()-1,srcName.substring(0,28)+"(2)"); + } return clonedSheet; } return null; @@ -890,7 +904,7 @@ public class HSSFWorkbook if (name == null) return null; //adding one here because 0 indicates a global named region; doesnt make sense for print areas - return name.getAreaReference(workbook.getSheetReferences()); + return name.getAreaReference(workbook); } /** @@ -945,13 +959,15 @@ public class HSSFWorkbook } /** - * Creates an instance of HSSFDataFormat. + * Returns the instance of HSSFDataFormat for this workbook. * @return the HSSFDataFormat object * @see org.apache.poi.hssf.record.FormatRecord * @see org.apache.poi.hssf.record.Record */ public HSSFDataFormat createDataFormat() { - return new HSSFDataFormat(workbook); + if (formatter == null) + formatter = new HSSFDataFormat(workbook); + return formatter; } /** remove the named range by his name diff --git a/src/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java b/src/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java index 135a2ba4e2..a85e7e9cb8 100644 --- a/src/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java +++ b/src/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java @@ -59,6 +59,8 @@ import java.io.*; import java.util.*; +import org.apache.poi.hpsf.ClassID; + /** * This interface defines methods specific to Directory objects * managed by a Filesystem instance. @@ -160,5 +162,20 @@ public interface DirectoryEntry public DirectoryEntry createDirectory(final String name) throws IOException; + + /** + * Gets the storage clsid of the directory entry + * + * @return storage Class ID + */ + public ClassID getStorageClsid(); + + /** + * Sets the storage clsid for the directory entry + * + * @param clsidStorage storage Class ID + */ + public void setStorageClsid(ClassID clsidStorage); + } // end public interface DirectoryEntry diff --git a/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java b/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java index d7c670c252..feeb74771d 100644 --- a/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java +++ b/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java @@ -59,6 +59,7 @@ import java.io.*; import java.util.*; +import org.apache.poi.hpsf.ClassID; import org.apache.poi.poifs.dev.POIFSViewable; import org.apache.poi.poifs.property.DirectoryProperty; import org.apache.poi.poifs.property.DocumentProperty; @@ -346,6 +347,26 @@ public class DirectoryNode return rval; } + /** + * Gets the storage clsid of the directory entry + * + * @return storage Class ID + */ + public ClassID getStorageClsid() + { + return getProperty().getStorageClsid(); + } + + /** + * Sets the storage clsid for the directory entry + * + * @param clsidStorage storage Class ID + */ + public void setStorageClsid(ClassID clsidStorage) + { + getProperty().setStorageClsid(clsidStorage); + } + /* ********** END implementation of DirectoryEntry ********** */ /* ********** START implementation of Entry ********** */ diff --git a/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java b/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java index 3d173aa46e..3a62e3e1f0 100644 --- a/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java +++ b/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java @@ -423,6 +423,8 @@ public class POIFSFileSystem DirectoryNode new_dir = ( DirectoryNode ) parent.createDirectory(name); + new_dir.setStorageClsid( property.getStorageClsid() ); + processProperties( small_blocks, big_blocks, (( DirectoryProperty ) property).getChildren(), new_dir); diff --git a/src/java/org/apache/poi/poifs/property/Property.java b/src/java/org/apache/poi/poifs/property/Property.java index 6811a72508..c09c25619b 100644 --- a/src/java/org/apache/poi/poifs/property/Property.java +++ b/src/java/org/apache/poi/poifs/property/Property.java @@ -59,6 +59,8 @@ import java.io.*; import java.util.*; +import org.apache.poi.hpsf.ClassID; + import org.apache.poi.poifs.common.POIFSConstants; import org.apache.poi.poifs.dev.POIFSViewable; import org.apache.poi.util.ByteField; @@ -87,6 +89,8 @@ public abstract class Property static final private int _previous_property_offset = 0x44; static final private int _next_property_offset = 0x48; static final private int _child_property_offset = 0x4C; + static final private int _storage_clsid_offset = 0x50; + static final private int _user_flags_offset = 0x60; static final private int _seconds_1_offset = 0x64; static final private int _days_1_offset = 0x68; static final private int _seconds_2_offset = 0x6C; @@ -107,6 +111,8 @@ public abstract class Property private IntegerField _previous_property; private IntegerField _next_property; private IntegerField _child_property; + private ClassID _storage_clsid; + private IntegerField _user_flags; private IntegerField _seconds_1; private IntegerField _days_1; private IntegerField _seconds_2; @@ -136,6 +142,8 @@ public abstract class Property _NO_INDEX, _raw_data); _child_property = new IntegerField(_child_property_offset, _NO_INDEX, _raw_data); + _storage_clsid = new ClassID(_raw_data,_storage_clsid_offset); + _user_flags = new IntegerField(_user_flags_offset, 0, _raw_data); _seconds_1 = new IntegerField(_seconds_1_offset, 0, _raw_data); _days_1 = new IntegerField(_days_1_offset, 0, _raw_data); @@ -173,6 +181,8 @@ public abstract class Property _raw_data); _child_property = new IntegerField(_child_property_offset, _raw_data); + _storage_clsid = new ClassID(_raw_data,_storage_clsid_offset); + _user_flags = new IntegerField(_user_flags_offset, 0, _raw_data); _seconds_1 = new IntegerField(_seconds_1_offset, _raw_data); _days_1 = new IntegerField(_days_1_offset, _raw_data); _seconds_2 = new IntegerField(_seconds_2_offset, _raw_data); @@ -295,12 +305,21 @@ public abstract class Property abstract public boolean isDirectory(); + /** + * Sets the storage clsid, which is the Class ID of a COM object which + * reads and writes this stream + * @return storage Class ID for this property stream + */ + public ClassID getStorageClsid() + { + return _storage_clsid; + } + /** * Set the name; silently truncates the name if it's too long. * * @param name the new name */ - protected final void setName(final String name) { char[] char_array = name.toCharArray(); @@ -327,6 +346,20 @@ public abstract class Property * LittleEndianConsts.SHORT_SIZE), _raw_data); } + /** + * Sets the storage class ID for this property stream. This is the Class ID + * of the COM object which can read and write this property stream + * @param clsidStorage Storage Class ID + */ + public void setStorageClsid( ClassID clsidStorage) + { + _storage_clsid = clsidStorage; + if( clsidStorage == null) { + Arrays.fill( _raw_data, _storage_clsid_offset, _storage_clsid_offset + ClassID.LENGTH, (byte) 0); + } else { + clsidStorage.write( _raw_data, _storage_clsid_offset); + } + } /** * Set the property type. Makes no attempt to validate the value. * diff --git a/src/java/org/apache/poi/poifs/storage/DocumentBlock.java b/src/java/org/apache/poi/poifs/storage/DocumentBlock.java index f6d0d92b4d..7af3487faa 100644 --- a/src/java/org/apache/poi/poifs/storage/DocumentBlock.java +++ b/src/java/org/apache/poi/poifs/storage/DocumentBlock.java @@ -62,6 +62,7 @@ import java.io.OutputStream; import java.util.Arrays; import org.apache.poi.poifs.common.POIFSConstants; +import org.apache.poi.util.IOUtils; import org.apache.poi.util.IntegerField; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndianConsts; @@ -106,7 +107,7 @@ public class DocumentBlock throws IOException { this(); - int count = stream.read(_data); + int count = IOUtils.readFully(stream, _data); _bytes_read = (count == -1) ? 0 : count; diff --git a/src/java/org/apache/poi/poifs/storage/HeaderBlockReader.java b/src/java/org/apache/poi/poifs/storage/HeaderBlockReader.java index 015d455d22..ad77368512 100644 --- a/src/java/org/apache/poi/poifs/storage/HeaderBlockReader.java +++ b/src/java/org/apache/poi/poifs/storage/HeaderBlockReader.java @@ -60,6 +60,7 @@ import java.io.*; import java.util.*; import org.apache.poi.poifs.common.POIFSConstants; +import org.apache.poi.util.IOUtils; import org.apache.poi.util.IntegerField; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndianConsts; @@ -104,7 +105,7 @@ public class HeaderBlockReader throws IOException { _data = new byte[ POIFSConstants.BIG_BLOCK_SIZE ]; - int byte_count = stream.read(_data); + int byte_count = IOUtils.readFully(stream, _data); if (byte_count != POIFSConstants.BIG_BLOCK_SIZE) { diff --git a/src/java/org/apache/poi/poifs/storage/RawDataBlock.java b/src/java/org/apache/poi/poifs/storage/RawDataBlock.java index 862fd8ca25..863b6108e7 100644 --- a/src/java/org/apache/poi/poifs/storage/RawDataBlock.java +++ b/src/java/org/apache/poi/poifs/storage/RawDataBlock.java @@ -56,6 +56,7 @@ package org.apache.poi.poifs.storage; import org.apache.poi.poifs.common.POIFSConstants; +import org.apache.poi.util.IOUtils; import java.io.*; @@ -84,7 +85,7 @@ public class RawDataBlock throws IOException { _data = new byte[ POIFSConstants.BIG_BLOCK_SIZE ]; - int count = stream.read(_data); + int count = IOUtils.readFully(stream, _data); if (count == -1) { diff --git a/src/java/org/apache/poi/util/HexDump.java b/src/java/org/apache/poi/util/HexDump.java index bc846459d1..74198bc525 100644 --- a/src/java/org/apache/poi/util/HexDump.java +++ b/src/java/org/apache/poi/util/HexDump.java @@ -67,6 +67,20 @@ import java.io.*; public class HexDump { + public static final String EOL = + System.getProperty("line.separator"); +// private static final StringBuffer _lbuffer = new StringBuffer(8); +// private static final StringBuffer _cbuffer = new StringBuffer(2); + private static final char _hexcodes[] = + { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', + 'E', 'F' + }; + private static final int _shifts[] = + { + 28, 24, 20, 16, 12, 8, 4, 0 + }; + // all static methods, so no need for a public constructor private HexDump() @@ -95,12 +109,14 @@ public class HexDump throws IOException, ArrayIndexOutOfBoundsException, IllegalArgumentException { - if ((index < 0) || (index >= data.length)) + if ((index < 0) || (data.length != 0 && index >= data.length)) { throw new ArrayIndexOutOfBoundsException( "illegal index: " + index + " into array of length " + data.length); } + if (data.length == 0) + return; // nothing more to do. if (stream == null) { throw new IllegalArgumentException("cannot write to nullstream"); @@ -241,39 +257,26 @@ public class HexDump } - public static final String EOL = - System.getProperty("line.separator"); - private static final StringBuffer _lbuffer = new StringBuffer(8); - private static final StringBuffer _cbuffer = new StringBuffer(2); - private static final char _hexcodes[] = - { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', - 'E', 'F' - }; - private static final int _shifts[] = - { - 28, 24, 20, 16, 12, 8, 4, 0 - }; - private static String dump(final long value) { - _lbuffer.setLength(0); + StringBuffer buf = new StringBuffer(); + buf.setLength(0); for (int j = 0; j < 8; j++) { - _lbuffer - .append(_hexcodes[ (( int ) (value >> _shifts[ j ])) & 15 ]); + buf.append( _hexcodes[ (( int ) (value >> _shifts[ j ])) & 15 ]); } - return _lbuffer.toString(); + return buf.toString(); } private static String dump(final byte value) { - _cbuffer.setLength(0); + StringBuffer buf = new StringBuffer(); + buf.setLength(0); for (int j = 0; j < 2; j++) { - _cbuffer.append(_hexcodes[ (value >> _shifts[ j + 6 ]) & 15 ]); + buf.append(_hexcodes[ (value >> _shifts[ j + 6 ]) & 15 ]); } - return _cbuffer.toString(); + return buf.toString(); } /** @@ -294,6 +297,7 @@ public class HexDump retVal.append(']'); return retVal.toString(); } + /** * Converts the parameter to a hex value. * @@ -337,4 +341,41 @@ public class HexDump } return result.toString(); } + + /** + * Dumps bytesToDump bytes to an output stream. + * + * @param in The stream to read from + * @param out The output stream + * @param start The index to use as the starting position for the left hand side label + * @param bytesToDump The number of bytes to output. Use -1 to read until the end of file. + */ + public static void dump( InputStream in, PrintStream out, int start, int bytesToDump ) throws IOException + { + ByteArrayOutputStream buf = new ByteArrayOutputStream(); + if (bytesToDump == -1) + { + int c = in.read(); + while (c != -1) + { + buf.write(c); + c = in.read(); + } + } + else + { + int bytesRemaining = bytesToDump; + while (bytesRemaining-- > 0) + { + int c = in.read(); + if (c == -1) + break; + else + buf.write(c); + } + } + + byte[] data = buf.toByteArray(); + dump(data, 0, out, start, data.length); + } } diff --git a/src/java/org/apache/poi/util/HexRead.java b/src/java/org/apache/poi/util/HexRead.java index 0be7930a7b..6c5eceb125 100644 --- a/src/java/org/apache/poi/util/HexRead.java +++ b/src/java/org/apache/poi/util/HexRead.java @@ -1 +1,225 @@ -/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache POI" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * "Apache POI", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . */package org.apache.poi.util;import java.io.IOException;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.List;import java.util.ArrayList;/** * Utilities to read hex from files. * * @author Marc Johnson * @author Glen Stampoultzis (glens at apache.org) */public class HexRead{ /** * This method reads hex data from a filename and returns a byte array. * The file may contain line comments that are preceeded with a # symbol. * * @param filename The filename to read * @return The bytes read from the file. * @throws IOException If there was a problem while reading the file. */ public static byte[] readData( String filename ) throws IOException { File file = new File( filename ); FileInputStream stream = new FileInputStream( file ); try { return readData(stream, -1); } finally { stream.close(); } } /** * Same as readData(String) except that this method allows you to specify sections within * a file. Sections are referenced using section headers in the form: *

         *  [sectioname]     * 
    * * @see #readData(String) */ public static byte[] readData(String filename, String section) throws IOException { File file = new File( filename ); FileInputStream stream = new FileInputStream( file ); try { StringBuffer sectionText = new StringBuffer(); boolean inSection = false; int c = stream.read(); while (c != -1) { switch(c) { case '[': inSection = true; break; case '\n': case '\r': inSection = false; sectionText = new StringBuffer(); break; case ']': inSection = false; if (sectionText.toString().equals(section)) return readData(stream, '['); sectionText = new StringBuffer(); break; default: if (inSection) sectionText.append((char)c); } c = stream.read(); } } finally { stream.close(); } throw new IOException("Section '" + section + "' not found"); } static private byte[] readData( FileInputStream stream, int eofChar ) throws IOException { int characterCount = 0; byte b = (byte) 0; List bytes = new ArrayList(); boolean done = false; while ( !done ) { int count = stream.read(); char baseChar = 'a'; if ( count == eofChar) break; switch ( count ) { case '#': readToEOL(stream); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': b <<= 4; b += (byte) ( count - '0' ); characterCount++; if ( characterCount == 2 ) { bytes.add( new Byte( b ) ); characterCount = 0; b = (byte) 0; } break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': baseChar = 'A'; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': b <<= 4; b += (byte) ( count + 10 - baseChar ); characterCount++; if ( characterCount == 2 ) { bytes.add( new Byte( b ) ); characterCount = 0; b = (byte) 0; } break; case -1: done = true; break; default : break; } } Byte[] polished = (Byte[]) bytes.toArray( new Byte[0] ); byte[] rval = new byte[polished.length]; for ( int j = 0; j < polished.length; j++ ) { rval[j] = polished[j].byteValue(); } return rval; } static private void readToEOL( InputStream stream ) throws IOException { int c = stream.read(); while ( c != -1 && c != '\n' && c != '\r') { c = stream.read(); } }} \ No newline at end of file +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.poi.util; + +import java.io.*; +import java.util.List; +import java.util.ArrayList; + +/** + * Utilities to read hex from files. + * + * @author Marc Johnson + * @author Glen Stampoultzis (glens at apache.org) */ +public class HexRead +{ + /** + * This method reads hex data from a filename and returns a byte array. + * The file may contain line comments that are preceeded with a # symbol. + * + * @param filename The filename to read + * @return The bytes read from the file. + * @throws IOException If there was a problem while reading the file. */ + public static byte[] readData( String filename ) throws IOException + { + File file = new File( filename ); + FileInputStream stream = new FileInputStream( file ); + try + { + return readData( stream, -1 ); + } + finally + { + stream.close(); + } + } + + /** + * Same as readData(String) except that this method allows you to specify sections within + * a file. Sections are referenced using section headers in the form: + *
    +     *  [sectioname]
    +     * 
    + * + * @see #readData(String) + */ + public static byte[] readData( String filename, String section ) throws IOException + { + File file = new File( filename ); + FileInputStream stream = new FileInputStream( file ); + try + { + StringBuffer sectionText = new StringBuffer(); + boolean inSection = false; + int c = stream.read(); + while ( c != -1 ) + { + switch ( c ) + { + case '[': + inSection = true; + break; + case '\n': + case '\r': + inSection = false; + sectionText = new StringBuffer(); + break; + case ']': + inSection = false; + if ( sectionText.toString().equals( section ) ) return readData( stream, '[' ); + sectionText = new StringBuffer(); + break; + default: + if ( inSection ) sectionText.append( (char) c ); + } + c = stream.read(); + } + } + finally + { + stream.close(); + } + throw new IOException( "Section '" + section + "' not found" ); + } + + static public byte[] readData( InputStream stream, int eofChar ) throws IOException + { + int characterCount = 0; + byte b = (byte) 0; + List bytes = new ArrayList(); + boolean done = false; + while ( !done ) + { + int count = stream.read(); + char baseChar = 'a'; + if ( count == eofChar ) break; + switch ( count ) + { + case '#': + readToEOL( stream ); + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + b <<= 4; + b += (byte) ( count - '0' ); + characterCount++; + if ( characterCount == 2 ) + { + bytes.add( new Byte( b ) ); + characterCount = 0; + b = (byte) 0; + } + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + baseChar = 'A'; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + b <<= 4; + b += (byte) ( count + 10 - baseChar ); + characterCount++; + if ( characterCount == 2 ) + { + bytes.add( new Byte( b ) ); + characterCount = 0; + b = (byte) 0; + } + break; + case -1: + done = true; + break; + default : + break; + } + } + Byte[] polished = (Byte[]) bytes.toArray( new Byte[0] ); + byte[] rval = new byte[polished.length]; + for ( int j = 0; j < polished.length; j++ ) + { + rval[j] = polished[j].byteValue(); + } + return rval; + } + + static public byte[] readFromString(String data) throws IOException + { + return readData(new ByteArrayInputStream( data.getBytes() ), -1); + } + + static private void readToEOL( InputStream stream ) throws IOException + { + int c = stream.read(); + while ( c != -1 && c != '\n' && c != '\r' ) + { + c = stream.read(); + } + } +} \ No newline at end of file diff --git a/src/java/org/apache/poi/util/IOUtils.java b/src/java/org/apache/poi/util/IOUtils.java new file mode 100644 index 0000000000..06089b00d7 --- /dev/null +++ b/src/java/org/apache/poi/util/IOUtils.java @@ -0,0 +1,99 @@ + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.poi.util; + +import java.io.IOException; +import java.io.InputStream; + +public class IOUtils +{ + private IOUtils() + { + } + + /** + * Helper method, just calls readFully(in, b, 0, b.length) + */ + public static int readFully(InputStream in, byte[] b) + throws IOException + { + return readFully(in, b, 0, b.length); + } + + /** + * Same as the normal in.read(b, off, len), but tries to ensure that + * the entire len number of bytes is read. + *

    + * If the end of file is reached before any bytes are read, returns -1. + * Otherwise, returns the number of bytes read. + */ + public static int readFully(InputStream in, byte[] b, int off, int len) + throws IOException + { + int total = 0; + for (;;) { + int got = in.read(b, off + total, len - total); + if (got < 0) { + return (total == 0) ? -1 : total; + } else { + total += got; + if (total == len) + return total; + } + } + } +} + diff --git a/src/java/org/apache/poi/util/LittleEndian.java b/src/java/org/apache/poi/util/LittleEndian.java index 0f525c156d..4c4b51a011 100644 --- a/src/java/org/apache/poi/util/LittleEndian.java +++ b/src/java/org/apache/poi/util/LittleEndian.java @@ -475,23 +475,10 @@ public class LittleEndian return getLong(readFromStream(stream, LONG_SIZE)); } - - private final static byte[] _short_buffer = new byte[SHORT_SIZE]; - private final static byte[] _int_buffer = new byte[INT_SIZE]; - private final static byte[] _long_buffer = new byte[LONG_SIZE]; - - /** * Read the appropriate number of bytes from the stream and return them to * the caller.

    * - * It should be noted that, in an attempt to improve system performance and - * to prevent a transient explosion of discarded byte arrays to be garbage - * collected, static byte arrays are employed for the standard cases of - * reading a short, an int, or a long.

    - * - * THIS INTRODUCES A RISK FOR THREADED OPERATIONS!

    - * * However, for the purposes of the POI project, this risk is deemed * negligible. It is, however, so noted. * @@ -510,23 +497,8 @@ public class LittleEndian public static byte[] readFromStream(final InputStream stream, final int size) throws IOException, BufferUnderrunException { - byte[] buffer = null; + byte[] buffer = new byte[size]; - switch (size) { - - case SHORT_SIZE: - buffer = _short_buffer; - break; - case INT_SIZE: - buffer = _int_buffer; - break; - case LONG_SIZE: - buffer = _long_buffer; - break; - default: - buffer = new byte[size]; - break; - } int count = stream.read(buffer); if (count == -1) { diff --git a/src/java/org/apache/poi/util/StringUtil.java b/src/java/org/apache/poi/util/StringUtil.java index 845854e599..a2ef1247da 100644 --- a/src/java/org/apache/poi/util/StringUtil.java +++ b/src/java/org/apache/poi/util/StringUtil.java @@ -1 +1,363 @@ -/* * ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache POI" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * "Apache POI", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . */package org.apache.poi.util;import java.io.UnsupportedEncodingException;import java.text.NumberFormat;import java.text.FieldPosition;/** * Title: String Utility Description: Collection of string handling utilities * * Now it is quite confusing: the method pairs, in which * one of them write data and other read written data are: * putUncompressedUnicodeHigh and getFromUnicode * putUncompressedUnicode and getFromUnicodeHigh * *@author Andrew C. Oliver *@author Sergei Kozello (sergeikozello at mail.ru) *@created May 10, 2002 *@version 1.0 */public class StringUtil { private final static String ENCODING="ISO-8859-1"; /** * Constructor for the StringUtil object */ private StringUtil() { } /** * given a byte array of 16-bit unicode characters, compress to 8-bit and * return a string * * { 0x16, 0x00 } -> 0x16 * *@param string the byte array to be converted *@param offset the initial offset into the * byte array. it is assumed that string[ offset ] and string[ offset + * 1 ] contain the first 16-bit unicode character *@param len *@return the converted string *@exception ArrayIndexOutOfBoundsException if offset is out of bounds for * the byte array (i.e., is negative or is greater than or equal to * string.length) *@exception IllegalArgumentException if len is too large (i.e., * there is not enough data in string to create a String of that * length) *@len the length of the final string */ public static String getFromUnicodeHigh(final byte[] string, final int offset, final int len) throws ArrayIndexOutOfBoundsException, IllegalArgumentException { if ((offset < 0) || (offset >= string.length)) { throw new ArrayIndexOutOfBoundsException("Illegal offset"); } if ((len < 0) || (((string.length - offset) / 2) < len)) { throw new IllegalArgumentException("Illegal length"); } char[] chars = new char[ len ]; for ( int i = 0; i < chars.length; i++ ) { chars[i] = (char)( string[ offset + ( 2*i ) ] & 0xFF | ( string[ offset + ( 2*i+1 ) ] << 8 ) ); } return new String( chars ); } /** * given a byte array of 16-bit unicode characters, compress to 8-bit and * return a string * * { 0x16, 0x00 } -> 0x16 * *@param string the byte array to be converted *@return the converted string */ public static String getFromUnicodeHigh( final byte[] string ) { return getFromUnicodeHigh( string, 0, string.length / 2 ); } /** * given a byte array of 16-bit unicode characters, compress to 8-bit and * return a string * * { 0x00, 0x16 } -> 0x16 * *@param string the byte array to be converted *@param offset the initial offset into the * byte array. it is assumed that string[ offset ] and string[ offset + * 1 ] contain the first 16-bit unicode character *@param len *@return the converted string *@exception ArrayIndexOutOfBoundsException if offset is out of bounds for * the byte array (i.e., is negative or is greater than or equal to * string.length) *@exception IllegalArgumentException if len is too large (i.e., * there is not enough data in string to create a String of that * length) *@len the length of the final string */ public static String getFromUnicode(final byte[] string, final int offset, final int len) throws ArrayIndexOutOfBoundsException, IllegalArgumentException { if ((offset < 0) || (offset >= string.length)) { throw new ArrayIndexOutOfBoundsException("Illegal offset"); } if ((len < 0) || (((string.length - offset) / 2) < len)) { throw new IllegalArgumentException("Illegal length"); } char[] chars = new char[ len ]; for ( int i = 0; i < chars.length; i++ ) { chars[i] = (char)( ( string[ offset + ( 2*i ) ] << 8 ) + string[ offset + ( 2*i+1 ) ] ); } return new String( chars ); } /** * given a byte array of 16-bit unicode characters, compress to 8-bit and * return a string * * { 0x00, 0x16 } -> 0x16 * *@param string the byte array to be converted *@return the converted string */ public static String getFromUnicode(final byte[] string) { return getFromUnicode(string, 0, string.length / 2); } /** * read compressed unicode(8bit) * * @author Toshiaki Kamoshida(kamoshida.toshiaki at future dot co dot jp) * * @param string byte array to read * @param offset offset to read byte array * @param len length to read byte array * @return String generated String instance by reading byte array */ public static String getFromCompressedUnicode(final byte[] string, final int offset, final int len){ try{ return new String(string,offset,len,"ISO-8859-1"); } catch(UnsupportedEncodingException e){ throw new InternalError();/* unreachable */ } } /** * write compressed unicode * *@param input the String containing the data to be written *@param output the byte array to which the data is to be written *@param offset an offset into the byte arrat at which the data is start * when written */ public static void putCompressedUnicode(final String input, final byte[] output, final int offset) { int strlen = input.length(); for (int k = 0; k < strlen; k++) { output[offset + k] = (byte) input.charAt(k); } } /** * Write uncompressed unicode * *@param input the String containing the unicode data to be written *@param output the byte array to hold the uncompressed unicode *@param offset the offset to start writing into the byte array */ public static void putUncompressedUnicode(final String input, final byte[] output, final int offset) { int strlen = input.length(); for (int k = 0; k < strlen; k++) { char c = input.charAt(k); output[offset + (2 * k)] = (byte) c; output[offset + (2 * k) + 1] = (byte) (c >> 8); } } /** * Write uncompressed unicode * *@param input the String containing the unicode data to be written *@param output the byte array to hold the uncompressed unicode *@param offset the offset to start writing into the byte array */ public static void putUncompressedUnicodeHigh(final String input, final byte[] output, final int offset) { int strlen = input.length(); for (int k = 0; k < strlen; k++) { char c = input.charAt(k); output[offset + (2 * k)] = (byte) (c >> 8); output[offset + (2 * k)] = (byte) c; } } /** * Description of the Method * *@param message Description of the Parameter *@param params Description of the Parameter *@return Description of the Return Value */ public static String format(String message, Object[] params) { int currentParamNumber = 0; StringBuffer formattedMessage = new StringBuffer(); for (int i = 0; i < message.length(); i++) { if (message.charAt(i) == '%') { if (currentParamNumber >= params.length) { formattedMessage.append("?missing data?"); } else if ((params[currentParamNumber] instanceof Number) && (i + 1 < message.length())) { i += matchOptionalFormatting( (Number) params[currentParamNumber++], message.substring(i + 1), formattedMessage); } else { formattedMessage.append(params[currentParamNumber++].toString()); } } else { if ((message.charAt(i) == '\\') && (i + 1 < message.length()) && (message.charAt(i + 1) == '%')) { formattedMessage.append('%'); i++; } else { formattedMessage.append(message.charAt(i)); } } } return formattedMessage.toString(); } /** * Description of the Method * *@param number Description of the Parameter *@param formatting Description of the Parameter *@param outputTo Description of the Parameter *@return Description of the Return Value */ private static int matchOptionalFormatting(Number number, String formatting, StringBuffer outputTo) { NumberFormat numberFormat = NumberFormat.getInstance(); if ((0 < formatting.length()) && Character.isDigit(formatting.charAt(0))) { numberFormat.setMinimumIntegerDigits(Integer.parseInt(formatting.charAt(0) + "")); if ((2 < formatting.length()) && (formatting.charAt(1) == '.') && Character.isDigit(formatting.charAt(2))) { numberFormat.setMaximumFractionDigits(Integer.parseInt(formatting.charAt(2) + "")); numberFormat.format(number, outputTo, new FieldPosition(0)); return 3; } numberFormat.format(number, outputTo, new FieldPosition(0)); return 1; } else if ((0 < formatting.length()) && (formatting.charAt(0) == '.')) { if ((1 < formatting.length()) && Character.isDigit(formatting.charAt(1))) { numberFormat.setMaximumFractionDigits(Integer.parseInt(formatting.charAt(1) + "")); numberFormat.format(number, outputTo, new FieldPosition(0)); return 2; } } numberFormat.format(number, outputTo, new FieldPosition(0)); return 1; } /** * @return the encoding we want to use (ISO-8859-1) */ public static String getPreferredEncoding() { return ENCODING; }} \ No newline at end of file +/* + * ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ +package org.apache.poi.util; + +import java.io.UnsupportedEncodingException; + +import java.text.NumberFormat; +import java.text.FieldPosition; + +/** + * Title: String Utility Description: Collection of string handling utilities + * + * Now it is quite confusing: the method pairs, in which + * one of them write data and other read written data are: + * putUncompressedUnicodeHigh and getFromUnicode + * putUncompressedUnicode and getFromUnicodeHigh + * + *@author Andrew C. Oliver + *@author Sergei Kozello (sergeikozello at mail.ru) + *@created May 10, 2002 + *@version 1.0 + */ + +public class StringUtil { + + private final static String ENCODING="ISO-8859-1"; + /** + * Constructor for the StringUtil object + */ + private StringUtil() { } + + + /** + * given a byte array of 16-bit unicode characters, compress to 8-bit and + * return a string + * + * { 0x16, 0x00 } -> 0x16 + * + *@param string the byte array to be converted + *@param offset the initial offset into the + * byte array. it is assumed that string[ offset ] and string[ offset + + * 1 ] contain the first 16-bit unicode character + *@param len + *@return the converted string + *@exception ArrayIndexOutOfBoundsException if offset is out of bounds for + * the byte array (i.e., is negative or is greater than or equal to + * string.length) + *@exception IllegalArgumentException if len is too large (i.e., + * there is not enough data in string to create a String of that + * length) + *@len the length of the final string + */ + + public static String getFromUnicodeHigh(final byte[] string, + final int offset, final int len) + throws ArrayIndexOutOfBoundsException, IllegalArgumentException { + + if ((offset < 0) || (offset >= string.length)) { + throw new ArrayIndexOutOfBoundsException("Illegal offset"); + } + if ((len < 0) || (((string.length - offset) / 2) < len)) { + throw new IllegalArgumentException("Illegal length"); + } + + char[] chars = new char[ len ]; + for ( int i = 0; i < chars.length; i++ ) { + chars[i] = (char)( string[ offset + ( 2*i ) ] & 0xFF | + ( string[ offset + ( 2*i+1 ) ] << 8 ) ); + } + + return new String( chars ); + } + + + /** + * given a byte array of 16-bit unicode characters, compress to 8-bit and + * return a string + * + * { 0x16, 0x00 } -> 0x16 + * + *@param string the byte array to be converted + *@return the converted string + */ + + public static String getFromUnicodeHigh( final byte[] string ) { + return getFromUnicodeHigh( string, 0, string.length / 2 ); + } + + + /** + * given a byte array of 16-bit unicode characters, compress to 8-bit and + * return a string + * + * { 0x00, 0x16 } -> 0x16 + * + *@param string the byte array to be converted + *@param offset the initial offset into the + * byte array. it is assumed that string[ offset ] and string[ offset + + * 1 ] contain the first 16-bit unicode character + *@param len + *@return the converted string + *@exception ArrayIndexOutOfBoundsException if offset is out of bounds for + * the byte array (i.e., is negative or is greater than or equal to + * string.length) + *@exception IllegalArgumentException if len is too large (i.e., + * there is not enough data in string to create a String of that + * length) + *@len the length of the final string + */ + + public static String getFromUnicode(final byte[] string, + final int offset, final int len) + throws ArrayIndexOutOfBoundsException, IllegalArgumentException { + if ((offset < 0) || (offset >= string.length)) { + throw new ArrayIndexOutOfBoundsException("Illegal offset"); + } + if ((len < 0) || (((string.length - offset) / 2) < len)) { + throw new IllegalArgumentException("Illegal length"); + } + + + char[] chars = new char[ len ]; + for ( int i = 0; i < chars.length; i++ ) { + chars[i] = (char)( ( string[ offset + ( 2*i ) ] << 8 ) + + string[ offset + ( 2*i+1 ) ] ); + } + + return new String( chars ); + } + + + /** + * given a byte array of 16-bit unicode characters, compress to 8-bit and + * return a string + * + * { 0x00, 0x16 } -> 0x16 + * + *@param string the byte array to be converted + *@return the converted string + */ + + public static String getFromUnicode(final byte[] string) { + return getFromUnicode(string, 0, string.length / 2); + } + + + /** + * read compressed unicode(8bit) + * + * @author Toshiaki Kamoshida(kamoshida.toshiaki at future dot co dot jp) + * + * @param string byte array to read + * @param offset offset to read byte array + * @param len length to read byte array + * @return String generated String instance by reading byte array + */ + public static String getFromCompressedUnicode(final byte[] string, + final int offset, final int len){ + try{ + return new String(string,offset,len,"ISO-8859-1"); + } + catch(UnsupportedEncodingException e){ + throw new InternalError();/* unreachable */ + } + } + + /** + * write compressed unicode + * + *@param input the String containing the data to be written + *@param output the byte array to which the data is to be written + *@param offset an offset into the byte arrat at which the data is start + * when written + */ + + public static void putCompressedUnicode(final String input, + final byte[] output, + final int offset) { + int strlen = input.length(); + + for (int k = 0; k < strlen; k++) { + output[offset + k] = (byte) input.charAt(k); + } + } + + + /** + * Write uncompressed unicode + * + *@param input the String containing the unicode data to be written + *@param output the byte array to hold the uncompressed unicode + *@param offset the offset to start writing into the byte array + */ + + public static void putUncompressedUnicode(final String input, + final byte[] output, + final int offset) { + int strlen = input.length(); + + for (int k = 0; k < strlen; k++) { + char c = input.charAt(k); + + output[offset + (2 * k)] = (byte) c; + output[offset + (2 * k) + 1] = (byte) (c >> 8); + } + } + + /** + * Write uncompressed unicode + * + *@param input the String containing the unicode data to be written + *@param output the byte array to hold the uncompressed unicode + *@param offset the offset to start writing into the byte array + */ + + public static void putUncompressedUnicodeHigh(final String input, + final byte[] output, + final int offset) { + int strlen = input.length(); + + for (int k = 0; k < strlen; k++) { + char c = input.charAt(k); + + output[offset + (2 * k)] = (byte) (c >> 8); + output[offset + (2 * k)] = (byte) c; + } + } + + + + + /** + * Description of the Method + * + *@param message Description of the Parameter + *@param params Description of the Parameter + *@return Description of the Return Value + */ + public static String format(String message, Object[] params) { + int currentParamNumber = 0; + StringBuffer formattedMessage = new StringBuffer(); + + for (int i = 0; i < message.length(); i++) { + if (message.charAt(i) == '%') { + if (currentParamNumber >= params.length) { + formattedMessage.append("?missing data?"); + } else if ((params[currentParamNumber] instanceof Number) + && (i + 1 < message.length())) { + i += matchOptionalFormatting( + (Number) params[currentParamNumber++], + message.substring(i + 1), formattedMessage); + } else { + formattedMessage.append(params[currentParamNumber++].toString()); + } + } else { + if ((message.charAt(i) == '\\') && (i + 1 < message.length()) + && (message.charAt(i + 1) == '%')) { + formattedMessage.append('%'); + i++; + } else { + formattedMessage.append(message.charAt(i)); + } + } + } + return formattedMessage.toString(); + } + + + /** + * Description of the Method + * + *@param number Description of the Parameter + *@param formatting Description of the Parameter + *@param outputTo Description of the Parameter + *@return Description of the Return Value + */ + private static int matchOptionalFormatting(Number number, + String formatting, + StringBuffer outputTo) { + NumberFormat numberFormat = NumberFormat.getInstance(); + + if ((0 < formatting.length()) + && Character.isDigit(formatting.charAt(0))) { + numberFormat.setMinimumIntegerDigits(Integer.parseInt(formatting.charAt(0) + "")); + if ((2 < formatting.length()) && (formatting.charAt(1) == '.') + && Character.isDigit(formatting.charAt(2))) { + numberFormat.setMaximumFractionDigits(Integer.parseInt(formatting.charAt(2) + "")); + numberFormat.format(number, outputTo, new FieldPosition(0)); + return 3; + } + numberFormat.format(number, outputTo, new FieldPosition(0)); + return 1; + } else if ((0 < formatting.length()) && (formatting.charAt(0) == '.')) { + if ((1 < formatting.length()) + && Character.isDigit(formatting.charAt(1))) { + numberFormat.setMaximumFractionDigits(Integer.parseInt(formatting.charAt(1) + "")); + numberFormat.format(number, outputTo, new FieldPosition(0)); + return 2; + } + } + numberFormat.format(number, outputTo, new FieldPosition(0)); + return 1; + } + + /** + * @return the encoding we want to use (ISO-8859-1) + */ + public static String getPreferredEncoding() { + return ENCODING; + } +} \ No newline at end of file diff --git a/src/java/org/apache/poi/util/SystemOutLogger.java b/src/java/org/apache/poi/util/SystemOutLogger.java index ccd9522a12..98458f7917 100644 --- a/src/java/org/apache/poi/util/SystemOutLogger.java +++ b/src/java/org/apache/poi/util/SystemOutLogger.java @@ -63,13 +63,12 @@ import java.util.*; * A logger class that strives to make it as easy as possible for * developers to write log calls, while simultaneously making those * calls as cheap as possible by performing lazy evaluation of the log - * message.

    + * message. * * @author Marc Johnson (mjohnson at apache dot org) * @author Glen Stampoultzis (glens at apache.org) * @author Nicola Ken Barozzi (nicolaken at apache.org) */ - public class SystemOutLogger extends POILogger { private String cat; @@ -88,19 +87,27 @@ public class SystemOutLogger extends POILogger public void log(final int level, final Object obj1) { - System.out.println("["+cat+"] "+obj1); + if (check(level)) + System.out.println("["+cat+"] "+obj1); } /** * Check if a logger is enabled to log at the specified level * * @param level One of DEBUG, INFO, WARN, ERROR, FATAL - * @param obj1 The logger to check. + * @see #DEBUG + * @see #INFO + * @see #WARN + * @see #ERROR + * @see #FATAL */ - public boolean check(final int level) { - return true; + int currentLevel = Integer.parseInt(System.getProperty("poi.log.level", WARN + "")); + if (level >= currentLevel) + return true; + else + return false; } diff --git a/src/testcases/org/apache/poi/hpsf/basic/POIFile.java b/src/testcases/org/apache/poi/hpsf/basic/POIFile.java index 9786f35866..288242f1c4 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/POIFile.java +++ b/src/testcases/org/apache/poi/hpsf/basic/POIFile.java @@ -53,7 +53,8 @@ */ package org.apache.poi.hpsf.basic; -import org.apache.poi.poifs.filesystem.*; + +import org.apache.poi.poifs.filesystem.POIFSDocumentPath; @@ -73,32 +74,32 @@ public class POIFile public void setName(final String name) { - this.name = name; + this.name = name; } public String getName() { - return name; + return name; } public void setPath(final POIFSDocumentPath path) { - this.path = path; + this.path = path; } public POIFSDocumentPath getPath() { - return path; + return path; } public void setBytes(final byte[] bytes) { - this.bytes = bytes; + this.bytes = bytes; } public byte[] getBytes() { - return bytes; + return bytes; } } diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java b/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java index 474489b638..0357c5a233 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java +++ b/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java @@ -54,10 +54,23 @@ package org.apache.poi.hpsf.basic; -import java.io.*; -import java.util.*; -import junit.framework.*; -import org.apache.poi.hpsf.*; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import org.apache.poi.hpsf.DocumentSummaryInformation; +import org.apache.poi.hpsf.HPSFException; +import org.apache.poi.hpsf.MarkUnsupportedException; +import org.apache.poi.hpsf.NoPropertySetStreamException; +import org.apache.poi.hpsf.PropertySet; +import org.apache.poi.hpsf.PropertySetFactory; +import org.apache.poi.hpsf.SummaryInformation; +import org.apache.poi.hpsf.UnexpectedPropertySetTypeException; @@ -71,37 +84,37 @@ import org.apache.poi.hpsf.*; public class TestBasic extends TestCase { - final static String POI_FS = "TestGermanWord90.doc"; - final static String[] POI_FILES = new String[] - { - "\005SummaryInformation", - "\005DocumentSummaryInformation", - "WordDocument", - "\001CompObj", - "1Table" - }; - final static int BYTE_ORDER = 0xfffe; - final static int FORMAT = 0x0000; - final static int OS_VERSION = 0x00020A04; - final static byte[] CLASS_ID = - { - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 - }; - final static int[] SECTION_COUNT = + static final String POI_FS = "TestGermanWord90.doc"; + static final String[] POI_FILES = new String[] + { + "\005SummaryInformation", + "\005DocumentSummaryInformation", + "WordDocument", + "\001CompObj", + "1Table" + }; + static final int BYTE_ORDER = 0xfffe; + static final int FORMAT = 0x0000; + static final int OS_VERSION = 0x00020A04; + static final byte[] CLASS_ID = + { + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 + }; + static final int[] SECTION_COUNT = {1, 2}; - final static boolean[] IS_SUMMARY_INFORMATION = + static final boolean[] IS_SUMMARY_INFORMATION = {true, false}; - final static boolean[] IS_DOCUMENT_SUMMARY_INFORMATION = - {false, true}; + static final boolean[] IS_DOCUMENT_SUMMARY_INFORMATION = + {false, true}; POIFile[] poiFiles; - public TestBasic(String name) + public TestBasic(final String name) { super(name); } @@ -113,11 +126,11 @@ public class TestBasic extends TestCase */ public void setUp() throws FileNotFoundException, IOException { - final File dataDir = - new File(System.getProperty("HPSF.testdata.path")); - final File data = new File(dataDir, POI_FS); + final File dataDir = + new File(System.getProperty("HPSF.testdata.path")); + final File data = new File(dataDir, POI_FS); - poiFiles = Util.readPOIFiles(data); + poiFiles = Util.readPOIFiles(data); } @@ -128,9 +141,9 @@ public class TestBasic extends TestCase */ public void testReadFiles() throws IOException { - String[] expected = POI_FILES; - for (int i = 0; i < expected.length; i++) - Assert.assertEquals(poiFiles[i].getName(), expected[i]); + String[] expected = POI_FILES; + for (int i = 0; i < expected.length; i++) + Assert.assertEquals(poiFiles[i].getName(), expected[i]); } @@ -146,37 +159,37 @@ public class TestBasic extends TestCase */ public void testCreatePropertySets() throws IOException { - Class[] expected = new Class[] - { - SummaryInformation.class, - DocumentSummaryInformation.class, - NoPropertySetStreamException.class, - NoPropertySetStreamException.class, - NoPropertySetStreamException.class - }; - for (int i = 0; i < expected.length; i++) - { - InputStream in = new ByteArrayInputStream(poiFiles[i].getBytes()); - Object o; - try - { - o = PropertySetFactory.create(in); - } - catch (NoPropertySetStreamException ex) - { - o = ex; - } - catch (UnexpectedPropertySetTypeException ex) - { - o = ex; - } - catch (MarkUnsupportedException ex) - { - o = ex; - } - in.close(); - Assert.assertEquals(o.getClass(), expected[i]); - } + Class[] expected = new Class[] + { + SummaryInformation.class, + DocumentSummaryInformation.class, + NoPropertySetStreamException.class, + NoPropertySetStreamException.class, + NoPropertySetStreamException.class + }; + for (int i = 0; i < expected.length; i++) + { + InputStream in = new ByteArrayInputStream(poiFiles[i].getBytes()); + Object o; + try + { + o = PropertySetFactory.create(in); + } + catch (NoPropertySetStreamException ex) + { + o = ex; + } + catch (UnexpectedPropertySetTypeException ex) + { + o = ex; + } + catch (MarkUnsupportedException ex) + { + o = ex; + } + in.close(); + Assert.assertEquals(o.getClass(), expected[i]); + } } @@ -188,25 +201,24 @@ public class TestBasic extends TestCase */ public void testPropertySetMethods() throws IOException, HPSFException { - String[] expected = POI_FILES; - /* Loop over the two property sets. */ - for (int i = 0; i < 2; i++) - { - byte[] b = poiFiles[i].getBytes(); - PropertySet ps = - PropertySetFactory.create(new ByteArrayInputStream(b)); - Assert.assertEquals(ps.getByteOrder(), BYTE_ORDER); - Assert.assertEquals(ps.getFormat(), FORMAT); - Assert.assertEquals(ps.getOSVersion(), OS_VERSION); - Assert.assertEquals(new String(ps.getClassID().getBytes()), - new String(CLASS_ID)); - Assert.assertEquals(ps.getSectionCount(), SECTION_COUNT[i]); - Assert.assertEquals(ps.isSummaryInformation(), - IS_SUMMARY_INFORMATION[i]); - Assert.assertEquals(ps.isDocumentSummaryInformation(), - IS_DOCUMENT_SUMMARY_INFORMATION[i]); - } + /* Loop over the two property sets. */ + for (int i = 0; i < 2; i++) + { + byte[] b = poiFiles[i].getBytes(); + PropertySet ps = + PropertySetFactory.create(new ByteArrayInputStream(b)); + Assert.assertEquals(ps.getByteOrder(), BYTE_ORDER); + Assert.assertEquals(ps.getFormat(), FORMAT); + Assert.assertEquals(ps.getOSVersion(), OS_VERSION); + Assert.assertEquals(new String(ps.getClassID().getBytes()), + new String(CLASS_ID)); + Assert.assertEquals(ps.getSectionCount(), SECTION_COUNT[i]); + Assert.assertEquals(ps.isSummaryInformation(), + IS_SUMMARY_INFORMATION[i]); + Assert.assertEquals(ps.isDocumentSummaryInformation(), + IS_DOCUMENT_SUMMARY_INFORMATION[i]); + } } @@ -214,11 +226,11 @@ public class TestBasic extends TestCase /** *

    Runs the test cases stand-alone.

    */ - public static void main(String[] args) throws Throwable + public static void main(final String[] args) throws Throwable { - System.setProperty("HPSF.testdata.path", - "./src/testcases/org/apache/poi/hpsf/data"); - junit.textui.TestRunner.run(TestBasic.class); + System.setProperty("HPSF.testdata.path", + "./src/testcases/org/apache/poi/hpsf/data"); + junit.textui.TestRunner.run(TestBasic.class); } } diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestClassID.java b/src/testcases/org/apache/poi/hpsf/basic/TestClassID.java new file mode 100644 index 0000000000..c36f8161ec --- /dev/null +++ b/src/testcases/org/apache/poi/hpsf/basic/TestClassID.java @@ -0,0 +1,171 @@ +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2003 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.poi.hpsf.basic; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import org.apache.poi.hpsf.ClassID; + +/** + *

    Tests ClassID structure.

    + * + * @author Michael Zalewski (zalewski@optonline.net) + */ +public class TestClassID extends TestCase +{ + /** + *

    Constructor

    + * + * @param name the test case's name + */ + public TestClassID(final String name) + { + super(name); + } + + /** + * Various tests of overridden .equals() + */ + public void testEquals() + { + ClassID clsidTest1 = new ClassID( + new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 + , 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 } + , 0 + ); + ClassID clsidTest2 = new ClassID( + new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 + , 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 } + , 0 + ); + ClassID clsidTest3 = new ClassID( + new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 + , 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x11 } + , 0 + ); + Assert.assertEquals( clsidTest1, clsidTest1); + Assert.assertEquals( clsidTest1, clsidTest2); + Assert.assertFalse( clsidTest1.equals( clsidTest3)); + Assert.assertFalse( clsidTest1.equals( null)); + } + /** + * Try to write to a buffer that is too small. This should + * throw an Exception + */ + public void testWriteArrayStoreException() + { + ClassID clsidTest = new ClassID( + new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 + , 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 } + , 0 + ); + boolean bExceptionOccurred = false; + try { + clsidTest.write( new byte[ 15], 0); + } catch( Exception e) { + bExceptionOccurred = true; + } + Assert.assertTrue( bExceptionOccurred); + + bExceptionOccurred = false; + try { + clsidTest.write( new byte[ 16], 1); + } catch( Exception e) { + bExceptionOccurred = true; + } + Assert.assertTrue( bExceptionOccurred); + + // These should work without throwing an Exception + bExceptionOccurred = false; + try { + clsidTest.write( new byte[ 16], 0); + clsidTest.write( new byte[ 17], 1); + } catch( Exception e) { + bExceptionOccurred = true; + } + Assert.assertFalse( bExceptionOccurred); + } + /** + *

    Tests the {@link PropertySet} methods. The test file has two + * property set: the first one is a {@link SummaryInformation}, + * the second one is a {@link DocumentSummaryInformation}.

    + */ + public void testClassID() + { + ClassID clsidTest = new ClassID( + new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 + , 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 } + , 0 + ); + Assert.assertEquals( + clsidTest.toString().toUpperCase() + , "{04030201-0605-0807-090A-0B0C0D0E0F10}" + ); + } + + + + /** + *

    Runs the test cases stand-alone.

    + */ + public static void main(final String[] args) + { + System.setProperty("HPSF.testdata.path", + "./src/testcases/org/apache/poi/hpsf/data"); + junit.textui.TestRunner.run(TestClassID.class); + } + +} diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestEmptyProperties.java b/src/testcases/org/apache/poi/hpsf/basic/TestEmptyProperties.java new file mode 100644 index 0000000000..fbe9fbf7f9 --- /dev/null +++ b/src/testcases/org/apache/poi/hpsf/basic/TestEmptyProperties.java @@ -0,0 +1,189 @@ +package org.apache.poi.hpsf.basic; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import org.apache.poi.hpsf.HPSFException; +import org.apache.poi.hpsf.MarkUnsupportedException; +import org.apache.poi.hpsf.NoPropertySetStreamException; +import org.apache.poi.hpsf.PropertySet; +import org.apache.poi.hpsf.PropertySetFactory; +import org.apache.poi.hpsf.SummaryInformation; +import org.apache.poi.hpsf.UnexpectedPropertySetTypeException; + +/** + *

    Test case for OLE2 files with empty properties. An empty property's type + * is {@link Variant.VT_EMPTY}.

    + * + * @author Rainer Klute <klute@rainer-klute.de> + * @since 2003-07-25 + * @version $Id$ + */ +public class TestEmptyProperties extends TestCase +{ + + /** + *

    This test file's summary information stream contains some empty + * properties.

    + */ + static final String POI_FS = "TestCorel.shw"; + + static final String[] POI_FILES = new String[] + { + "PerfectOffice_MAIN", + "\005SummaryInformation", + "Main" + }; + + POIFile[] poiFiles; + + + + /** + *

    Constructor

    + * + * @param name The name of the test case + */ + public TestEmptyProperties(final String name) + { + super(name); + } + + + + /** + *

    Read a the test file from the "data" directory.

    + * + * @exception FileNotFoundException if the file containing the test data + * does not exist + * @exception IOException if an I/O exception occurs + */ + public void setUp() throws FileNotFoundException, IOException + { + final File dataDir = + new File(System.getProperty("HPSF.testdata.path")); + final File data = new File(dataDir, POI_FS); + + poiFiles = Util.readPOIFiles(data); + } + + + + /** + *

    Checks the names of the files in the POI filesystem. They + * are expected to be in a certain order.

    + * + * @exception IOException if an I/O exception occurs + */ + public void testReadFiles() throws IOException + { + String[] expected = POI_FILES; + for (int i = 0; i < expected.length; i++) + Assert.assertEquals(poiFiles[i].getName(), expected[i]); + } + + + + /** + *

    Tests whether property sets can be created from the POI + * files in the POI file system. This test case expects the first + * file to be a {@link SummaryInformation}, the second file to be + * a {@link DocumentSummaryInformation} and the rest to be no + * property sets. In the latter cases a {@link + * NoPropertySetStreamException} will be thrown when trying to + * create a {@link PropertySet}.

    + * + * @exception IOException if an I/O exception occurs + */ + public void testCreatePropertySets() throws IOException + { + Class[] expected = new Class[] + { + NoPropertySetStreamException.class, + SummaryInformation.class, + NoPropertySetStreamException.class + }; + for (int i = 0; i < expected.length; i++) + { + InputStream in = new ByteArrayInputStream(poiFiles[i].getBytes()); + Object o; + try + { + o = PropertySetFactory.create(in); + } + catch (NoPropertySetStreamException ex) + { + o = ex; + } + catch (UnexpectedPropertySetTypeException ex) + { + o = ex; + } + catch (MarkUnsupportedException ex) + { + o = ex; + } + in.close(); + Assert.assertEquals(o.getClass(), expected[i]); + } + } + + + + /** + *

    Tests the {@link PropertySet} methods. The test file has two + * property sets: the first one is a {@link SummaryInformation}, + * the second one is a {@link DocumentSummaryInformation}.

    + * + * @exception IOException if an I/O exception occurs + * @exception HPSFException if an HPSF operation fails + */ + public void testPropertySetMethods() throws IOException, HPSFException + { + byte[] b = poiFiles[1].getBytes(); + PropertySet ps = + PropertySetFactory.create(new ByteArrayInputStream(b)); + SummaryInformation s = (SummaryInformation) ps; + assertNull(s.getTitle()); + assertNull(s.getSubject()); + assertNotNull(s.getAuthor()); + assertNull(s.getKeywords()); + assertNull(s.getComments()); + assertNotNull(s.getTemplate()); + assertNotNull(s.getLastAuthor()); + assertNotNull(s.getRevNumber()); + assertNull(s.getEditTime()); + assertNull(s.getLastPrinted()); + assertNull(s.getCreateDateTime()); + assertNull(s.getLastSaveDateTime()); + assertEquals(s.getPageCount(), 0); + assertEquals(s.getWordCount(), 0); + assertEquals(s.getCharCount(), 0); + assertNull(s.getThumbnail()); + assertNull(s.getApplicationName()); + } + + + + /** + *

    Runs the test cases stand-alone.

    + * + * @param args the command-line arguments (unused) + * + * @exception Throwable if any exception or error occurs + */ + public static void main(final String[] args) throws Throwable + { + System.setProperty("HPSF.testdata.path", + "./src/testcases/org/apache/poi/hpsf/data"); + junit.textui.TestRunner.run(TestBasic.class); + } + +} diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestUnicode.java b/src/testcases/org/apache/poi/hpsf/basic/TestUnicode.java index b2c7b2ab50..cf3b351cc6 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/TestUnicode.java +++ b/src/testcases/org/apache/poi/hpsf/basic/TestUnicode.java @@ -54,10 +54,18 @@ package org.apache.poi.hpsf.basic; -import java.io.*; -import java.util.*; -import junit.framework.*; -import org.apache.poi.hpsf.*; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import org.apache.poi.hpsf.HPSFException; +import org.apache.poi.hpsf.PropertySet; +import org.apache.poi.hpsf.PropertySetFactory; +import org.apache.poi.hpsf.Section; @@ -72,17 +80,22 @@ import org.apache.poi.hpsf.*; public class TestUnicode extends TestCase { - final static String POI_FS = "TestUnicode.xls"; - final static String[] POI_FILES = new String[] - { - "\005DocumentSummaryInformation", - }; + static final String POI_FS = "TestUnicode.xls"; + static final String[] POI_FILES = new String[] + { + "\005DocumentSummaryInformation", + }; File data; POIFile[] poiFiles; - public TestUnicode(String name) + /** + *

    Constructor

    + * + * @param name the test case's name + */ + public TestUnicode(final String name) { super(name); } @@ -92,11 +105,11 @@ public class TestUnicode extends TestCase /** *

    Read a the test file from the "data" directory.

    */ - public void setUp() throws FileNotFoundException, IOException + protected void setUp() throws FileNotFoundException, IOException { - final File dataDir = - new File(System.getProperty("HPSF.testdata.path")); - data = new File(dataDir, POI_FS); + final File dataDir = + new File(System.getProperty("HPSF.testdata.path")); + data = new File(dataDir, POI_FS); } @@ -108,23 +121,23 @@ public class TestUnicode extends TestCase */ public void testPropertySetMethods() throws IOException, HPSFException { - POIFile poiFile = Util.readPOIFiles(data, POI_FILES)[0]; - byte[] b = poiFile.getBytes(); - PropertySet ps = - PropertySetFactory.create(new ByteArrayInputStream(b)); - Assert.assertTrue(ps.isDocumentSummaryInformation()); - Assert.assertEquals(ps.getSectionCount(), 2); - Section s = (Section) ps.getSections().get(1); - Assert.assertEquals(s.getProperty(1), - new Integer(1200)); - Assert.assertEquals(s.getProperty(2), - new Long(4198897018l)); - Assert.assertEquals(s.getProperty(3), - "MCon_Info zu Office bei Schreiner"); - Assert.assertEquals(s.getProperty(4), - "petrovitsch@schreiner-online.de"); - Assert.assertEquals(s.getProperty(5), - "Petrovitsch, Wilhelm"); + POIFile poiFile = Util.readPOIFiles(data, POI_FILES)[0]; + byte[] b = poiFile.getBytes(); + PropertySet ps = + PropertySetFactory.create(new ByteArrayInputStream(b)); + Assert.assertTrue(ps.isDocumentSummaryInformation()); + Assert.assertEquals(ps.getSectionCount(), 2); + Section s = (Section) ps.getSections().get(1); + Assert.assertEquals(s.getProperty(1), + new Integer(1200)); + Assert.assertEquals(s.getProperty(2), + new Long(4198897018L)); + Assert.assertEquals(s.getProperty(3), + "MCon_Info zu Office bei Schreiner"); + Assert.assertEquals(s.getProperty(4), + "petrovitsch@schreiner-online.de"); + Assert.assertEquals(s.getProperty(5), + "Petrovitsch, Wilhelm"); } @@ -132,10 +145,10 @@ public class TestUnicode extends TestCase /** *

    Runs the test cases stand-alone.

    */ - public static void main(String[] args) + public static void main(final String[] args) { - System.setProperty("HPSF.testdata.path", - "./src/testcases/org/apache/poi/hpsf/data"); + System.setProperty("HPSF.testdata.path", + "./src/testcases/org/apache/poi/hpsf/data"); junit.textui.TestRunner.run(TestUnicode.class); } diff --git a/src/testcases/org/apache/poi/hpsf/basic/Util.java b/src/testcases/org/apache/poi/hpsf/basic/Util.java index 87aaf216a7..7afd37194f 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/Util.java +++ b/src/testcases/org/apache/poi/hpsf/basic/Util.java @@ -54,9 +54,24 @@ package org.apache.poi.hpsf.basic; -import java.io.*; -import java.util.*; -import org.apache.poi.poifs.eventfilesystem.*; +import java.io.ByteArrayOutputStream; +import java.io.EOFException; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Properties; + +import org.apache.poi.poifs.eventfilesystem.POIFSReader; +import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent; +import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener; @@ -73,6 +88,9 @@ public class Util /** *

    Reads bytes from an input stream and writes them to an * output stream until end of file is encountered.

    + * + * @param in the input stream to read from + * @param out the output stream to write to */ public static void copy(final InputStream in, final OutputStream out) throws IOException @@ -88,8 +106,8 @@ public class Util read = in.read(b, 0, BUF_SIZE); if (read > 0) out.write(b, 0, read); - else - eof = true; + else + eof = true; } catch (EOFException ex) { @@ -106,16 +124,16 @@ public class Util * into memory and thus does not cope well with large POI * filessystems.

    * - * @param file The name of the POI filesystem as seen by the + * @param poiFs The name of the POI filesystem as seen by the * operating system. (This is the "filename".) * * @return The POI files. The elements are ordered in the same way * as the files in the POI filesystem. */ public static POIFile[] readPOIFiles(final File poiFs) - throws FileNotFoundException, IOException + throws FileNotFoundException, IOException { - return readPOIFiles(poiFs, null); + return readPOIFiles(poiFs, null); } @@ -126,7 +144,7 @@ public class Util * files into memory and thus does not cope well with large POI * filessystems.

    * - * @param file The name of the POI filesystem as seen by the + * @param poiFs The name of the POI filesystem as seen by the * operating system. (This is the "filename".) * * @param poiFiles The names of the POI files to be read. @@ -135,50 +153,49 @@ public class Util * as the files in the POI filesystem. */ public static POIFile[] readPOIFiles(final File poiFs, - final String[] poiFiles) - throws FileNotFoundException, IOException + final String[] poiFiles) + throws FileNotFoundException, IOException { - final List files = new ArrayList(); - POIFSReader r = new POIFSReader(); - POIFSReaderListener pfl = new POIFSReaderListener() - { - public void processPOIFSReaderEvent(POIFSReaderEvent event) - { - try - { - POIFile f = new POIFile(); - f.setName(event.getName()); - f.setPath(event.getPath()); - InputStream in = event.getStream(); - ByteArrayOutputStream out = - new ByteArrayOutputStream(); - Util.copy(in, out); - out.close(); - f.setBytes(out.toByteArray()); - files.add(f); - } - catch (IOException ex) - { - ex.printStackTrace(); - throw new RuntimeException(ex.getMessage()); - } - } - }; - if (poiFiles == null) - /* Register the listener for all POI files. */ - r.registerListener(pfl); - else - /* Register the listener for the specified POI files - * only. */ - for (int i = 0; i < poiFiles.length; i++) - r.registerListener(pfl, poiFiles[i]); + final List files = new ArrayList(); + POIFSReader r = new POIFSReader(); + POIFSReaderListener pfl = new POIFSReaderListener() + { + public void processPOIFSReaderEvent(final POIFSReaderEvent event) + { + try + { + POIFile f = new POIFile(); + f.setName(event.getName()); + f.setPath(event.getPath()); + InputStream in = event.getStream(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Util.copy(in, out); + out.close(); + f.setBytes(out.toByteArray()); + files.add(f); + } + catch (IOException ex) + { + ex.printStackTrace(); + throw new RuntimeException(ex.getMessage()); + } + } + }; + if (poiFiles == null) + /* Register the listener for all POI files. */ + r.registerListener(pfl); + else + /* Register the listener for the specified POI files + * only. */ + for (int i = 0; i < poiFiles.length; i++) + r.registerListener(pfl, poiFiles[i]); - /* Read the POI filesystem. */ - r.read(new FileInputStream(poiFs)); - POIFile[] result = new POIFile[files.size()]; - for (int i = 0; i < result.length; i++) - result[i] = (POIFile) files.get(i); - return result; + /* Read the POI filesystem. */ + r.read(new FileInputStream(poiFs)); + POIFile[] result = new POIFile[files.size()]; + for (int i = 0; i < result.length; i++) + result[i] = (POIFile) files.get(i); + return result; } @@ -188,19 +205,19 @@ public class Util */ public static void printSystemProperties() { - Properties p = System.getProperties(); - List names = new LinkedList(); - for (Iterator i = p.keySet().iterator(); i.hasNext();) - names.add(i.next()); - Collections.sort(names); - for (Iterator i = names.iterator(); i.hasNext();) + final Properties p = System.getProperties(); + final List names = new LinkedList(); + for (Iterator i = p.keySet().iterator(); i.hasNext();) + names.add(i.next()); + Collections.sort(names); + for (final Iterator i = names.iterator(); i.hasNext();) { - String name = (String) i.next(); - String value = (String) p.get(name); - System.out.println(name + ": " + value); - } - System.out.println("Current directory: " + - System.getProperty("user.dir")); + String name = (String) i.next(); + String value = (String) p.get(name); + System.out.println(name + ": " + value); + } + System.out.println("Current directory: " + + System.getProperty("user.dir")); } } diff --git a/src/testcases/org/apache/poi/hpsf/data/TestCorel.shw b/src/testcases/org/apache/poi/hpsf/data/TestCorel.shw new file mode 100755 index 0000000000000000000000000000000000000000..e0af1945e89de1496ce534f58017395113c8b819 GIT binary patch literal 76800 zcmeHw3w#vS_5aIyny%$7Lv$AkVlY*VnrZgR`OGf4WUr0&FW83 zD+;N$HPM3pvHrB$qE_(#(OSUrZ-2iUs}?H0T8LJ~{tzgF#j5Q8d+yBa%qFwRZZ>Jr z>?CJr=FYk2o;mm2_nC8FeI@bWLr-P&uwKU`Ca}|fD>G}tjkq=__X&(C_ow}SzY;9s z0=Kc_D=H~>ySJirBj3a~^#62J{e2BZK|0cn6y zfOJ3xAQO-U$Ohy9aseJd9v~l304M~E1{48`0VRM^z!*Ropd3&Es0362#sbCx#sjJW zX93OzoC7!)a2}urFadBr;2VI6fJuN_KpmhSZ~e{;z;wV2z(s(WfLVaq zfH{B$z+Aw^fO&xVfCYesfJ*?E0u})-1AG&3Ibbp13cwP;Qou4mBj8HFa==x9CV&@k zHDCpx8So!~YXH{*RsyaAv;eLLd<)PDSOsVUtOk4=um-Re@EyPnfbRls1l$Dp9-tlI z1Iz=Z7R2=6&9B3`mB+w?FppGb3Y2#NajraFS=X7Knb7$Q(U`@qH)_e$t^YywrL%uy zAUs}q;4~j^)r>c9!qp0JLVQPZBr}5nD$9?c#56>9U9*9wtDH5Dke`i6pCmfC!^Vt( z^ofaZsgVBBF&A&%iX3l(2DCw|y!dOzbrUpXHnejF*ER`P@3#o)8}L8`gqywzxXsxV zODgvyH_8*DLC=)(PxV3U_PylHs^cZikm_iv*Be@!uWr7s@mkOPYn!iX z^2}e+vPMBcyCLb!!F5}Xf7Y-f;qeX&D=Yrxn}pCijOy!a@qpS4(z(9^Nbe2-h=;=f z(m!H=bWp^Zw?jBva6cVqYL6DB0}JtLVj3Kkw*hVk+yVGL;7-5>z+Hg50UH4%{|>+p0QUftKE&6%#C*-(?$WuFsek5j zk>*I{QED3;D0AOK2<5mPC53ty?KnS?X<%h&J*b4$;7ld8Rz6Ra&okxo#q#-5`Fw?Z zUM`=}BQc`1=L_aVM(Gcwv3OH8NQQeD)R>#9-zb)gbXc*eu0W#+zGs z)pj=aR^`5G`Es9#3c|vh_#Yt#Rfua)16~f9-iPZ?aJHca{t}6uUyKfIJ!9`7w=&U_ z{Be^Pu>WR#ERjq{DZ%(y~)xUzk8h3~!J zLa2#SuBy3gfOx4kXXOU^mCk~R^s(GPl9zskv#Bl=s(1~|@#=(e%xRF)_f~t6pMrz= zMT#O*YM1)O?d`mKOuy~5jP2aHleHs^>xrLEey%a}%e4nT4u^xKr>C>r++0>wRmEy+ zYgt1>16#UuDf4>0tfi%eZQQt#ZP~JgZQHhu(|qNXSJ;6A2iVc0N0}EY-(H)`+8e6a zmZi09ClWrerJebAZejidNPnjvaDcUMdxb6CvXj-e?_{}4!Bg#0w9~bG$Uq!+0=kLC zX4Zx`eZVBS0LvBLKt5B7W0$~ zI2S}=7Q(!E*6H%IrwJEv-bdUw08it(9buOh`7!+K#?Y}7Lrv)o_+T;Ji*X<%0RC9D zpH%~QHR3#rxZQwX0y+UC%W8x(FX16hI@LF`a6OC5RP;iUcxS>R{BGp$-GEsDp5c%u zgIu8$ph0OOesvM9F;MKpV66Lxz}v}I`}ecW{)34B3E*9JGs3R%{~XUyCb|~^_X5Nz zN8D6^1J`K?%fmB-`Ojru|849Z|Ko_eAJEO7_CL)!{hchwk9r9#;Pnv)faDzjdi^5# z^=rZEt^Ui|cK;phO~id4@CMTUZ`^P7SF`I8e*tjML!2zcEe6cNbvweI#$tz_1}Znh93EE1uO$3L!L+;xPjMC$2DlQ*CHP1_&ckiFVH{#W^@Z)$2Ih(dpp9f zfle&MD^6gY>6OfzK9<;LdFiRF(|alMcmsR8dpDa^UBU0WJE4Q!&*FX>?%SacPeUI* z#62{{3oSxEk$xa$)`a}-M7~m9d#dx8$D7CUAFyH=bvYyT&Wys_xtO_;7Y~D#A+rI zX)%SBk6BjX`^#^se!2NeQ0KkQNB2Wk=Rcx&Np1 zM*O(w2xB`E{r>O%*IB5f_WY!%i2B0MunC6gE`o1~>+J+b-FaT2oReh|gk5%=ts$Q*(a)s=C zmg8H8G4FPCQ897*x!?b)@LXo)*#G0fteTj>{6(n1lpqWN3~9zVHp)L4HI;`YEVC}N z-pcOsEKa<|jA`$BgnpByS=gP)`51z?qW{~7-n9pltWD@aQ(v3<&&uH_!*Jl&ftsH2 zhK=*VF{pJh@UZDMNjy!%kfdpdC{5##q-l&OO<_pV6e3Df9FjD}h|)9-Nt&jx)6Ddj zD!MoDIVG;v$Pc$*G%}|}iQ&jZiTHx<>gY$(QtFCPm&|$=g++QeGEsU|k`&#*X;5Ln zLqmTLjr~0o`gw z7IZv~R39l74s|?{5)+H1ew3JPi1$30 zrt$_`D>blv`!dsIa?7j|IjZQ=*}k3xhcv_JU_CvFn(HJCzC|!fvqC*R4t_^$&|Q4c zU4|xBGJ1S8KZ?W0e06Rhr(#ZpPYclON>9%y9+%Vrl=hl1*=t}%JKMWA{$l2nqe=v% zUm&PQKxNe+{i}=F-ZN5yG|*8cC`+M7UxIurqLCoQRV7F*2q+zQ91qqx=$D9$BmE-s z7|WRWu!_boRGu*=8Rc1)t?dp>h zz{)T)yjS=|%J{K{QJ8?Cc6BV`DnY&5Rkqf&)--qxc2uBUrF9AAARag$L3I{|(3AwV z=G3xApQ<6kRH9csZ#42eX3*~qR5vjoq;4w?Q8U@iV>ztEo}6unj%Pbux+dm z)W)Wxbo@#dZ>)ut+E}!(b&7CmU%yhNJyk1cxeHJ@5kqp?MgNEbbxVn$K! zv3H`!PK(-DM>4>aP)M^JtI8h*dp+v0*P&0M1oi2$*O}|g!`NddmQYusj{R5m*!!l+ zd+fAq64kr*-(&BaD(|r$5)KJbrP_awy>F_##~yX6{rA}WrpkNlQK#B}k3BfmOn(gp z=pR*3dYYZe!&whf$o_*4w-A00o@UGX1BqhrukIWf5urk%J4dE@*msUh^RVw6ndV{N zIWo<|zH?;C!;o`i{zZmJ`|#76VLa!X(blxGJ21aS^Gu3yjRD3r^}5D2=yNp(MGMa+ zXMWT2mg}ziSEjgNMRRNK1jFNXTFdIzwiTRLOd!f*o6dDgJsoOn^Ye9OVwz<_)&J#V zo2>X@oBlc^Ks|9#i9VyoHt~&7Odt+aD>M${gkqgpk|?#fkxDd@0S@Jwc1m`j0ZtTi z!wOsaGn>5`p*lt#X~}VqRf)%jO^MGaksln(?IdO!D)Ai*dTDNUP^}^N8l=f~tWU(V zz1_+!@Nj!DK^t?n0WpV7WYG-6DZ|4ZhKHvdndaeBj%eOgQG98MM7ayE7!bBv4CDz1 zSvk6ls&dGUprQ(1J8X*9SL=#j4PFOe#J;Yo-BL-lZE4{k!ItdoAZR9WZ-K^a zP6_HgS(xx@+^ca>Ol9?NHb)HUn9W6z zZZ;Qnn*Ev0^-YtT%|)GNe`a&RX%2QtKV~*ZC6NwlyFyM0PKtCwP&Hwq&yiKTxd+xM zHBP8$ub-~7i1nVds`vt0(ytl5CH+_9q)8gm(nu$1NMP#lSGfx@DD-_@?dGD9U?g^P zBwy_`*T8mjT&Z>oG5F6vYVwG0<^s)JgFi#pXoEyG2f zYGliBgELN-m))dwI7iHIPS-TOKGHTe$XrQoX64nT&FhrvCsZ^0#JaP^KW0p;dL)aQ z*@oe3X5WRqG1U&FsQ>n6_N#6=7mYB7d~za`^|6mg zb7TGjVy1I3e*r_`FQ85_otwNq*mSPWtudXWk4RSwQc#~hJ1yi#F&j3}$1YSK>h#&8 z{KTeA2%Zn427o|4q%6w-rUx&p#g@1t@$?bgq|+>O@9q+X zDV{!JOI(uD=~}(hBNCpj)w||lU#oY`!@gGUnumR@-Zc;VTD>a|hkuD{+WLW(xTdU+ zEpbI**-crgJ%-aY#MfkrYwG$zEOAXo%NkqaB2BAP)Gc_B9$Vsy%$HUL2F<56^ADQI zfe;er!{*o$7d4|_2k%Qmxx_Vn{Xk1xv)0F!xM*JStL2R8Yq7-jTrRa3I(|}rEJ#aS zO&eoNT(KoC=t#^vM9d|2^e(Z_QkJ;R+ZdY-qpDXvVzXg`_j?kCm7%_EhdJfW@UT4ZGw@+jbm;oBTM7;}(Z34xRnmD>j0-A{~SOVta zi8nYqo@wmK=FajB*xWSIeFf*v^PTH!XuaAuc|~JuTen!p{Lerzs*Fe^amuL)PQ38E#L!qja7rBDZR8gmH@*zp)UGSEH%0&|)&$fC_DWMb!4!Gj-Do)nNz zuKk_HLW2npQsZ!GH#mj(BkfMX<@Y;<1RHP@$;Z6Yl*FT$+;lR_(c+kh?`I_v7M?aD z2#}6bfP9=L3rQIi=%m2{cl~2Yywh%83VZ#f7)<$0j`4MUFR`AzB^BVffZkbASga@} zl7?7tO`u3X|EXS#aKna=GVCgw7~k~czy_skiWRh_H|;e?yy0NDx3AazWa5yd+ToOhN@7QCR2E>xZb8vpd?ia(pEPL1r6i!78w_UVRv4G z`FIh5%jVAOhvDf+uE&#YE(FtsNRlE@L?RF#!!u+GJ)U}-LV=Q0DGbE$MPPVBMuR!s zL*TMa$moaRnMlr(k!_v{re`8aia-&GKzIz#k||g+>TL=IN>ZgT5W};%gaya(B7)zz z+TPRWYS=u4%}uSh%}rIq=5xILz*7s`0#0wggf|3* zZ6PGv=x#9Ar4zVpjqZL_;S$KD%AIX)O(&?gQ3Q%e1j3W-r80#ocfC!aKuM|;22zDZ zVEA@NgZb(t0+;P}M?VZ-hU6}BWScva27ob}@pebJg>9Kk;S$G5mqLM(R4EL^a3dK0L+Z1M zKhGjqlk$huH7Ox$hbxiX1F7p04`dNMmO>FIA`u8r!pmg}52QYpqEMhDIR&(SynC;+ z>GkQUyn^Vv%W0#$dOx+R-_`q>6debh@y!lA*ahvs8r$VGwxKn??4-RRW?^IK*oM|4 zeM9SWl-2uP_bIFQV=-n{7S3Ys+5(@aM(>s``190(zVV2;Ym4Ojnc&Y;`;%>ipQpxl zISpEMqrL^rsSV?|EH-JzW7mC3B^3CQ6yqq$S-ztrzrZ+(K8aHHJ^l547IA#P{@coj zX5Z6jKFuHreue$FodFW0tXCyS+DLaHJm5jv+QkKmt1d3+?R$DHISuSRHx+8*)1CJX zVmbdsG_|qid@2WZ^g~B%IX||XFKGh*)od;v^WR2`X#+I6L$aKY*#g>L{KfnFEa#)$ zrCOG^yZi#}F6}6xw7c(ho-KaRuS2&XYBi$yK!b#+wi?P^h*rZFhTqhGn?tuVK$uFS zJ7nJG!&={0R*L$}qvr~V9+u-9ch5aSBNq8DPDl3Ao`km~F{T7zm5^ag+h8o9yvK2@ zRyto+C!Lkwv+9gnj0IAu>klc{2-5+6D3lWF6dKa`V6AbBU|GH#cL&))M-6Cdzd@w+ zEa@=R(V2E~mMGpa@eV9L(XVtkXbZZ*MHQWRZ)0FTInjyj8nw4bP`x!_eIm}l%;I<) zapwpIFF#)2`SA4VF-{3_AA9727V+m-QE5mG9*&6w!mQykO>}( z^M`>SiA=jUm<%xjAG>r|0%U@{KkKfRvY_9F)k|2PD(piyN2%DKAB3P9ozN zkPO5U#EnyZDJpXk8RvjxST8bIcTir6%A7{W6h+Q9cZJa; zHbuv_F^KIC-u#IqoxrbwQ5e0B(_-{X48YHoA3Ox6MORB+Wr=hbod1+h(v`UBu917tImZBxZw=vmG}iY{x~wcATmt zaY1aWMNhfvT`9Rl>ZX#CScZgcO9X6NR3!=S$A-!zwtSZ~V{pL{7h@^D5MCyJM+cskRi1COqs^&)Ra1;Gd=}TON%x~t@?>Q?3IthN;twvHm3*qoNu zwiN};^G&vOJlk5&wk~8QKBH4-V)I*8^JjQa!nRhht<#u^&pp+NY-;1GHbhHjTXXo+ zWM<+5z@tl>_#+$Jn#`Y8@H)s3!~I*O>2!5YQpA4Ts@;CEBtyxXFxYsJ-cy~##5ztsM5nu2!> zVfU9`Xxm}EFz`vk-w{UlJFMjayyFNvK4!huVOeig;(mfKx_4OqBNcgDguKOkGwV9# ztg$bwI6IAm$z>NbMO|0Ng-RbJfY2!V6yXGNVqsE^z0}#^bBl)vXDooFaNAR!0zC8O)7sHuc8 zwUX@Xs{86oJO~(FJFKs}(rmB0<~oh8qYj=?w4BjfUtB;YiWGqme`=GFm(A|0FA1FT zQ3p}I!9Ld+K-Oa;5y;P{?XYedm1f&C>ZJ4ew0oT)*+>HN688=(MIgi_ZW&pR4L7HJ zual@&C!bW2_1H)Ta+_y|bw*yAZAMgR*0C`l_4l6|<#8Fu?vK||$obq4d ziR$63T2}yBkBu}SSC&%FrP+irk2@+$FAAM0qk#Nc;SMWBAjH=SWn?`z(mCae97Oez z(T_{W0eva%`oeO;a#=}%q%ZB>%ee|@>z7OrSmZomsfb@_t%%=ZTjZQX-_e;Ety}fh zmn>lPgp)kU1K*ow zY~%uYd*TTTMIglOi88Vt8y-&i4m(l(e$q!OvK||GKz=Fbgyq59h1LgitDP_9?3FS~ zPa63^zAod0g(48*br~|U9vcOm@?Hl~ot#VQ3&K)iz(+8S}FH#Eq+l_TRk>L z1G%K&goPpyVo8CFtj9(Xr~G0(QT?Kzz{Qc3jv)Fj{1Z#<^19q1^41?5}shs@482bOKCBUN`+ug zjJP^>+}N?0U>++?5Kig($S#OKD4uR2*%|a_nRO{=Bsh;tH?O~{2$M^r9gg?BGsDGDufy?MS#koiKlATD%IH+3Zw zL@M*zt^+B8_}r)wDs#R97h2|e6PR_7`R)us+?_GqWX>XpROaVI5 zt!#!Cx!!cs1rT{fz93fQPdBv|5JW2S$z9JDQl&ORMNTWmFdM`Hn*$vWFfU(5&-(1& za*Ob?DDB@erX%J7CboYIbfg5HT)eQ>!&gMr-2gwU#v;#Ze3$be@=`<9P>{}$N;%tL+mZ^42iS>5vmM}C0?N392#E!fZ{ z<^hH*ta}|~1{^p7p9=*-LR{!>Z#+bcw$b>|p{!RIZIvb55a06S-L#9g6jxoejoJgu zgYYXkPuQIMauva6x$}h2as%@;+O=Lj-I6PC&-7c-)N*@4HWBOLioXRI3DZaGWAQ`@ z!bj@{a>P!i(2RK)i+V%a;P1$ZDFTua{m>zqLX&?7N|k>U7ImtIAUo=TQ{~@uMV+cK z!c>JJk+2Y9s{D(psNXgC6Y_y2%s+^VI@RDW&HGPvu#VSa9$-*M;2`OSbh|c`9$>ci z-OxqP&`0Y5=ITu`4={?=&))cphkH-8A!>r7ai>GtIM^nb;;KzB=@C)NRP3gDLhtYb zJ*1+*`+xjGF*uVO)*J6;YzL8N&!W)0BrLK2EPH(#K9i@0wGMG#5|;6xGo)cXBpecM z9kfqEM};t`hIO7WFS=9*)v!jL>Yy6ds8bzO!y0v}ku|L39w@|71*Ol#7gKpS>p=>A z{7Q#gkQ-X*){%|~zml%|jBd$Hv_Fue1)X$vCnX|OT=CGL8BJ3}X*4ZAH1_vU=Ca))ew#$cEOx$Y9(zKAs5>4~}@Y?=6R&p&Vk_@U0ndIc@l`A787zRk^QP zzT7vhxfO<>GuoO~b_Ze_G%*c`S+5%t6=8EwwD1y~-?Y31#*zQR6c?;$hP_~Lg5mKx ztz|Vn%HvV7?k!;58$Rf6yj!WdX($!=N{w45lWFmTIldK}ZWfo=Ph?f6VS(De**R=W zck^W9Vk**+8W&3%($gckNmK4Zj8lCP`kaezjG~({P_@v=_70mwqv>`iG8~NKIZ_|B z+d(x;aJS=Fm3Zuod})Q%!MrrZRbN`}YaJX*-h)`Cp^}k3DRZ-fY9+PT0Pjtx-O{O! z+S{$%0uQ$b6SOfi4Tw2xB0D6PJnAGxSMn4AhA4Rug?5HWS5J;*nukw0qIpy0-G*8@ z&M~UWA-6+{DtIN$7`BW*qbdmHr6v6z(RGBTU!h1PR!Q*6QZ9tCN}_3{q8YJDVt77w zi>7iMuC_wkkx+*MF-_PzqMHlt&`$A>5m*tEC+z-=2|MZd8Tz41vJ2q8`3`d5NE3GV z!d0dc6m#FqN53)m&D`m)>UL34AN4Hx!HT(WmK<-#+&6R0K;_cQVRFoUvr=Rr8!VVm z-$3z@jXo_55BPJ{DR9hvGX!Euin(vr=uNLO_0@IXOpPlY0YjT*G55`w@t{f}_>jVe z$bEA`0{IQ6qw0oIcK$D};PQ_-be3d--~K%##~eCG>-9V4&{FX0*CQd|nZvI6n6rZOa4^69|OvV-RCO#&i)YVXKz zg+u4ofJ5h(d3bVsM}7w!I(GydI{$%(S0{AjKbdr->d7P|&K*6!!o%k!b>#mc`AF3t zl7k&Ozq-lD78mTd9vaQr<(>myL)bG#`>nO5YS-Y|Sn^X3t5YHqs8yo>r2WV^(AW)j~17P zcIf0mckC2_5RaED$U1ENl~X>DOjM^-RHks`fWy_}n`Y!sw9l?QCB3ws@8AzW;AFu> z`-O#f0p3hFS@8YPE{s0}GEt-mgg7H#M%MEke27#2egaXwKmSb?S&xm6fIO>sqJ4Am zU4Y-aW)&{O}mO+?cxn z^Aa8&V+<{gkAZxuWTKrS5aOv48Cj2wBb>4^fv8?oI!{H`W8)~0Kd+#iyNl=E=M|4i zIjHC80wFe(%gB0c{GC&NG>LTLq4HA_azJ1Fn;yyAZ2MV7S!jpOpMb!; zg3Y#v3qA(i>zr3GCA25y6F?@46oC*Q$&-=wdZ!bYRb)LE#-9TDv7*hk z&x<|=WW_&L)E%0Qe*pP(;bt2}AjH#!GO`{Ur#R(qCsAz}ofRKI)??!{ARETu<;Hvr zD03OcydB!1^FM*Suw=81A`s%j5*b;Kjn6sdx8sTGf0dNE0?2x7d;#P|6_j%y102pp z6)%K#==>#+pD5dGqX>lfM461N$Hr++`2`12JzeH-a^!%%I6A~UzcsGH9onHY>k!$t ze81IDFvn&nSYqFnA0OJ2vH{3Mks@%!JQ-Qfcd(IDj<*xlg?UTtqJpgF!dL)uT#?_p zsA!IDQPE0ATv2vtPs$>YFE7N4Ap#*@UMM5$v0>trvmHeBiNcjCvK|{|ATKG!%azWt zZ7aRexump0Qd>ROHgQ0Hy4Y`}2!!}_v5c(8hJ{nEa1vFqmzTL+99iiIDqYjSqPyB5Od$8n&JH7c zDsR8_sl4;8)R`UFp>upkfoFT%q=FYLu(}>ThtBU9rFrLfjPDpDwfv+Zw)$Zb^?&Iu zJj+jts~XG7lm_e2*#+rZM(?*;Mu#iigpPRy+v8p+8llpS$f0v0q`S0azjbLzxYAAP z_@AQfaVJVgsB|N8=C<8uAf-kkesm=2vsb$p!tO?yV}l@7>t_#8T) zsd5e1p>sMHY;t^aZgPBh3Y!7Ju61VQ`i9q`^O-8xa2+~la=}(7H0M@_>Cia~g8i{8 zBX`U2I&?l$1skqI=WH(6c}dN=^OC~T*c=FUM`A|quaib(RS>R2=Ugt>ZzVV9ek(aV z!FoEDWdF&Xk^ARl2zK}!I-jW;8|2WrwBtF?PGMvDO=gl^_zs=(FwA?-Gu8B*=O**< zJc6m*B{U06`eUp|;}t&3$uAVo2=u)y96INBj47CE`qSvyX5_-~Idnb~b77DUoeLoI zw&JO#w&I)2Pm~ZuD)YjQzm`rlZ7d(5G9QFP=h0lxcM8vW{vjUEBiJcOwTxy?qhCEQ zf}Zab{xte`BJ_Ot96Fz=dLFq$=VGqrJB7C5e~3?%5JW2S5~w*M{fA)Fh1|OYvt#)$n zI`^Kv&))z3_P_tv{?EC|^Usy<|KbC~UNN!P43lTx?I|?*p?U}BGin+mhp)R^y2YiXQ@ z-Uj^^CbH7*lk!<7p9ApenBCInr&2S?WX#KG-*eS=in{4CX{V`Ya!i)IcY!2|`^^GTCF(0N)(v%p^%QYk>f{> zbf@EFNt2w`B#(s6sR~_N+}6>4UbsPxDS!z0ohP{A{wUQXN18MQAkrd6MVcLL8cnk? zOEaL}n33U^W~O^Z4^L20*HkBk?9xn4a)KF)H@b%VHDvfW2r!Q&n&XNsa)&hlQ^Svm#A0 z;P?@K6OI$2fg;I_0+CFtO_Y)}+;1wWT;@NaSHbJ?4C|?OQvZ8<CPpYCH^qT?6_PD)>j zljkz8OnG@Wlg+?Ki2P_h+Pm@k0ouMkTF>Z4=ugX453&R%uQ2_(9Q3D|LWBA#Q9A4@ z^}XBzAL*57CX=be`PI0RG%2`B!!cUTT=X0U-+UCllX!o_z0duXd#8&AAe6wB)Ksr= z>bBopT6&fP2g>GorU-A_{6Ta%fMDqrcbC^SDc#c`>6q-y{D921Tb^0;TE|PRxe473 z0=wN8-0!&$Lx+1V!CiQU;c?C0i1i}3tclCA0Zkc|`id#Feh_>$fTNb+8+?UWlmeCyU+cK`=|q>~ZhGSO+nuUxKF;p}T?QASB>t?w9fTg!}I(*|xt03eG(N zUKHT7zzhWA(uhqH5cVpZmqL;gFtEdMUSY=IdQjA8`Lwq79r01)P#%!WoVT<2eNmadlF=5 z5zZ3Aq^w{`Vox~0JP9Ve=*tJ??G3+#p@ETzDJetoSp;jDFx%XzCbbn810ko-cFG#7 z1f+WcX}HmCch8i;2`k*^trcu_$Kvl@$1AhX4AeoV`yhn)p!>9Y`K4!E=a_2+HUon? zW7o;9pZ(qiwYyuags%1;lxcjZ^mdJ(Lmd^xu5KDrN`nX^|&kLzAwo(8kN0k(csaFRZyf}Tyh z8%^!2^MAA;YHIgk+}-Z4!DaZ$4@3Lyq0pHuXqULtS8Q`jA=Ick@1TgGIj*RS&Lh9baT4f+0sf9>y1x&^kGY$HG6ThJ$2(&#L1L&KB`R+Q zXB|*yiVRDgXuZq*Ifl6(!-s6d7+bhX+prHd{(hek;gwVE4yLawmk-@jqV+bso-H(|1GfK>mE@mu_~eoWfH)@8Q<_ zH+3(Jip_)QdJqzL(7jh2HX33iRUd!MzI?<8Q*Ki2=s~(oTW?=nxajvQ*Fx$)22XgB zOLb+9YQQoPR;Gcf5a`(PD2q>mkuRZ!Ow_frrKo5qKMI8(rC2%I!cu%z${GqmDZMejNTT%PMD0zlhIoFiwF8OdUyZCvp4YZ3{lpp(Mge z!*wPbxEx^u$_@w0Lb=N$8NyaA{PFx-mqtwu!~Um$LFZaeQ!^aRe+?r;sttzBqE%o* zlA9ie2zHIg7=vIzx+rgL2OH~t7YcdEP50Qc?$Q|F<|3%dS!@@}hSiKXEaB*aS<4?r zl*A-B^Il}=zjKqZ;X*DlzUa`5Ety-kA~y-z$Vb34OM=`_ifzoJ!=_i9huz~m!~ut3 zL^p5$LLY<}(LV-amJrQr5(3OAVReup^({nz1VI{Bha;8bum_fus2vC;s1HIA-!ni^ zmD*yN@JN!+`ea|f;>jHWQuW<=urdQcOe+ri_sAk&|+Bw^KAQ)xl!Yy2?@rgv{s%y)HtfXZB$#-9zKUz{X`-@DlpR? zvTz?XSWZG01=jag%wL-7vVe#--!MDylyLADf?vGo{7uU@U9vIiNkw0A-$6ni2fK4B zxlBQnTtgj)l51`Dmq7NZ_psWO0lri3MVY2vX3q>w6B1BiA+=ePC&ZNj6)36@h}R*Y z##PzNPG1q7`_GZ3_yw#R6zk$a8 zW)l%co)m%3fO!FuDN)!70G}nmlVXhHz=L2qH|SEpCR~^i=E?(3>9XhI6o)*)8f`Y$TeslIHWv+tZ_->p(oc`#M+9URT-*Xm^!4N_t-QRhs_eb3i34&HVSYM>)Bw1 ziN$E}3FV_6oeC2-)A#ObgmiEXnXD0FCe9mNHy`1_b@PGCjJ&yO!4ku4g>>HA!dCP! z$Gpm|=$W+rrdtA)U{;gyKQqkgQMs5*dQ(R!aTtU7D$SbO{ZBY+it#9@Y*6Iw_{R&I z7=)w&MU$(+&R=CZ4`V=nWh5CvlLg@sxJhDs?Lio`=$akD4uBA7+8=_RU@7UJtZ}H9 z;WbMURVp-+iD_aur(l4VnzHbOtT{XUggBy@9?R|W56o>i?S;UoQ5Ls$45~Gq$(YnJ zXUW`Bu<%1-L6P0kX-H%v0~@b$=0WVmg&iQlZv{LTH@l%IjKg-ij1?SXV=(GqG_K4p<{Z>&pp|}YOV!sT2&99Uc0<>mboaY9>kzdfy>km1N2P#7 z1dJpW!uFkkgw}^4fmBhDnd0th)=E{AV8;+TD!YZYI|ki#F?mXa+z(L^ zFbG|g?tyg>6{KJgbxSF6Fu@>UfyzAuw^Gc~7Rx{>Q|j=!8l<--nbq#IpDDPWL2(db z(u_YL=5HTtvu?UWotocwCz$biP-YCGPAnrz2cwENeW%`dKoePVE<0=>p;_}~^C|2Q zcM`C8bZR!HKIHc8(5R@;Bl0(BP9AHD(Q!-9dV32KSApwim}Gg(Z~6m6`4_(>)8!0>hmK?=@+DHDlHz3u~Qn2DeN&1KyK50TEkak3QBA z_Gkgmtg8+5w-^&Op`o!6JTP&^O1|Kcw(=Yj=bRAC*O#uT}tU6{Wz zG<+19f`^dEJA_2uTcGtC&Z2QDAxa?g=^eAc;BYMQFc`XrPL`A|bQkpM3H|4#V9_*H z6CVIE=4doK4LiY0am+UtfX!>LPuwIa>>nc^eW&|P_xxKwKX>8cG0XT&0;4J2C%ym> zd%*`LMz}X*7HtsJ0n$s?9_*^Z&b{wj5a`A{%8_j&Rt;Fvab~a~p$Dh*+$$;1XT&t1 zq41odkC2$Tv|n{BfK1HCox25?%0*_a$P6>_T+Vm4gcH+D)7>kC0vou?PfatZJI*}j zP$1Kge?OwqTxB@kvEd??f+5%HGsk}{8t*Xu{m(eO2E8LD8)SJq-BS=l)8M|l_+=#X z!jUOct9M~Jtc@0Nt8cq~G4BnY3ke7}=1!OPP5A`#aU9Oh!P0h^%a9CMj)h*0^Bdi< zZ4H-j`!M@VhAm%N>YiU@(mfk+?II)#c&9^eRCXGs^`^=4C&9g9^M<4~c|T5#=RV}8 z@5O+$$&BS`rOCTA7Kk^WC0t?9eaeO)Q`_k>SNj9V|JNY@T;+qvpB<7L$TpPGtk3hf zq666sZV)HghX%l8SZrGDN__U1t+d`nOwd3P@lk;-&CW7o?uLc%V9ZZoBVR?^E1=caq3z2@Ld5XU=Drce?8n1|N7ouNYbY%4NMnZM zdCc#OGUi8kMz9dFUkOvZZLBdn(00u@Y&GB~0K@3h#$}PGjf)f94^Wyx567)Y0&F|g zm?i|36hNwM0?R;FI>JioTG|}?%I{v7vtnM$QmJpmr;%IN#(Yd_@U$#y^fe04;^1it z=W1MeB3TJF8EKr+SPHeRv{{AlP^H(mfyzk^!4z$cMe?*5R zc+Y{Z&c=Ht&MA|faw|Lo>7OZj+y)~w-<*QP>RC8D1MHb+n&5jGBss~N ztUOu&0cSi(yrPoR&)JUC?&Kx%^7z^AI0+{&ok_OiE)!}(rKFQ`@|^-F?G!piPO($s zl(L7D=Ol6eS)1~7AS}0k0bP<^1<7nWi2yCAO=t4cnS%CoQDJ)#_JY9$Zv;~iuS!=G z;^u6;)`v3CDRasJXh6Fu1Qb)GEt7SoIGq7f$8@wi?dd$3C{XHDFcA+o7Q&;=E6HR9 z=8(+8^z-u4yyIpks{M#KU7Nra%mI5{iU?gaU(CW6{@DUE1xj~2tO@TA@kpS&8s)zv zZKBs#JH9BGd=13W46)O~Ajy ztUPj6tl9f2c6D|6?cV+!Px(Bned%wPG(hE3d)8Lj>wSICEXo&SwlHx&oQj%S1x%*y z=&M__9wvIp?ACK#_o&thr_P=oy?B_?hwTTPImSykc%@Q&c9gHOF?{p;FbMj%RDI!& zPVU$Hxcr{gy6nbeLoIDxs0#D&MK@gifzKJza{tB8zv}CY*g_P-k6W{}5aVlP@Pif& zY4*1`=4`-9n=2%6GiF&qMqskce#;6N3?Vd=&?td2cW_!}nm0Q*C^P4nEe^`u5bw_f zW#*1|<_Gk6cfu3}}uz=bH&#F9wF4#d_T&G=DuyI9iI&bb?PMF_0VJDfU3A zqvMI!F+_{kK{io0oFt%Q+842_->%CUEA*(m@pcUV;`C?$Y`ZRJl=Nj_T51~A7kXpB zWA*CGAUaNubBxy^cJ5V2XA~a;u{G+ZaoYae%B3zkU&P*M7p+4a-m6Yh{xLoyPDi^a z@3~Kl(?cBZx9f6-3twmy;(Zb4_o`zqCEgDEfL?XX4#eAGPtmK6X`FaF>?3;BWpdQj z#_IkAX{GRR9AmV^jbe*mO5my2j91J_#HS@bxJ)r*iQjzw)|QBRmR}<3dcQ=}*kzf$(vPUCF@{pf z$9`dn-;y}7PxG!3XHX)}phTQOi8xuhGC^b|X0q9N@_{Tz;51%MDs1j-M8+3=PJ>x+^+n zksAzsB3FhP+XlRoG6K;yB1dCe=12M!L`vyMsW4J1ij;~Yr4p}1o>Dr=(=x%yJF-y6IacGYOBSonxmHGZvVOI#<~C2|;9LX^ni0?elh{8O2r*BEB@pM1chPM*?+Y9C6L z_90hk3$;Y9vZVM*JPIt)b`x!7b}wXtDd;MUTMcCF$rOLJnU3qEk5r$BDJ__|B1$8S ziAglYq}K{DTK1F!9)04Xma6>GOVr`0lGzku^pXCWGQCodpWx^m3W2B|IRiz)=MC!x zA?}+(BiH+_@*@-qBBgYsR2V50MM}kyQi)gMeCWf-ui=8YD6+b=fPuzPf2)y2P{h<< zT~F#vHEgWTi_%(!LpjOS4px`^4_3Db@qw-`QRsS7uZpn#uzKLIekx}v6U3PjoP2Is zrI7l;r!<2#E*50;b6jKGV)AhEnWI4NiX+I1Bgl$q$0YDlDFt%zW)h+wUVV6E`6QkG~Ds)VN%f-@tQVHrNvGEmcrbG+c> zZIl2f|Hwmtb5I25ARi|l)j_MPJe-4koO{9NLBMG>r$|r?3ZdBPqhJh86cYpme~=!a zU`oAO`~taB89`C$qu^6Z)wrtMsuUE~OIAj>RT<${rOz#;ZdaDNQR!nPCo8cQ!$gA^ z-4m@VXa@^gS}Rf*96>ucf_AWvcCer&9qkjgVS^)R2S?Bj_R$g%bKq4TBC9W2&q#?g z;GTm>CkfIa5v2UdUclEO5u`(WqXEqfVXV_E$c9FcahDt*8yZ126v&PcuHgxBv?3iM8|owDyodV8^jg^N42|$` zsE>1~;H3VCJtt>I4o()F{DET??v&}6+(QI7xrYesBO`6qW9~cXLu{Y$T66aj*qo}! zT37iv=>=)qRg+Y2xg#X5DT0eTq`vRmxzcnNY`I!a8u zu2JfG@M%oe%egUw5pPG!9IxZvrPPdf@a6YqG#GD39V#_PM%uYK+D*z)*PNqna*nzw zIqHteQ8!iUqB*>ybF`z3$LB#gi`P;5<8|B*$LqK|iPte}6|ZAHEMAv|4&ae7;h)XD z&WzPj;wfvie~xHFo#+bdDA{#l&8Q`HV#!WIy_V>G7W%DdzqFnn@*>nzOPDE#UGr>L zooEkzk9r=;Gv)G_EPLXHJ~9|{QPvVOFLswc5-1w*+YH4t5=a`nR?NYyLH%AtRU@It zVj+JrhBjeO#w!t{{GR|smoO*v8KL68bF7(E!?_(V59WBsw8D|v62|WBL z;i~l!qlBxJW%78G?;}QuU7~K02cyI;G3)gxD2?*1G(D-w4l`Y_jfG<0Muj*_@5$Ll zJ(`W31MXA%iS{_LVEk>lW&!wz7J^uPj3A|k5z!by%3fNcRd4r8lnDA{&S?zL>TY3- z#3GuX+Yj%qh{uEwQ&MPmNcVW*U4x*>qRep`1W~JBVieMW631aSPNNV$rCM!P`mKn@ z`j`emqqJ-UN59Yj`Bctm4AOwQVTKVVG12Z3(~KaPsx)ij4SRz^PF8*i+PPH)Un z#>&bqLTNAJ*0C~rumUQTTxC*kkr_A2jL-G@^I@23V`tnbYe0*}88`YfZj>?4_xt3d z&wP|9EsedTMI&mWYZTryGSU*WDJ&^<>rZLTi7zYo#tA<9Q}*Fsmu-`RB)d`EHUq1W4%L$jzC;%?S}C{EH3& zHzx=Z`XC~i;3MG=bgS`f5kuYi-xj7+%gtj3-G9iY9UX?siBoiY@CPt7<6eRR~ zL^9DwGEtDM@Q_Rd5|ukj#zY{gl4zMbwuvF#XC$Y&`H6yv5w-T9`~@YhFH2l|T1awj zmT=9DV09x{UBOC^OsuYt)fKE4pq^v7!ZoWSZiH)GzW}2f!RSH;1B@=LftDzTw2e_Y z3^d((I_fTYuJhnSEme4WN-;G@=Fu$kSchwzN3%bVW|>E)--o(H&!DZWt!?)BorVO^ z>*@}=S>{51Hf!t*Db;>f*QvYY^K9YsWWhHVW!k;Tf{%7jcM+2X$;G%zj!yP19Vt$h z)#u7j4y}A3i<1S3Y6W>mee2CT>T#es)CBTQvGF(FReqGf2YCa{;V+D<@i#3L*-^r~ z%ls0x=Tg5!{#pBcl%NiBvud9y_vFb5!jq|yai_|-n>}h%W!z0Dkq1-#HJd7&+Tyq3 zn3O$jW!G$Kh*SH0`!O}fDN6R?I7MzU_B>o0N&sU~a#Lq@Ok`Ha$gD0$3$E-jGOLfE zM7+oNvpPm*b%o!Gv-+stinG$*^s`s`tr!QgM2R}an;Y-e5cjdD?+drRqr=#kt8t>N z#&p5`4<5bgF$tY62shv=kxch>p7WS4YpwM}xY4IUgp@js1f~PqFtcp#fh-X+3h#|j zrIb2OdNTymY2K(afT;<8qKY%-wLFyQRoJpcT3Y>YLCXnvpjBJ8pydRy`fQn%mRXNx zR%o8#wai9nGOiDz&6(12j@NRg-||J=fj)NteiD<|jHjnp`QMp=VO1m6X#p; zz6X2MdXzTfbF;T=y&30M;%Jojj6{XmTL9v~7rb_2c6@+-CUEl(B!BotuJMk9yd1AB zt8kt~QLB>pld-sqq0RL7h}sd^`x0rzUxJmCyk<^Ayp};UzhNBe6E*yh!+>e7J?!uDM zRkQEL)oa!+-`FALLX_7ozij!s^_$ikEEwCA;h3}Lf(`38u3xz+bK>R;IxfP3;I)0q z*<(h2+u?cF&Ew74)k-Np9B3I z=;uH`2l_ei|Ca-Y+y5u_J-hF76OJgm=~nFj$N%9z?*CuK!TmY+|J?Tv#IX>^P#j%2 zxbMFX2lwmSad5xS{r?agJ8>`%@MRp#3p|D+oCjcnu6t&8YxlD5Yr0SFp548wdqH=1 z_r={eUA<=O%~xM&P|N-Np`t<=2d900*8l)963-{!+V*7k*6xMft4s;1IV4jGgwp-# zs~2OybMU!J5>4#W|LW&JKL`3b(9eN>4)k-Np9B3I=;uH`2l_eC&w+jp{Jn92`(18` zxv%EE{1lFS9DMkK_vN|Q=K~JhM|024O*5VVk$pe+_~kfw&!7AJN*sf6aIepNKoyQ^ z9C(;a9_-~qqTJ(i^UX(HGdOB-)ZrM3qaMd79DMwkj~6%K7>lD3$2c70aqxeQPr&y? z94-z%KF7!7Cgb4aV7$&pulT^zG#q?ji4O?z0U$nx!|Q*-!SDW8Pfr_uq`qGM+U1Gz z|JODcK5+K_U-(&`WBEuq%B1;e%;WNDPSP*^%-s6T>ZWtQ?U47jegQ_`fIow4Yn~dIA9#W zIOl|O!a3XEoHNGRX7<~+vpe6uH*d%9z1{JQ_5S~=u3LSsS{P=$yWhSy7fQGLboH-J zpRPJ}s;XQ1=)+z=-2UjmLr&c1Bqzc7xvh)S$tMqCn@N3A9H$B!-2b_)txXFZ2b+KU z{1>vopP_3dZe9XXB2p3(?|EmWWTY-gU6HyWbw}!f)D!6#Bvb*X7gBGeK1h9$`XTj4 zIu>aFQYz9wq(Mk&NQ04vAPq%|APqxGN6J7Nj+BWs0_ixUkw~MEMk5`MGzKXPX)Mw> zBo`?gDF-PRDGw13ptNEJx4kXYvzdEeFeo`Wk>(-IM_Pb%8qz|f8l=TYOOci!k-_wz z`Kfjq@vjB~-3f(4$igt;T+AUS?Cee4kDre78>AX%J$=L4`c1Ww|EN!~(xEm)9ri(| z$=C`xpJMMt>^&DchTdrIs`}=6jZJIn8XMQ#gcEwg-S7ld3jFM&emgM?rhcZYpFQz2p3a`mR%7Ns1={ig4F*bljvxFG4w+fs+4djvQXj z3Ko>VBRQ!-`Tt**hj>$BA7jrh+7AC}4jB1}4&);{kay}po*XFejN(EJ?>6?TEsPXK zoW%a>zH51J9o;FFv_1?PRsMorDaajx+gACt{IL0ZDSmwZf?fe~=u^-ug#0MY&sXw( z?Kw(+El-@_(?`iQr@h?Eudg?DT^l`pJUhg$D^9NMqx1>ZKbBwX6U!eb_m%7E8K(~% zum1S$06Q0idKEgj1D<^}AM%Z%S|yLyzaW%S=mgxaf=~$gQA8YnW2m3z`0c6qI=`@| zl6(36`YXBCGhUyKUb*q|0AEpY452>8IuKoD?)m*rDBZrS$3` zzsHHcUX#C_+~dc|3sO>WS0e4~U*K`#?NH$9*)mKLarq0pa@*O#aN_MCuglhxDz6>I z=daTBww?Y}9kiFK4%$~$2kr5cQwqKIdu2G$Noh@L<9DytPU^dNYl8aj)7n{m_ias7 z-w4^;mWCMDUx0DK|K=Qm)5)2$DjIFcz7)fo+4#3Vl#GM{dVR?GlM{(d$B60{f4ljOYeI;YsbCmG z(k{;P7@fQU#lL{+PpiUMOc+-c#=m?7;OgW9?tSj>+ijCwagWG*@lnr`>;W|5>4f?2!Nv;oTH`2IB0{hnW((&K+DmbmgQC zb=U58J6G>;+g40-S8YFG(*pMrcggBMw|2FsIJ54#m>GE(L-e2A&~+Pk-BM?AcA@AY zn87c^?fofc{f+KVn`Uk|`9c249kvFL_Tq}_c(DTQjqbddCYEO$Ly){lGK23LSd+{( z^x%2g8oV@lPCp*J7q#mx_n+L|?w@zwRz2@XGyk|^Z}f;W&!}F0O~;wlWk+YFjF6;!QxLo#+-b( zI}?9W4|7fN4Y#8!!U>$w{4mofWtyoyp;R>*I92>>-})Xz!~TQ&37XN}?lbUJA=MVy zXy|6b@QU5=lXJsKoVq=HMGIlNSNkYB!9DKdfIj4YfS;U53!^ReP_PtZ8~&lh&~fr>($me$d@=PAZu`z zt2~pjy#oK(jgL@jh0$|#cH*yEtHdi!K)jK}HG`krgL4j5j$ZlDj-YFtp?Xkmp z8n^O$!~~Cc29;NA+aCHq6w+0hwg+xR80#Ns>RhbQ1wMLqP;t||;*NpAOmQEg6$Y8t z6vlvsoqiWwufMs&{o7{NzA!W?_RxpV6vDEMu1)?BAV?b0{L8QPr+-5v;DRT&!i(sykhEd$oo9w-*z&wnTlnqY`}t zb47IXs)AUsyhudJKe?G$C7p#9cM8_cG942D>QhLPrv%oij`(qzb)7oG%(_l>lo=f< zdmnb8$1Uhoz4*Ei)|2UgbT6a3&wXBv`W?P?9b(;~!%sv_;tfdRVlyFGvos{fgYd3t z$bL2EV#SmgQxy|{3UTnLs#p9d@((NoD%>Q2|idpwBenBi@wwta{n{(${Iq5GM4*x`bwoAv%uH#3scx($L!P_)f#iua8! z*f^xRzWUexU@8?4?K)I>cr`~lW;j&5VicYUz)9a$&R=-sCxzUo~E?E19kB#@p4t#~JDT=JL?4pWM%O9;)OePO_JHG$;P`m#H+?mw7Y=k3#s8 zl!IDsD~EQEAx3hj>l~POi_HwM&fkp)Ne}3C?c%IJ0v6o>Vw<4)fRmo7Py6TE4+gYx!uN64T&uo;2U4M{)uJly5W zh}1b%7{-$$-Dm)l-G9qee`$=m+Y1FQnEmX+HSRY{<|C$PZ)mW7ax1FaA4uT=Q^@(uYR*qkjruBtlb&~Deb&UwF3mqDJvOC0IYb;EJDo7qqykU!(9*@xzK zl(`+1-9iwxT}B3KK^gm7J$HMzOe+(7#i|mRy2FMt()nrAf$AVK95sjNek;??nk%wFe7ja_8rRLzJPce|#;HYb>ClP6?2NqF`IeM5ZP3o?s5HON4G zbdW(TZzY#M_)K8PDGc@0rmN3d+qgVBa#_}@mbDF|q#ZeKQ}&&aHRt37Bi9CGz$jWz z0GY7X+$&kXbjM|HHizCERE3>q!nh?VxLyM8fPQbqt!Jpgqb);cIkHk%e-qS!)|Di}+WLDZA#60~+@FY`I)shy&D1%S)m_UQe zb~^mEwb{pbJp&Y8*0SAg$0i2k<*#B~(%J}PFw%74a(r|U};!oY} zMczjiNRRZ*2vOf*r_WRRMwGssiA(e*N8W+fBVeZln1{M|!z1{oof)kgxoSC_Iu?I8 z^7#gXoQ4SQx#`9^Pp!HNjold7n*{gPY6YZyRkq8rCpz8WXY~Np zU!DDHS-ds=>Rig^q@fknwtZNr1b&B`7e7%ffhCv(Pb!3!{(jN=X!6|T9V4CRX8q*; zeUx_buh3AdXOW&j;#4Wuir#hi;|7??QI30)a8_4%j*#;Q+wdz8+tgvfqyYwJgtH8b zBT;0L)ws>M1At7tBEl!~*Y?B%+PI}J;#HA7XbA73FMTY*ac=MJINR}H#o2uwrw&h( z+;gnsT;3ILc;G?d-Z=4A#26QX@drG_`V|=Ucx42SlsGrym65GDx5qHY`LPc=vUKIbp+DIQL?_U2?7C{0kD7C~1W-7Khk5@c~G-`4rgU zPxt-LPb%uFrYuqN(Mo>2`ngp}@W?iD>Q5#fU_lAac{s8^u`gNyj*XZ(qI^X4h|+#2 z0IwE|C>c=|85bEbYny_cuYQg|#)=VFzP&u>?J39kwnxUcznsFk6`kkHDHV7OkT1B@ z<7JO1rWBjh7GM9!!SpBp9myw@n3DL7bAyx6KsW7w?O_a_u)&KuA>8M``ZGTqd&Kc5 zSmjkwXCo?T6qWTa`?R5k%n!fi=zpvZY{MZZ{(1kSrQhzP!&X%ujaC{%xcG!HiOyEI zSv4WY`2jOfv?%wf!)-lBphMC7^ld*B+I@ztw{^GqQH4TI7te;_p4ib9TfeB19LD?s z{v|uVR~od2`s3Z56fmvK2_2I{8E2@IQ9b!7#H$ySaRNMEM&Dt0$ftOnq)hSXUE=fc zMHZh-?A!q_`MwwHj|fu4#bFeoWRRAKg#@XB9lY_AhuRI_`X@p=ezhQeG-3}L>L z1P;wp)eDSzFTpu3Mo$2}2st%90ln z(m4@s>3l%X(m5uubhg()N_UPQ2f?PA&WZHVG2N3uFOKPsK`~x}G`2_reSvSUGa?Ri zm2CNGc-m4k*;5R5E{yFZ;0>8`Vta|W@7rU0Nmx#_dz}#JS!QRv=E-BUJ^hH*pOM}W z=OT~5C;7(2=v=HTjq&)nM5S+!`Wrf*2HU+VVCFgerN;n916J}#zvFKkVXwL&aN;Wb>t>jk=Puf0H@7(2$EH_btW zt~BOUR2rV^GJ6S#ZH=$*jS{BC?1AAjUf(v>>5UR>d+m)9CdaJ9eq39Jb5N-&!ldo{ z2@H?`wH9l6?DcHn%)oe zbPQNDy`P}>6Ld`E`RM(G?)?OvQHrMbSGuqD==}w~zo2ve*XrJ1=-yw@8SiNNv5Fq` z=*J5Bv4VcApdYK~#zP+~=!~2+ow0K&25;Ij0|b45p!2O*tNQ>!A0X(A!8D!kCa0pE zYI>@mrwV$ipr;CYs-QEP(=BQs=z}ozqv-=dw>|hk(2HX=oO30%2OkK!ZBYY3KQUI{ z85e5Z2Z5g9V8p9xVLP(dFm=tBj4sGu_v*Yt>@pYG8kf{quHe0P-- zcUJd^phsf#gQz)kF=f*buETWEV)c*TW?M_F+`sSN=J;|Lw2U89% z)!2T#l&P^UquY496a>g72FOkbka4sU&*K;)UN$*Ec2al?)TDWSD3r!(y$3bk<}|PgnG2kDe~*>4Kgv=;?xBAL$gGV1O=)(n_OC{ES3>Wm_g3flT>6wathDXm7^h`m| z6!c6%&lGgFc->!e(P2oezZ?O&9Wjmo-HsUfl)oJ@a=y*>mm@&eBSzj;`VOu8aiFJS zj#c-UjGS%sd>rUDdOi+x8%Z3ebT{$gaiH4~7rl_Cb6zCXx!I$S6!ejTK2p#}3i?Pv zr$5v5QHpN*OU{s3-A4)fC_x{k=u17VMhQASqo#8rJT=x|GDflV(SnY(JD+7n3*AQx zI(@9BbAsJQaK{V!@q&((E+74PK|fy5>8&+=jH0jiu5gT?j}i1Sf<8uAW{jZI?`wLN zqMP_IOVByjVCxLlzJ0o93Ei^o#VzL$J{xtXU+8OF$yv@a;%~= zC+j==B26Es=q8dFC+Hm6S>4A8-Ny;bj1#)ESJQM?(TxY@IL_7?SJ3$gw{1~yp$G68h z08{73qlC$7k9D5$jkeAN&@-@Pr|A=*za0}z0DXFlFah+rzCC}7ngIIv7@d)lrWYvs zE{|Ry=mm_mc$uBtd7qtm#t}-T28Vf<8sirwIBKL7yV%jJ!3yP|=N_ zEEM!YK`#{aLP0N#(K!|^Rbx^A$nx;pLE}`8MY*;TKi=SqNW82hKvo(c<61%dx#a<} zsR6QS0kY`5EA)Pf@(~A||^!LSrUM%Q*_0sx}VnHt!bhZgiFH!Ux zQK#7Fln8oBjQ)~3M*4hEbxyyxV|&uPQpLN$nUw_I{ z%LK11#?#0AS6?QszD&^Bsx`e_(arp9xuBN|dbzM|xuBN|I{kyDPX#^0Ios2HD(E&A znF_j%MW%voW09$fZhG9Qpxao4o<`HBDY{vYm?r4c1bv#IPZPRN6Lk74O`oplX1qCF z(5DOfbU~jkbe}Hh^nRK?L(x+_%ghk;8G=4T&}Rtx3_+(K)%24UeZ5CNS`nu<`dSlwjlUSX833`>FR|$HRxU*G) z&VEqSXDi*!8r*C_pDpOK1%0;AeYT*pN7eLdrTZ4oGSz}!E$G#PUM+O57IgN_nmz~g z4Ce}uJ_mH`YvzDHJvJ7Z1G*iV%n`cJ0e!s6$v%j^yr$1px|{YoSLi-h=ss8IK3CCq zds@vEx-(wTbUs~Y*WgYO^iu@=6hS{l=zfZzGxE?a>QvANIjx=!r-E)rw5Nhz9BU`1 zf?naYXrSU&}#&}M$l^noiV7UFH-c`9(|FZFB0@cg1$)57YRC}SxsN8=+z#5 zv7j#&^u>a{SkM;>I^$wZ=fl&fsK?sJFA?-5g1$u1mk9b2L1%=m+v`%$2jK}@O;c@&H*hK(-=4wlYArDnM2rAX^=PPFnm(aP&YE3Xr+yiT-owhK*PrsxYj`Z7UZCg{rqeVL*!jh)9h(e!F; zVVb^N(NFVoEf@6Vif#zY72WRn`^@D^cOGM($+oKLQAIZ+uc)9$h3-+IdsOHi6_#PE z*Yp*Nj(2U;h88D+PU}pwkm+`YJ^? zapEdLUnS_P1bvmT%ql^rPt){zMK>d_dO@!j^m;+B7rNIAI=!Q&uU7O0o@G`G`f5R6 zE$FL-?yCizepb`hD0*LyzDCg32>Kd9UnA&i1f3pR(;F1s)b|EKZxHkbL2nTB20^Fq z*YvfDZtm(@L0>EAYXyC+psy8l_9D8!UkCc2*b{i`K)3z(z&b)ef7 zC-z5a>d*erGd7}xH1&sm^q${OHlhUUCmT_M^^=V#!TQNYlwkcNdpB*J^~ySnygR#I zSZBSk&U#^;^-6y;zF04;!+uiJPgnG-Jo@Q^e!8HaF6gHV>zpp=>~S@{Nzt$N=uLv& zr07dy$2eNIdwxIJr06_GKgqsZ)0-9D_{nBLZx*^Y3*DQA?#)7XMgf}MqUgp?wg`HQ zptlHmi?Dl(pfjG(^bLw`{Nx5f-yrB41bu^`ZxD1wCYpYRqMH_VhM=Dz=w}G}8NxDW z2s&dNO+Qo7jh{SI(9aa~GX?!jq5GMF&S*)~H!Av-UcJ}|I@iy2Z?zHh8LB^KOWO$g zDZV|{8P*bgtTTSMr0KaCcWL@2MW5{D+9Y(}By`^-bl)T_vq|XA2u{<_QuM_h{VYL0 zOVG~}^s@y0EJ0^1sOe`bI{%0mukdU^KU>hx7WA_P{cJ&JRH^CbD7vXL=Lq^af_{#m zpCjn!2s-0aP2a5Orp{~@^v#04SQ33lG`T$EtF z@VO|#df{_Xg7w1Zq6F)O88>VFwb3n zvK;}kOO)*QxPuPI(P~_Isg$X)(q#eXULGLZ86evgAiE+!wmU#} zWq|Ce0NK?6vTFil*9OS0Q!;6T>!nQD;D&&6Zw!##6d=1fKz2)j>{ca{y4)sZDQqRI zf4Y_MMS1%a;d!E!oF`hzd7_n^C)(h7u~tGlYqF+qRdn-~$yPz%D(G7UeXF2v6?C=< zP2Z;I#{X>-^lgH^P0+Uq`Zhsl>(cb|72Wvm^9B8UK|f#6&lmLb1)c3w(=SkTvx<3v zpkE;97YO`bC0%k)U5B z=ocya(%5sDLP2aBQtGry>1%11qZx{6KLig=Lclt9;zgW@hJ^IChezBlmEa(>t z`o)4y%6n(Wv-y!Hb1bv5~?-2AIf=(Z+M_reIZlCkJ1av#beAUJLqJ%W8LYX~(e}5@Tu>Jj|D8cskm!bsQ-(QLnY=2MRudQ>L zvd&bGewnb&Wx_g_3F}-Y^uJ74hrNiVUk-Xk>`A=KLC9JGL*|TZ-E=4z$I+iLo5MW5zf;ch|SE$F)ieYc?R7IgO8 zntr9C=Xmrh1^r4vzf#bz6!a?voe_YhU!~~NJ^EFGewCnKCFoZP`c;C?SVGgU20bJ8 z7Ub2S+ZuT_=(a{)4Z5w7S1bBbPphjzw>6SciKbtp=%&tGBk0!%`Za=nji6s6=!|bP z{aR%iQ)jLfmbq3~=2~HyYX$vUVHrkB+LK)ex?L~24s`3ut^?hAvg<&%p6oi%?RwF5 zpj%JIn2T>UYTtD|N*Ic#GR&U;w+vj563Sxj|9YHbf6Ku2D8YKN>rujlm^WYqr>%1X z=n?g&x9K%+fc|{)Uzc?Qw#t#y?D36pyXT*SxdHS7b&OFHV?j;7QPCqF;YLBfQP6LM z?v{R|vb`A>-6-gcDmDEkMIYwTZxZyI1pOvKze&(<5_HC=ntrpQr+f691^s40zgf_4 z7WA71osq7l-=gRl9{m?g}{f?f}_6@?15ByjRK; z@4kR@?+=hY5FmRnK=x38?BM{}BLT9#0kTH}WRC^N9uJT`5g>aqK=xFC?CAj6GXb(^ z17y!BnY@?JOPR9$3jyc87$AEoK=yKgY+sy={*U!fxANOnD<9~!i`zvjzg@KQ+eItC zU9|GsMJs1b*7Q3R9lsM#MZ9+i`W=FPhoIjf=ywP@+l2NZcPbyk-~7%Ney8vucM2bJ zC+OCP+zGnv+3plRgsm$LZBsM%C?A5~@uy1IBYemnlu(A;=9u4y>_G{(XWJ9=A+$Z) zs)a)*bC>7_IC^V-GY9%px-U%cMCfGhqnDa!uIzF z+utK>e~+;JJ;L_)2;0*WrK#V{$NPD&vORzCq2BZR?|X&q??nmLf8Q%?f3L7T{hGGU zeabrBJob3;O+ne!rmKFX;CRI(@CCKcMJl zw)Fu)e?ZV55cCHWeW|C_1A+}RP|zO~^alm~L81GDf=>Uh=?^J7rgqg` zeMrzB67+`z{UJerNYL4nX!^s7Zbps|3;M%?{;;4wEG+Y|ptDcX^hXrki~=4J^hX5! z5kY@M=>CYHvv#W-z(^Q1%0oe?-g|RlbZghqMI?sqk{gZpg$_;j|$5? zD(LKSHT^L~@8jwIn4mu<=#L5dV?y`G1f6}ira!Le=GlP91^sbBe_YTX7xc#kol$_M zKcVRTJl&rV^d|)U2|<5C(4P==#uJ+Uq@wrt=uZmzlY;)Fpg$?-PYOCC6HR|g(fPXq z=_8*K^rr;CY&-X-&@v z`ZI$5jG#Xw=+6i`<1S5qR?$s;e^$_+74&BX{aHbOR?r#2>E7=-&@=HXptaqf1Ko~Z zo&(*EUY-NpMjp?BZX=K9K)0h8#)4^>ebCJ3QNmFChDfvL@BN-f2{!V09wpe`?|GD9 zBai1%f*!pv@?d1Ct@DDi&Ium<1!0{RgmqpJ)_Fl$$BcSk5Y}Ogs_8E(`XrD3qM*Mh z=r0QTi-P{5pflRl^p_Of^nNc1`b&cTlAymN=r0L6<7Q2NSQn~P)8{m?RgO!`WI z?9~9-YXP#?17vRm$leT)y%ivPJ3#hMfb87>*?R%9_XA`fD486ieJEvWjP_B$xgQ6} zJ_(S08X)^DKz1NN_IZHpV1Vq40NIxTvabSUUkAv(36OmoAp0&r_I-ft2gtg3zi-&V zS~k5C>z{5V`&BD3{my>TO7@FZvR|~4{h|%-kF^rgS(7#W6-77w&MSicilDzD=&y)2 z_==#jO=$Y7if*E~R|Wl5L4Q@yUlsIM1)Z%+(_d3`)2qEE=&uR-Yl8lou*_?M&UUKl zuPZwL*gd0(*9HA`L4RG)Ul+Q+F6eCWn*N5On}dw{cS;i zThQMY^tT25Z9%7J)bw{0y~v}#Bk1o4`a6RDj-bCI==8Cg{;r~%w)(E1zbokP3i`Xk z?(YgZy|t#lr|71wz9;DK3Hp12{+^(}C+PJ1n*P3`o7VKcpuaEZ?+g0-g8sgsvj@>J z;s>B-#@^HU0CXE8egL|S5kCOk#)uz)Zezp`K({d>`=T`U_YT-XKST*bV=KrXq69m` z{UJ)QG2(|P!N!Omq68ZweuxrmjL4o%TjwKXodU1kd?c*%k+9B3!a5%*>zEkvBVir( zk(&OoqMIo0V?qB|&_5RRkA>|&7IgNun*NERn>gzeLH|V1KN0j#gzldRI{R%+|5VY9 zkN;HAKNa*(1^rV&|5VT!0ciSXif&reXM+BjpnoRlp9#x+Cg_YMH2r|0n-+CI&<_au z0YN_?bUz^Ij7l{9b452T>T^N=T+lxk^v{Lvp9?zU8%;l`=o7pec~H;~3i?4oKPYrR zDCmroH2n)j&++JA2>KU-{)M1_A?RNSI%6(P|5DL&J^Gh|{-vOQDd=Ac`j>*v=uOkV zQuI8J{*|DACFoxX`d5Pfm7p^Y)by_vJ>R2$E$Ckh`qzT~wV;13=!_^e{ToF$_5B+` z|3=Wi5%g~qeW|C_H-gUCRMWpzbW`8I74&Zf{aZo*R?xo{bVj+F{+*(m`u?4ue<$eQ z3Ho<}{+*yRUe@&Q72Uk)`MscjFX-P3`uD=_-^b`2E&ewQZ5zVv$AVU3M}<}Vln z1TDKbZLmH*p<`Uiexqc+H?kD=QOq~Yxe2nD@Ovu{;fhl6cdyL9&d@Xi(qxBkx|t95 z|J1|DJjCq#I`2zOsdo+{OEZr5#cSjzg?l?sag`T;`oew&^OwmF=AYt1iG%U4Yq$Ra zy8at)&xN{R+nKW}8g0qulEU9U|CKE;NBt$QDE?+CAD=t=PfsTt;-AQ9^FBvP_?Yi; z;4>HH*P}kp!>dzG_;vkt_-<6cwqGCrrJn;)J|9J3C8i3$l%L1xAiwm=UxJCjV*IL* zB?#)O@k>r-Ak-^Sue}}#$wBiAhs?DfY55VL2eEbGvm967q&NSfpUH3oM_YacO8OzJ zi{qjzH)#&qkq;u#mb|B2y6u9*R!(&pVsbiYw{bI{D8EeD{5NF2-+Bb6YPB9$SPBk^%h zJ{-u0>}DXHj5HI8I?uv)B~lgAY@}+WIY@JnPC?>S^E{;aNX*Yfr(A=y2x&3W5~QU_ zwMaa^4ByLWe6K>P_x9I#-^lu_enS0G1K7{JhFb6$zF8Ys!n^n$nm_@20mpfL z;hVUIwzdpxZ%29x+xX*$_%OHmKC%YL-15UF$--FuSoO%{ClpHd_BP_1+lT$=;wx|y z_36xPl+((7@9lSw6`^zf$NwA&-NMeCnJk$mo|6*Wx=L^1_=$SUm^y?%jO5~VFa4+b z_$T`c)F1B4@+23c`WoW%n*98Z|1fX7jQjD7j`G=a^%>ur6aSL$pWk6sCQ{ZoN^o=T-Rl&! zv^3S%ZD?_#kyDG8%&J|BjmeR8#6g7!gwlI-?fTo|#M+4%*E6K;)#2Cr{95fl8-1K@;r^|^wf`e-3BS<(_jcI+=dMEZ zIUNQA2=f++}ra5^_`B!54;CQhR&z07lOYoNP7}g zpRNoSLU$Z?{)qUi2Jw);*U3YiRQ^}gx(xI_W6=j?pzda%pE?00==ggoqNyUh&YKNM z38JhD{HsK-rzI7L$4XS3KF5>j=)J~^;>Y7GO3Ki;jYT{+6aO+G;Rs^`Vyy-zf}^$A ztH&=6jNlqL>WHAk_4wDIq_r3e)kD5cjgoB*>KdIK_ z=XfoZS3DLuH{wnQ*Wz^Zw>R z`z&RJa#a^}t)Sib3Q!r2=$c=IqdL}Ry`VfNX02>ofvwy8Q{2B+tEasxaZe}wLM`(9 ziU_XkXzCHiF8r71B*Ji=!g$~X-(B(DJ**=nwk-zFtB$RlEaxbWB!UX5vu#f9$A4a5 z7{;80e+H{BEJ}||pG7agt$b+FFD&!5wQ(@3KD_Oj7<#s~4d`$(idYSk*wk>x=d`sk zUgl?jErQpBkro8@%Km+~Sopth3IG4nQT_j7+b)@v@>IdU-cdL!9B_CDrpDFLWi2ngT!@Lk z=9cA+4bdx?7Gf5rVorHu)7s{eV|bu)#fti6(S94Sov7#je>Cy@dB!rwLWoOhj zY(OkJ;LAd%dm@5j6BDmF=kE%g`C!+lqG3U{3x?%Fxr6zZFt)Twuu zaBt-(uY&)aabmb@e<#$`s_({0;ZzmsFt}-DbkhUzUS_z)Nf=!-6_X9EZjPImi^+!M z!HJ0_@WDMpy)oI~jNhD*GuF*OA5(Hd&AjQe5IEJ$+0@(;U7M1dQ!^*LEN3iYq`HjC znPrh8X9K1XYFp|X%hzFkGSuJc+!{tdqH4fNPI1prC)Ej;H5DR&YIbs4mHRI(&CAaz zLyVMF<`$G^Wk=lXqO1ZZISc-ByjxI`SL!Ag7v~*YT3(TZn5J~*%#4cqWvxw(&5bKs zB3mb>M_Owlm38Mm7(sMd*HqiIX`J)NNlr<2Yv}wf;pXjI&g)#XeT(aE&TzMG$(Y)j z>V$@@cAY&=p9>TAIYk5VOY+K!5xf*+<>izYBWlUZ&&w*#D^JPKa`RhH%`YxU$5i?Hg%_!~yLd;ZUHf{xo}E)#UVz{ruOutKxV)$+w5m9(xU_6v zw)SFhAN{b5S&5P|f+FioJ6xCr;?TZd<3wzKO@q zT<2u8I>!`$5O(_XdL{Jw!qnpD(d1Gv%`_ET&Z@G)anXG*WIF?=beWw+N zvWq{>+>3r}NO3rnH0G57_rAF>y*T;!;!tXFFUK^bMcpFx93$zGMEvMGnl_MJK15wz#YXz-iHj^(Bq#TA~|UsE7;EsnMq9`o?u7jceDV zIn*^ob8{xA=T6Mc$;m-U$WT%-b#i)sZhm%&TRb6qLUFM_QOT;}$>~Moi}G^w$LEz6 zm!W2sYKE9Y~0--&+E}Yib+!86<*b-g0JlYhQzHUY1q8?pi zSC~Ed?A(IfoYL`mZdOV8L>E>nDbFe>%cGTw+>(je*{+*kw0Y90#buLXXSqH?&SXwZ zVqP-40H?UF{vlVr&P3xrx=&wpf_^7^Bxf%`Ca%HoBg@yaqxqSFUV{q<$w<`WNX|VC znSRes6(9aOkPWzMjtV)hosMz;3bckMB{4GrI&aX=ktm<#a((Pb%dbP;A3RtR#s!Ut zR;fc2Ww#uqJ_Ub){a2vuAHDKROif^w;1u=dNh+X#GZfVb6_kB=Gv=(LsF%6{PR=eE z6H&<>?~aK~$i;3+kFNd}I2rQTe;o6QjeY%$JH}b2_z!Q-4;S3}FaK7#D&>JIlAYs^ zd;Cimvb{*W*F4U62vb&S9gZ@tuW>E10g3nHd?c<}?n3H;bQ2Oi+Pz3DaSz=kzI9b- zR@+I~Ut7Pa)nf3ccnk|=jZkIKfO~i=CoH- zokX@@{2cE3!w23!aMRd9DOX;L>mT!P5A*t8L+XM=ovV?>O5>1h5k_6xXj3RBKM!Mp5N0wsC$`?3KRQg-z(c)pyLs=-Coof-a5eV1uKjC$OxgVY NwU|f4`LA65{{@|vU={!X literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/12843-1.xls b/src/testcases/org/apache/poi/hssf/data/12843-1.xls new file mode 100644 index 0000000000000000000000000000000000000000..0ef5df4264811af81de9e8dc9c4f8fb768bff688 GIT binary patch literal 302080 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Ν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�Zs)L0H*<`17`p~0nP-@0)7gd4V(j< z3;YZ?4>%vV0Jspi2)G!y1h^Eq47eOv2wVYN30ws%0qE1Fi>d0B!_s0&WIw z0e%kL3j6~2C2$*XJ8%bZCvX>VH*gPdFK{1lKd=~B0z3dT0uKTY0S^O@0KWnr1(pJj z0lx-*13V7=7I*@95_k%D8h8eH7I+SL9(V!x9q=OX60i(-8F&SF6?hGJ9r!)49C!nG z6L<@F8(0DS0r(^E4)7=7&%j@RcY*hS_koqb2f$x}4}re{9|3;{J_bGkJ_SAl{s;I6 z@K4}hz~{gh03YI&0d%9#ch?qZ2ebz&fJ%TN^&NpKpcBv;=mM+*R0CasZa{aS2hbDf z1@s2`0DXaVfv*5x1=y9!`oIQ24X`1w5wJ1P4`A4Ne_&H!0I(UbIj{w=B~S|t1O@?v zfg!+9U@Ks2U>GnQ*ajE@j0Cm?wga{Yb^vw+b^_{vdSDbV8W;nN1;zni19k?+1N{8P zuE1`<1YjbtJ1_~@1DFg<0j2_b0$&HF0kkCWa~|IW_6BGz*$0>bd<)nY*bkTq%mVfY z4gh8YbASVZgMe=X2Lp3~Lx4kp!vI-Uj>Pm)z&v0+@Ezc2;27Xo;Jd(a!1sXf1IGhD z02+W3fD?fq0w)0{13vFl15O9d0Dc0T37iG|6gV3=2RIk_8E_tOK5zkW zA#f3JF>ncRDR3EZIj|780=N>m3RnbO4O|0U3tR_W58MFU2;2nR4BP_z9Jm$u1@KGY zHsE&P4&YAUF5qt99^hW!KHz>}F|Y)90B8gr1Req&1|9)^1w0BY1s(%_4g3ap9QZBp z1n?yA6!0|g4Dc-Q9Pm8w0`NQFMc^f18Spaj3h*lM8t^*sdtf>62Jj~E7VtK(0{8>) zN8lacPr#pnzX0z7?*Z=vD}fJyzXBfue*-=O{tkQ$d;)w5deSvj> zuK-^K)&ppK*#M{kHUu^THU|0un*g*}Z3+wkHUl;Xwg9#SYJq{kAYd>s1Q-fz1#Arr z1BL^i!&Wx}e@6n_0^0%G1ME&_M}W)g@V6cq1&ju0Y#R%V1GxNOIUxW4(l8l!5{Kc= zp$2z8hvM&%;f{en4y_x|y;Yg&1J#z`t3_eMM%#Rx{jqUf!*;ih-uIz0)}i=m$o)v% z-OLO+4i??&zuoZbrTqD~wHv;7NZYV#JKVX=$6eJS$$p{i<53Hr7!vSFrte&0`Yf%23GWq{6>nzs< literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/12843-2.xls b/src/testcases/org/apache/poi/hssf/data/12843-2.xls new file mode 100644 index 0000000000000000000000000000000000000000..beff64650fdcf8fe74ccbb7df2e7c6f1dea457dc GIT binary patch literal 48128 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 b>bBF1r@=!N*TA>qhh8c2t>yOs*u?)|<*7-l literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/13224.xls b/src/testcases/org/apache/poi/hssf/data/13224.xls new file mode 100755 index 0000000000000000000000000000000000000000..81f69d33343a6210b827472644dc75886d3f4e4c GIT binary patch literal 13824 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 KCENd90{;(%F?mG* literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/14330-1.xls b/src/testcases/org/apache/poi/hssf/data/14330-1.xls new file mode 100644 index 0000000000000000000000000000000000000000..6fd2d9524af4eea7ded1e94e7db61e3220cf6777 GIT binary patch literal 48640 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 literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/14330-2.xls b/src/testcases/org/apache/poi/hssf/data/14330-2.xls new file mode 100644 index 0000000000000000000000000000000000000000..8e56a6df3dd402c6c945cfdbcdc11ad2dfb0c874 GIT binary patch literal 13824 zcmeHOdr(wW82|1**aZ<6BmqslLZ!KEk-9z(;O`w!$*_ll#g=K5!rsH*^41L$krF^@Cj7lOEQ32(Wjh=k19|^lSxxd?0FsceZ?MAhshF~&MYof3X zVc}8X;j#U)qP1eEp*`j>W~L_S_jZ~!Z;YoxD4BR#YYH*3p6ziIY6vGYg*Mb^)QeDi zi6SVLD4UH(sA449(eAO-AJ)}|MTem-J31jdI@AzFU8yrStXIqOD6_nQ{s4+1Tvks* z7(gRiZb`kl`1pE*y(p5pc^K4M*V)&a3bXa?swq(15w~5c$lXb$%5uJ0g!~V!s(CqI z#)s)QCFforrvEI<6;k>1>PW*g(v8EN#`3OB$fKH&M>HY#eyH3Ca|(qM#aT?GCg7-2 zU9K~b#i@63?(g&xd4SU(^43n1$jM0}4|Ez`Il|AB!h7B2?l3P$=3A|f?kwr)>mljE zl9%CfAL#U4NCw!Cq63Nd zd@zR(!z|nJ0lOW)rGevbp>yBhs1}`$XhC!X+!99$TIwhdPL<34qTYf&Yc}6JnKCvt zK3m8mggjED?+J+$IvRBXP;jj@3pED}Z0kAjY@t0zq$#utDp~kVp$Txfb}FRtc>Kh| z^=45%N_|o0Uvs3uA)cpC_4@rzjFmAUjGS>8rQ^|$V#Fw!tmMGY3itl_2v(Y<6^0l} zN>!6{i>*bkSsiNM*w|P#b#SuUyKyrE^`J;)uD+zqx^!>1*>40^9WS<@+tS7B!uyun zA--X?ihgckoB0`O^H28Q_)YJQX}1>pT4U2|!h;v~b}dM}bno)MMf;Y;9V-6tUc29> zeZ4uocJ(aV<>&XUObyzz&!_{6nra`8~ zmA!51(ROQQg*um;x7#KvW%`Zl%1;cXqIn7DclJpesJnKe^^I@$&!C~}Pfxw^Lh|6X zrE7Qn`C^S_@u2J>Ka^&#*XK|h-}0POb62nGdsVf08FO3NI_z4%chjO-Q>$V+c6Q9Y ze4^b~(=Tt^aItXHM~9-{U6ItmHvLfG7j5r;Ts7m|w6b}VfA2QD>P}cy?N6CM2YtS< z<+#j>8%I}V`rqu|WBr<(ptHZe(rLzp{Oe=lX6ifqXgc#&GC#N_Nd%q*0_!LYo`k&! z|8(#nZZASq9q+bR9j{OZYT)m5enKSNjPPq_9bU6RI(R=pN-H>Q3wmlO^MZe4V!s$n zqZJokHA(^sYr<&=9C>AsLWwOxbY|j0h}jpp@>!=4vz`X&6*9rSvXi?n9J~To&E4}6 z54jchOJ^{=`N#ulBn{LB&~6dnC2&<8wTGtOUDkZrbv#Lk`hc5$a=6d0t`E9~$IO5C z)ZlBw&lUHz;b)9SOl;Tisn!{7m#EIxe*)WRPbg^Ox9cAomx zrE7299g%O@vdm18oy))Dm#!UP6PW80z&zQK!2FVz0}cR}fcZ6ZDVSek%fN_EX%m=T z;uSPPIEi=GMvDq)*_@nROiIDHB73oYyh9yYGR|rfW1wzJ3{zGfR1#3{ys{v7D#~>p z3=&Ba0f~S_Kq4R!kO)WwBmxoviGV~vA|Mfv2s9V}>rNj#T^7^MvV1k-|ERm$IR3v1 zuKTD&sVMWR;wW$s*a61ZBANl_SbYwd>R)IcYBWex!xZ+fAi) zR*YkUCVu1`{{VSlpU3gY4S9hIWW+wWDKrtkTygHNiVep+CYCtxzYpGm+%$E8eV#)+ me;(C7@0Ae?WXO!z*k`A4VhmPs1^(H1;{L_?i&L*V|GxkNTKwVw literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/14460.xls b/src/testcases/org/apache/poi/hssf/data/14460.xls new file mode 100644 index 0000000000000000000000000000000000000000..284d684613f7afa07541ea1c9e5c8b5581786f93 GIT binary patch literal 18432 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 literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/15228.xls b/src/testcases/org/apache/poi/hssf/data/15228.xls new file mode 100644 index 0000000000000000000000000000000000000000..3b26ed1e9043712809476eca807ede2677d369a8 GIT binary patch literal 692224 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%0DE*bywI@tuOD6vhEu>0 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


    IrY^9XVr+nu^(;qriGTpfUuuTafq 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

    2435xkKf_+ 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 Gkp2rmf3ej7 literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/19599-1.xls b/src/testcases/org/apache/poi/hssf/data/19599-1.xls new file mode 100644 index 0000000000000000000000000000000000000000..4ce27d1fb746797d8b4dc6397d818ac9d5f647e6 GIT binary patch literal 128512 zcmeFa2Y8*ul|KHd*p_31ZES1ku6)1SWdoLcCE2pod?mSIFa{fJa3RJJAS7`T zNF|;0Y(hF|gd~J?V$w-3q>~M#m)%XW%kE~={CnRs^}8C$WS9Lt&+q^IrDyc%oS8Xi z<~?W1H#7In*S|L7;WxhT+()9Cp9`ag=x?VcM-x4MJ^rsV^zLV3GVEjc z2ju_%^Zy6}e?>VTfXx~Z8WAQS(B_j6nh+)Ga5Y9xHh5#3cW+0q}FcV=G z!r2J35#}JwMK}lHT!ixw<{>mA%tu&&kV0rdSctF)VKKrIgrx|}5SAmXKv;>e3Sl)u z8le?o4MGMXM#v)M5b_8Ggd#!-p^VUmuoht*!ubdnAY6#B9-$qf17QO~1)&q63!xif zBf=(x9)!&ZTM&8?`VjgN1`q}jwjxv!h7g7kMi90kY)9CEuoGby!bJ$X5iUl!1Yr-t zr3iZwEs}T+%97Z^Ta1`MhgeM|gi$FUb$MZUb>k*!W za09}P2sa@-8R2Gxryx8P;b{mb5UP-LG&&AjbV2U%=$Pa{#AE!K4UaLdUXMJfCjO10 zlk!)fRR7`c9Uolxl|Rk=blunS{|OoqKii@G7;1N!l!LYW`+m-f>g(u#rVNiIH%mD5 zygEs`2iDpEFW3WXR$nFH~91Gr;GlFfAt4>`e`ONq2v=MMDLyZl}Qh@<6o5S5%lVJ zH{LIO`%jQ~H#`mPzH{&O2lu50_a3|U=#gtv|I0rcqzrrOXseSb(*<=CQPX<#Q{MvT zqjl5R8x0>gcONo9{l8UyV)sAE z{{;-D|C93H@juRA2mNCEzq|hP8|R^u$AG?Y@xn!`7cI){S+Q>SazpH1F~6||Qw9v~ zhK2Zxs{8j{oJ_P3a|(?9CQ)l9DF-w~Eki{Y)~2eFrjwR1F~HEjhecVLG9}aG?&ZSR zy<(kaEKDy%x%Mn?-vceJm{(wCv1hrTZ)M8Qv@(^*u^zJz%p-hdss>4YQZ!HH`t?p} z5tA59SFBQ#-|97)MYW$Z7rh1e*DZ|Romz;Q(rSc7nEmWQ9oC_DUJk^PF}o2nzwv_T ztuV_N*)GE1wjWcDi^mbLK6)EWHcCJ%bdRT9#j7&(L~lpw#uYJsNqk`kqdQ^ox;?hW zE79fD;*pFcIxYpvv<|o##F&2}284wgOUAUz|MMGfjNSo@kEzTDAt^Aa(v?4~cs-_~ z%8GnP8`Hici_i_fmC+(8$_Wmb7k^X|{ zZqC+yMJNE|NxiiY#c}G;Laf4k^gg~4ScN8cO;*#gY`!z1_wzO9@ZmN4_N}?`#)st{ zCW`+3R0`ds`8k;)zYe7EAAM|mjH1ExWAQ09B>(@*{5rHh_hWE=pTgmfCdTmJI|l#m zG5B|l!Ji!DbM{K}YI^5nBD2@{qqOpf|=_KeUf3kCrnQzefIqG4xKBdX2`7 zWvh!?)T@*fRFzZlk)E$u@}u}%l@R|yQPq#)PZ9oT`6@l+*Wj=CqtjDn9cKwOdhy;7 z)O+R_e7+UdVO*)ztJ04ykK&I`&tin+SUh(if&3WzGCgWn;}4UNM)B+F;Gdvs(@zJi zA%2~t4y2Ew6vT{@Q#Tz_5Hm{tbZ~3=W&O9+mo>(@K=d2SGPF-5Z7sXrQA|E~w;ioCO{JLw8 zA3ePP*sW;M-~TarGorowt^#-ezSOlh9^ZfH;F0~e;!Sn^bL$W}F&a9sfB*5^ZCHG( z!|z>njd;ncYrL!OW;}PpQuUojFTd{a{v*e)P3=9hFEzCP`0;~BuDrHk-_avS_Fmc0 zd-U?Xha7i!|KV$n9@~5D##GOdt*?&CMeelr!Ya0f7x0D((*<75<=C{S^xb=oZ z*P=%f?XmeMYyQdYM0s9tic42Zq6v+7@rGBXDg%9kJ-uC>sSP{Vrs~noI$Ae%R5uI^ z5BGNM!s^GQNk|CyT0V4q@8N4!?82g7V`F_(kBLmGV{ouKuubPp@n;t%IE{@B5e20X z*_rC<-?$d+RnXWN)i;6NGc+{PwKlHD%SWoSW4LQ=Hk0ZGo|3u{(Q z4HKh!EIfAi^bS`C`gOgOYV|MPs{IIEEvM;PaH6yutj99~6J35AJ>TG8~ zL>3}eL=zjH;EO1Uhyq3I=&1};nQuonU&&;5VF|3MVTzYHE--eah=P~-A8cOj8KT*G zD!rv*G1GByLkA`Gb?oTrBOsdJHPo>SFDnxprh3xy8CHBGjsr!_p{T7$e}fdv)VZ8@o2>~di73OVw*Qg&0<$d7L$Qc-x%VFx|_OEuxo*c8AS|bodh+X6V#8 zx`47;t=aSOkg5UJtfU4^o7JVsco?zPl~OrV=%{pNQ3I9+D_oK%Px%>^rZY}U?KcfF zX46pLV7?r0*cElcrnCIiIg0LtU~qg9G$JeN=s$8w$&=BY%lrPu~ua5iYgE=*B4NtwyoLB>eN=) zvjz#|@!eF50Sp8mOO41{D6$-Jmf&wi>FIh3{Ep%7Tt3d{cH#YUV#B$9>KsAZ8VmB> zbhh43s_yRW&*jR4yRcq1vEe)~15kyvwo3OQ343}oaVF1>wR>o2ZK`)LE@U$4p@HFY zTN=fq!g*f)d_fdu#pt?+LD~B@cgN*SCci7%0$7^;3`O==ThZjVmWfO`ogIzwjzTPj z(G@@mw+wA4mD^MgGT#>`nYWf8N+DGp*wjb#M*23znf~E^${FZS4|VnR(4YE7`U}}y zp>umopQEoV@T3)T0(LH)XRQE0J*Gw)hf+bqp!(pHpRLGrTjQ7&%HmHhlg{NSN=gIc zj`R)3QWUQ>43eo@Xp1kb#3FAkutrijV@9CRx4AQyt*9OV>&fCIML0=0L+98b{Zb{} z*HK{`>4=N*#$8yKZERTNrEQb6JE6HBwO_1bN_6>bJyy|rQH$Pu8V2g6SMZr7D_czG z#443#m1;-#FwGceGsVgfnr3Fl<_#zp`^zPs#H{q{y>Tgxo(#1zS@CbCEmKTqH}Ar> z+Qf#XUY=Zu-D7Vyor6;NoVc==F)kuw2^DKY#${f{d>aAjWrOR@WqoxhDIhAKq;O_c zQd)kwm$@L#t5>i$%3KA}iK}cw@a7ddTiLeGN*w2?Z_CbsN>{am$WULQBhJK|JBG6| z=o-so(k_MB$jG)0D_5@Eh4r$ghLxV!toUE0AfN@LX2+A7HBw&*sjEDx7#}ym1~CAt z#Aq>|NsDmi#uCC~o~{IA46Ws+@hfl3=KK~|iXoCPsUZP6e*zh#UHXRD0V z6}|*TTkRLESdXo?N}K2t1u$})5pxW8ZRzUms?=ksEo9zZ3 z`Wcs%xQdF~h26iVhP0=ln5oBvzfuz6F}j{goa5Yz8e`Rqb!^)~*BkEGT*;RTeVMHE zZT(P|mC`wK^5t|MBUz<@wp1yW z(#4={kta7cfQ-}tUV}2M@ybvx)wd8p2#={YTS#YFm>lh!r{UV-bepsa&uDDF^wLbo zpQLfaOEbow>g$>sGEOJ3tN#FWQk{4Vp6miEaY4F`ilCe&;5p141QBAClX9`7dHz>m z2@BbDfpGRHC{SKX z1}ntqCu-ViF_Rk;g$yDqJ_>t)eC(l+m(ITuOGRVB8$~Ff&^?rT5L;~2uYk#RV2KzG~c)&&Bik`>rg<-uxlZbZPU8e1?U=cp7v53n-?aC z&`_pnFbf8NUb9q9ua~Z}4X5T|wUvORomrLog zbQ~V~x>H2v%BW6J#Z^?CDsG!66|agoQBx_!>5}w=m?X!scoMoN4X?9RAG|1Fs~l{_ z{(P-3xLl8M4ko8p$`}))og@K~&IcV{aKvC_w#rBi$WCZj=V{26IOnPqr8}jXQd_z# z6QH4;-FWNP!|dh^AQ&uXHdKa9h1}>|EpO-;&f`sTD}_DqFIRb?~!9Vo}0k|T0qB%H|ByA8$%eT0AY!FHQP1as3|tsB9Z=B@g$;?!#h*8z|wN= zR4uW{=&Zt+pri00Hp0;hi*T-!bb7+EQo)xAj4?rJS-gG)q=9XvbvbG1U$wNhpftYz z1*Cy3(m4Kgd(!gddMwXZi|CcBB@9nh4ir_+9IItQfYHLd2q~|~*rDaFA za!Si8X$K&!-$~12MPMOaGc8?+I1gJU=cQFn{Hr-SC>%Ik^2BUeny8dKD@d^91HLZh zNA$wc(l&L+c)_e~RFqaw(l`JO`qIjL6R8$hzG9p%hFw03)ti7&u%(DxD&Fb|Rcn7$ z%zsChaIiav*Z+Vpu&pmuePOZqQl4EjUY~*z)mwP2FXeJh;*c*RaMU!wBA7)wH-@`VO7Nb?7?ot`u- zYETN^_rlUj!P;g^s%&f`yL@S~@KS9H3(KiDpHU9o<|=xTFU(XlY=~kQHn6QT@Ajmj z1Cfei-8%$ZIV=rqk;X~o#lEyW7d5JUg{ zFnU%Y9iS363}JgbVHln;Pp_7_`VWW3u&QS*T;BEO5#3n~Jb`uxwr#|h`f}yHrdkez zScrqdz!qUF6Y=k;^uBnUkACRXM4~s~BF#YDdDj zj5+#dyqu1bn8UD%cUDfSDe-boB1Uye zgqXBg=eg3!%ok*hpgQV>K~EX6z7g`oycz-4;C1kT6IMWK)t=RkSl7mlJ;Q91!@b!J z)l9zBy$c5@n;H(fEbK7&j=^_zv;f2_cI23WeoV)%5{n$JoO7#y6r@DKFhr2rK4n1AR{rHLs*nF+*G?|~ZN{+J%Y_S!mA&$wSR_7N=&hFNoq8p)%9X@wnW%A@ zx!P7rx1q4xP$HZbXgC~k&!qq8@%^$Zyc4_CWFN6?*&x^n(8xY&*|JTz6B}J*Ut`&M zZpiG!$_RHUo*1#8kS%1qai)%l5&(n^UfF)ryTU+uxKhe@WYUG!%(e=eF;PCIGjk`l zs4|P^?CiuwHyU+lKXd!8s1Lq#t-< z#jbX2@9E#jLnCVulS*aGaTyfZ97P%XBnm1py!Y}$dk?Sa-+$=%{>xLVQ<>Jn(VJ42 zU&sH-hYzQYA2@jV)o6hbYz~ZY2N0`!!#fANQ0&ewr8$+Vbd=ljSYq*TRZ$(+96faC zXsWlrV*&O|2eFei%t8b3K_p1$Gj~@~!vm>Rg~HvH#b~4*gXl-D=|;=LX3eTK>B5q9 zA+v3HUr+yvbnn3SJzYapRIgCPMp-r=!*&%cU;|FQb_sV+tbF0{oE6D6TP-hL8Q5sV zp!NK}x#Qr*1vrtcR@+?{MCoppOO~<@%-&L#J-K5AlykWw-Dz$b0&l@My`yBI&6KkL zo!uvvgL{;A$4M`ka?w?91^5OL8!H3*2Fa95Ehr=U(Q&t(po{|CCJU62;ccv-l_=|H z#;a>SvkB=QryWcS0p^#o>1H7yLkyrxg#{IqN-zjmARCvFvu3f|RM{?Y>neMT+SJqN1|c?^RJP@}tWZ zB#p}k8b~$|c(9XCyXZ3kY6pmR0fS9I@A_zeD2rWavp^4s9VS{tHkgd5JItn%Hnq2r zWb0l=-K7UXKOHu8wiMV;(S`JOQCvOr?g>T`)o`!tPFFgHx++*CU6Rffwxx$V`iD)= zosCOl?lj?bPVWZF4ioUgW}w<~=U!m0fc0gn$hVdfIPUg+PcFap^rM) z7`>^tTxrU+=0X+@4#t^$F?iU*iq;1#Y^C&}3fo_C&=;Hn{vKy#ppSFTQS>1g&*Ak> zcT!;3;jwQ>zpU9_x2}&D89BRPU7rl;y3Odtwn@>U&b2L{*ikl8F~F#uWO%0OJGpy2 z+SMtv)(zuwK_JLyony;3w{z)iL04UyZH%h7DM7_H2=ce2b+ODgG-P%5V1kz(?CDRN zgPAhoafPRysMyF0MERw01KNQ&09(79O>vC>Z0t24NXoT1cO`1WW^qI zLw`XH9X(Z?Z|+K$TH^wB@nBlk=)xS%D$AA7_jo7TAX=Yd(`CgJV4SjI7ppl+*$S& z>M$}(qRt}2MYPfVqsZ27{e%4ih1ku9q6AR4a$^O@uQedC#gMtoA?5V&08X%4hshU+ zg-9|f@ETC<8p09*Mv=_X1Bdm?*b+{qwo67HD#+(BK#X&6f%epAEV%NBK0zIXkkv-+ zp=%Xcr9uWRs>l>`R!Q6@E`ya`CC%)>C~30m!nI2lL`fT0ScwBn6?@>mFzj(l(YWa% zo6}BMyhSP>EE#rN(F{(%+3KspIBQhlUz8gTYs#I?jHj%aL90w|5BP$y{BH!Sod6hK z3&!%Z9TqaJ*@A@@A7Fwhu~do0!MLcT*@bM8W*4tLV~tzNTy75~V)DTi$N!y8KEK*n z)HT&s`+0sr$Mq`qWojEgDbM+pc&URC`vPOZ$fjhr8hjX$#lWa`6`Zy6t-0~6oz06# zuHEKhzkt~JH5FEyz)obgH9w9>tmUJXV=3R4md#sf_!sVoPRlgP@|ev&TV&z%2`F7( zo}=QyCn=mg?BoiEdEYpN%VuK{srJ_W5@PS%)K_hz`y$76#cYQ4&2uV=PRJZdanhvu zdG3-OuY5VN2T$%|PuQ0jXPpDe&LiHCHG&wNRJU2#oa{C;QnG@!ggt@=1kABBzx!3i z;!Gv3>3+)vj1++bSP7Hp211j_Su5AK72>h`wz#Y+Ob0Ax{0ie>j4_BhBjXH`Z5M(~ZX52S+F|(xtd&R_lq%Ril5Js%pdUXCR)?vRc)=7*w`7+&N zobz3t3Lfhc!(s5izYYux-Qzh_p+xVL7ai-J*fF-HEpP+Yla?7@S{|<#c5mA&9)?{f zQ_izFkMHjq-ab&>0>9Y8NpMGX8y2lm7dbG9tv5Q?=$$vbBPTZ8fPZq6%@w-PI_~h9 zEfRuqqI<*X5d(obNa9IDImhvYVp*i=VN5l5Y-2lV1Qe?PrhBWRJ#iU7USg_@%|MO` zvKPpe0Du3_p_XeKuM~OC+i{x0HvtY&m{Q>1q*+@F<4KEUwt^X$6DJ3&j5u|e%4;g) zjd-O@;z*$rImnZQR-{aT9O_tt8n1*|T|&P3TR+BmA|p;6E%Hk!MbyZnTlA+Rxi(co zy@9Pn+I?#gY4@tJwq`6@$W*Z;fujR(VmCQ03etkFtCH&LwiWv0F73 z9>s{}OsHQnY*Cn!spFrX$Z^|284VuCr{v&jLZE8}>Wr!f+_;S(pOKno6RjQxu1xXN z*(*1u8#9E)^fqoAqI7zaA(I0f`BAdCDI${$S5-7!)jk8lu$HWZ={b-RW<~^=5wKHq z1&gy|nll$G@5t%bFx@P($_8wfaxBHk%IB030_DOcoR~nJMb|AsCXhI5E})@o>e%@b ztoT&Ym62){hbHz6b@dMoRPk|7_xW>K4Mb=yQ-$LHNU`OBJ z){&0Rw0v7Ywi9pVF(*9w8wLtkQy9rXhI}OeUd(l}rINcRTS;?^*ej0t0KHmdNVB2q z;=~liQ3%B_snA)V5M5pPqK3Y-`lf)Pa(XCJ?%!~J^z4~7Gd>N7%mtJ~zE=Q)lS&Nh zBY#i-wyr9UGo-z54uF1ox6&OKkVAdd0RBykncNp)rg0D9@r8TR!I!9lA#hqwS17yCBdl-^Xyx2?%z zxp{}k(Vti5$CY79`Lr^g@?m9cC9C{Ap^%0@Y^-+lrI&XPR8wL@=wD%F;B(A4K@(R{ z`0mt5K2_=H=OLmEU8$jgk!l6s2eLXfys4`{HPF{H%mf|%ojhWc;;EZdPk(A~V5oZRv0(JBUBD4J>QY~4JEtaBW*?K57(4CS~7Ce&UOCG`rC9ZpG>0HL$nd=hiSYH}j zw3L`BY>`R$MFy>fa=~wBev3f?P)Ys%9yH1c(fHB{Ejmxp+^HD7#=jkF{OM8~+^bOZ z4<@05B?#W?{&qBPweV+_+<3|;J)FUkn`Gy*r8%6$?5G-SY>p=JUwtxZIqHaZuDct2 zqF;Ky#EB{0;qWa;IgB}NMZqvL`oBbaI9xzvZ=Zb8Mj_dnaKczgDNDmaWHcObzZohX1PjuSo5~7w4dAS6m4ie^b}2 zIigX&7CG%Ho^3JU?-&}|3C}g(K+`dZ20FlFIsnIf?+^Yp-w(7*9evWthC3>~9er#1 zyLyMaD(={joEkzO*H!6XREksanrwMZCYS2(+MdF>sa62hkJCQ`{T;ojA%1lNfa?LO zwtLRDmWE??SN+3X)uEo=HL649=*6#US<~6k+uJdO%IO|ejXb8yPY;7OO&Se-W1mbe zHm2D1p$kp115Kgt#d#y?bJ0bS^14cwL^@VzLQ7^*xhG%Erp)$M3Y%i+5x5tIG#wl9 zEkpgoD5i-|4_8@_OzvKt-Aqb=ZH5$9`>CSb zmJ+7fDM)c?9(|DPHZVadS7aq6ez+fgq&8I~E1Kb0-7?B8-EV4mX%*SKJF4)OUi??g zwWSN?GU6)(J-za+58$euqb*Bm{7#$+#qL+?$fi_wNos3K?>VKoy_M4YV{lE`J35rh zVyMPOKE7WmlSy6Eox)Cds;~rg9!POZiLGhdjy3vtJv_puJ)+WLw>5>6Pm*|3)KvGl zodoK{mr$dan~xsYdjwxW4I}yACXlDqa3mqMyaK$tI);WolO`#iGD%g?qU|TjbA@V> z97>WqjBDXVsTKlS2z?XX5eJ#n=Yxy3o9yW99MYdO=1Is61AVP2bW?-99hI&j%u#UC zF)rs?O?QfE($G%qiB=(zg6)TcP1VXcX^`27swEhk!Eib3VJf`fXH%IJb_*dt&TJQu zP&0Xt=Vt;iBLzf~EH0~bOT45IX_8`Tx|)F-sI+K|BGgZexiB}UP`pexJ8PE{9Fr3- zHKTL-iIE_qmL}Ndx1{2*itH#AS(6Jdhsj*NcyyClwZJT0$~Y-ej~sg1B!opk2IWGqp>Ll_(~Nl{E_GprF$S{S^ z)ksMwgn_vaE#*ydBPglSSAq`8mW^9v$&?AHXlh)O!`IYgirx8ACLXRPkh-Fe3G;vXB)KSgjU$bHs!b$Ta5Qyf`rw%*Otr& zo>AwzfKbaq!bDD3%H=HCf~uzOW1B6xgjmHMr|!8nmlCU^$&|pHmB2@IN7sTpQwuCz zhBKA}8Obw-0faWEf;&-PMCWW$Y_cSk_!Z{IJ4{NTRFhKM5D~c=8Oh0P#nMQ`!ecPRBkqQ^H zYUesp6eWd4KUH#_RxB(l?Xnq=$cnDcK*Rm!WQ`NhWb+xm%c&8FOU0^8YoJ6biHUVw z!1=LU%#9{&M&YFlSOW*O6J_$otp!(`vH}QG*BrkLv{Wvd(!kgjkL@Y$2Ov=a-vO10 z@!>2?b@|fMb?nH&ROKkX*Yya$1s0w5@TQ(2d>#cK$J(Ciz+X(rI`BameBtS-=qLEd zP$8@CYWh5$ug3>@j^*$cfRFLa#sx|LjAvZHH`QVi`%66U!}Bx6D0(g4h_5eU*un(% zcX)md&!3iY(+Z|Xd)x3Oyr}wwwfOiCo-fApN>*nbF6F>`$NhM|3eTSN@i`fI&^PgX z2cBClz*o$p|M(c5FU7O@!YFza&)f058U|auK8pT~=Uef-85Ud89z}n_^JREm1-ne| zKpFA89?w1?@moAUh36$3fD%qKeF@Ju;kl=Rw;*(zzr^!CJfGHy#XY>5P3S^-@q7@^ zcfnvgx^ZvRtSI_1p7-LpeIxFY!f5a#JnzAC^CsL!g|6WHc;1cYRXupufvx_C=hyJO zc{8Sp@Yji3kO$9O@!SoQPw0gnJfDPTKkV}tJimqKt$m2cp!a7yzlrBf{dhCPw06P( z(&PC=JU3xE?oW7r1JA1lp${+7zrgbocs_Y6oD4_2zKiEwcy6z%JGSn_^U1L5lA$R2 z37#*oN`EEQ9*5kgY5!{~z`!3vuI^+3fJTHZvr*4m;2k<tkz?Wd( zJMr8PyKdWqOL$<<-{N^Ep3l1!_iDkO^Y#K`JWt~J6xeg;W$;bd@!#=$Kc2T=4xC`e z^u8$i4W7Tm^DVIBi}vFs6?TNmNZngBJ#lZ*lzITCe;x%6pS>F2zI-$M{RP0~_0auJ zJnsUI9{?U7f)9TjzJ3yR`z$`}_CORp`>VLa>043s%J1TSvWM{hk9pr&eN>0LhU#%u z2EH&B|Km$tp<_B;MgQ`SKYX+AvcdKENHqBPYC!PuRet#U4B_A_=f(w9B3FZ=8D%klrizx&TW|MjWATff5lzb|?z z0NRb;ZhQ>63m0DPjyB;dU3#OD= z5s<|XzO1_Oq3E7y=Jq<2VsiAFDfy;L0mU@js>E-zR@cgP$i-}u;s4^F!D`R8hv7_* z_Yc}Vex@(uFP}#Kmo9{-Mp1oZ1M7VXmvZs%-}m#zXdzG}f|P;ASihrw?$n9Ty#LaN z*PCaZ+-_AD{RoKH;kG6I#TQ_}woj1@`p~UTSOl6^y-gKKJ-F_}(DnH5@DhB3ua0lP zXE}d3#nCV*D&^=2xcTSaGaNk;-&lUwi=Tu`eR{n3CX~aEM=w#=Gg;-2`1xA=uxYA` z1)J)XfhKFDPS(wi$YTP>J4bjdaV-yh+9)2IS#3J>ZQwnEzfp8T>p=eo-oHs%PS(v4 z9q8-4bms|=P1xmCJk$!jFG}k^QKxv)DMfE)F`+~8&=(@zr$mS0pI3eK91te3FKvasVxh} z%27Owm!o(XGe_~}1$Y=cN2SB~If}QShWA$)N_crBz2QE&xUvpZ^0z5sIvQ~;+8)!X zcC`*y37wDjqhcHJVQTt?q9&k&p9f#4!$%b65M6LSe(NMH5yiJQ>zqV^=qow+x_(|v zWvK>GY%9cWA~f>8F+)uN#Tu$O-ZRD$D{4|Au1Uvz0#+hgDTLpzZ;`*MO!&Hf+-JpB z#Qc*Ww;2Pup&CK4$_UHw%On?xep2PHO%M79h?Q6k%fq9~EA zK~WPyu^kY(Cg`I!rHNid9ZjOCr(J2n4FE{NR>J&~MHAbHqNs^2Ls6>ihN3361{Ft5 zw1lFXK&3#jhV&8Yoi2KpYrRhpz2q~;6GZPqOHuD4OZj?f$!59IRps;bvc}DF)hqSV z@{~VI^rp1lDWZ3&mOVxEa*an)v&_Dzm+h8%Q=)gV*2`~bAdzUNztdM~gP{pvzX zQSW+7vA*q~sFy99dKZh{bUxPD@c@m!=>7eA)f?cp2*}=~^PeSp zdn`r0n=R#A?JUu|#m4zoV;|RyHvpxVqY?G4Ow<=QP9RO6&OcN1_FIa22Q205ohf<; zZJe)nrs&;@IM$c*59(bldS_{G!QB;*UDf$#iQXYgQ7_(k#g4PYa>iR`iC(-1>o_0h zS)v#3#G;pdIQ6!Q-g#OtXRgionsSx@Y|*>JQq+rgWRZQg=rx{rw&>ku z-VKWNmun!+Wjg;H(R;b2sCS>GsMm~Vb42fc#Bn^ElNisKhMKaX$+Umm!h!r(XlZjr z)0LK@rURDpHO&=G2W=c{c$KAC!>d8Dh8$g~Hz#_hYm4%R;AXi>o2~vF(R*0uKS%nz zBbM^@o+EmX+Bjb?-cTU(8pKgA$7t%!i(b=WaRCU@JW=OASM(mU6zhAfrKp#4T9)u! z(Rg8;JdJCf0SQPh&AkFnU$9banNtUAC8!YAPJx}!BXybgnc)LNq zn-E96oOe)fQS=)7;{Fk&d9u#WIb5?`K+ZaG4%aMKkt>RNjR(&Yy-&6Ie7*BT@6!-R zy+nw5OQP4{jB88~a{_$IZWg^yw-oh0!&1K9X3_gh8%MpS#d2oW9NmIA>g8ODddmsD zxbFmMZq@nci{58hih7@IDPQk=(fb@5=ht_>=zT8YsFzl!-Zs%|?8`ZJbM!o&e}U+I zzNM)5HcL_O3oONP^o5|eg)KY9QFSC^2Qd81W8ArX;$*@lJnwfTs=)GO%ZxOvOw-oih!cx@xN=s4it3a`( zw%C?RO>8;TbiQaZ?@kLv)2nsp@X3 zTPO8iAbMN%*vfUr=I9MN$0E^thoz|Zjh3R`H(81`d^0H4a8aU$Z1dD~p=dIrIBrBj zj<@Lii$&90Ek#Xlvy`uCvDEPGh@+;(2~F%tsA;`uGUEwuN`kaIwX`Lo=^d7$rgvJ( z*R(`5y$f;Fv?QU4{S!5{izYK-;(jGad$*RhR5ZQEQq**prF>0GMbmo`M@>r;n%L_> z(}|=eT*w4zcWY_OMAQ2$MNRLwl&@)-X!-!+sA*Y36Z=xusUuOR<)Y~xEp54I`k0V1wlNp_Gdmg9{AsCp58#W}T9naN!ejd{|3cA(}p7DQfztrKss+mZGMQgQBJt z2~F(xS*Hz&I&q_?8LdFInU$jHK1)&4CoM%yCoM%y_k*IQl?hE8O;{(T$#^+8lbWMX z>HMoi)2A&(O`ow8HJNt2O3?ePjbl4LX(_hj&w*k)=7_}_RuVN_EqXt%bF3Dir5R>gA}&`YOGqt))fpS9OlG=>3|dsQ2rZ^6QKH?hyA4 z8|U|1Y3Z36N4*?*S>H~nuhH8odcUdjw~F3xS&Diew3KgA+*OIVZzGNtZB1B|<2h@n zG?}qyjcEFgmbOMTeb-Xd^gT=Y$l`lx5%+x?#~K=IuaO%50CB7#=M1c2m(-@23dc;!H^bdnhUVzEHjXuHwiH{(KY?NmIZtB^H%bkS z4RKo&()_c|kr%!HVkzqVouz!exZ(zJzqfI|UhYOTM}I&Z^>QxA`X==jMDM@q`~}hb zZn(`h|3Dn|7V%_#H%WcXECv@qA^(5s{6*3GM@v!fe_6`c zi|yl%EtM6 zxmN>Q*D1Yaq+xw~q`tX3$Wv9jpJHoB&$ms`s!&evNOy||=V$N758qIUw~ zSl>3K_k_}0*8YsUrXYKw&fg|_ag(!1Ym2BChxj$+>&2HQBW|*d^YwC1s5yE9;;476 zuJ7hVeQ^~P(oE6$*NWb$mZIJ>EamH6D|*kgalYQQqIVkNsCS*NZ&EKVsDf-a6ZOUQSjfLX=f6<&rYuFhEtc~2UMPAO+BjeDg`#&6;;47Mu5VKBdeOUB z=U*>+mspB=ms-l#yI%AzvvIy&+`)}}%Mr)*k?&3C`p6BkB61b}`oC(0gsUMY_-iKa zf3A3RaZ%>mw)0IxT| z>kIJu1H6F%Z!o~y8sJp}yrBSZIKUeT@U{hb+XK8E0p894Z&!eKQGmBQz`HoWyClHd zQ^RBXX$P+bp-#`$_Th~5(7sF!WE1ZXC2a9p!0W%-U}^7z1UP+xgenceCidNax=ydUsojdM~z=uXnTPy~M^*?*hoB zC*ax}P+Kc22W*_L7gq)%-$BGtFURDTC_1V1n)cf#dau&? z`$X^6mZIK6mZDyRWuNFhj5xkw_a)x2InuWvRNML2AlomRj%aE9qUormsOcI@`8Dhp zO;5COehqQi67n5G9BatgL`xL4C-n}9-fMOK0nvNhQq+5$rF^{uqW5|m=j+9tUdZ<( z#8EG2EG@98(ra1{E)_(Y8+86b(R-t%sP`sI`FaOM?~`quuNPM>A>Yl2qh8L6TB7J= zvc6kI?^AUCt)lm-mZILLS<2VDRrH>)alT$$l8AgyM;!HX=GB5Q)Xu-AzPO?gX`Z3; zS4HnLEk(VzSjyL16}`9GIA1R=qDH=FA&z=EyK8~Iq+VQPh&0dE`G-XBb1X%@&$X1V zcS!U;4{`M1p@au>&e#HrDow_Nals*^Jzq;37EQNVikeoFKvmUlgS#6h~5|L{3D|GC6=Pzms-l#J0f~tX5)OlxIP>CZbuyTa_-xLFx<|+ zroOl}5ouno^KTQqudo#LzS2^@-fg1yRW{DoyG``I8gbOi`E^SawI}uB5=6*;jn2Pa z^uE?o)cZP1`FgjD-hZ%hzTWMk_w|UQUe4iLVBe%(T$KpfZ_xR7h~7IaMZIsd6!pHz zQhcX=Gbnn}j)W)i&7cJqRhmp&!8MA=@fMwbr)YYsrKss`mhx-3Q)>8j8|T+>r_}IH z#Ic5a`)ENJY3E;~7Z)x<_B(X`U847$mZIKwS<2VDOZ2|m#`$`8iQe}hj(Yiq(*k`; zukj?@%?R0d>HHUo-uGIHdhfQBulFL+`#u}z>%BU!f2Xy}3 zqW2z4QSS#W^DIM;!I?jk6_++Ld18SNyOP_Ox{VJ)-y1mZILzSjyMCNA!Ny#`$`2+coli4sl$a z*)~J1&bYOfcbTX-FuW0(R&c9bQeZ^AL^i@ky)7LCTO<%VZTk1bR z1IxQtS}NmML$;h2gzfG8YkH>3MDI6r{>wz~H!VfI-?Efn!^@ACbsexSWRg%y&f)QMUEfn{QE@H z4=qJa4_S(ueqH9VN8AxD80gq`jDYpiyaX!=i`|0>b+M@v!De_4u}{$wd?`ZFkM zx+wK^It8R{%R>|`kP2Q6X&<7N&Tu%L~&$-#1l!0heYBjE#r_# z1WWpvLlGs`f#Rn*4vmt?aSakrCM6ygiS=5>VUgHiDN1bA5)Y4($Wajzqh0O%Yw$fH z5+`UGM?~U8OHtw^E%C@Gi5ycQt34_4s7P$mGLDMG$(EwTCuoUBM@i&}42dU_5^*0c za!t`Pt`Uh-Ek%iESc;Z;C8V$~zec?LOwmS4&B&C+IL<@U$)u(yil%8=+7m_7bW2gw z3` zyPoE+c~-F!q<#(OOtj0UrqX1H5Mhc+U**ZVB*i4e*{7;5|FQ zdrpA&+yL)+0p9ZiyxRi27X)}O4DenQ;JrA&dr5%z(g5#e0p9Ha-pd2LR|I(MD{5`| zssQiR0p4o@yw?VJuM6-vyQtOs`T*|@H9WSr6W}=?r{_6}KIbTUo1^Gwj-rP-ioWG2 zdX=N-PmZD|If_2yD0+{h=r@j{$2f|<;wXBFqv#)wqGvdYKH(^OgQMsNj-m%RinezY zt?nq=+flT%qiADC(YlVJT^&V>I*PV*6s@Qz_CxKB?1x78Eq@P({m>ndTI)k^4Dj9* z;JrD(drN@#)&TEq0p8mKygLKDcLaFv4Dj9+;JrJ*dryFOSAh540PpSq?|lK@`vbfW z1bFuZcpnV#?hWuh6ySY0!23vm_t60FV*%dB1H4ZJc=rW(pRD1rAG!lP=i~G|N73gT zMQ?Ky{mfDHFh|k197V5k6#dCj^dv{oha5%kaTNW=QS=x`(N`QrFL4z8!%_4MN6{x7 zMQ?Bv{lHQ507udGj-u5aMSDAnmUa|v>?m5-QM9Y0Xi-PemX4wo74>-bLnk4%wja7b z!248y_vrxdGXdUb1H8`#c%KjOz7XI&5a4|=!242w_vHZZD*@hD1H7*VcwZ0jz7gPk zGr;>+fcId4_w4}hI|1Hz1HA7Ac;653eh}dOFu;2#!23~v_m2VIk861Bhfad$e4L)= zDEgeE=xvUopE-&i<|z7>qv%zRqCYu`p5!R{kfZ25j-uZ=namdA2^C0;3(SOQM9_FXm3Z+(vG5y9YyOpigtArE$S%R(owXcq8`tF=wV2$ z?S~!-@O~2D{WQS)S%CNR0Phz8-Y)~ZUj=x-4)A^x;Qcnh`=f;Y{YQZJp8?(<1HAtV@ctCw{W-w%P(a#)34|5cK%Te?yN70`gMNe`ReaKPt9!Jq{97T_D6n(`}^b$wW zKO9BRa1?#QQS=5!(GMI&4{#K1?%P(a#)34|5cK%Te?yN70`gMNe`ReaKPt9!Jq{97T_D6n(`}^b$wWKO9BR za1?#QQS=5!(GMI&4{#K1?Vz{>=9ae$W% z@NxlOKENvkc*Ov(6yTKuytV*uZGg8fz&k&{yCA^3Fu+@1!(%^0|8qW0&vO)g&QbI> zN72t5MGtcnealhwDo4?u97RuZ6n)51^d3jiZyZIBaTI;UQS=f=(LWqT&u|od!cp`F zN6`-)MGtTkZSN>r-BGl+qiAVI(Z-IVbsa^!I*Jx`6m97!T2WDtXFt>qskQx3M}W5> zz^ep!odI4~fY%-1Z4B@>1$aFH-sS*rOMurK;PnM~{Q=%UfHxT6Z4L0M0p3u6Hyq%N z1bEv5yzK$rjsS0GfVV5ayC}fh9pGIY;9U~n?Wy6hAEN&`AE)OziazHkdYhx@XO5zW zIf}mJD0-En=ueKKCpn5fJ(x)f4t`=Px7-em#aNaIME`R>PS0}`ea=zzHb>FV97PXv z6n)E4^eRWupBzO`auj{YQS=^1(Qh0@k8u=z#ZmMUN6|kVMbB^)eZo=n21n5k97PXs z6m9P)THR5!x1(rjN72TPqIDfbyE=*%brfysC|Xfbk7qx00#a-Hp{ECU&j|3I8Q|R# z;N2SFJuAR_c7XSs0Pnd0-tz*y=LdMV1$ZwA@Lm|;y(qwYae()d0Pm#%-pc~K+XK9p z2Y9at@Ln0pF^dbrdb?DB99dw4$OO&wl6*NUiOM-WcG$DZqPk zfcKUF@2vse+XB3|2Y7b|c<%`C-WlM%E5LhqfcKsN@2&vvy#e0c0p9xpy!Quq9|-X7 z3GhA`;N2VGeJH^DaDexb0Pmv#-p2yGj|X_42=ML;@IG0?V?RXyb3RVba}<5fQS>%P z(a#)34|5cK%Te?yN70`gMNe`ReaKPt9!Jq{97T_D6n(`}^b$wWKO9BRa1?#QQS=5! z(GMI&4{#K1?=5Ho*H_fcNfsS{kVq5eu)0(e4L)=DEgeE z=xvUopE-&i<|z7>qv%zRqCYu`p5!R{kfZ25j-uZ z=namdA2^C0;3(SOQM9_FXm3Z+(vG5y9YyOpigtArE$S%R(owXcq8`tF=wV2$?S~!- z@O~2D{WQS)S%CNR0Phz8-Y)~ZUj=x-4)A^x;Qcnh`=2>*! zgxe5afbc?u7a_bD;Ux$!MR*y)?FcVNcm={M5nhGxYJ}GyycXeg2>*cadW1J1+=1{$ zgf}6)8R0DmZ$)?;!rKw|iHxa&t@F2ps5x#@)U4-u;d>`Ql2tP!42;oNv|A_DG zk9+Z;+RqVwf$&QN9zf%@_h#3!-@i-X|k@2t?_48oZejvKd$;XNXF8gVz;x*&y$o=4dwD#dBPK-hTMQ=}WBsDY%Dl@jTwzpyW-(jeeURk&XM z&cI)OqKH3dm|KDCrU|buz^nIoC+cvYGx9cgyh!JTo>B591b7nzJYrp2mZku2a)8JF zr8e)B0B>r5cSe9mtZL;=3-E|wZ8~CG%R4K;n;GEID{J%8OKW+v1H3r_-rNB1oB;3K z0Pnm2Z(e}cEIiJe@uU47%kUP|@c4;s{!ELS;a-a3P2KY?RS#-`r5Zq`EQOX6 zwODF0;uczpx0@`o)D+x6vKZ7;>z{yDO?~{KKDP2{(Gs1q4(()GwA7}gK7L|brJMkL z%WTStpq5)|QX;NN$59`W;8qeNr5^g0$t{qS$=+dEv_k8vM|<*9HsX#EdeX#*H#AI; zyG5hhCN%ICZ*!^gKbG~x>@>dzpwnQSf{=d$^9tYl0S z88_@uG9dHRIs6_=TsnJV31!r^*SDWe#w3yP$LAXv6CnfTXf)+$OqOE;iXL@n{Y{eh zRaXBbqrXw(_aCLuNgyvqCIZj~;Giv{GZn9?024J)D~n8BSmpBkpImR!yuG#F<*vpvy~Jqe3y0&SWxDw+6_egnM+|AW_u~ z*Y5_g4M?C5VZhgAfJ9Y>v5=jCkE%x_F)W;4of?UY>A0loLhr*sZA+q2Zi>Pv2jnP( zCZpAuZ#!rJo~t6xS5+Ka)GF9OQB#2|XST$-5xSj48pR@fZ)M6xu?XL3RZ72o$w(;Q z-osjOD#=>hZP5^mK-^=nNI^+Z7MZtGc`76-i{P5#(^^DJP!_pUmjQQ6(;_ISDMQHD zM{-KLvO?Kv*H)N3h84uuM{)`!ANfW>p6~N2j>xap$TwnipC;dGL_9glI^-t^@_c7! zK8l|f@qJ#U^pT$cv=_^_3bEu9H1fCGS_|?JXKFo8TM!TA9EP?V)^&$Og*+PJX_40w z6!N#}GC(4cM?p;)g2;>2CZK6j`!!a(Mjq}rb}uthP$+Q};aY~GIEtioPs90&Lzj1l zPm8#g!IbQurpY%c5na9#F=f=Q;)pKSIf(8=jqVM$W`ZunnVOA_ZY=ei2pO#3ZMuGt zsL;iA)Tcw&NKoh=&}D!`qKhf4DMJmq@)kEzL@!fTbx;W3ZA+jL#ueB>guVO<5&Czl z_Th=*-(2faarEysHje(C(H7wB&{<%TSb*>7%*R{Qr^)v((E=FI5-Di`zQ42dyhUBS z)7D-r0CA@FV_P7fQ4*8|9@O=RL}dY7%zZiw7zxS(y}AsOlm#Y@X#u(v`g$2^_)5SE z{NAe9@J}5Bev?_@L=QK;`XnH?B;r~IQR7V8;md`9X%W{7nU8nMPm8#Ys8ag)Vqigm zxQGa8 zmn+6B-DHjKJXYB@3EdxS%m^ZIE~R`(*DXHS!FE>kIe zbU7zkEZ_&RWNjcWh}ooiJ@d_R?krWBqCN69T_s3VRl?Qv0SJQ<6r#V^ zWq?FghOrP;ZC2(QEDiy^(`wg%&WOT*>bwdidZd{LPZ4yv5=}qjI)g)Zs-Vl2Xy%(L z=;k%L7&a0qi7r>EiSAU5?nAa_f-c0J9^I^rR#P>)pV9S$M1}5Ir$^UFQ0P9W%K(W) z7sHJyLrr_vE~nKicptXvHN0ny0k6rdaPmj1se&(8>{T3R3I*N9xz4pDVjQvOdXB^X z48i{S;4$ABf_+hAk0C`;HnpobVt*S_68keW_9tz<1$&4y^-lB#)-Ut)Y^nSi8vDQK z%0r^Ue&+bt`w|rP_vkV}BC*FSob3tKARJIh+Z?hE9XB^Sz%9%s|OhKQ^?UZ?@p#N%6Dy2d{CFo-a0Qy{%C;De< z^zX1W7xW>{)O;NDrS@lP^v~C|heU<`tjB=9mY~pou`UB75`7fZl%WQFndx?7)g>qP zKhunMwglSwXGP(@#mleI^8Nozu>dzJR2(h96*WcC0^H0Xu0-EiV47Iq#X2R|f~Uz= ziAt#~Fi$KnO)T&dq@)F=X$#zJYcCdnI8*y^EFe8Q*QwdJ-lFRdiOK?JKL!hE3CaSO z>M}qgEr5cWGSpaL8av+3Lb`2rsxup>vsqOW)d}5W%c1RXb`-Y5C@I8v8s-C7jkGwj zJ-iGQapWqnLwvd*{&Jmix*&eLO{oxHEQn7R#9x6pmUFsByw}!N5QjKZ+p!VPOHHS1 z#DAu13W*Bw*{4U`NKlBMugd_5L>vV*WvD@1`D_fV#pkDMpKsc&`kd*e&zT*CvG(#4 z<>`X*D=l_J`BfS_u7*04X9&t)(BWgsDR!C3}{yBPCIup;2CLYbYo~oT*_L z&iE+%5){fQT?R-b%9wMQGSr|fvyQE8s{G2EH(Bl4o99Gf zgmqq`J44Vl?|(C-NBM?D(C<-Z$cV}~`Zsqk9P(!g@{j0zX9@BT+ms4eg&#b!uz2sA{3`zs;6G<3BeFVJML?_oaR!00tq@BuGgDjP9*qDbDl43G zdMg+S$_n4pWq?Fl0R=T>sIh{~OtzwvQ8iE&c+l$C7C0vgTfpWf!ZQVZGk2LO=zj>< z5Ml1VIfQ2k!ruaq`DO{i+*nsB{T>DbIuL#kaV*~~jqqn|?F352s3}7Y!ZPvR8cQcWOLyYaFIJ6Ymg&ULjluw%%nB!t zljp+|6~!L>+Zr|QWIBA$7JPXGfho@xe0eB=_+pCSc`ycQ;LC#w#P@8C@13@8f-l6G zx{Zymnh~6>@m;Me2#E^c^G=Vik)ZH>l`aD$5?>V5l%WP+8RxdjevPVw^5H>S0`0@+ zMPZ1&{0c3ie1S&!Z1Lg?b?fKeutRyapv*%Y%r{$5UT;(SUW_3cDD$WXOE_Dje2cB2 zpbT-QhGV0gm)YBFjq-6_M@UpC&pSQJMuI~5W?cqIB+4kLDMJm)$`P~D1ZHb5ez8@r zA)Yq|#3r-C$)9`A7JPpRWayjRXLtC{5qv)l9`nr+eA_j?m=H)xwd;rh8u)$&DT(hK zjqd?lH^CR;Ox?!8S4N^a8sB&83PPg77uRy12<_+tzcatsyBobc~)RdtH zU)e3(ioJlXWe$ktbXMjhb2QWs+mdLg@%8koBsJ@L0XYgie~vvzQ2#9OBI-QJ;833{ zsDA-G=9??1cWBfx8IY7}^uw?W)E_`fqCQunp0_m?)FIB)cpTKFu5&f&vo2AcBP1%+ z=RXG2wFHIwVqFGEB#^0IaiXKFVN!qPLGs}X*kt|25Ugj0_JVJ$%+{AFDRNK|DQ3*ni3 zjouo^>{zn+lgp%Yg7&!@?FVgHG}@^sjCN3xLeTGD&K2Z;VA1vc{#==Pe_vzGlTgko z=ZRH#WRo(_6RYqLC#`}Bgy;7d%wd&JB92x$Pg~`~77?)u#61S9$lJ?#+A34`D7!+U zvP#Qiu!@$Tta7I=10>QaD5xnzjo+)TqrkpLIxk$qjw<1Bku8EYMoSbnhA%+jMH`s; z;dx?%`!#wzUFL9}CpiC6ulUXroN?AjaK;oOk&-z77g7@Ec^c>2Z5;(?h%xh_A7EHN*?YfLP}x zy7Q!O`IE(rv+piorsC+~-Iij{zER`JGkgwt+*1SU4)B<-S&)AND0(<17m~8IUBwak zHzJP6H*4hYuq7AdAOMpa${NnME_a!LgcWCQFB0U^45mSa5 z%-8QA)>tGfDo7{ys+GM`ANvFj_YyxoxkFjl%l@lNHwM|xE zs(KwrR5n?1dYc#t$|iYT21uk$P*78b8k@-5PH$XF$GQaiZON8EgTEvSgYV^6X!$75 z7nFOn=W|8Zp}as)ek*v)w?I(dY*Q+f)odO^Jy3p|MtOloIb~}oC_|j7;n*nWq-S2B zQ9iEg2#E^irKd;PNKhy@=`uhfQAR;c8EQ~I6Wg~@Z#JESqqn8iyZ-|1=Xcm*XsDNt z0d=hqg`1D}0>S(3K#HH;I@Zd&Fs{MvOqbNXwC<+5OX{9ccPai}QkO@#x$dc;kJVj) zm}k{phL|f5uCKcV|G%Q{0JyhcT}0z z1bCSMFAngs!b{d87f6>E-d__K6awjr0bVJl^m}JaTG4N80Z#0lQ@Y=H^x3L!Me}2ug*ek@ z$L=@sG9gRpe&fr!!9t?yH z?lhJ~;r`i4IF!pO#QYv3B|XLmG=6N=4(S#_`W@ggUyC4pr%kDlR%iAxBL&j$L>!TB z(MXpsQ%IxCtR=*q9_fPAvPC03Z?BR7i3;iEr$^dIP)KKV86Z)WVJxI&X4fm@LyN|^ zY_)5Qmq%fYbzX&%k8X>g`!0X7nV_8#J zsPR2+^=o`rL}7ewZiN&P?gLVa;=KE~MbY2WStxIo*CCFWawKx-FB0^7biPG`{wAB! zM}Lv{_GZKp{Y4u6zu2-1`VePo9_~emT~^+)7isiw*AgI6p}+F<=o<+N{YR|?K_3M* zWvD@4mRl$g z`&FmM-bhf`_v#)T66yIUs3}7Y_FE#jRV79bUWu`;Sc%)Pe~)JtA10~f@U~yc^S=WB zEAda6WE)MuP&bwTVE|93aVD)400xd!Jf4U5iNH0J^O&Myu;B0Q}SK7q1V#^FZMwF4!W{I}v z4qF=CAXi7>204Z-qQ6Ai=b-Kzmk4L8Zdsg7JM@#meEb~iwCG|`v=d%~B;_n= zgLoSOT6+*j^p|S%@3f^A^dZjFd~EcK;=fBZ`nPKdkf_j4pB{Z9L7{*970P~)Nc2%q zQ-&J!=V2i@s+0uy7~3h8ILFWH(HgPZ{#vSy@Q^K(HbOcI8)1Br3RAWc&Sw=x>s)Fn zwvwv0(^6?Adl5(U`G(`{v`p-@Q0H4Fb{f(a#k5mWE*Cpt0th>Cl%t)NnO3sTU?g^e zID^sHb}GpnY?-#xVl4p@m7Q8oZzm%`*(sy#1c|g03TnzwW2bzC*P;r|!tPHDh2`l= z4sXqsTq&I+CtptIaptU2z?xB|SV|XVRKv%lrAfce7FOG@H45ABzo&|pT$UIEmq{CA zZ=&M--fx-MmAxMAx*Shu*X3eY+M4;6i(QAcT`|d(l|-ClyuUYPL5Yn`nixKWZ%(yK$93 z#rbwyE_UN;0qw>#&TcEjZrr6{z7=A(5p6e2pCx5ayNaXTxXw~=4|S))Re$?ODA?ip3$ zf-Kusq$|y`SIyxZw6s*V-JIB#*3R?407))x0Uj2dmZODHbQfdDB=tD9$RULV@y9GV~6ydevT`J*oXlQ(5gvnJDZ@|F2e7 z`I_(BE5x_Crmf=W+uPuyisD|xc1xWBk6mC>o{6}WrKTZnhfO&haXYoAvu(IGu~OQ^ zlXSk7(k6D8BNMwJCf|@eavvGibZUfya~YKME&mPI>U9EBY&D2X;& znHXVKiZySv==wd?O6jR?LL7T4u4Ou_tP-nm4UjTdiB-5ts8TAcsI$>{ae!60GDxee z(pG6dXfPG4K%7BjY^xLniB;MvtF;73R94BJ-YQ0dvdUa-6-cC2P*78b8mqLj@)e## zm)?qfQn4*vVxJOcR3E|qDVBGwxF7@JDs8Y=*tcfVz>5?gY;RmJ(X zTqU;Tx+^Wjw_|6^)nd!bb-vYN%gby^zlGtY0k+(SINEZxwq>KmQEUlu2FI~&S&}u+ z)!LSgS1E6RL}km|>1}BwC|myO79&AyiGrFk)Yx)5KUP#JvHve~q);EHT&=B@w*}GG z%0*#ojTS@9S0~<(R*O9@(tQ=z_#NhH!TjmqF<)9RKLLu?!K+FlB{6>n;{H#2?*bTC zai$BNZnbS$mTdU}V}pTX*+w!*a(C<1vMpQcZoO>Dk|p_xY^f!+Y++d~)Gcg+!EIx} z$&d>KE+G?=m`oldf$#|9kc0%8B!nbnVzSAEVP*$2;oc$H?1ej<+$6JHwBP^NU#CyE zyCs?IWj3=pcIniqQ}x$h-&a+q-c6X72mFz+GjXehsJ-qfWhV9tzH8wp!Ngi-;tmN%C*&+J_E|pd<$z8TS;dFP z5ff{LiBlE|%ml<~6sBN;%K@F@Ks~E>1OrG^OjOQ*36Y?fI4U|oA~69)wGJsvNKUTg zx{vnQQ~b*hs+tRD8tC}bb6|xg^l1-yqW@2Oo>%jsdQ^YVj9>y`HzT}N5Oy=dJ%TVA z_v};Ub+lcfQ5$>`!frwMfR#E%7~*v5G9v6%`)k~S@CHdCB&rlvO^dK4K_R?Lbbv%c z7>a5gQV{0#0)dL^5;d0N7L0o>4FuyVBR$5p@Px8EsjcK@lzV}ldPjL&k5;=mkGESW z+grYF?1EfvY{NTZhvsGz?0A@+{SwZ@?1Y3JG&61NprHqL4!|d|;}Ld(7Bb8Z#A#%v zV25iWkFax6uz^Iyj&BC+hy=w>x#$3i#10hII;3UCS5@NUVHJR>t%up^6Lvg2U!cb-JggHK5)=b2VE__|0Vt|po?*mSkg4NizzTF;PRwv3sj@DN0W&z?f0-0GT=iFH-EF2XCAW^YUGd&Ahf?}avbbv%+0g7rJQdp3- zt=bn_DGWSh#V-uh80i_XLKFIxNv(oPMt@k)uS{wcR5JR9@Q&&!8lg&{U&ZLt`ZJPQ z#pu%tHRaQeKAMs!1GFlQ(618oH&`iW^dU~Cd?vA@CcY0v#=7y|nhf_=4M|IP`G9Agi0I^CJE zSG)471^W$>ct}*(*G`YUmY}eIQ*?kt!XAoh9a6C8`n#hXqq!aB+)}6(0tPG{gn-%% z1SClyY^#%4sAd*cT4>r?sOAzdCfHI9lVD*Tv+zsdYaO!?wR|cTmex{yXv=|xU%@Ap zfOW#cX-j`*0pc_QnORV?4eNx3yF>ycDi-RdXF*F)EIc7BKq9dKMYRqoEL@3gRYnJz zN*&Z8>7WU@4w{eapzRwSUM?BygqT+>wS<_u48%+)RAFat*REr(VnA8FvvakMxf&M+ z=-ZIsYCUsBzcNGN)-zW(T0ZS122DJ0^&KfO>xHX_ES#7th|@S_=1Nr;>xHXT5mn|O zQE}y;o+~Xuadk>`fJEX7ifSEFxKjBY^S)T-!o;i>Vp=R6gcyGYVv-~%#Oy4rXBJ+t z(6qC#o>@37*wS}5!NLY+p<2RiU>1&8J{1dU)fXCbU}2rGut8XeSqLx-5T_By%z_#d z-ykf+1OZ4?ECi-!K}%39w1^InNGw26twRb6m(oEZ9TikiXlY+Z6_pkY^HLSCK?r%m zQb!00WFRDyFydxIQf;<@xw#3bs&{s7HZV6I5X5O!euA4C=7xSDjl$J1H#b{86*p?V zH=23i=5K_X8sWxg;lkWNoW>aGPi5+dPV&B?lu%nH3w;jd(QJ9DDbSv*=s|D++d)eyJxcSq#(FjXwSQ>*# zb)(UiR5uzyNOfyux5Qp2+G~f!;urX9PUE&YjoX$qZY^otTGP1E>{F_KZS2-C3pZ;I z9nGICNZAWW^CqcoG-8PBN;sct*cxa~~iMzaK|VQD@f)oo82x9ifl z(YSSLSXw8Y>b5V9TThA`^`L9nP5(+sE!R3XN&c_pTIaabI_ORz7F@MdZqTtot@8n? zb!w&7dDbfNT+lS9hsUjY5WL*8R_Yj^rG?ZnjYj%$j1(CP8T;3_mTQ!w7NYhVrIu@y6M`?5`b7O- z$4vZRa3h&@%*1V$PdgLn$$*L9z$Z21>V%1VEEJdth|?%c!34L=>x78`!2l8!6HPN< zLL?|APKpkYNK8OctwRbEs`XM{BB9kR_em>$;h-r42Uci>lpXy#M*n|UDB97lWAsl7 zrhfQIpzmk&zbLHv8U5QWpLX=oT><)El5*e|^hd3fGx`vxQ$7Xy{Ppz<`k#^1L!v^z zc?Rf<1ciRL=m3d?J`~kDq@XW7EBdt{)oJ!iDR{}!K^SPxz(A4&V!@yERrNCqk6CEi zS@1IpcL=uhMN6;{U=}_r;R4LUot95K3+SVOh0h5K0b!xZLV#I-IE}y*EN}}jAT0bw z5P(F*!sZ#UAQBV{ZqWe}i3KRCbx2`BY7&}=Loa~WEe3=Kb4=BV0o@DOoPmcF8N@^& ziHQI+@rZ?}orwT5aZ2!|c0_`SATzO1!UdU$4_ZF$OrV1TCN>EZL1ALKg#t4HaTlHtwL#UIkf87ovviR1uq6Wz zNfL;KU=j;KX5mA?Prb9V5M&nq(t1a;+Isvo$g4u`65Od(mtd%#8Ojxg>Y1SrTR!a! zp%Vj!@`Ry!Vdyt;mB)})LI>hBI++<#J>7a?=pjJ|5*0%&(=((cD2Cn;9UxKZkclCl zJ?Ow`+iL%5z3?+(X(0TxWZ=gZo*1Z4VyB+j`A@VX6IhZr=1;iX28x{@JV0u24Ux%g$%O;aWi0tTQm*A&KrUaBr0}V zXTXj~Q0#n1bbv%+2a0MPQp%6|9^-5gl>+rOcSTkHYS499YX)wt&`vcSaxLbjmZ94X@hS z-YDp=5($u~(BC>O`j!NR{!u|65(#}Ms&z;~e>FDbqc2^;qv71NrI9|`8q+}=3_HrG zN3HtljZ$v1x3%%Fo-}H1wr1dFhO&vd#-uXU$jtp`VXiTWxkhI00pWxCn+fKcn7NqL zYE8`CM=hUy?#vv-Y1F1*j$5Hk!rVWK1V~iOwatJzk)W6x z73Lt3n1iBPhZN>i&iAMp#U|nA>E{$TO`4mw4BS|u3H_!d^qUy{!xoD6?@be<|DZ6_ zgr)9@?@bfeXde^2sn?%irkR-uh|FeY=C3TDiW#+13XMiE6BK5eg&B8D)dxr?p#pIl zl_{9v_HDB;vs@%VqGG0f2F!>A#mp{Y1`?GHnV8{&jyfu+ z_E1#okb=Ex^On<0tlGl9MF@xs0b4Wy9T^Bnl0YnMNn&9OvruHAX=h;zv+%HBOJj@) z7Fw8vOC?+jv+!xlr=0~f7s0|`2n#L3LjJg_sgNE*0OB+PQ?S5&mlk2+9bo|y6$_m+ zU_m4(7M2JLkf?N+ng!ap(V_Njvs+WL;|tUlEgv_v#`uU)6PN*vp{E; z(a0i=>LyrdWfpFgaIMUO?m?m{n&gvMI3_H#3Jbl$0@6bWK->&i;O}s&u+SnBAW^Z< zH3Jqzf?^?CSb#*OLnapVx0pW^t-?UBFwm+Q=*qx=6`Ig*O+vqw(LZjXNa*XGw5^Q( zXMny6Xa7R9@)zQ>);s%7+E!i<{W)Qc#@!RFZDrO%65m#4?emsTJ8Nh%g0((jZL6^M z8w+!04dQ0N8qWc471r(&36Q8*+dc!mps;T`rs_^eq!I%~wGJuR_tAka z9rByj9Xtp|CqZ}6w&o6RHGWo$YBX{w!?CPXz0v;qj&hvJO`RIr*xym%;XVBwl{AIu zqky!19|QdK>`@=aHsSTbZ>eT=o91;#243F}#T1A3o^BiGnJDx@1xO?ops3a%g$4OqsndG52?Ixjfo+X9kT_ zF!O{k(;>{{A5rB4=_FJjPNR~U8FfxuhcNSwFawE-ncdSfqa`S2mJ2hGsC1Zy8MVf> zLzo#BW;!%8yQgNxTS?4xBr(&$%sgeGXlJH_nfZ!fs%F?V`kjn^M8b74`cGRv?dYR% z3iL+>{Z2tY+e$g34{_3+kf^Y~ZU)$k1cm)?ZdIiZ5(#@Ks&z=g zUe_wzlkF1lcM14i8vN@rfNzB+^t+PK?_%`73f$B?JNjLW{xgE9S~H^2-_GbiAn0#r z^uK2Lw4;yqCD8wB@(T6yl^33R~b7!{;`cI1lNL1)|PmjKqpwNF)(1%1q zABt)nGN8{{f4iXHBIs||=yy+pKG!?jlhEJJ=zm?%-=6e6-p=TMLoijVb2R!p82z1s z{tia}S<9zFUyZ|{6$tcq3Hm#9y>pYwcSsAR9O87!r$C=;jU9siZv=fvROs)W0s10A zq5o4s9}<-gnb6M#WJU*_G}D1Is%Q#khfv@X3U+7;_GX|USp?^2Zc-l+B z4(8#Tg05N-rFq!NJakC7oy^0xET8sLfCd|Q=oB7y3J((&2FwG*&434nV5jg96eb~2 z@vv_OJctCv!!x1-BoYr$RO^sZ3RD%Y4sO^f47i1XotlAt85q!k3HzN%*zaWQw_6z6 zvERwqKPQN)m1i3JU5x$zG*r#Ci?N@ud@AhKE?P9zfc?AhNttJtV1JK=9Agi0I^CJe zfSNtuCDlYxdba)^;#NsR1bM$Q6D_0G=7E@tF;!C9^Q(~Rt9Mh1n+-OR|hEuZ$%fF>Fk z*)OGGw=ijPU%&ZeipNVFVHtBfT?VL?kFij*1SDNQ^*HtwRbUDntAD zldxN8$QBxQYZ`hp(4YeozPppK-_6($Ss2=}-_6*6M-Wx(D>e3e82cs(w}-L+uH{o< zuXcT)g$C@K1^YdMz54^|i-4q1x*<-dJ2UoGJeIgeuwO0`AW>l-njU*CL1Eu5*h8Yy zArtm07gtu4&^d=4bdm#)OYRXG-u$K-3fZG+2xXuljT~ZRPZA@0n2{HNrFv&)WDhg) zJ;7P6ZquXF*F)ER+iikVq^*QLRH-7U+!eU`Tt>D%y>}3|55^gWE@B?814M!UbXu*Mn zEMZ}vGnuUQWSr7@t!rmkn_A(2zEHv#b>}3{Q!h%{euUXi~EPPAC?PC^xC@i4a zXqzQLD-J9?CoJp}7EW0hG7Atl0~WZyyH8k%i3CVgEQDvkf=Ey-ED;tUkywDDT8EUf zAbnm{4)zHHr-gxint^Zz2CUG8{=Ovi_c8isEfnqO?_=~|5=_tXbN zWcjq00W{u#{z*Z%K!j930IGys$WuT0)>k;&y77383&>x&0eJw$u|IRI{96}ODd_861ZvF|?}z9S4o(RNJ(`2T3>>7$ASQZ}nCM|9{uUUjcXlRvn28_b9qnzp zznu0qeF!_0?!YdlPh%I;t&Xod{t7#sX#dh3jx)HIJMVxC?R}!1Os8=F2pf7&d!198$zcc5xP@(QaR*L{M7)FSmMo9XOG}NH zPDV?08%pDLeHyoeY24`7B2wiYO5-+?#x0V@Z4^0iZVG-kq;VTd;}%Wh7E9wcp5jJr zf?nv7m;>(Rl6bk4#9l6m=cFW}!;s{YO5$=UiM_f_V3h(ci4dntLB^6;Ucn`?7rL#2 zF1bflIf6u068BGA5-ka;B%T)?AdyNUIvQGsl#-~r8fuGruN1+!6v19y1os>1Hv{Rw zRK9wX%3d#*y(=vY?Paf*%iha^XebH$5MzH@!i5<7pIAQa*rU-7tR5EZLxTM-3pvIf z;&i$*Vqc-oTn!2KL6HE73i|`oVsA-M*#A_pheX02ifSEFu-D_R%za3}j|uo84gP@) z;9H>y{Sc$y0Ho9topt%YSx6B+gzf$e|=o9o$iUdeh=nqYcz9m7S|EQo3iG)5B)jFi0 zueS5kA%7S$p$T>mX4*aK=Oz1uj20oIPm?i}fs9PTh>bqx<|-hqo`{Jj_WhfVGB=~_a~K( zey*GTPD)2VkE&~S`k8@4!T^1L6ATP61E++60cPOm!T`Dp>{Im>(QpR?9~1@#gn?65 z>X`wE)2YwQfI4kwK-Wzo0TLAh2d8I1OHd4qS`wH6D5`ZxVL-R8ctp{|Bl82o!YW~5 zK(lZ#0}ClKh=~DaLhmjaU?x5!Xj99EP5@Wy+rvP+#CSzm3IpvD<70SBwHCSsNj_aT zY5DKrlg4kuK$}jhz9!PbYy6=#`1H{RJIM5}qmuZ45z>(>jQ3+8H*|eO(EyFwiP7UX?r+hRa$bKlhzlhjTXG&BNKd zaCob&n*lKw%?ZHe@URr&{~NdF*bF9g}9G=m70{zDnlKWHSUA0h~4sFE@LgPeU5 z>4yj%OS<$EWcyRn0udC;{wdP3U#F#Ar3E5XEF&4yvOgs)5TRnpoREK z8cECLw@|AbfMQ<$mu=AVP|EZ5DbEK}o`+MO52ZYhq&!Dbo~dnZkDuDr_GfBS+n=dD zZGWb=wEdad(fax4$cgXd8pdb1ck~d>eHd~09IqNLVWnlJe;b{Pj58>3hEdCZ)t@U+ zi)JY+Y6ZUDLPQ21J@|D8*Xx}J!r_=V2aa>I^HJ#YjmMY%XwLU*VMUmE=nvVi-=P}L zL$PxJb0_Mb1#Dl4zXo*6Hs1NdfB#8qU;8HNaXU~2kURZWhhdyxmpJ_BYqiq_>!fiU zZ_c`wz)q)4-p0O9^52JPGZK6__#gS!*ZED#c79WQHO+@Zs&l@6Dfd4TlQP2O&)1(2 z0-dN9!uS{CBhN2h@%e_+F%Q8e<(i3vm*L4=t$g-i$fOgCo!W7yqn$7I%18WEJm$cV z3NsE*=%p#b@FuFRr z6m~l3b}7srZXk!h0{1InsJUyxtbm~kYbDGo7|Iq`!xX|4!K{IyR?)RE6hAf3 zN@3Q*xM4gnly8VTjG^IpV*`iFs@mFzdo>Il*hmKfQurF&H^NX|SPN4JnqZn?Hp6Uzp-nEWFk4~TVA^4587eJ!q-A$qFtiAXmcr073|bCA6VNmfN>gt% z@k7%NH0a#}(+d-V>4WKq8Gs4H48rV(IRHb0W7oq_j-bJ=Log#S5tvb!8(_v@qA)R- zahMxn4#QA-Z^HcpFgL>-g}DXhR+wWjaTu?=#4ugi^8>~b=W@p?x4XR3c}w2W#^Fd` zXn2L=JDsDUe#b`|LfOO7aPB~0EF8*@h5CjsxvG6EYz~C`hcU*`Jh0ICQrFmcp1=Oc zXm%tTUb4I^d}!1d4#mR3@YvAo8=b2@;vbL3B8PH^KHv&wc?-J^Ak&-uk%6#z*a$_< z!(&6Sm=PW^`))FWA=lVg+!Yv)#fFTL{l#WyWH2`SFran~kH>~0#z?f-Y#17j8Do)= zp?)(EF%HGT2hF1GTZ}bkOKc!7r!ej%goO4+CDRIXrR%xqTL9M z#iA`k(U_|z5HC4cv?ecSzKL(I^NvL|X5DDc=){~*U2$n+IOc8}4Ug2%Y0hmPTv=E4 z?W;CyG@b2c*YX45c;WF&&Kf%-WATH1k;uVlsbisG7HnPDT|ct_M9;+P?)HGcXZEUi zw7Yp^bUaqK%!qamjt>v_3_Id$N{e#txAl^ug4%_S*$X`dYf9_-V;hEU zjBot*8b@xUv#>ck7Cv-mR!3-LzY#7fsHUF_? zUL5?z4;CNa**p+Fd)s%5T^r8TSFfutSQ40<^Dm2x!eBVsKQ=Ua=h;Af$D{KC)$0O} z&oi1Eing|O6$Opz8uyywmbSL0E!*4Uj^e_}x^Q;1`??(e-nzmS=Bm0?Ql>JtGayI$^2ulRjqzJ=Mz;c|FNp>lfAc_mlnO@Grm^%>(R#Qb?-J_ zRee?U#Yirqc` zFXz|)&(|-nf9vu$FaL2adAK`w^6p&Ygm+ai`>o6A--5xO*@Mnmk*+86+(zM1pZDxB zUqN&Ay5_r=-@SYi{})Uy`0aw9UOhRw>4CBbe)(f_Rm1V+4R^8L#*c7%cl6E=f9*`o6-A$~|L5huq@T#o$Cf1PhSN&|)WI1f8MY83Xr{10LC!IALcPtRRA zVTSS->>3S4^Z%^-q95shV;tM}H)c(VVXL*dmZ`TdfzI@-1qhNltX#AIJ zN(a{D)ZP1B`;)UeN5lR3L!n{wd1GD85$Es;V@GIsJRF_;-P{$kpL4x2@to`UtTV2< z=ZizJ7hMMyL{Bg6j~K(_hepi9Ljxyc2iD9PiXAYI&AGK8KXA$X8w~T3*R$O7>ne=z z2cB~6eArd{{qoY{^0M#E{s*W3pPXf--4#`@IZw}hVpiZa=O@1suP!Yw%gZs*C@2j? zNNm(BDhL*=arN#TiVr|?jp*_W;qfa> zs)-Ip(V6*T%y_i(c$UXl-)=1H?F`4pN9SC6{5z#a+t^TeBo>Ng4@E}eUq3S35;8^x zqWz)KaGootF#Bg_Y5Ukv?MSQ+9|mJ_ozWi~x-lFG57!Qt2FAz6P|@a(jfHN?E!h)^ zJb%czv>`McjbEK}HR|tJSLFDrXxA&D;o&Ri8n#C14oWET~9 z)>XL**1WW$B|I2w$_|GHjIA|h>yR<9st8|z@JKv#C|qoo`C8|-cMR=6aOb=N)U?Lc z?Pg@qyn5^Wf;%t$%j>^4tME|dMk8#7Zw!y!6f+JCjqEoEB8S^YOpiIS-K^a_?mE;r zu>zl=(5S;Pif=$HY{pJT%y?bousL?T#h~1ds@WVJLe2WUOFG8S))YmXs=4kyPV>EVCQU4mV>%jxzksoHi?&>f7?1GQ2c3f+=tUrEj^I+qgiLK!yF|+?) z9EFZkh0)MN3G#is&%g)C9L5*P@%gOa&>^#JJeG~GM*T+myp?yxdUx;tysOw%V;b^_ z>B;XL@9Q=_J?)`cwewocdC~5Mp^*;_#SacNIq^Ywb@Rh3s_4Tsaf5%ta6EiNU>IL> zv+Jd?@!Iw;EhskM3^y*J+JP&F)z8m2>lT`w##IC6T(fzdxg!6@zQEWgTY9^GeMMt- zp`)<>`2}+)wu}y+ZKE%5!I2WNw018(_$xmCQ`#5&vrTCeop*QYxosqXZQStBy6swgX?%U`YvPJ<8Y=cE{5!+ z^IWpvQui!wZPRm>43E$Ng8}22L#}A)%Kf<9(fFL4EB0*k7nj`{nM&Tk12t z^8)!({SLYll;qA?f*f$sv%XTpjmnFQ4fo;jHomQ*gRd^62ga z7wAJ#7r<~}m;P*G@+7o+0}lB}^i!};zc6rLh%#io%xpSeq}?? zwm{jm_73z#-RRr7`JWemedrClF=Ve?l5GKTO}y2<=w6O~^DP$G4#%6|g<_*zOF5Zx zVXwH6yASp&kjGZTUEgyTE_bS2p4AIy4o`l`PM5OhSnh7*j3WG-W!%rXEO%kClj3n0 zS-rSf{>V;OYWQ-e13mdoNUsXtdvc$X{LqyR-zpSJ<-!4Wr&@*Fl#j%FdZuv>?e23r zQMz5|aVxpbIQ69`C-dQhHt;$zv6GE^sw^7aAUv**FLe@D<;HU7JWG$P+EoA7$1h{O ze8wtgF8iZe^+JCXH{t5MP3b{tGf5ckbR}%ce&X~JmP@`>zM7mQd#XPQOFUAYPJ_?- zBEI!IN+;RrB5vqTX|ubN+cR*xCm{l(A*excZE!BPI3a(DYq`{%Pk-XWP{Oea13leF z2Zle?ziW`~ycpOS#NQD9Rbg<%W4xxKASq3dP8Gy^z25zSgT_$s9jB2QzF^OXrI#M! z*{mPouI*Imkbk;Jg93a*XQK?n$-(w*#kboAi3lFPVIz8#7^Jbx5=K; z9w7hulxS%)m}G|z^Kompxf3Vaop})dr^TJpb_?P4w-p~$?n&7C;O7yWpYvkB2JUa$>?UQLlsrIqwv#*3xCFNY%AQLj zt8ttCw9P(Yv!A!wF&9O0a!HOUc9P?>*>~CON0gmE;t!HNMK=>pr^OHHIU!*w@vkWV zJR*Bu+=-*5L_TyNyD4_^UnF+Axy4R-vR3Rgvb;;#S)Wm|+jxYXM`4eM9}}<7iG3C9 zZ;QPc_NA(Qo=Z+m%AU{i#htSLsIvbDZvO)Z)h|G5lk>bO?v!tf$c{WueD%Vv%gX`S zsq8r%M_@aTw>u0B?dp+T^r(4YSC8wCjlss_x_Vgma0tW5of!7OxUL@7)uXz4P?yJa zA)4jm$6wXRE`A1VulcVo`g+m57xxETZt`ZB#+A+$hUqLcE+Z20e3|pBsHY#I2V7_H zK~ZC_J=7njG1qoIxGN*CG`OILUeUp(q1Q(d@~bZNrJerTOC40{oiXwZ1h&F@FoRKm z7Ky)h6~}uX-w&73j3EPfX8%s3rjWE*h_Eh$MqbG_$KWAaH(CM4)d-Ikkrh7M*fx$K z>7f_~^3UKKogCgT;c2|KEJJu1!HuK~AC&Mkw3|NsTuNaNhI>b1Y2pt^cp3ywAATMd zzVMhZ5v*Wf9)D<tb<01_87S4#i>(tP> z@JEBpJjRSamH6eV_bkJYaq3lml7W$FTx$v>U1xw$vc^1EUG&Gso*5+8U!c$1jk zAKrw36y6pZR4tiXBW95hxF$V+nA~Xm)8H>i`~}|+{v@XNhd&`8g+E>HsKuGK+|eY` zp9XLB#9RIQ!JEYN{_rLQr0{k@x$|ZycQkAFr@>zX@z?Nv@Fy|7Kl}*+HvYcqDm0d& z8PbLj zf4@wmVv2VNlZn*!^;&XFW1aJ5!{?-SX`SZ`TG+fW(zD8-ak(3%VHp zq~}6|W-)ke^H9w@u5b~`oSY4%r5{-U*xRVZrmSIzw*8`ja>FM3T_ zh1G=k>Ao5FM}a}L(Sm%FWnh9AqsP_8R=88o=uxcxT4nwla#Xd^4mY~aV62OCmZ>Lp ztBnr4qja4@A)|D)8kpnNQ@nbHmnL{AOQT4PAL_$2I8X7?EV#_^Moi2;(;ROka)`?_ zP4dzlFUR{RGZ>Acq7F0%Q30bWh#jCQ zWTX<)`6^+gL7u^L$rKTF+EKf!9=RXbsrTu7?DU?-4g9rz%o$0f??4eofX-kQBF{Es zvY9G)T^*yU)W|}qF*W;aO9%1uCWe=&-an7~11`l7)%zX;t1K)@11LU&SQ>$42N5$G zqn0}*&?)*3cnX z(2YjnsSU?G1$j9+Z~9%Ks59oi8GXtLuiKY?{x=_~SEJmC)vbg`7YuDIdf7ow1XNZp z>IB>PKAiZva+R@=fuw1LtX@oor1!K@->ya{hi&OEI~h!55ss(-QL?@nhMiEWQ*;H+>x*+p2$?S@Iqc% zMuzrd{z0l??(&DC4(DB5!+728K2LRtk?+pR4$Q$4<3(zT@h!*o5@W}?e7(eY*rk^k z$FlVj4Pb@;n6kd7zqE$yV$)9rJ4^7lhkbwT z|8Ld*f82T(0-e(R=lb6QB2E4ONXGhKH7&jAnwI}QTT6)0i?}YL{{P&6#QOjJE%Wx+ z{#^bOZAv>XI`e8bde-*zcNOA)W&3Zs@?Z8RTmD}{9~s?>Nm|!UYop(AaYut8b)Y+j zPNsvFr8Oq4vMfg{q2Z6{b*#k7z*3B*twi5tCE6S75QA!eG@=z!htVvIxnb{N3*za- zy8v1yt@zi5{!j9oR`?2V%cT=<8_;qw5uyn)IuJI9u&RBd@0H?Gk2N`^c;AA5E8&Os zppIja-7v!YagV~KpW~u^sV3x&;@>d4hOpCc2%{P!yz5ZqKKh%R1}Ps#I?Dbiq&(2G z3_228K|yK^vG0doA?$}FJcgiI7}|6LBhs7RM_~q`sR>+YK_R(^;UoDeY#d?tVK7mO z5X0DwxiYPkddsKDelZdXS$)_i7={Fjrv-6fQwFpeGicvs;(CUcHm2sGGNj4gU)8H| zOTehIC*JCJiIuu5F@~@55Fw-T&`#urtw5;_`%fv~bYlN$C-Ou+QbbQ({El)Jh3$gI zeuQnqy&n44AqT{O!6BqTGn`0+VZ3TfMG!f-0#fSn&x2IdLt`J82@h-@$ST3J@Z#vE!kd85=B#Lw?oMy_F!}upFopsPSh_q38 z_d??mq^KNmSHR}MzaZOaron@hDYpE0Pbnl^s&Fqy$n@z{ytIRvMBef-r<9L7fu>GF zDe~A6^cB+Q%!I#-O)Cw)yi~*&CQdj{L8kk+h zGhyOqj0h9Topt!9aw#!gj}VFUdys-eZk?*eOINQ^{YJH708*(O+n)%pHk8Y%Y4U}= z^qWW-m7tmC3>y1%%0H|Q2Y9oc4jg}omE*YQ$^a*o80rVBRn6(Y*prhqEIK)vmFCNy z{Iz%33!vB^f5BzsBE5-|8)D>~C_CHgWJp)c*kcJ0>TWq9RCt2!R&c zhr;UxSRT&&lau?MnZry@(l{wyG?i+sMn7|M(yoOU=LEP>qnDwsOcpzoq^%d>Xvl>w zp1ZtIR2hpZPb2DJlBhC>qSiZIG!Z3Q5jPIU0XSr0DU&-1$@Grgkx8a}KULWOKfa@^ zVox{mZGZk>ZGUU+rEjhOA3xjr*R!5|^B4Wc?xpysItatNsY4*yGpc8(FR${<`1&b3WX54vly!&)zE5GVh#Y^tv_F|COim4Hx;V zd~9XDkwdojvB>q9>HpSq`Ivr>#s(t8;rn{?F^ACFN$V)1fd%xUZE$d?KYYnJ>@J>3 z^}KmmzA+c-OlCQZp86ZHX%!=>OaDIKnCIHB&Pl-YK-Hx=-5ZvJHnrbz~XRpb}#y^~hKnEgdDSI~|X5M*BOAey`U(*># zJa-I zU}eM$04U3-8yNWA7?86zKF6ZZ{yra-X*(@?pq=2@2>z`tqyxKrVpcw86psw^gW4AU z^MZU#M~f3_7m7tcjy;!HK&f_bk5&^3>R~4>Sok<#!7|#={xEN>{^b|xz1~=jB^s9; zCI{MEEnBOveuuQij_E_QPf%pMSDL~{yD(k-_?~1p#1TFTmggHh887>%4@W&wN+@rf z#=hzB*fUOwhIUEEn%Lp3M<|+($l>V2+X-E4W)6?V{to!eQd{8P01ytNe@{N8jy5V| zpK{J05R(f#jj_>KGg@*x1*g5gErX9gN9+WhwEP8{lWK^7>FQ*PB#4`Ore+(i6m-^EcqRNw1q4Jwm# zsqglDCyk@#JL!wO$mzo0OHc=88~gEPpJNQ+?HuDE-p-y;y@U;7@P|MtzUT58IS$?n z%T>X@`ya>TQ*j3vqfW5<8mIG~xyI;{*-cr-2^>}ShRcO4wA|43%&Gp^EHnYIpk~SS zvz<9L&YU^UF~^eZS+f_-buQut&;4izZQkI_xzuos#Z`T@(TPPT=uixxIUA>bS{{01 ztDX39gKN4QF%KPgd)?(_IEN`m`^*0#*nnP# zyENF+vJ%~m{;^0Dhthn=JW*}NyUn(~ANZjEt>wLj_^ew!8{EVs_4QP)iSW!|}w7&_?sD&oCAF>SCh)hyS9;Rj9c(BK9~tN^&8l409K~qWH~50?@<2&`#c?oy0_HZDlQ6VP@DAMXggFKCL6{H0 z{3Xm?Fdv5bPcV1G+yiqj%tv5o<;wjq{~6{1n2*9d2=g(Rzk>NV4DG-81k5L4D4x@} zKP>jYmiuRM{~XNcVIG0`0?Zd-z63+-Z61U9G7N>MH7rlUJSETQx)^^0a|Y(C;`TMU z!~37FGzj<`>KuFgCH|&heT7k6S66#;dDet;ZgG1@TVn?XqRfWomikWgN1Fp3ZJlix zU^3ep8kz(3C%R8MT07gSt8#n4dD}{JqPnHmD2N*i{1c~K#^UE4kH4_Y|5#i#HX8kp z6`{LQyEZ)WWsmX2%bMnRx6WC9Vo8(Val+&OE_Fk$^gHVvvx=Wz`q&Ev{_JaK`5nvr z3;82qsLADnja|ml+Sy&TR}95Jw{xNM3pgun!hxgGs%p)%uY7-=_tkknUbQ-FZ)DLI zhZn6l+-G_Zncnaa-;Bw;74?s7|7~8`|Cv|zOa6Q9WL{tC=YEx!U$7QAyDg(6r@7SWCKtYVo%8yI?oUcCOnn1zob*anUkHrh z1gw6uwONyV(30qc|1u~?Nw%6z{V_<$dW!~(a82-EqhTR@)xwU(jjC*QT^nd?ZEf2s z6|b&$yUfm}x{mr_H`-!kD)FbjlG-CE=xCR6Y=|_cSqi=)RaFc(h?_%cVD!R!;v(f1 zXD2I%;_Rda89^vF7TG@*Iz%V#VM}DIZu^+3PuVTEF!f`rOC!U5gas{Q$K?J5yXrqg!7C}blH5{{cp?Y;cNO! zt>2Bqqc)Iy>n$P^&`X_uVePEy`s5L405VtCt@^AcRoQdF&8A}tY{NtF&c|Nqfq(-S zpA=QYCJkmMSF{-ir=@oG+QL$9Wr1Zj$EnwqH3w@7Zf>Y3b65DP8cKp*{8l46VPz$L z?1wIKy94g>25+6Op~`y;rnrNV{_#WD*HELhUVC*DR#Ee1duRVjr1!z0y;Hm^OM2HH z>OY9VpPHNN0@V%P2K**Py|1bYY6j{{sv9bOP_wSi?XIXQuPbl3B`*idzQZ*Iy3gJp zgW^r$;n6^3B!*MuD8X(x?Ff%W(Nzva4vk{xQr~d6%v)1XR$b=x()KHO2(&iV6qKX) z+2C)eZfLL@f}-7DQ{Z#^yk-8ffc^*f#z0L$z#Z^b`KtozpN|#?S z@=Dn9a_syjJXBzZc6kMS1thSy##09W{HLl6FDk0=sNa^=z`yk$uE@FX>3SD!uvz-M zZj(Uu%lX?s^{;Q80OLM+7Yu$`l{Xv;` zOg{^ZK(?z0?N6%I(VF4!tL;@r>*ILyw!EE%Il>6$&q;?c;*MRUK2(EJ{QAlmsqMvA zU@uY?FmMPUejLGw*+ZJkzu0Thdx-xTL^61>5l!J=r=9LocuV^V-z4;bRGt{XoxWU0 zVW_63@f>RRo`#|R9gV*%h9UjwLrOhJI<<)WcE)hJrrCKQgoCHajrt=&?9CZ4F+v~3 z*&dj`Cii@pL>rQeqEQPsV}8x$-@NB}2ixBsTf4XZIc1N&`Qq;ve_OW`$!F3vRsMJW z>_ZflHmn)%S0YmKOZxTmaoOQ9CL}a)Jsz?7 zD0)*YJUlcK#$dGdrNcA{YoVF28Z%KAMgpg}92iNV_#I{qw8;&mi#s03R}ZxBvhE literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/19599-2.xls b/src/testcases/org/apache/poi/hssf/data/19599-2.xls new file mode 100644 index 0000000000000000000000000000000000000000..17f45839ddc283a1db0dc1c85c158afabdca0277 GIT binary patch literal 44544 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 M30#uE|DO{0KNx$<^8f$< literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/24215.xls b/src/testcases/org/apache/poi/hssf/data/24215.xls new file mode 100644 index 0000000000000000000000000000000000000000..bcbbe631214b10ca75361877adbe3d89c88bea32 GIT binary patch literal 17408 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 literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/EmbeddedChartHeaderTest.xls b/src/testcases/org/apache/poi/hssf/data/EmbeddedChartHeaderTest.xls new file mode 100644 index 0000000000000000000000000000000000000000..af0cb2276e743bb6048ecd497d74e667777f38e5 GIT binary patch literal 15360 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 literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/blankworkbook.xls b/src/testcases/org/apache/poi/hssf/data/blankworkbook.xls new file mode 100644 index 0000000000000000000000000000000000000000..fcf734d6a8b9cef07d1e51f3eca7c9567d1da1f5 GIT binary patch literal 13824 zcmeHOYiv|S6h6D%?Ssd%-IiJ*Y}OV9`oK%e%Rp&?B9uU>v1o!w>mUq7V`_8pUWtlqkfQ`UArwV89SkjGAcpfdmtf!uox4@9l02l_DV`nX@_b z_|BO-XU@!>duQhEv7_moyFVUwUV70qNs=3}G)Ydt9Y{ZH=e+`XEXJ%IXCn;y^x0+7Ws%28sGqn4!Xtl-@y88Ka&wI-wS{)l z?;3$V!JTCTQ=VHGTCp@y!7nMiEp3IdMq+v7{H|O{6@O2SURP0S6C_UzksvG23n)v1 zg{Cd>tR>AU%z-ReSQaewy9#8CjAFsKT5Up_cn|#&DG+o`Vnr~ZS6wC&udcK-Ug3Dj zm&X$-v`bs{+eKBi@p7G#se1L#SU|;Qa40~W9j@@pw&#_l5JSx6*%*afbxh zJd139=9_-F(i}*$SWWP_!KR5aEifgS+Syx*52&ncNWZje(k%?dXFq@gQ7qX{u9Ra=*>2~l3)JI;ir8oN6 zE=&y~trEtJxK@@U4kI2bZI~Nr#obfg#wOzj*h~AJuz@k#YUgcPe`;bmn>umL&A(O~ z`wsX7ty1Ka4z%Z6)uyb+t|=eyg`9ML>N>*%`EjH#0qa7{fw1j#k}7j@Ph580(z*Pl zPd=NJWKf^=0TyC*eQQp8R9zP#=Qv>hHbKugXx5n`RT6?{>k&3~moj82FQh0#yjF^K zj=X_!03UI@d}`%iu<{%~OVCp^BIFf=>8xjK49-nkk!Siuu*Mkhl-JlatOGT-Dm})` zQ}4iWPq&QMnFE}Z3Y{(o+-1==3%B#7R>Fn04?XHJ_&&k1g^1biWM``sq0MYJuSKi` zTsgN!`G@vie5S^@;OdZhz-cej#F(d^2W2xYzX4M8`vR|##(`qdNW@iVeRA}O$9NmI zunn8vHQPWHyS$CffzDj$Qg%C<=QjH-6N;VSE|g_mq{;7eNH%Qy#V-ca3(j!DFyFGg zJ>IegI_>^c1;r1=!Rno45W*EQM5WVJZ+PLWuJ`^pF@JegX;9&L3eQ*JD+-Aw%s7u? zrbAyjUWVkbi*^nLzpAu1t8lmEC=CZZG=9K4H}KzwxS>WoBblco&V&#$5eCHa@{UI;lON zJ#hbd;0AVZ-0F$Y(>6}vom<|zbalZh@B440O8%%%&hX*57tD#DaxCH0yIC1xzU|h6 z`4nseV@i|lV7|GwgZWPJGiF*WLzT`=n+bUDxt)y9%lWJ8o5L;Pm65=#w)#+mlmU~* zlQSNPe&ev7Jw!BV4`>f)4`>f)4`>f)4`>f)4`>f)4`>f)4`>f0c%ZNKKiBKdQ{SIz zA3NN;<4vsp3$A`x4$R#P3t%JQEO4HWa8IBLJOsQ1{1A8*mytxm+6X&p*0>QCRq6waWzfa1KI=H z1KI=H1KI=H1KI=H1KI=H1KI=H19$2Hu4lP^>dIsO-*&hxpZx4$#vx}Ix)%CCbNYq~!@uuy%+8rNXS2mbm{@$5AlmA8gxesU8|2O1M B?Kl7c literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/model/SheetTest.java b/src/testcases/org/apache/poi/hssf/model/SheetTest.java index 9a78fd63c9..0b2723cacd 100644 --- a/src/testcases/org/apache/poi/hssf/model/SheetTest.java +++ b/src/testcases/org/apache/poi/hssf/model/SheetTest.java @@ -7,6 +7,7 @@ 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.RowRecord; import org.apache.poi.hssf.record.StringRecord; @@ -71,6 +72,31 @@ public class SheetTest extends TestCase assertTrue("Expected " + recordsRemoved + " record to be removed from the starting " + records + ". Currently there are " + sheet.getRecords().size() + " records", records - sheet.getRecords().size() == recordsRemoved); } + /** + * Bug: 22922 (Reported by Xuemin Guan) + *

    + * Remove mergedregion fails when a sheet loses records after an initial CreateSheet + * fills up the records. + * + */ + public void testMovingMergedRegion() { + List records = new ArrayList(); + + MergeCellsRecord merged = new MergeCellsRecord(); + merged.addArea(0, (short)0, 1, (short)2); + records.add(new RowRecord()); + records.add(new RowRecord()); + records.add(new RowRecord()); + records.add(merged); + + Sheet sheet = Sheet.createSheet(records, 0); + sheet.records.remove(0); + + //stub object to throw off list INDEX operations + sheet.removeMergedRegion(0); + assertEquals("Should be no more merged regions", 0, sheet.getNumMergedRegions()); + } + public void testGetMergedRegionAt() { //TODO @@ -147,13 +173,6 @@ public class SheetTest extends TestCase } - - public static void main(String [] args) { - System.out - .println("Testing : "+SheetTest.class.getName()); - junit.textui.TestRunner.run(SheetTest.class); - } - } diff --git a/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java b/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java index c4722a9a73..b45f48f375 100644 --- a/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java +++ b/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java @@ -56,7 +56,6 @@ package org.apache.poi.hssf.model; import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.*; -import org.apache.poi.hssf.util.SheetReferences; /** * Test the low level formula parser functionality. High level tests are to @@ -145,7 +144,7 @@ public class TestFormulaParser extends TestCase { assertEquals(true, flag.getValue()); assertEquals("Y", y.getValue()); assertEquals("N", n.getValue()); - assertEquals("IF", funif.toFormulaString(new SheetReferences())); + assertEquals("IF", funif.toFormulaString((Workbook) null)); assertTrue("Goto ptg exists", goto1.isGoto()); } @@ -285,6 +284,36 @@ public class TestFormulaParser extends TestCase { } + public void testMacroFunction() { + Workbook w = new Workbook(); + FormulaParser fp = new FormulaParser("FOO()", w); + fp.parse(); + Ptg[] ptg = fp.getRPNPtg(); + + AbstractFunctionPtg tfunc = (AbstractFunctionPtg) ptg[0]; + assertEquals("externalflag", tfunc.getName()); + + NamePtg tname = (NamePtg) ptg[1]; + assertEquals("FOO", tname.toFormulaString(w)); + } + + public void testEmbeddedSlash() { + FormulaParser fp = new FormulaParser("HYPERLINK(\"http://www.jakarta.org\",\"Jakarta\");",null); + fp.parse(); + Ptg[] ptg = fp.getRPNPtg(); + assertTrue("first ptg is string",ptg[0] instanceof StringPtg); + assertTrue("second ptg is string",ptg[1] instanceof StringPtg); + + } + + public void testConcatenate(){ + FormulaParser fp = new FormulaParser("CONCATENATE(\"first\",\"second\")",null); + fp.parse(); + Ptg[] ptg = fp.getRPNPtg(); + assertTrue("first ptg is string",ptg[0] instanceof StringPtg); + assertTrue("second ptg is string",ptg[1] instanceof StringPtg); + } + public static void main(String [] args) { System.out.println("Testing org.apache.poi.hssf.record.formula.FormulaParser"); junit.textui.TestRunner.run(TestFormulaParser.class); diff --git a/src/testcases/org/apache/poi/hssf/record/TestBoundSheetRecord.java b/src/testcases/org/apache/poi/hssf/record/TestBoundSheetRecord.java index 2058c2f9e1..4ca6075354 100644 --- a/src/testcases/org/apache/poi/hssf/record/TestBoundSheetRecord.java +++ b/src/testcases/org/apache/poi/hssf/record/TestBoundSheetRecord.java @@ -92,5 +92,25 @@ public class TestBoundSheetRecord assertEquals(" 2 + 2 + 4 + 2 + 1 + 1 + len(str) * 2", 24, record.getRecordSize()); } + + public void testName() { + BoundSheetRecord record = new BoundSheetRecord(); + record.setSheetname("1234567890223456789032345678904"); + assertTrue("Success", true); + try { + record.setSheetname("12345678902234567890323456789042"); + assertTrue("Should have thrown IllegalArgumentException, but didnt", false); + } catch (IllegalArgumentException e) { + assertTrue("succefully threw exception",true); + } + + try { + record.setSheetname("s//*s"); + assertTrue("Should have thrown IllegalArgumentException, but didnt", false); + } catch (IllegalArgumentException e) { + assertTrue("succefully threw exception",true); + } + + } } diff --git a/src/testcases/org/apache/poi/hssf/record/TestSSTDeserializer.java b/src/testcases/org/apache/poi/hssf/record/TestSSTDeserializer.java index 6272653202..a506e37c11 100644 --- a/src/testcases/org/apache/poi/hssf/record/TestSSTDeserializer.java +++ b/src/testcases/org/apache/poi/hssf/record/TestSSTDeserializer.java @@ -88,7 +88,7 @@ public class TestSSTDeserializer byte[] bytes = HexRead.readData( _test_file_path + File.separator + "richtextdata.txt", "header" ); BinaryTree strings = new BinaryTree(); SSTDeserializer deserializer = new SSTDeserializer( strings ); - deserializer.manufactureStrings( bytes, 0, (short)bytes.length ); + deserializer.manufactureStrings( bytes, 0); byte[] continueBytes = HexRead.readData( _test_file_path + File.separator + "richtextdata.txt", "continue1" ); deserializer.processContinueRecord( continueBytes ); @@ -101,7 +101,7 @@ public class TestSSTDeserializer byte[] bytes = HexRead.readData( _test_file_path + File.separator + "evencontinuation.txt", "header" ); BinaryTree strings = new BinaryTree(); SSTDeserializer deserializer = new SSTDeserializer( strings ); - deserializer.manufactureStrings( bytes, 0, (short)bytes.length ); + deserializer.manufactureStrings( bytes, 0); byte[] continueBytes = HexRead.readData( _test_file_path + File.separator + "evencontinuation.txt", "continue1" ); deserializer.processContinueRecord( continueBytes ); @@ -119,7 +119,7 @@ public class TestSSTDeserializer byte[] bytes = HexRead.readData( _test_file_path + File.separator + "stringacross2continuations.txt", "header" ); BinaryTree strings = new BinaryTree(); SSTDeserializer deserializer = new SSTDeserializer( strings ); - deserializer.manufactureStrings( bytes, 0, (short)bytes.length ); + deserializer.manufactureStrings( bytes, 0); bytes = HexRead.readData( _test_file_path + File.separator + "stringacross2continuations.txt", "continue1" ); deserializer.processContinueRecord( bytes ); bytes = HexRead.readData( _test_file_path + File.separator + "stringacross2continuations.txt", "continue2" ); @@ -136,7 +136,7 @@ public class TestSSTDeserializer byte[] bytes = HexRead.readData( _test_file_path + File.separator + "extendedtextstrings.txt", "rich-header" ); BinaryTree strings = new BinaryTree(); SSTDeserializer deserializer = new SSTDeserializer( strings ); - deserializer.manufactureStrings( bytes, 0, (short)bytes.length ); + deserializer.manufactureStrings( bytes, 0); byte[] continueBytes = HexRead.readData( _test_file_path + File.separator + "extendedtextstrings.txt", "rich-continue1" ); deserializer.processContinueRecord( continueBytes ); @@ -146,7 +146,7 @@ public class TestSSTDeserializer bytes = HexRead.readData( _test_file_path + File.separator + "extendedtextstrings.txt", "norich-header" ); strings = new BinaryTree(); deserializer = new SSTDeserializer( strings ); - deserializer.manufactureStrings( bytes, 0, (short)bytes.length ); + deserializer.manufactureStrings( bytes, 0); continueBytes = HexRead.readData( _test_file_path + File.separator + "extendedtextstrings.txt", "norich-continue1" ); deserializer.processContinueRecord( continueBytes ); diff --git a/src/testcases/org/apache/poi/hssf/record/TestSSTRecord.java b/src/testcases/org/apache/poi/hssf/record/TestSSTRecord.java index 24105993dd..747868c98a 100644 --- a/src/testcases/org/apache/poi/hssf/record/TestSSTRecord.java +++ b/src/testcases/org/apache/poi/hssf/record/TestSSTRecord.java @@ -429,7 +429,7 @@ public class TestSSTRecord assertEquals( 1464, record.getNumStrings() ); assertEquals( 688, record.getNumUniqueStrings() ); assertEquals( 492, record.countStrings() ); - assertEquals( 1, record.getDeserializer().getContinuationExpectedChars() ); +//jmh assertEquals( 1, record.getDeserializer().getContinuationExpectedChars() ); assertEquals( "Consolidated B-24J Liberator The Dragon & His Tai", record.getDeserializer().getUnfinishedString() ); // assertEquals( 52, record.getDeserializer().getTotalLength() ); @@ -448,7 +448,7 @@ public class TestSSTRecord assertEquals( 0, record.getNumStrings() ); assertEquals( 0, record.getNumUniqueStrings() ); assertEquals( 0, record.countStrings() ); - assertEquals( 0, record.getDeserializer().getContinuationExpectedChars() ); + assertEquals( 0, record.getDeserializer().getContinuationCharsRead() ); assertEquals( "", record.getDeserializer().getUnfinishedString() ); // assertEquals( 0, record.getDeserializer().getTotalLength() ); // assertEquals( 0, record.getDeserializer().getStringDataOffset() ); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java new file mode 100644 index 0000000000..b43d5c6c1b --- /dev/null +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -0,0 +1,413 @@ +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2003, 2003 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.poi.hssf.usermodel; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Date; + +import junit.framework.TestCase; + + + +/** + * Testcases for bugs entered in bugzilla + * the Test name contains the bugzilla bug id + * @author Avik Sengupta + */ + +public class TestBugs +extends TestCase { + public TestBugs(String s) { + super(s); + } + + /** Test reading AND writing a complicated workbook + *Test opening resulting sheet in excel*/ + public void test15228() + throws java.io.IOException { + String readFilename = System.getProperty("HSSF.testdata.path"); + FileInputStream in = new FileInputStream(readFilename+File.separator+"15228.xls"); + HSSFWorkbook wb = new HSSFWorkbook(in); + HSSFSheet s = wb.getSheetAt(0); + HSSFRow r = s.createRow(0); + HSSFCell c = r.createCell((short)0); + c.setCellValue(10); + File file = File.createTempFile("test15228",".xls"); + FileOutputStream out = new FileOutputStream(file); + wb.write(out); + assertTrue("No exception thrown", true); + assertTrue("File Should Exist", file.exists()); + + } + + public void test13796() + throws java.io.IOException { + String readFilename = System.getProperty("HSSF.testdata.path"); + FileInputStream in = new FileInputStream(readFilename+File.separator+"13796.xls"); + HSSFWorkbook wb = new HSSFWorkbook(in); + HSSFSheet s = wb.getSheetAt(0); + HSSFRow r = s.createRow(0); + HSSFCell c = r.createCell((short)0); + c.setCellValue(10); + File file = File.createTempFile("test13796",".xls"); + FileOutputStream out = new FileOutputStream(file); + wb.write(out); + assertTrue("No exception thrown", true); + assertTrue("File Should Exist", file.exists()); + + } + /**Test writing a hyperlink + * Open resulting sheet in Excel and check that A1 contains a hyperlink*/ + public void test23094() throws Exception { + File file = File.createTempFile("test23094",".xls"); + FileOutputStream out = new FileOutputStream(file); + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet s = wb.createSheet(); + HSSFRow r = s.createRow(0); + r.createCell((short)0).setCellFormula("HYPERLINK( \"http://jakarta.apache.org\", \"Jakarta\" )"); + assertTrue("No Exception expected",true); + wb.write(out); + out.close(); + } + + /* test hyperlinks + * open resulting file in excel, and check that there is a link to Google + **/ + public void test15353() throws Exception { + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet("My sheet"); + + HSSFRow row = sheet.createRow( (short) 0 ); + HSSFCell cell = row.createCell( (short) 0 ); + cell.setCellFormula("HYPERLINK(\"http://google.com\",\"Google\")"); + + // Write out the workbook + File f = File.createTempFile("test15353",".xls"); + FileOutputStream fileOut = new FileOutputStream(f); + wb.write(fileOut); + fileOut.close(); + } + + /** test reading of a formula with a name and a cell ref in one + **/ + public void test14460() throws Exception { + String filename = System.getProperty("HSSF.testdata.path"); + filename=filename+"/14460.xls"; + FileInputStream in = new FileInputStream(filename); + HSSFWorkbook wb = new HSSFWorkbook(in); + HSSFSheet sheet = wb.getSheetAt(0); + assertTrue("No exception throws", true); + } + + public void test14330() throws Exception { + String filedir = System.getProperty("HSSF.testdata.path"); + String filename=filedir+"/14330-1.xls"; + FileInputStream in = new FileInputStream(filename); + HSSFWorkbook wb = new HSSFWorkbook(in); + HSSFSheet sheet = wb.getSheetAt(0); + + filename=filedir+"/14330-2.xls"; + in = new FileInputStream(filename); + wb = new HSSFWorkbook(in); + sheet = wb.getSheetAt(0); + assertTrue("No exception throws", true); + } + + /** test rewriting a file with large number of unique strings + *open resulting file in Excel to check results!*/ + public void test15375() { + + try { + String filename = System.getProperty("HSSF.testdata.path"); + filename=filename+"/15375.xls"; + FileInputStream in = new FileInputStream(filename); + HSSFWorkbook wb = new HSSFWorkbook(in); + HSSFSheet sheet = wb.getSheetAt(0); + + HSSFRow row = sheet.getRow(5); + HSSFCell cell = row.getCell((short)3); + if (cell == null) + cell = row.createCell((short)3); + + // Write test + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + cell.setCellValue("a test"); + + // change existing numeric cell value + + HSSFRow oRow = sheet.getRow(14); + HSSFCell oCell = oRow.getCell((short)4); + oCell.setCellValue(75); + oCell = oRow.getCell((short)5); + oCell.setCellValue("0.3"); + + // Write the output to a file + File f = File.createTempFile("test15375",".xls"); + FileOutputStream fileOut = new FileOutputStream(f); + wb.write(fileOut); + fileOut.close(); + } + catch (java.io.FileNotFoundException ex) { + ex.printStackTrace(); + } + catch (java.io.IOException ex) { + ex.printStackTrace(); + } + + } + + /** test writing a file with large number of unique strings + *open resulting file in Excel to check results!*/ + + public void test15375_2() throws Exception{ + + + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet(); + + String tmp1 = null; + String tmp2 = null; + String tmp3 = null; + + for (int i = 0; i < 6000; i++) { + tmp1 = "Test1" + i; + tmp2 = "Test2" + i; + tmp3 = "Test3" + i; + + HSSFRow row = sheet.createRow((short)i); + + HSSFCell cell = row.createCell((short)0); + cell.setCellValue(tmp1); + cell = row.createCell((short)1); + cell.setCellValue(tmp2); + cell = row.createCell((short)2); + cell.setCellValue(tmp3); + } + File f = File.createTempFile("test15375-2",".xls"); + FileOutputStream fileOut = new FileOutputStream(f); + wb.write(fileOut); + fileOut.close(); + } + /** another test for the number of unique strings issue + *test opening the resulting file in Excel*/ + public void test22568() { + int r=2000;int c=3; + + HSSFWorkbook wb = new HSSFWorkbook() ; + HSSFSheet sheet = wb.createSheet("ExcelTest") ; + + int col_cnt=0, rw_cnt=0 ; + + col_cnt = c; + rw_cnt = r; + + HSSFRow rw = null ; + HSSFCell cell =null; + rw = sheet.createRow((short)0) ; + //Header row + for(short j=0; j4000\",B1:B5)"; @@ -1060,6 +1060,66 @@ extends TestCase { assertTrue("sumif == 0 bytes", file.length() > 0); } + public void testSquareMacro() throws IOException { + File dir = new File(System.getProperty("HSSF.testdata.path")); + File xls = new File(dir, "SquareMacro.xls"); + FileInputStream in = new FileInputStream(xls); + HSSFWorkbook w; + try { + w = new HSSFWorkbook(in); + } finally { + in.close(); + } + HSSFSheet s0 = w.getSheetAt(0); + HSSFRow[] r = {s0.getRow(0), s0.getRow(1)}; + + HSSFCell a1 = r[0].getCell((short) 0); + assertEquals("square(1)", a1.getCellFormula()); + assertEquals(1d, a1.getNumericCellValue(), 1e-9); + + HSSFCell a2 = r[1].getCell((short) 0); + assertEquals("square(2)", a2.getCellFormula()); + assertEquals(4d, a2.getNumericCellValue(), 1e-9); + + HSSFCell b1 = r[0].getCell((short) 1); + assertEquals("IF(TRUE,square(1))", b1.getCellFormula()); + assertEquals(1d, b1.getNumericCellValue(), 1e-9); + + HSSFCell b2 = r[1].getCell((short) 1); + assertEquals("IF(TRUE,square(2))", b2.getCellFormula()); + assertEquals(4d, b2.getNumericCellValue(), 1e-9); + + HSSFCell c1 = r[0].getCell((short) 2); + assertEquals("square(square(1))", c1.getCellFormula()); + assertEquals(1d, c1.getNumericCellValue(), 1e-9); + + HSSFCell c2 = r[1].getCell((short) 2); + assertEquals("square(square(2))", c2.getCellFormula()); + assertEquals(16d, c2.getNumericCellValue(), 1e-9); + + HSSFCell d1 = r[0].getCell((short) 3); + assertEquals("square(one())", d1.getCellFormula()); + assertEquals(1d, d1.getNumericCellValue(), 1e-9); + + HSSFCell d2 = r[1].getCell((short) 3); + assertEquals("square(two())", d2.getCellFormula()); + assertEquals(4d, d2.getNumericCellValue(), 1e-9); + } + + public void testStringFormulaRead() throws IOException { + File dir = new File(System.getProperty("HSSF.testdata.path")); + File xls = new File(dir, "StringFormulas.xls"); + FileInputStream in = new FileInputStream(xls); + HSSFWorkbook w; + try { + w = new HSSFWorkbook(in); + } finally { + in.close(); + } + HSSFCell c = w.getSheetAt(0).getRow(0).getCell((short)0); + assertEquals("String Cell value","XYZ",c.getStringCellValue()); + } + public static void main(String [] args) { System.out .println("Testing org.apache.poi.hssf.usermodel.TestFormulas"); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java index dcb114cae0..1ad9759808 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java @@ -116,7 +116,7 @@ extends TestCase { c=r.createCell((short)2); //c.setCellType(HSSFCell.CELL_TYPE_ERROR); - c.setCellErrorValue((byte)1); + c.setCellErrorValue((byte)7); wb.write(out); @@ -136,7 +136,7 @@ extends TestCase { c = r.getCell((short)1); assertTrue("boolean value 0,1 = 0",c.getErrorCellValue() == 0); c = r.getCell((short)2); - assertTrue("boolean value 0,2 = 1",c.getErrorCellValue() == 1); + assertTrue("boolean value 0,2 = 7",c.getErrorCellValue() == 7); in.close(); } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHeaderFooter.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHeaderFooter.java new file mode 100644 index 0000000000..9374c17dcb --- /dev/null +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHeaderFooter.java @@ -0,0 +1,126 @@ +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2003 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.poi.hssf.usermodel; + +import junit.framework.TestCase; +import org.apache.poi.hssf.usermodel.HSSFHeader; +import org.apache.poi.hssf.usermodel.HSSFFooter; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; + +/** + * Tests row shifting capabilities. + * + * + * @author Shawn Laubach (slaubach at apache dot com) + */ + +public class TestHSSFHeaderFooter extends TestCase { + + /** + * Constructor for TestHeaderFooter. + * @param arg0 + */ + public TestHSSFHeaderFooter(String arg0) { + super(arg0); + } + + /** + * Tests that get header retreives the proper values. + * + * @author Shawn Laubach (slaubach at apache dot org) + */ + public void testRetrieveCorrectHeader() throws Exception + { + // Read initial file in + String filename = System.getProperty( "HSSF.testdata.path" ); + filename = filename + "/EmbeddedChartHeaderTest.xls"; + FileInputStream fin = new FileInputStream( filename ); + HSSFWorkbook wb = new HSSFWorkbook( fin ); + fin.close(); + HSSFSheet s = wb.getSheetAt( 0 ); + HSSFHeader head = s.getHeader(); + + assertEquals("Top Left", head.getLeft()); + assertEquals("Top Center", head.getCenter()); + assertEquals("Top Right", head.getRight()); + } + + /** + * Tests that get header retreives the proper values. + * + * @author Shawn Laubach (slaubach at apache dot org) + */ + public void testRetrieveCorrectFooter() throws Exception + { + // Read initial file in + String filename = System.getProperty( "HSSF.testdata.path" ); + filename = filename + "/EmbeddedChartHeaderTest.xls"; + FileInputStream fin = new FileInputStream( filename ); + HSSFWorkbook wb = new HSSFWorkbook( fin ); + fin.close(); + HSSFSheet s = wb.getSheetAt( 0 ); + HSSFFooter foot = s.getFooter(); + + assertEquals("Bottom Left", foot.getLeft()); + assertEquals("Bottom Center", foot.getCenter()); + assertEquals("Bottom Right", foot.getRight()); + } +} + diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java index 8e58186b55..3779f3a781 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java @@ -54,18 +54,21 @@ package org.apache.poi.hssf.usermodel; -import junit.framework.TestCase; -import org.apache.poi.hssf.model.Sheet; -import org.apache.poi.hssf.record.HCenterRecord; -import org.apache.poi.hssf.record.VCenterRecord; -import org.apache.poi.hssf.record.WSBoolRecord; -import org.apache.poi.hssf.record.SCLRecord; -import org.apache.poi.hssf.record.WindowTwoRecord; - import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import junit.framework.TestCase; + +import org.apache.poi.hssf.model.Sheet; +import org.apache.poi.hssf.record.HCenterRecord; +import org.apache.poi.hssf.record.ProtectRecord; +import org.apache.poi.hssf.record.SCLRecord; +import org.apache.poi.hssf.record.VCenterRecord; +import org.apache.poi.hssf.record.WSBoolRecord; +import org.apache.poi.hssf.record.WindowTwoRecord; +import org.apache.poi.hssf.util.Region; + /** * Tests HSSFSheet. This test case is very incomplete at the moment. * @@ -236,6 +239,27 @@ public class TestHSSFSheet cell.setCellValue("Difference Check"); assertEquals(cloned.getRow((short)0).getCell((short)0).getStringCellValue(), "clone_test"); } + + /** + * Test that the ProtectRecord is included when creating or cloning a sheet + */ + public void testProtect() { + HSSFWorkbook workbook = new HSSFWorkbook(); + HSSFSheet hssfSheet = workbook.createSheet(); + Sheet sheet = hssfSheet.getSheet(); + ProtectRecord protect = sheet.getProtect(); + + assertFalse(protect.getProtect()); + + // This will tell us that cloneSheet, and by extension, + // the list forms of createSheet leave us with an accessible + // ProtectRecord. + hssfSheet.setProtect(true); + Sheet cloned = sheet.cloneSheet(); + assertNotNull(cloned.getProtect()); + assertTrue(hssfSheet.getProtect()); + } + public void testZoom() throws Exception @@ -254,4 +278,111 @@ public class TestHSSFSheet assertTrue(sclLoc == window2Loc + 1); } + + + /** + * When removing one merged region, it would break + * + */ + public void testRemoveMerged() { + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet(); + Region region = new Region(0, (short)0, 1, (short)1); + sheet.addMergedRegion(region); + region = new Region(1, (short)0, 2, (short)1); + sheet.addMergedRegion(region); + + sheet.removeMergedRegion(0); + + region = sheet.getMergedRegionAt(0); + assertEquals("Left over region should be starting at row 1", 1, region.getRowFrom()); + + sheet.removeMergedRegion(0); + + assertEquals("there should be no merged regions left!", 0, sheet.getNumMergedRegions()); + + //an, add, remove, get(0) would null pointer + sheet.addMergedRegion(region); + assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions()); + sheet.removeMergedRegion(0); + assertEquals("there should now be zero merged regions!", 0, sheet.getNumMergedRegions()); + //add it again! + region.setRowTo(4); + + sheet.addMergedRegion(region); + assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions()); + + //should exist now! + assertTrue("there isn't more than one merged region in there", 1 <= sheet.getNumMergedRegions()); + region = sheet.getMergedRegionAt(0); + assertEquals("the merged row to doesnt match the one we put in ", 4, region.getRowTo()); + + } + + public void testShiftMerged() { + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet(); + HSSFRow row = sheet.createRow(0); + HSSFCell cell = row.createCell((short)0); + cell.setCellValue("first row, first cell"); + + row = sheet.createRow(1); + cell = row.createCell((short)1); + cell.setCellValue("second row, second cell"); + + Region region = new Region(1, (short)0, 1, (short)1); + sheet.addMergedRegion(region); + + sheet.shiftRows(1, 1, 1); + + region = sheet.getMergedRegionAt(0); + assertEquals("Merged region not moved over to row 2", 2, region.getRowFrom()); + + } + + /** + * Tests the display of gridlines, formulas, and rowcolheadings. + * @author Shawn Laubach (slaubach at apache dot org) + */ + public void testDisplayOptions() throws Exception { + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet(); + + File tempFile = File.createTempFile("display", "test.xls"); + FileOutputStream stream = new FileOutputStream(tempFile); + wb.write(stream); + stream.close(); + + 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); + + tempFile = File.createTempFile("display", "test.xls"); + stream = new FileOutputStream(tempFile); + wb.write(stream); + stream.close(); + + readStream = new FileInputStream(tempFile); + wb = new HSSFWorkbook(readStream); + sheet = wb.getSheetAt(0); + readStream.close(); + + + assertEquals(sheet.isDisplayGridlines(), false); + assertEquals(sheet.isDisplayRowColHeadings(), false); + assertEquals(sheet.isDisplayFormulas(), true); + } + + public static void main(java.lang.String[] args) { + junit.textui.TestRunner.run(TestHSSFSheet.class); + } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestSheetShiftRows.java b/src/testcases/org/apache/poi/hssf/usermodel/TestSheetShiftRows.java index a48fb683fc..e91003e4da 100755 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestSheetShiftRows.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestSheetShiftRows.java @@ -175,5 +175,18 @@ public class TestSheetShiftRows extends TestCase { s.createRow(3).createCell((short)0).setCellValue("TEST2"); s.shiftRows(0,4,1); } + + /** + * Tests when shifting the first row. + * + * @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); + } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java index c8bc7b86b6..6b5fd97440 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java @@ -304,6 +304,8 @@ public class TestWorkbook assertEquals(1.25,cell.getNumericCellValue(), 1e-10); assertEquals(format.getFormat(df), "0.0"); + + assertEquals(format, workbook.createDataFormat()); stream.close(); } diff --git a/src/testcases/org/apache/poi/poifs/filesystem/SlowInputStream.java b/src/testcases/org/apache/poi/poifs/filesystem/SlowInputStream.java new file mode 100644 index 0000000000..efd8c56512 --- /dev/null +++ b/src/testcases/org/apache/poi/poifs/filesystem/SlowInputStream.java @@ -0,0 +1,76 @@ + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.poi.poifs.filesystem; + +import java.io.*; +import java.util.Random; + +/** + * Returns a random amount of requested data. Used to check conformance with + * InputStream API contracts. + */ +public class SlowInputStream extends FilterInputStream +{ + private Random r = new Random(0); + + public SlowInputStream(InputStream in) { + super(in); + } + + public int read(byte[] b, int off, int len) throws IOException { + return super.read(b, off, r.nextInt(len) + 1); + } +} diff --git a/src/testcases/org/apache/poi/poifs/filesystem/TestDocument.java b/src/testcases/org/apache/poi/poifs/filesystem/TestDocument.java index af417fad16..2e9fd02822 100644 --- a/src/testcases/org/apache/poi/poifs/filesystem/TestDocument.java +++ b/src/testcases/org/apache/poi/poifs/filesystem/TestDocument.java @@ -107,7 +107,7 @@ public class TestDocument { array[ j ] = ( byte ) j; } - document = new POIFSDocument("foo", new ByteArrayInputStream(array)); + document = new POIFSDocument("foo", new SlowInputStream(new ByteArrayInputStream(array))); checkDocument(document, array); // verify correct number of blocks get created for document diff --git a/src/testcases/org/apache/poi/poifs/property/TestDocumentProperty.java b/src/testcases/org/apache/poi/poifs/property/TestDocumentProperty.java index 74a3807562..e677a7983e 100644 --- a/src/testcases/org/apache/poi/poifs/property/TestDocumentProperty.java +++ b/src/testcases/org/apache/poi/poifs/property/TestDocumentProperty.java @@ -150,6 +150,7 @@ public class TestDocumentProperty ( byte ) 0xFE, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, + ( byte ) 0x57, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00, ( byte ) 0x72, ( byte ) 0x00, ( byte ) 0x6B, ( byte ) 0x00, ( byte ) 0x62, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00, @@ -182,6 +183,7 @@ public class TestDocumentProperty ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x10, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, + ( byte ) 0x05, ( byte ) 0x00, ( byte ) 0x53, ( byte ) 0x00, ( byte ) 0x75, ( byte ) 0x00, ( byte ) 0x6D, ( byte ) 0x00, ( byte ) 0x6D, ( byte ) 0x00, ( byte ) 0x61, ( byte ) 0x00, @@ -214,6 +216,7 @@ public class TestDocumentProperty ( byte ) 0x08, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x10, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, + ( byte ) 0x05, ( byte ) 0x00, ( byte ) 0x44, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00, ( byte ) 0x63, ( byte ) 0x00, ( byte ) 0x75, ( byte ) 0x00, ( byte ) 0x6D, ( byte ) 0x00, diff --git a/src/testcases/org/apache/poi/poifs/property/TestRootProperty.java b/src/testcases/org/apache/poi/poifs/property/TestRootProperty.java index 430c521479..8357a0a466 100644 --- a/src/testcases/org/apache/poi/poifs/property/TestRootProperty.java +++ b/src/testcases/org/apache/poi/poifs/property/TestRootProperty.java @@ -217,11 +217,11 @@ public class TestRootProperty ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00 }; - verifyReadingProperty(0, input, 0, "Root Entry"); + verifyReadingProperty(0, input, 0, "Root Entry", "{00020820-0000-0000-C000-000000000046}"); } private void verifyReadingProperty(int index, byte [] input, int offset, - String name) + String name, String sClsId) throws IOException { RootProperty property = new RootProperty(index, input, @@ -242,6 +242,7 @@ public class TestRootProperty assertEquals(index, property.getIndex()); assertEquals(name, property.getName()); assertTrue(!property.getChildren().hasNext()); + assertEquals(property.getStorageClsid().toString(), sClsId); } /** diff --git a/src/testcases/org/apache/poi/util/TestHexDump.java b/src/testcases/org/apache/poi/util/TestHexDump.java index 7a86cff764..c8e3ca9e5c 100644 --- a/src/testcases/org/apache/poi/util/TestHexDump.java +++ b/src/testcases/org/apache/poi/util/TestHexDump.java @@ -314,6 +314,9 @@ public class TestHexDump // as expected } + + // verify proper behaviour with a 0 length dump on 0 length dataset + HexDump.dump(new byte[0], 0, new ByteArrayOutputStream(), 0, 0); } public void testToHex()