From a9973d075640901a71f2cbc7946cf89370efeba0 Mon Sep 17 00:00:00 2001 From: Nicola Ken Barozzi Date: Mon, 15 Apr 2002 08:06:44 +0000 Subject: [PATCH] Removing generated docs since Andy does it automatically from build every 2 hours with a script. :-) git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352419 13f79535-47bb-0310-9956-ffa450edef68 --- build/jakarta-poi/docs/changes.html | 431 --- build/jakarta-poi/docs/contrib.html | 532 ---- build/jakarta-poi/docs/faq.html | 248 -- .../docs/hdf/images/built-with-cocoon.gif | Bin 2252 -> 0 bytes .../docs/hdf/images/cocoon2-small.jpg | Bin 1684 -> 0 bytes build/jakarta-poi/docs/hdf/images/header.gif | Bin 3165 -> 0 bytes .../docs/hdf/images/jakarta-logo.gif | Bin 8006 -> 0 bytes .../docs/hdf/images/krysalis-compatible.jpg | Bin 2093 -> 0 bytes build/jakarta-poi/docs/hdf/index.html | 124 - build/jakarta-poi/docs/historyandfuture.html | 274 -- build/jakarta-poi/docs/hpsf/how-to.html | 622 ---- .../docs/hpsf/images/built-with-cocoon.gif | Bin 2252 -> 0 bytes .../docs/hpsf/images/cocoon2-small.jpg | Bin 1684 -> 0 bytes build/jakarta-poi/docs/hpsf/images/header.gif | Bin 3165 -> 0 bytes .../docs/hpsf/images/jakarta-logo.gif | Bin 8006 -> 0 bytes .../docs/hpsf/images/krysalis-compatible.jpg | Bin 2093 -> 0 bytes build/jakarta-poi/docs/hpsf/index.html | 143 - build/jakarta-poi/docs/hpsf/internals.html | 2578 ----------------- build/jakarta-poi/docs/hpsf/todo.html | 173 -- build/jakarta-poi/docs/hssf/alternatives.html | 230 -- build/jakarta-poi/docs/hssf/diagram1.html | 134 - build/jakarta-poi/docs/hssf/diagrams.html | 159 - build/jakarta-poi/docs/hssf/how-to.html | 870 ------ .../docs/hssf/images/cocoon2-small.jpg | Bin 1684 -> 0 bytes build/jakarta-poi/docs/hssf/images/header.gif | Bin 3165 -> 0 bytes .../docs/hssf/images/jakarta-logo.gif | Bin 8006 -> 0 bytes .../docs/hssf/images/usermodel.gif | Bin 75282 -> 0 bytes build/jakarta-poi/docs/hssf/index.html | 172 -- build/jakarta-poi/docs/hssf/quick-guide.html | 597 ---- .../docs/hssf/record-generator.html | 321 -- build/jakarta-poi/docs/hssf/use-case.html | 520 ---- .../docs/images/built-with-cocoon.gif | Bin 2252 -> 0 bytes .../jakarta-poi/docs/images/cocoon2-small.jpg | Bin 1684 -> 0 bytes build/jakarta-poi/docs/images/header.gif | Bin 3165 -> 0 bytes .../jakarta-poi/docs/images/jakarta-logo.gif | Bin 8006 -> 0 bytes .../docs/images/krysalis-compatible.jpg | Bin 2093 -> 0 bytes build/jakarta-poi/docs/images/update.jpg | Bin 1305 -> 0 bytes build/jakarta-poi/docs/index.html | 471 --- build/jakarta-poi/docs/inthenews.html | 365 --- build/jakarta-poi/docs/livesites.html | 181 -- build/jakarta-poi/docs/mail-archives.html | 200 -- build/jakarta-poi/docs/mail-lists.html | 320 -- .../docs/news/images/built-with-cocoon.gif | Bin 2252 -> 0 bytes .../docs/news/images/built-with-cocoon.png | Bin 2472 -> 0 bytes build/jakarta-poi/docs/news/images/header.gif | Bin 3165 -> 0 bytes .../docs/news/images/jakarta-logo.gif | Bin 8006 -> 0 bytes .../docs/news/images/krysalis-compatible.jpg | Bin 2093 -> 0 bytes .../docs/news/images/krysalis-compatible.png | Bin 4227 -> 0 bytes .../docs/news/images/logoGlenStampoutlzis.png | Bin 1125 -> 0 bytes .../docs/news/images/logoGustafsson1.png | Bin 7820 -> 0 bytes .../docs/news/images/logoGustafsson2.png | Bin 3908 -> 0 bytes .../docs/news/images/logoLoicLefevre.png | Bin 40251 -> 0 bytes .../docs/news/images/logoLoicLefevre2.png | Bin 30698 -> 0 bytes .../docs/news/images/logoMichaelMosmann.png | Bin 6538 -> 0 bytes build/jakarta-poi/docs/news/logocontest.html | 181 -- build/jakarta-poi/docs/overview.html | 307 -- build/jakarta-poi/docs/plan/POI10Vision.html | 1142 -------- build/jakarta-poi/docs/plan/POI20Vision.html | 1214 -------- .../docs/plan/images/built-with-cocoon.gif | Bin 2252 -> 0 bytes .../docs/plan/images/cocoon2-small.jpg | Bin 1684 -> 0 bytes build/jakarta-poi/docs/plan/images/header.gif | Bin 3165 -> 0 bytes .../docs/plan/images/jakarta-logo.gif | Bin 8006 -> 0 bytes .../docs/plan/images/krysalis-compatible.jpg | Bin 2093 -> 0 bytes build/jakarta-poi/docs/poifs/fileformat.html | 1155 -------- build/jakarta-poi/docs/poifs/how-to.html | 1018 ------- .../docs/poifs/images/PropertySet.jpg | Bin 17843 -> 0 bytes .../docs/poifs/images/built-with-cocoon.gif | Bin 2252 -> 0 bytes .../docs/poifs/images/cocoon2-small.jpg | Bin 1684 -> 0 bytes .../jakarta-poi/docs/poifs/images/header.gif | Bin 3165 -> 0 bytes .../docs/poifs/images/jakarta-logo.gif | Bin 8006 -> 0 bytes .../docs/poifs/images/krysalis-compatible.jpg | Bin 2093 -> 0 bytes build/jakarta-poi/docs/poifs/index.html | 152 - build/jakarta-poi/docs/poifs/usecases.html | 1266 -------- .../resolutions/images/built-with-cocoon.gif | Bin 2252 -> 0 bytes .../docs/resolutions/images/cocoon2-small.jpg | Bin 1684 -> 0 bytes .../docs/resolutions/images/header.gif | Bin 3165 -> 0 bytes .../docs/resolutions/images/jakarta-logo.gif | Bin 8006 -> 0 bytes .../images/krysalis-compatible.jpg | Bin 2093 -> 0 bytes build/jakarta-poi/docs/resolutions/index.html | 148 - .../jakarta-poi/docs/resolutions/res001.html | 252 -- build/jakarta-poi/docs/todo.html | 226 -- .../docs/utils/images/built-with-cocoon.gif | Bin 2252 -> 0 bytes .../docs/utils/images/cocoon2-small.jpg | Bin 1684 -> 0 bytes .../jakarta-poi/docs/utils/images/header.gif | Bin 3165 -> 0 bytes .../docs/utils/images/jakarta-logo.gif | Bin 8006 -> 0 bytes .../docs/utils/images/krysalis-compatible.jpg | Bin 2093 -> 0 bytes build/jakarta-poi/docs/utils/index.html | 134 - build/jakarta-poi/docs/who.html | 267 -- 88 files changed, 17127 deletions(-) delete mode 100644 build/jakarta-poi/docs/changes.html delete mode 100644 build/jakarta-poi/docs/contrib.html delete mode 100644 build/jakarta-poi/docs/faq.html delete mode 100644 build/jakarta-poi/docs/hdf/images/built-with-cocoon.gif delete mode 100644 build/jakarta-poi/docs/hdf/images/cocoon2-small.jpg delete mode 100644 build/jakarta-poi/docs/hdf/images/header.gif delete mode 100644 build/jakarta-poi/docs/hdf/images/jakarta-logo.gif delete mode 100644 build/jakarta-poi/docs/hdf/images/krysalis-compatible.jpg delete mode 100644 build/jakarta-poi/docs/hdf/index.html delete mode 100644 build/jakarta-poi/docs/historyandfuture.html delete mode 100644 build/jakarta-poi/docs/hpsf/how-to.html delete mode 100644 build/jakarta-poi/docs/hpsf/images/built-with-cocoon.gif delete mode 100644 build/jakarta-poi/docs/hpsf/images/cocoon2-small.jpg delete mode 100644 build/jakarta-poi/docs/hpsf/images/header.gif delete mode 100644 build/jakarta-poi/docs/hpsf/images/jakarta-logo.gif delete mode 100644 build/jakarta-poi/docs/hpsf/images/krysalis-compatible.jpg delete mode 100644 build/jakarta-poi/docs/hpsf/index.html delete mode 100644 build/jakarta-poi/docs/hpsf/internals.html delete mode 100644 build/jakarta-poi/docs/hpsf/todo.html delete mode 100644 build/jakarta-poi/docs/hssf/alternatives.html delete mode 100644 build/jakarta-poi/docs/hssf/diagram1.html delete mode 100644 build/jakarta-poi/docs/hssf/diagrams.html delete mode 100644 build/jakarta-poi/docs/hssf/how-to.html delete mode 100644 build/jakarta-poi/docs/hssf/images/cocoon2-small.jpg delete mode 100644 build/jakarta-poi/docs/hssf/images/header.gif delete mode 100644 build/jakarta-poi/docs/hssf/images/jakarta-logo.gif delete mode 100644 build/jakarta-poi/docs/hssf/images/usermodel.gif delete mode 100644 build/jakarta-poi/docs/hssf/index.html delete mode 100644 build/jakarta-poi/docs/hssf/quick-guide.html delete mode 100644 build/jakarta-poi/docs/hssf/record-generator.html delete mode 100644 build/jakarta-poi/docs/hssf/use-case.html delete mode 100644 build/jakarta-poi/docs/images/built-with-cocoon.gif delete mode 100644 build/jakarta-poi/docs/images/cocoon2-small.jpg delete mode 100644 build/jakarta-poi/docs/images/header.gif delete mode 100644 build/jakarta-poi/docs/images/jakarta-logo.gif delete mode 100644 build/jakarta-poi/docs/images/krysalis-compatible.jpg delete mode 100644 build/jakarta-poi/docs/images/update.jpg delete mode 100644 build/jakarta-poi/docs/index.html delete mode 100644 build/jakarta-poi/docs/inthenews.html delete mode 100644 build/jakarta-poi/docs/livesites.html delete mode 100644 build/jakarta-poi/docs/mail-archives.html delete mode 100644 build/jakarta-poi/docs/mail-lists.html delete mode 100644 build/jakarta-poi/docs/news/images/built-with-cocoon.gif delete mode 100644 build/jakarta-poi/docs/news/images/built-with-cocoon.png delete mode 100644 build/jakarta-poi/docs/news/images/header.gif delete mode 100644 build/jakarta-poi/docs/news/images/jakarta-logo.gif delete mode 100644 build/jakarta-poi/docs/news/images/krysalis-compatible.jpg delete mode 100644 build/jakarta-poi/docs/news/images/krysalis-compatible.png delete mode 100644 build/jakarta-poi/docs/news/images/logoGlenStampoutlzis.png delete mode 100644 build/jakarta-poi/docs/news/images/logoGustafsson1.png delete mode 100644 build/jakarta-poi/docs/news/images/logoGustafsson2.png delete mode 100644 build/jakarta-poi/docs/news/images/logoLoicLefevre.png delete mode 100644 build/jakarta-poi/docs/news/images/logoLoicLefevre2.png delete mode 100644 build/jakarta-poi/docs/news/images/logoMichaelMosmann.png delete mode 100644 build/jakarta-poi/docs/news/logocontest.html delete mode 100644 build/jakarta-poi/docs/overview.html delete mode 100644 build/jakarta-poi/docs/plan/POI10Vision.html delete mode 100644 build/jakarta-poi/docs/plan/POI20Vision.html delete mode 100644 build/jakarta-poi/docs/plan/images/built-with-cocoon.gif delete mode 100644 build/jakarta-poi/docs/plan/images/cocoon2-small.jpg delete mode 100644 build/jakarta-poi/docs/plan/images/header.gif delete mode 100644 build/jakarta-poi/docs/plan/images/jakarta-logo.gif delete mode 100644 build/jakarta-poi/docs/plan/images/krysalis-compatible.jpg delete mode 100644 build/jakarta-poi/docs/poifs/fileformat.html delete mode 100644 build/jakarta-poi/docs/poifs/how-to.html delete mode 100644 build/jakarta-poi/docs/poifs/images/PropertySet.jpg delete mode 100644 build/jakarta-poi/docs/poifs/images/built-with-cocoon.gif delete mode 100644 build/jakarta-poi/docs/poifs/images/cocoon2-small.jpg delete mode 100644 build/jakarta-poi/docs/poifs/images/header.gif delete mode 100644 build/jakarta-poi/docs/poifs/images/jakarta-logo.gif delete mode 100644 build/jakarta-poi/docs/poifs/images/krysalis-compatible.jpg delete mode 100644 build/jakarta-poi/docs/poifs/index.html delete mode 100644 build/jakarta-poi/docs/poifs/usecases.html delete mode 100644 build/jakarta-poi/docs/resolutions/images/built-with-cocoon.gif delete mode 100644 build/jakarta-poi/docs/resolutions/images/cocoon2-small.jpg delete mode 100644 build/jakarta-poi/docs/resolutions/images/header.gif delete mode 100644 build/jakarta-poi/docs/resolutions/images/jakarta-logo.gif delete mode 100644 build/jakarta-poi/docs/resolutions/images/krysalis-compatible.jpg delete mode 100644 build/jakarta-poi/docs/resolutions/index.html delete mode 100644 build/jakarta-poi/docs/resolutions/res001.html delete mode 100644 build/jakarta-poi/docs/todo.html delete mode 100644 build/jakarta-poi/docs/utils/images/built-with-cocoon.gif delete mode 100644 build/jakarta-poi/docs/utils/images/cocoon2-small.jpg delete mode 100644 build/jakarta-poi/docs/utils/images/header.gif delete mode 100644 build/jakarta-poi/docs/utils/images/jakarta-logo.gif delete mode 100644 build/jakarta-poi/docs/utils/images/krysalis-compatible.jpg delete mode 100644 build/jakarta-poi/docs/utils/index.html delete mode 100644 build/jakarta-poi/docs/who.html diff --git a/build/jakarta-poi/docs/changes.html b/build/jakarta-poi/docs/changes.html deleted file mode 100644 index 2f3a0c53dd..0000000000 --- a/build/jakarta-poi/docs/changes.html +++ /dev/null @@ -1,431 +0,0 @@ - - - - -History of Changes - - - - - - - - - - - - - -
www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
- - - - -
-
-
-
-About -
-Index -
-History -
-Future -
-Download -
-1.0 Vision -
-2.0 Vision -
-Who we are -
-Changes -
-FAQ -
-
-Sub-Projects -
-Overview -
-POIFS -
-HSSF -
-HDF -
-HPSF -
-POI-Utils -
-
-References -
-In The News -
-Live Sites -
-XLS spec [PDF] -
-Apache Cocoon -
-Resolutions -
-
-Get Involved -
-Contributing -
-Bug Database -
-CVS -
-Mail Lists -
-
-
-
-History of Changes - - - - - - -
- - - - - - -
- - - - - - -
History of Changes
-
-
- -

- -

-
-
- - - - - - - -
1.5-dev (03-April-2002)
-
- - -
  • -New project build.(NKB)
  • - -
  • -New project documentation system based on Cocoon.(NKB)
  • - -
  • -Package rename(POI-DEVELOPERS)
  • - -
  • -Various bug fixes(POI-DEVELOPERS)
  • - -
  • -Early stages of HSF development (not ready for development)(POI-DEVELOPERS)
  • - -
  • -Initial low level record support for charting (not complete)(POI-DEVELOPERS)
  • - -
    -
    -
    -
    -
    - - - - - - - -
    1.1.0 ()
    -
    - - -
  • -Created new event model(POI-DEVELOPERS)
  • - -
  • -Optimizations made to HSSF including aggregate records for - values, rows, etc.(POI-DEVELOPERS)
  • - -
  • -predictive sizing, offset based writing (instead of lots of - array copies)(POI-DEVELOPERS)
  • - -
  • -minor re-factoring and bug fixes.(POI-DEVELOPERS)
  • - -
    -
    -
    -
    -
    - - - - - - - -
    1.0.0 (???)
    -
    - - -
  • -Minor documentation updates.(POI-DEVELOPERS)
  • - -
    -
    -
    -
    -
    - - - - - - - -
    0.14.0 (???)
    -
    - - -
  • -Added DataFormat helper class and exposed set and get format - on HSSFCellStyle(POI-DEVELOPERS)
  • - -
  • -Fixed column width apis (unit wise) and various javadoc on - the subject(POI-DEVELOPERS)
  • - -
  • -Fix for Dimensions record (again)... (one of these days I'll - write a unit test for this ;-p).(POI-DEVELOPERS)
  • - -
  • -Some optimization on sheet creation.(POI-DEVELOPERS)
  • - -
    -
    -
    -
    -
    - - - - - - - -
    0.13.0 (???)
    -
    - - - - -
    -
    -
    -
    - - - - - - - -
    0.12.0 (???)
    -
    - - -
  • -Added MulBlank, Blank, ColInfo(POI-DEVELOPERS)
  • - -
  • -Added log4j facility and removed all sys.out type logging(POI-DEVELOPERS)
  • - -
  • -Added support for adding font's, styles and corresponding - high level api for styling cells(POI-DEVELOPERS)
  • - -
  • -added support for changing row height, cell width and default - row height/cell width.(POI-DEVELOPERS)
  • - -
  • -Added fixes for internationalization (UTF-16 should work now - from HSSFCell.setStringValue, etc when the encoding is set)(POI-DEVELOPERS)
  • - -
  • -added support for adding/removing and naming sheets.(POI-DEVELOPERS)
  • - -
    -
    -
    -
    -
    - - - - - - - -
    0.11.0 (???)
    -
    - - -
  • -Bugfix release. We were throwing an exception when reading - RKRecord objects.(POI-DEVELOPERS)
  • - -
    -
    -
    -
    -
    - - - - - - - -
    0.10.0 (???)
    -
    - - -
  • -Got continuation records to work (read/write)(POI-DEVELOPERS)
  • - -
  • -Added various pre-support for formulas(POI-DEVELOPERS)
  • - -
  • -Massive API reorganization, repackaging.(POI-DEVELOPERS)
  • - -
  • -BiffViewer class added for validating HSSF & POI and/or - HSSF Output.(POI-DEVELOPERS)
  • - -
  • -Better API support for modification.(POI-DEVELOPERS)
  • - -
    -
    -
    -
    -
    - - - - - - - -
    0.7 (and interim releases) (???)
    -
    - - -
  • -Added encoding flag to high and low level api to use utf-16 - when needed (HSSFCell.setEncoding())(POI-DEVELOPERS)
  • - -
  • -added read only support for Label records (which are - reinterpreted as LabelSST when written)(POI-DEVELOPERS)
  • - -
  • -Broken continuation record implementation (oops)(POI-DEVELOPERS)
  • - -
  • -BiffViewer class added for validating HSSF & POI and/or - HSSF Output.(POI-DEVELOPERS)
  • - -
    -
    -
    -
    -
    - - - - - - - -
    0.6 (release) (???)
    -
    - - -
  • -Support for read/write and modify.(POI-DEVELOPERS)
  • - -
  • -Read only support for MulRK records (converted to Number when - writing) - (POI-DEVELOPERS)
  • - -
    -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/contrib.html b/build/jakarta-poi/docs/contrib.html deleted file mode 100644 index a71f5ddc75..0000000000 --- a/build/jakarta-poi/docs/contrib.html +++ /dev/null @@ -1,532 +0,0 @@ - - - - -Contribution to POI - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -About -
    -Index -
    -History -
    -Future -
    -Download -
    -1.0 Vision -
    -2.0 Vision -
    -Who we are -
    -Changes -
    -FAQ -
    -
    -Sub-Projects -
    -Overview -
    -POIFS -
    -HSSF -
    -HDF -
    -HPSF -
    -POI-Utils -
    -
    -References -
    -In The News -
    -Live Sites -
    -XLS spec [PDF] -
    -Apache Cocoon -
    -Resolutions -
    -
    -Get Involved -
    -Contributing -
    -Bug Database -
    -CVS -
    -Mail Lists -
    -
    -
    -
    -Contribution to POI - - - - - - -
    - - - - - - -
    - - - - - - -
    Contribution to POI
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Introduction
    -
    - - -

    - The POI Project is an Open Source - volunteer project released under a very open license. - This means there are many ways to contribute to the project - either - with direct participation (coding, documenting, answering questions, - proposing ideas, reporting bugs, suggesting bug fixes, etc. ...) or by resource - donations (money, time, publicity, hardware, software, conference - presentations, speeches, etc. ...). -

    - -

    - To begin with, we suggest you subscribe to the - POI mailing lists - (follow the link for information on how to subscribe and to access the mail - list archives). Listen in for a while, to hear how others make contributions. -

    - - -

    You can get your local working copy of the - latest and - greatest code (which you find in the jakarta-poi module in - the CVS code repository. Review the todo list and choose a task - (or perhaps you have noticed something that needs patching). Make the changes, do the testing, - generate a patch, and post to the dev mailing list. (Do not worry - the process is easy and - explained below.) -

    - - -

    - Document writers are usually the most wanted people so if - you like to help but you're not familiar with the innermost technical details, don't worry: - we have work for you! And we'll be very available to you for any questions! -

    - - -
    -
    -
    -
    - - - - - - - -
    Help Wanted Here
    -
    - -

    - The rest of this document is mainly about - contributing new or improved code and/or documentation, but we would also be glad to have - extra help in any of the following areas: -

    - -
      - -
    • Answering questions on the users mailing list - there is often a problem of - having too many questioners and not enough experts to respond to all the questions.
    • - -
    • Testing POI (especially its less-frequently-used features) on various configurations - and reporting back.
    • - -
    • Debugging - producing reproducible test cases and/or finding causes of bugs. Some known bugs are informally listed on - To Do, and some are recorded in Bugzilla - (see explanation below).
    • - -
    • Specifying/analyzing/designing new features - and beyond. (If you wish to get involved - with this, please join the general POI mailing list - , install and try out POI - and read some of the mail archives. - You should have a strong "fluency" in Java and a basic understanding of - the POI architecture - don't just say "it should have XYZ" without reading anything first - - because chances are, someone's already thought of that feature!)
    • - -
    • Packaging easy-to-install packages (such as RPMs) for the myriad of possible configurations out - there. (The project does not maintain anything but the basic .zip and - .tar.gz packages, but anyone is welcome to build their own specific packages and - announce them on the general POI list)
    • - -
    • ... and there is just one other thing - don't forget to tell everyone who asks, how great POI is! ;-) - The more people that know about and start to use POI, the larger the pool of - potential contributors there will be. -
    • - -
    - - -
    -
    -
    -
    - - - - - - - -
    CVS Usage Precis
    -
    - -

    An overview of how to use CVS to participate in POI development. - Do not be afraid - you cannot accidently destroy the actual code repository, - because you are working with a local copy as an anonymous user. - You do not have the system permissions to change anything. You can only - update your local repository and compare your revisions with the real - repository. -

    - - -

    - (Further general CVS usage information is at - www.cvshome.org and your local - info cvs pages or man cvs pages or user - documentation.) -

    - - -

    - Let us lead by example. We will show you how to establish your local - repository, how to keep it up-to-date, and how to generate the differences - to create a patch. (The commands are for Linux.) -

    - -
    -
    -
    -
    - - - - - - - -
    CVS Committer with Secure Shell access
    -
    - -

    After a developer has consistently provided contributions (code, - documentation and discussion), then the rest of the dev community - may vote to grant this developer commit access to CVS. -

    - - -

    You will need secure access to the repository to be able to commit - patches. Here are some resources that help to get your machine configured - to use the repository over SSH. -

    - - -
      - -
    • -The CVS Book -
    • - -
    • -www.cvshome.org -
    • - -
    • - - - See the bottom of the page for links to tips for UNIX and Windows. - Even if you are on UNIX, the Windows page will also help.
    • - -
    - -
    -
    -
    -
    - - - - - - - -
    Procedure for Raising Development Issues
    -
    - -

    - There are two methods for discussing development and submitting patches. - So that everyone can be productive, it is important to know which method - is appropriate for a certain situation and how to go about it without - confusion. This section explains when to use the - developer mailing list - and the bug database. -

    - - -

    - Research your topic thoroughly before beginning to discuss a new - development issue. Search and browse through the email archives - your - issue may have been discussed before. Prepare your post clearly and - concisely. -

    - - -

    - Most issues will be discovered, resolved, and then patched quickly - via the developer mailing list. Larger issues, and ones that - are not yet fully understood or are hard to solve, are destined for - Bugzilla. -

    - - -

    - Experienced developers use Bugzilla directly, as they are very sure - when they have found a bug and when not. However, less experienced users - should first discuss it on the user or developer mailing list (as - appropriate). Impatient people frequently enter everything into Bugzilla - without caring if it is a bug in POI or their own - installation/configuration mistake - please, do not do this. -

    - - -

    - As a rule-of-thumb, discuss an issue on the developers - mailing list first to work out any details. - After it is confirmed to be worthwhile, and you are clear about it, - then submit the bug description or patch via Bug Tracking. -

    - - -

    - If you do not get any answer on your first attempt, post - your issue again until you get a reply. (But, please, not every hour - allow a few - days for the list to deal with it.) Do not be impatient - remember that - the whole world is busy, not just you. Bear in mind that other countries - will have holidays at different times to your country and that they are - in different time zones. You might also consider re-writing your initial - posting - perhaps it was not clear enough - and the readers' eyes glazed over. -

    - -
    -
    -
    -
    - - - - - - - -
    Contribution Notes and Tips
    -
    - -

    - This is a collection of tips for contributing to the project in a manner - that is productive for all parties. -

    - - -
      - -
    • - Every contribution is worthwhile. Even if the ensuing discussion - proves it to be off-beam, then it may jog ideas for other people. -
    • - -
    • - Use sensible and concise email subject headings. Search engines, and - humans trying to browse a voluminous list, will respond favorably to a - descriptive title. -
    • - -
    • Start new threads with new Subjects for new topics, rather than - re-using the previous Subject line. -
    • - -
    • Keep each topic focussed. If some new topic arises, start a new - discussion. This leaves the original topic to continue un-cluttered. -
    • - -
    • Whenever you decide to start a new topic, then start with a fresh - new email message window. Do not use the "Reply to" button, - because threaded mail-readers get confused (they use the - In-reply-to header). Otherwise, your new topic will get - lost in the previous thread and go un-answered. -
    • - -
    • - Prepend your email subject line with a marker when that is appropriate, - e.g. [Patch], [Proposal], - [RT] (Random Thought, these quickly blossom into research - topics :-), [STATUS] (development status of a certain - feature). -
    • - -
    • - When making changes to XML documentation, or any XML document for that - matter, use a - validating parser - (one that is tried and true is - SP/nsgmls). - This procedure will detect errors without having to go through the whole - build docs process to find them. Do not expect POI - or the build system to detect the validation errors for you - they can - do it, but that is not their purpose. (Anyway, nsgmls validation error - messages are more informative.). Andy wishes it to be known he uses - jEdit. For - his XML editing. (That is when he's not hacking it in 'vi' the true editor - and light of the text editing world!). -
    • - -
    • - Remember that most people are participating in development on a - volunteer basis and in their "spare time". These enthusiasts will attempt - to respond to issues. It may take a little while to get your answers. -
    • - -
    • - Research your topic thoroughly before beginning to discuss a new - development issue. Search and browse through the email archives - your - issue may have been discussed before. Do not just perceive a problem and - then rush out with a question - instead, delve. -
    • - -
    • - Try to at least offer a partial solution and not just a problem statement. -
    • - -
    • - Take the time to clearly explain your issue and write a concise email - message. Less confusion facilitates fast and complete resolution. -
    • - -
    • - Do not bother to send an email reply that simply says "thanks". - When the issue is resolved, that is the finish - end of thread. - Reduce clutter. -
    • - -
    • - You would usually do any development work against the HEAD branch of CVS. -
    • - -
    • - When sending a patch, you usually do not need to worry about which CVS - branch it should be applied to. The maintainers of the repository will - decide. -
    • - -
    • - If an issue starts to get bogged down in list discussion, then it may - be appropriate to go into private off-list discussion with a few interested - other people. Spare the list from the gory details. Report a summary back - to the list to finalize the thread. -
    • - -
    • - Become familiar with the mailing lists. As you browse and search, you will - see the way other people do things. Follow the leading examples. -
    • - -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/faq.html b/build/jakarta-poi/docs/faq.html deleted file mode 100644 index 5a45e2d2a0..0000000000 --- a/build/jakarta-poi/docs/faq.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - -Frequently Asked Questions - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -About -
    -Index -
    -History -
    -Future -
    -Download -
    -1.0 Vision -
    -2.0 Vision -
    -Who we are -
    -Changes -
    -FAQ -
    -
    -Sub-Projects -
    -Overview -
    -POIFS -
    -HSSF -
    -HDF -
    -HPSF -
    -POI-Utils -
    -
    -References -
    -In The News -
    -Live Sites -
    -XLS spec [PDF] -
    -Apache Cocoon -
    -Resolutions -
    -
    -Get Involved -
    -Contributing -
    -Bug Database -
    -CVS -
    -Mail Lists -
    -
    -
    -
    -Frequently Asked Questions - - - - - - -
    - - - - - - -
    - - - - - - -
    Frequently Asked Questions
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Questions
    -
    -
      -
    • - - What is the HSSF "eventmodel"? - -
    • -
    • - - Why can't read the document I created using Star Office 5.1? - -
    • -
    -
    -
    -
    -
    - - - - - - - -
    Answers
    -
    - -
    - - - - - - - -
    - What is the HSSF "eventmodel"? -
    -
    - - - -

    - The HSSF eventmodel package is a new API for reading XLS files more efficiently. It does - require more knowledge on the part of the user, but reduces memory consumption by more than - tenfold. It is based on the AWT event model in combination with SAX. If you need read-only - access to a given XLS file, this is the best way to do it. -

    - - - -
    -
    -
    - -
    - - - - - - - -
    - Why can't read the document I created using Star Office 5.1? -
    -
    - - - -

    - Star Office 5.1 writes some records using the older BIFF standard. This causes some problems - with POI which supports only BIFF8. -

    - - - -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/hdf/images/built-with-cocoon.gif b/build/jakarta-poi/docs/hdf/images/built-with-cocoon.gif deleted file mode 100644 index 0b38f7857b6e621a964664dec8f6e12f07ff71de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2252 zcmWlYk6X+80>`&c?Q6*Ty|ly1Vlr)YCcFJ$W@+ZDmL@wHr<=uO+^J!wGfd~JhObO5 zEhbab8SO9`O;5+usnKFLlghY55+}}X9E9uF;X3a>;QhRw_w#x$UcyUCUXzQ7!aTuX z2t<;#%>fMUKy3y}6Oid4wN;`-NenKHK@$jsQngO3Kv9Fm;p!ucRDh=@vjid;Vzb#s zd_Ex5(0CGoRINk}gM))y9?xoTrwA25q9c+iK;N#@>wwO#QmIfBC5cpSw_9(v@kA1q zP@a;K5<+3v+MGaPqzdGH-a(~C55%b1)-DiBsVOi(ZA3AmRH{NKOjx1#Zb zu6TmdNTe_(NDV|<3Yp21sw&xBZlA{sL?{E60F{|YA`?i|wzjquk%BFhxLhuvvH+!- z#*+fMQD?O3^?FEAPo>dDMn;TgtJCQOYO7FM>ht*^>0ugoHGtKWlpL4at56|>!y}NW zQlT+GsEtHr0GSaeOnC}ag&G+=sn%!}$u&F}Cgzn{tyZJSM53`sd1a6oZFjgl-r*GC zCY45Kx7$gy6pzOPsmzev7(%8wU44Q)IV_ezN)sf|KzTZc)5R7ke7@(9+(2OoAc>wO zkaNXK3X>;O>xYMj313wZDz$n86P6L=1_fdO8as_Efy6o@g{je-P1Z{ehXeXbn5VPa z9YCN7AriF)3sHiSs7#?qOrbFqh|c3392xNewFSrw5~Y^J-~q%&W^h$n6Zm^oHkkHnf!<#&$X(w!Dv#=ym$&HKd33ak<_(uPu2m}j)4msQWtZw3IFID zn0tTwkf$N7lhBpiaTP>Qyc~F?p`s=@=kW#$ZN0nY<@9~@D{sFkAiSaUH}XH9adw~0 ztlj?PZpY9`O?nJ~M#nd=`s424&Q-_f7;|LDi=8*7b!8WK|0^gnYn*>Lrn%R@wu1-M~UshE9KC#uP3O$Deg%>$bz3LW0DboKUC;jQh^` zD6f2XP&0nsQcIybS_03g+!g=fyM9hmDR>e`#1~wjo^)kRXOez(f}8#MB(c$gi(fn9 zJ9@h-yKY8&!0YSDpZpz}^Uoi9R2b99hdXq&G>IF-P7qdKh-W9BSq_DFH{n)IO?<|g z5_y5XaO$nz^qK?4(1Rtqwp#(?=!s(;ejg95>@R(wR>fBwHT;LZ@V;Qn*s<62Ip8j}+nKD;YH z7mPL+ObE&Uh`oucFFbI?^Eq}mXsF;11%`Zo^i|8f0L~%T?a|V|-h2jQqg{Bv%^zc0 zZ$It1Ty-}urn6=EW~Fb|qK`?6ebYj7V4m>AXb>sa~Njm-)y zZhYLAOR4tO^8`}pP%#Ipx>qzm>c$vWo0?t9)kL;&{&aubx%OcNj=xOeob)^)t39=A zG{niC9n=}&`ro`&(L+%ill&@R>|QQEJwN>}8g*ycfxY~76UQn$=x8q{E}(P6^t5VR zF9wOPA5Xb)2Z^?qmTwJuh~JrjW0Gy>hD-eL!FM!xR`!(2_fIB$u5Csh#C34ObFOdx zW;w(P$~O=9I>MXo)X!~xLD=-nxuCFQQTVrSD+H|)6d#RDb|(;uOHZ#lg#iFm9*o@~ zE0~KlkqyI9jMb)yI@Dk;D(e0znI8IWepdusg{3EDN;mnXK@~&ij^Q2Hm}VU0X|`vE z`Qz%|EsVNzHO)LfD6+Q1vD4pHzO;4dP-zi1TKET&TlX-mupW~v_z_lMD1ICH9DhOZ zZbh%I=JX{e+p;W$lk~8*G#6sMF4C+Y?U?vm&Wz|w`FPBtX_y6jxh)VSU`bE0_#t;u zQrOp)L;ZCVdOIQ-ZT?$z=j$vlFrhcg_WocBJ;t@?4<`zu$NlhjxgRE0vrEuWw%s@u zh$-n#eEqU)PHF#!v8UzaPtL@{%eWO^yh{r2ZePo82z} diff --git a/build/jakarta-poi/docs/hdf/images/cocoon2-small.jpg b/build/jakarta-poi/docs/hdf/images/cocoon2-small.jpg deleted file mode 100644 index e8f6dd8c8c0e17f7d97b7265f637000ed61d703a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmb7AdpOez82)Wzmu#{%wPMVKijo;glS{;Op)xH>VU*FZIthD3>zP zDwk3-ks3>4IFw6H%e5uBw4>A0bIxM00SUu>QM09%ti|UgTWv$7!H9# zA>UU(;JF#v0KhEJh7v6tx6v}2v4;LI_(GD?v86^1;T@l&-fyYHNBSsJxS6PM4WjhWFWa3YVC+4q zNoXBAQa7tN$Jj61FsZh`^xjIB12tO&r__#1;v~1lU6k)cGa?G-wWg?Uej_HJsn9^l|ZyEbtLzX z55}4=`KHJ7({d!%&~mK{&RK#(r#f$%F?8$%>=f1%{AeKOtzMh+SZy2gINNb9o~Yy;f~ZUey?Ta822a)vH!Z z{)zF4bPeD7ohWaNTg2Mt(d-^hM|X)@I1lgBRh}viyv<;F_=vSb>n&YT+%qZ6b3Nz% zhbK87WsIQuP3ped0cUN}9$8noQ3HM-Rn!&ObwPwOK7z8VTReoHEtbqq&DuVZE0c_N zOw{gx;LnluvfZ0S>sYcQZ}yg_i{IU0gtgxy(?Y2hZXZfB-eS;(>G@O~DmR2iIGSH*{*J<)zOX(|fBJKR^2?%> zyBFsNoC)z2#mbzD_!G7bQ40D*Ci@4F%Enp-;-f$3 zMX(xcTEz}rs^!C!fiI?@*@p|h{yfi|D2^%k5i+Q>gi+K~jJk;Sn%Nv77aHB1&UAj_ zO!Mp<$^?6quoJ5F5)6_P43CB!e0^zC82#8IG-6Z*7#P}B>~j@9>WgZA`*n|~yC^)civFQS7LLDs^03R#Acsq5FTb-W55H$}=j<)y6FY=qA}ww* K45idpwf_kby7q4X diff --git a/build/jakarta-poi/docs/hdf/images/header.gif b/build/jakarta-poi/docs/hdf/images/header.gif deleted file mode 100644 index b9c2ee13910846fc549adb17e9c4466f407daeea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3165 zcmZvb`#Teg4fk0DwRsBog@>4Myg{ zDIyeAg5}iE+S}U)-}MrSL>L}CJ~Kq(!uWhXlms?4HMJ&z84LzXLL{&eFp?!l!k$_j z$FZ=BEAwzFELD_@e;cz?{MuEbKP^O4LW0NAeWTBKn zqzcoYK(rGSYXB$a<`baDts z$B>vlSSpMvLXo*}6vbMukYB5$l7$#+G8jvP;plKY1CAnD6IghuR7&O}t%+b>B^^Vt zMi8MSE}SW1h->&58j{94&XH0lXU3^w42ldTatXo)7Lo|Xvk(|63_$>sm{^JsBW)-n zvXSfSs}w$R^wT>s+n2~iuB@+6#aLktlfc1KMOY6yiY!DCSO^3jOy;3*Oe}^1Lz194 z1{_OWyW~f3GyDW-X zNt7*4;ps>O$(qPSkr@OG**2|`Mr9M3A_|p{qwy&;Apt>v(!^K_&jCrW;#YDB3{+PA zWilVdmXL-<`?+E!RfKUR!I4C30vm~?B5*VWoloLP*bE^KMusNvXml=_%)wqRJE2f0 zBu!kp7?&=kt*k7QIGA<$I-c>b7=y|pl2|yZ@ZTCJEX58-gOAOOGQ|WkAM;uEks&6| z$fgqbQ3NImLr0RiSQOcs$U@C5P6_LOPc91^myOamC*MsD@uc+0$w}FwjKass<#G~- zNa5h=Wq7uf$}3}WYc7cDSwsdFMuhs%5hxOjCdQ|W**F@C!KdJ5Hh3Z8Zgxia40o>| zqDKRHDPcf;7-5zQ+utr)P`g7Nj>e-C3=7d#t^qI)CF>~hp z{9B(N8K0WjYlt7hgm1U*xz6AuJ>Ps%RNRcB#(Sd1eXGK6I`P9nz?dD zYV~Yrew*l|ZcSIKfuoRDi^^fkXR~~tHGWHltt(FUJ%6@3J5cU(XZ+}^WX6cy*<*bz zo9Oo8Rz=1E+n*~y<>{WpwLXcnpl3T4)_*}iad`bl#^GDrw*O2ju}v2H(Y>mC4TDAS~HLq=3XgY7omLstNLT#hnRPPk59$uQyV9E2tUWbwA}!0 zK)6l?5$xWb(`W!HteuPSgQ4=gvj80lNfoX6(k^C>hvrB;P_MDaB&NkI#ko7^&mVFyB?j$ zI~E9nhw7IaY7ew%#(mh6{|jT(u&^iAJyJ@wv};=GdKAe$B-VO6gb8P1lcK zU78l-HXf$F>CKs}X;lP%X-#drvKryyAMo9D1J}aeG3%r)ulL_I_@N{|@5)PP*3z?$ zrTezWmi+1^y;~zW&rTl#tK;YT=_+o813nop|<4+Z%MVYgFI{| z0B|cWZ@b6dFs}Y&2TJ=hqa?sW`K%WddGmSfpa5do)~O!Rfd(infQqNlr5@x0oxKQ1 zN~ck$s;98EXg-#6>~Zdn-h6bLwvGk%Y=`uoN*XTcb}J1FG& z&5ujCBYC5m9z$&(66c)%=2>`by?ON;CzPec8Jn?fWe0bAC z`=_Jp!TLa+X0j1r*ZbGD@Qc?oQ^ucmHRiNx&L7awojl;Y(V>KZWSA%4_1qKsB0$oA z0x)1PO*&x?#M)#(_*jHFYuMvAq?3ukE`%^J-dV-N;!HY$eij@cAypGO82nUzla zO71-lH~9p7m#MbrYIRq<^nPJr#e26c!$FMcYN6wwH`>p?cj-;GDb*VMFlS(NZ}SgA z^e0~{S3}I8PZOiaphX?2X6CDE`u_(vtGEr$Xx%eDLBg!h4d)_x+fKvPtXe;Mb6f4Ik)@>5AK_;r=1 z4o@eiE2H>*-kitZ>3a3xshiVL0FoZB?XkStB`!GP>v>Yn6OH&Xrmjiave>Jx590J~ zYStBWzw@GDgHKeGAb3f3{P)Yd|7bq@)eGnFmaq03wBVdV2A@75oPHVnnBlPyx>WHt z+z~kf>|J`t%D0mZnvQaTpUu3wbmDyN7L!i zF@iZ>X44g8sb`1}rn?JbD3sSw(ctk
  • !@Q>Q2Y$Z-3o3-aRJ4%@`Q!oPCI9iRcZ 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 - - - -HDF - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -
    -
    -HDF - - - - - - -
    - - - - - - -
    - - - - - - -
    HDF
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Overview
    -
    - - -

    HDF will be the name of OUR port of the Microsoft Word 97(-2002) file format to - pure Java.

    - -

    HDF is still in early development. If you want to help us, you can - follow development on the poi-dev mailing list.

    - - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/historyandfuture.html b/build/jakarta-poi/docs/historyandfuture.html deleted file mode 100644 index fca0fe3d27..0000000000 --- a/build/jakarta-poi/docs/historyandfuture.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -About -
    -Index -
    -History -
    -Future -
    -Download -
    -1.0 Vision -
    -2.0 Vision -
    -Who we are -
    -Changes -
    -FAQ -
    -
    -Sub-Projects -
    -Overview -
    -POIFS -
    -HSSF -
    -HDF -
    -HPSF -
    -POI-Utils -
    -
    -References -
    -In The News -
    -Live Sites -
    -XLS spec [PDF] -
    -Apache Cocoon -
    -Resolutions -
    -
    -Get Involved -
    -Contributing -
    -Bug Database -
    -CVS -
    -Mail Lists -
    -
    -
    -
    -

    - -

    -
    -
    - - - - - - - -
    Brief Project History
    -
    - - -

    The POI project was dreamed up back around April 2001, when - Andy Oliver landed a short term contract to do Java-based - reporting to Excel. He'd done this project a few times before - and knew right where to look for the tools he needed. - Ironically, the API he used to use had skyrocketed from around - $300 ($US) to around $10K ($US). He figured it would take two - people around six months to write an Excel port so he - recommended the client fork out the $10K. -

    - - -

    Around June 2001, Andy started thinking how great it would - be to have an open source Java tool to do this and, while he - had some spare time, he started on the project and learned - about OLE 2 Compound Document Format. After hitting some real - stumpers he realized he'd need help. He posted a message to - his local Java User's Group (JUG) and asked if anyone else - would be interested. He lucked out and the most talented Java - programmer he'd ever met, Marc Johnson, joined the project. He - ran rings around Andy at porting OLE 2 CDF and rewrote his - skeletal code into a more sophisticated library. It took Marc - a few iterations to get something they were happy with. -

    - - -

    While Marc worked on that, Andy ported XLS to Java, based - on Marc's library. Several users wrote in asking to read XLS - (not just write as had originally been planned) and one user - had special requests for a different use for POIFS. Before - long, the project scope had tripled. POI 1.0 was released a - month later than planned, but with far more features. Marc - quickly wrote the serializer framework and HSSF Serializer in - record time and Andy banged out more documentation and worked - on making people aware of the project -

    - - -

    Shortly before the release, POI was fortunate to come into - contact with Nicola -Ken- Barrozzi who gave them samples for - the HSSF Serializer and help uncover its unfortunate bugs - (which were promptly fixed). More recently, Ken ported most - of the POI project documentation to XML from Andy's crappy - HTML docs he wrote with Star Office. -

    - - -

    Around the same time as the release, Glen Stampoultzis -joined the project. Glen was ticked off at Andy's flippant attitude -towards adding graphing to HSSF. Glen got so ticked off he decided to -grab a hammer and do it himself. Glen has already become an integral -part of the POI development community; his contributions to HSSF have -already started making waves. -

    - - -

    Somewhere in there we decided to finally submit the project - to The Apache - Cocoon Project, only to discover the project had - outgrown fitting nicely into just Cocoon long ago. - Furthermore, Andy started eyeing other projects he'd like to - see POI functionality added to. So it was decided to donate - the Serializers and Generators to Cocoon, other POI - integration components to other projects, and the POI APIs - would become part of Jakarta. It was a bumpy road but it - looks like everything turned out since you're reading this! -

    - - -
    -
    -
    -
    - - - - - - - -
    What's next for POI
    -
    - -

    First we'll tackle this from a project standpoint: Well, we - made an offer to Microsoft and Actuate (tongue in cheek - ... well mostly) that we'd quit the project and retire if - they'd simply write us each a really large check. I've yet to - get a phone call or email so I'm assuming they're not going to - pay us to go away. -

    - -

    Next, we've got some work to do here at Jakarta to finish - integrating POI into the community. Furthermore, we're - still transitioning the Serializer to Cocoon. -

    - -

    HSSF, during the 2.0 cycle, will undergo a few - optimizations. We'll also be adding new features like a full - implementation of Formulas and custom text formats. We're - hoping to be able to generate smaller files by adding - write-support for RK, MulRK and MulBlank records. I'm also - going to work on a Cocoon 2 Generator. Currently, reading is - not very efficient in HSSF. This is mainly because in order to - write or modify, one needs to be able to update upstream - pointers to downstream data. To do this you have to have - everything between in memory. A Generator would allow SAX - events to be processed instead. (This will be based on the low - level structures). One of the great things about this is that, - you'll not only have a more efficient way to read the file, - you'll have a great way to use spreadsheets as XML data - sources. -

    - -

    The HSSF Serializer, will further separate into a general - framework for creating serializers for other formats and the - HSSF Serializer specific implementation. (This is largely - already true). We'll also be adding support for features - already supported by HSSF (styles, fonts, text formats). We're - hoping to add support for formulas during this cycle. -

    - -

    We're beginning to expand our scope yet again. If we could - do all of this for XLS files, what about Doc files or PPT - files? We're thinking that our next component (HDF - Horrible - Document Format) should follow the same pattern. We're hoping - that new blood will join the team and allow us to tackle this - even faster (in part because POIFS is already finished). But - maybe what we need most is you!

    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/hpsf/how-to.html b/build/jakarta-poi/docs/hpsf/how-to.html deleted file mode 100644 index 12655dd39a..0000000000 --- a/build/jakarta-poi/docs/hpsf/how-to.html +++ /dev/null @@ -1,622 +0,0 @@ - - - - -HPSF HOW-TO - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -HPSF -
    -Overview -
    -How To -
    -Internals -
    -To Do -
    -
    -
    -
    -HPSF HOW-TO - - - - - - -
    - - - - - - -
    - - - - - - -
    HPSF HOW-TO
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    How To Use the HPSF APIs
    -
    - - -

    This HOW-TO is organized in three section. You should read them - sequentially because the later sections build upon the earlier ones.

    - - -
      - -
    1. - -

      The first section explains how to read - the most important standard properties of a Microsoft Office - document. Standard properties are things like title, author, creation - date etc. It is quite likely that you will find here what you need and - don't have to read the other sections.

      - -
    2. - - -
    3. - -

      The second section goes a small step - further and focusses on reading additional standard properties. It also - talks about exceptions that may be thrown when dealing with HPSF and - shows how you can read properties of embedded objects.

      - -
    4. - - -
    5. - -

      The third section tells how to read - non-standard properties. Non-standard properties are application-specific - name/value/type triples.

      - -
    6. - -
    - - - - -
    - - - - - - - -
    Reading Standard Properties
    -
    - - -This section explains how to read - the most important standard properties of a Microsoft Office - document. Standard properties are things like title, author, creation - date etc. Chances are that you will find here what you need and - don't have to read the other sections. - - -

    The first thing you should understand is that properties are stored in - separate documents inside the POI filesystem. (If you don't know what a - POI filesystem is, read its documentation.) A document in a POI - filesystem is also called a stream.

    - - -

    The following example shows how to read a POI filesystem's - "title" property. Reading other properties is similar. Consider the API - documentation of org.apache.poi.hpsf.SummaryInformation.

    - - -

    The standard properties this section focusses on can be - found in a document called \005SummaryInformation in the root of - the POI filesystem. The notation \005 in the document's name - means the character with the decimal value of 5. In order to read the - title, an application has to perform the following steps:

    - - -
      - -
    1. - -

      Open the document \005SummaryInformation located in the root - of the POI filesystem.

      - -
    2. - -
    3. - -

      Create an instance of the class - SummaryInformation from that - document.

      - -
    4. - -
    5. - -

      Call the SummaryInformation instance's - getTitle() method.

      - -
    6. - -
    - - -

    Sounds easy, doesn't it? Here are the steps in detail.

    - - - -
    - - - - - - - -
    Open the document \005SummaryInformation in the root of the POI filesystem
    -
    - - -

    An application that wants to open a document in a POI filesystem - (POIFS) proceeds as shown by the following code fragment. (The full - source code of the sample application is available in the - examples section of the POI source tree as - ReadTitle.java.)

    - - -
    - - - - -
    -
    -import java.io.*;
    -import org.apache.poi.hpsf.*;
    -import org.apache.poi.poifs.eventfilesystem.*;
    -
    -// ...
    -
    -public static void main(String[] args)
    -    throws IOException
    -{
    -    final String filename = args[0];
    -    POIFSReader r = new POIFSReader();
    -    r.registerListener(new MyPOIFSReaderListener(),
    -                       "\005SummaryInformation");
    -    r.read(new FileInputStream(filename));
    -}
    -
    -
    - - -

    The first interesting statement is

    - - -
    - - - - -
    -
    POIFSReader r = new POIFSReader();
    -
    -
    - - -

    It creates a - org.apache.poi.poifs.eventfilesystem.POIFSReader instance - which we shall need to read the POI filesystem. Before the application - actually opens the POI filesystem we have to tell the - POIFSReader which documents we are interested in. In this - case the application should do something with the document - \005SummaryInformation.

    - - -
    - - - - -
    -
    -r.registerListener(new MyPOIFSReaderListener(),
    -                   "\005SummaryInformation");
    -
    -
    - - -

    This method call registers a - org.apache.poi.poifs.eventfilesystem.POIFSReaderListener - with the POIFSReader. The POIFSReaderListener - interface specifies the method processPOIFSReaderEvent - which processes a document. The class - MyPOIFSReaderListener implements the - POIFSReaderListener and thus the - processPOIFSReaderEvent method. The eventing POI filesystem - calls this method when it finds the \005SummaryInformation - document. In the sample application MyPOIFSReaderListener is - a static class in the ReadTitle.java source file.)

    - - -

    Now everything is prepared and reading the POI filesystem can - start:

    - - -
    - - - - -
    -
    r.read(new FileInputStream(filename));
    -
    -
    - - -

    The following source code fragment shows the - MyPOIFSReaderListener class and how it retrieves the - title.

    - - -
    - - - - -
    -
    -static class MyPOIFSReaderListener implements POIFSReaderListener
    -{
    -    public void processPOIFSReaderEvent(POIFSReaderEvent e)
    -    {
    -        SummaryInformation si = null;
    -        try
    -        {
    -            si = (SummaryInformation)
    -                 PropertySetFactory.create(e.getStream());
    -        }
    -        catch (Exception ex)
    -        {
    -            throw new RuntimeException
    -                ("Property set stream \"" +
    -                 event.getPath() + event.getName() + "\": " + ex);
    -        }
    -        final String title = si.getTitle();
    -        if (title != null)
    -            System.out.println("Title: \"" + title + "\"");
    -        else
    -            System.out.println("Document has no title.");
    -    }
    -}
    -
    -
    -
    - - -

    The line

    - - -
    - - - - -
    -
    SummaryInformation si = null;
    -
    -
    - - -

    declares a SummaryInformation variable and initializes it - with null. We need an instance of this class to access the - title. The instance is created in a try block:

    - - -
    - - - - -
    -
    si = (SummaryInformation)
    -                 PropertySetFactory.create(e.getStream());
    -
    -
    - - -

    The expression e.getStream() returns the input stream - containing the bytes of the property set stream named - \005SummaryInformation. This stream is passed into the - create method of the factory class - org.apache.poi.hpsf.PropertySetFactory which returns - a org.apache.poi.hpsf.PropertySet instance. It is more or - less safe to cast this result to SummaryInformation, a - convenience class with methods like getTitle(), - getAuthor() etc.

    - - -

    The PropertySetFactory.create method may throw all sorts - of exceptions. We'll deal with them in the next sections. For now we just - catch all exceptions and throw a RuntimeException - containing the message text of the origin exception.

    - - -

    If all goes well, the sample application retrieves the title and prints - it to the standard output. As you can see you must be prepared for the - case that the POI filesystem does not have a title.

    - - -
    - - - - -
    -
    final String title = si.getTitle();
    -    if (title != null)
    -        System.out.println("Title: \"" + title + "\"");
    -    else
    -        System.out.println("Document has no title.");
    -
    -
    - - -

    Please note that a Microsoft Office document does not necessarily - contain the \005SummaryInformation stream. The documents created - by the Microsoft Office suite have one, as far as I know. However, an - Excel spreadsheet exported from StarOffice 5.2 won't have a - \005SummaryInformation stream. In this case the applications - won't throw an exception but simply does not call the - processPOIFSReaderEvent method. You have been warned!

    - -
    -
    -
    - -
    -
    -
    - - - - -
    - - - - - - - -
    Additional Standard Properties, Exceptions And Embedded Objects
    -
    - - -This section focusses on reading additional standard properties. It - also talks about exceptions that may be thrown when dealing with HPSF and - shows how you can read properties of embedded objects. - - -

    A couple of additional standard properties are not - contained in the \005SummaryInformation stream explained above, - for example a document's category or the number of multimedia clips in a - PowerPoint presentation. Microsoft has invented an additional stream named - \005DocumentSummaryInformation to hold these properties. With two - minor exceptions you can proceed exactly as described above to read the - properties stored in \005DocumentSummaryInformation:

    - - -
      - -
    • -

      Instead of \005SummaryInformation use - \005DocumentSummaryInformation as the stream's name.

      -
    • - -
    • -

      Replace all occurrences of the class - SummaryInformation by - DocumentSummaryInformation.

      -
    • - -
    - - -

    And of course you cannot call getTitle() because - DocumentSummaryInformation has different query methods. See - the API documentation for the details!

    - - -

    In the previous section the application simply caught all - exceptions and was in no way interested in any - details. However, a real application will likely want to know what went - wrong and act appropriately. Besides any IO exceptions there are three - HPSF resp. POI specific exceptions you should know about:

    - - -
    - -
    -NoPropertySetStreamException:
    - -
    -

    This exception is thrown if the application tries to create a - PropertySet or one of its subclasses - SummaryInformation and - DocumentSummaryInformation from a stream that is not a - property set stream. A faulty property set stream counts as not being a - property set stream at all. An application should be prepared to deal - with this case even if opens streams named - \005SummaryInformation or - \005DocumentSummaryInformation only. These are just names. A - stream's name by itself does not ensure that the stream contains the - expected contents and that this contents is correct.

    -
    - - -
    -UnexpectedPropertySetTypeException -
    - -
    -

    This exception is thrown if a certain type of property set is - expected somewhere (e.g. a SummaryInformation or - DocumentSummaryInformation) but the provided property - set is not of that type.

    -
    - - -
    -MarkUnsupportedException -
    - -
    -

    This exception is thrown if an input stream that is to be parsed - into a property set does not support the - InputStream.mark(int) operation. The POI filesystem uses - the DocumentInputStream class which does support this - operation, so you are safe here. However, if you read a property set - stream from another kind of input stream things may be - different.

    -
    - -
    - - -

    Many Microsoft Office documents contain embedded - objects, for example an Excel sheet on a page in a Word - document. Embedded objects may have property sets of their own. An - application can open these property set streams as described above. The - only difference is that they are not located in the POI filesystem's root - but in a nested directory instead. Just register a - POIFSReaderListener for the property set streams you are - interested in. For example, the POIBrowser application in the - contrib section tries to open each and every document in a POI filesystem - as a property set stream. If this operation was successful it displays the - properties.

    - -
    -
    -
    - - - - -
    - - - - - - - -
    Reading Non-Standard Properties
    -
    - - -This section tells how to read - non-standard properties. Non-standard properties are application-specific - name/value/type triples. - - -
    - - - - -
    Write this section!
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/hpsf/images/built-with-cocoon.gif b/build/jakarta-poi/docs/hpsf/images/built-with-cocoon.gif deleted file mode 100644 index 0b38f7857b6e621a964664dec8f6e12f07ff71de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2252 zcmWlYk6X+80>`&c?Q6*Ty|ly1Vlr)YCcFJ$W@+ZDmL@wHr<=uO+^J!wGfd~JhObO5 zEhbab8SO9`O;5+usnKFLlghY55+}}X9E9uF;X3a>;QhRw_w#x$UcyUCUXzQ7!aTuX z2t<;#%>fMUKy3y}6Oid4wN;`-NenKHK@$jsQngO3Kv9Fm;p!ucRDh=@vjid;Vzb#s zd_Ex5(0CGoRINk}gM))y9?xoTrwA25q9c+iK;N#@>wwO#QmIfBC5cpSw_9(v@kA1q zP@a;K5<+3v+MGaPqzdGH-a(~C55%b1)-DiBsVOi(ZA3AmRH{NKOjx1#Zb zu6TmdNTe_(NDV|<3Yp21sw&xBZlA{sL?{E60F{|YA`?i|wzjquk%BFhxLhuvvH+!- z#*+fMQD?O3^?FEAPo>dDMn;TgtJCQOYO7FM>ht*^>0ugoHGtKWlpL4at56|>!y}NW zQlT+GsEtHr0GSaeOnC}ag&G+=sn%!}$u&F}Cgzn{tyZJSM53`sd1a6oZFjgl-r*GC zCY45Kx7$gy6pzOPsmzev7(%8wU44Q)IV_ezN)sf|KzTZc)5R7ke7@(9+(2OoAc>wO zkaNXK3X>;O>xYMj313wZDz$n86P6L=1_fdO8as_Efy6o@g{je-P1Z{ehXeXbn5VPa z9YCN7AriF)3sHiSs7#?qOrbFqh|c3392xNewFSrw5~Y^J-~q%&W^h$n6Zm^oHkkHnf!<#&$X(w!Dv#=ym$&HKd33ak<_(uPu2m}j)4msQWtZw3IFID zn0tTwkf$N7lhBpiaTP>Qyc~F?p`s=@=kW#$ZN0nY<@9~@D{sFkAiSaUH}XH9adw~0 ztlj?PZpY9`O?nJ~M#nd=`s424&Q-_f7;|LDi=8*7b!8WK|0^gnYn*>Lrn%R@wu1-M~UshE9KC#uP3O$Deg%>$bz3LW0DboKUC;jQh^` zD6f2XP&0nsQcIybS_03g+!g=fyM9hmDR>e`#1~wjo^)kRXOez(f}8#MB(c$gi(fn9 zJ9@h-yKY8&!0YSDpZpz}^Uoi9R2b99hdXq&G>IF-P7qdKh-W9BSq_DFH{n)IO?<|g z5_y5XaO$nz^qK?4(1Rtqwp#(?=!s(;ejg95>@R(wR>fBwHT;LZ@V;Qn*s<62Ip8j}+nKD;YH z7mPL+ObE&Uh`oucFFbI?^Eq}mXsF;11%`Zo^i|8f0L~%T?a|V|-h2jQqg{Bv%^zc0 zZ$It1Ty-}urn6=EW~Fb|qK`?6ebYj7V4m>AXb>sa~Njm-)y zZhYLAOR4tO^8`}pP%#Ipx>qzm>c$vWo0?t9)kL;&{&aubx%OcNj=xOeob)^)t39=A zG{niC9n=}&`ro`&(L+%ill&@R>|QQEJwN>}8g*ycfxY~76UQn$=x8q{E}(P6^t5VR zF9wOPA5Xb)2Z^?qmTwJuh~JrjW0Gy>hD-eL!FM!xR`!(2_fIB$u5Csh#C34ObFOdx zW;w(P$~O=9I>MXo)X!~xLD=-nxuCFQQTVrSD+H|)6d#RDb|(;uOHZ#lg#iFm9*o@~ zE0~KlkqyI9jMb)yI@Dk;D(e0znI8IWepdusg{3EDN;mnXK@~&ij^Q2Hm}VU0X|`vE z`Qz%|EsVNzHO)LfD6+Q1vD4pHzO;4dP-zi1TKET&TlX-mupW~v_z_lMD1ICH9DhOZ zZbh%I=JX{e+p;W$lk~8*G#6sMF4C+Y?U?vm&Wz|w`FPBtX_y6jxh)VSU`bE0_#t;u zQrOp)L;ZCVdOIQ-ZT?$z=j$vlFrhcg_WocBJ;t@?4<`zu$NlhjxgRE0vrEuWw%s@u zh$-n#eEqU)PHF#!v8UzaPtL@{%eWO^yh{r2ZePo82z} diff --git a/build/jakarta-poi/docs/hpsf/images/cocoon2-small.jpg b/build/jakarta-poi/docs/hpsf/images/cocoon2-small.jpg deleted file mode 100644 index e8f6dd8c8c0e17f7d97b7265f637000ed61d703a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmb7AdpOez82)Wzmu#{%wPMVKijo;glS{;Op)xH>VU*FZIthD3>zP zDwk3-ks3>4IFw6H%e5uBw4>A0bIxM00SUu>QM09%ti|UgTWv$7!H9# zA>UU(;JF#v0KhEJh7v6tx6v}2v4;LI_(GD?v86^1;T@l&-fyYHNBSsJxS6PM4WjhWFWa3YVC+4q zNoXBAQa7tN$Jj61FsZh`^xjIB12tO&r__#1;v~1lU6k)cGa?G-wWg?Uej_HJsn9^l|ZyEbtLzX z55}4=`KHJ7({d!%&~mK{&RK#(r#f$%F?8$%>=f1%{AeKOtzMh+SZy2gINNb9o~Yy;f~ZUey?Ta822a)vH!Z z{)zF4bPeD7ohWaNTg2Mt(d-^hM|X)@I1lgBRh}viyv<;F_=vSb>n&YT+%qZ6b3Nz% zhbK87WsIQuP3ped0cUN}9$8noQ3HM-Rn!&ObwPwOK7z8VTReoHEtbqq&DuVZE0c_N zOw{gx;LnluvfZ0S>sYcQZ}yg_i{IU0gtgxy(?Y2hZXZfB-eS;(>G@O~DmR2iIGSH*{*J<)zOX(|fBJKR^2?%> zyBFsNoC)z2#mbzD_!G7bQ40D*Ci@4F%Enp-;-f$3 zMX(xcTEz}rs^!C!fiI?@*@p|h{yfi|D2^%k5i+Q>gi+K~jJk;Sn%Nv77aHB1&UAj_ zO!Mp<$^?6quoJ5F5)6_P43CB!e0^zC82#8IG-6Z*7#P}B>~j@9>WgZA`*n|~yC^)civFQS7LLDs^03R#Acsq5FTb-W55H$}=j<)y6FY=qA}ww* K45idpwf_kby7q4X diff --git a/build/jakarta-poi/docs/hpsf/images/header.gif b/build/jakarta-poi/docs/hpsf/images/header.gif deleted file mode 100644 index b9c2ee13910846fc549adb17e9c4466f407daeea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3165 zcmZvb`#Teg4fk0DwRsBog@>4Myg{ zDIyeAg5}iE+S}U)-}MrSL>L}CJ~Kq(!uWhXlms?4HMJ&z84LzXLL{&eFp?!l!k$_j z$FZ=BEAwzFELD_@e;cz?{MuEbKP^O4LW0NAeWTBKn zqzcoYK(rGSYXB$a<`baDts z$B>vlSSpMvLXo*}6vbMukYB5$l7$#+G8jvP;plKY1CAnD6IghuR7&O}t%+b>B^^Vt zMi8MSE}SW1h->&58j{94&XH0lXU3^w42ldTatXo)7Lo|Xvk(|63_$>sm{^JsBW)-n zvXSfSs}w$R^wT>s+n2~iuB@+6#aLktlfc1KMOY6yiY!DCSO^3jOy;3*Oe}^1Lz194 z1{_OWyW~f3GyDW-X zNt7*4;ps>O$(qPSkr@OG**2|`Mr9M3A_|p{qwy&;Apt>v(!^K_&jCrW;#YDB3{+PA zWilVdmXL-<`?+E!RfKUR!I4C30vm~?B5*VWoloLP*bE^KMusNvXml=_%)wqRJE2f0 zBu!kp7?&=kt*k7QIGA<$I-c>b7=y|pl2|yZ@ZTCJEX58-gOAOOGQ|WkAM;uEks&6| z$fgqbQ3NImLr0RiSQOcs$U@C5P6_LOPc91^myOamC*MsD@uc+0$w}FwjKass<#G~- zNa5h=Wq7uf$}3}WYc7cDSwsdFMuhs%5hxOjCdQ|W**F@C!KdJ5Hh3Z8Zgxia40o>| zqDKRHDPcf;7-5zQ+utr)P`g7Nj>e-C3=7d#t^qI)CF>~hp z{9B(N8K0WjYlt7hgm1U*xz6AuJ>Ps%RNRcB#(Sd1eXGK6I`P9nz?dD zYV~Yrew*l|ZcSIKfuoRDi^^fkXR~~tHGWHltt(FUJ%6@3J5cU(XZ+}^WX6cy*<*bz zo9Oo8Rz=1E+n*~y<>{WpwLXcnpl3T4)_*}iad`bl#^GDrw*O2ju}v2H(Y>mC4TDAS~HLq=3XgY7omLstNLT#hnRPPk59$uQyV9E2tUWbwA}!0 zK)6l?5$xWb(`W!HteuPSgQ4=gvj80lNfoX6(k^C>hvrB;P_MDaB&NkI#ko7^&mVFyB?j$ zI~E9nhw7IaY7ew%#(mh6{|jT(u&^iAJyJ@wv};=GdKAe$B-VO6gb8P1lcK zU78l-HXf$F>CKs}X;lP%X-#drvKryyAMo9D1J}aeG3%r)ulL_I_@N{|@5)PP*3z?$ zrTezWmi+1^y;~zW&rTl#tK;YT=_+o813nop|<4+Z%MVYgFI{| z0B|cWZ@b6dFs}Y&2TJ=hqa?sW`K%WddGmSfpa5do)~O!Rfd(infQqNlr5@x0oxKQ1 zN~ck$s;98EXg-#6>~Zdn-h6bLwvGk%Y=`uoN*XTcb}J1FG& z&5ujCBYC5m9z$&(66c)%=2>`by?ON;CzPec8Jn?fWe0bAC z`=_Jp!TLa+X0j1r*ZbGD@Qc?oQ^ucmHRiNx&L7awojl;Y(V>KZWSA%4_1qKsB0$oA z0x)1PO*&x?#M)#(_*jHFYuMvAq?3ukE`%^J-dV-N;!HY$eij@cAypGO82nUzla zO71-lH~9p7m#MbrYIRq<^nPJr#e26c!$FMcYN6wwH`>p?cj-;GDb*VMFlS(NZ}SgA z^e0~{S3}I8PZOiaphX?2X6CDE`u_(vtGEr$Xx%eDLBg!h4d)_x+fKvPtXe;Mb6f4Ik)@>5AK_;r=1 z4o@eiE2H>*-kitZ>3a3xshiVL0FoZB?XkStB`!GP>v>Yn6OH&Xrmjiave>Jx590J~ zYStBWzw@GDgHKeGAb3f3{P)Yd|7bq@)eGnFmaq03wBVdV2A@75oPHVnnBlPyx>WHt z+z~kf>|J`t%D0mZnvQaTpUu3wbmDyN7L!i zF@iZ>X44g8sb`1}rn?JbD3sSw(ctk
  • !@Q>Q2Y$Z-3o3-aRJ4%@`Q!oPCI9iRcZ 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 - - - -HPSF (Horrible Property Set Format) - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -HPSF -
    -Overview -
    -How To -
    -Internals -
    -To Do -
    -
    -
    -
    -HPSF (Horrible Property Set Format) - - - - - - -
    - - - - - - -
    - - - - - - -
    HPSF (Horrible Property Set Format)
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Overview
    -
    - -

    Microsoft applications like "Word" or "Excel" let the user describe his - document by properties like "title", "category" and so on. The application - itself adds further information: last author, creation date etc. These - properties are stored in so-called property set streams. A - property set stream is a separate document within a POI filesystem. HPSF is POI's pure-Java - implementation to read (and in future to write) property set streams.

    - - -

    The HPSF HOWTO describes what a Java - application should do to read a property set using HPSF and to retrieve the - information it needs.

    - - -

    HPSF supports OLE2 property set streams in general, not only the special - case of document properties mentioned above. The HPSF description describes the internal - structure of property set streams.

    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/hpsf/internals.html b/build/jakarta-poi/docs/hpsf/internals.html deleted file mode 100644 index d30d9e3177..0000000000 --- a/build/jakarta-poi/docs/hpsf/internals.html +++ /dev/null @@ -1,2578 +0,0 @@ - - - - -HPSF Internals: The Horrible Property Set Format - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -HPSF -
    -Overview -
    -How To -
    -Internals -
    -To Do -
    -
    -
    -
    -HPSF Internals: The Horrible Property Set Format - - - - - - -
    - - - - - - -
    - - - - - - -
    HPSF Internals: The Horrible Property Set Format
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    HPSF Internals
    -
    - - -
    - - - - - - - -
    Introduction
    -
    - - -

    A Microsoft Office document is internally organized like a filesystem - with directory and files. Microsoft calls these files - streams. A document can have properties attached to it, - like author, title, number of words etc. These metadata are not stored in - the main stream of, say, a Word document, but instead in a dedicated - stream with a special format. Usually this stream's name is - \005SummaryInformation, where \005 represents - the character with a decimal value of 5.

    - - -

    A single piece of information in the stream is called a - property, for example the document title. Each property - has an integral ID (e.g. 2 for title), a - type (telling that the title is a string of bytes) and a - value (what this is should be obvious). A stream - containing properties is called a - property set stream.

    - - -

    This document describes the internal structure of a property set stream, - i.e. the Horrible Property Set Format (HDF). It does not - describe how a Microsoft Office document is organized internally and how - to retrieve a stream from it. See the POIFS documentation for that kind of - stuff.

    - - -

    The Horrible Property Set Format is not only used in the Summary - Information stream in the top-level document of a Microsoft Office - document. Often there is also a property set stream named - \005DocumentSummaryInformation with additional properties. - Embedded documents may have their own property set streams. You cannot - tell by a stream's name whether it is a property set stream or not. - Instead you have to open the stream and look at its bytes.

    - -
    -
    -
    - - - - -
    - - - - - - - -
    Data Types
    -
    - - -

    Before delving into the details of the property set stream format we - have to have a short look at data types. Integral values are stored in the - so-called little endian format. In this format the bytes - that make out an integral value are stored in the "wrong" order. For - example, the decimal value 4660 is 0x1234 in the hexadecimal notation. If - you think this should be represented by a byte 0x12 followed by another - byte 0x34, you are right. This is called the big endian - format. In the little endian format, however, this order is reversed and - the low-value byte comes first: 0x3412. -

    - - -

    The following table gives an overview about some important data - types:

    - - - - - - - -

    Name

    - - - - - -

    Length

    - - - - - -

    Example (Little Endian)

    - - - - - -

    Example (Big Endian)

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    -Bytes -

    -
    - -

    1 byte

    - -
    -

    -0x12 -

    -
    -

    -0x12 -

    -
    -

    -Word -

    -
    - -

    2 bytes

    - -
    -

    -0x1234 -

    -
    -

    -0x3412 -

    -
    -

    -DWord -

    -
    - -

    4 bytes

    - -
    -

    -0x12345678 -

    -
    -

    -0x78563412 -

    -
    - -

    -ClassID -

    - -

    A sequence of one DWord, two Words and eight Bytes

    - -
    - -

    16 bytes

    - -
    - -

    -0xE0859FF2F94F6810AB9108002B27B3D9 resp. - E0859FF2-F94F-6810-AB-91-08-00-2B-27-B3-D9 -

    - -
    - -

    -0xF29F85E04FF91068AB9108002B27B3D9 resp. - F29F85E0-4FF9-1068-AB-91-08-00-2B-27-B3-D9 -

    - -
    - -

    The ClassID examples are given here in two different notations. The - second notation without the "0x" at the beginning and with dashes - inside shows the internal grouping into one DWord, two Words and eight - Bytes.

    - -
    - -

    -Watch out: Microsoft documentation and tools show class IDs - a little bit differently like - F29F85E0-4FF9-1068-AB91-08002B27B3D9. - However, that representation is (intentionally?) misleading with - respect to endianess.

    - -
    - -
    -
    -
    - - - - -
    - - - - - - - -
    HPSF Overview
    -
    - - -

    A property set stream consists of three main parts:

    - - -
      - -
    1. - -

      The header and

      - -
    2. - -
    3. - -

      the section(s) containing the properties.

      - -
    4. - -
    - -
    -
    -
    - - - - -
    - - - - - - - -
    The Header
    -
    - - -

    The first bytes in a property set stream is the header. - It has a fixed length and looks like this:

    - - - - - - - -

    Offset

    - - - - - -

    Type

    - - - - - -

    Contents

    - - - - - -

    Remarks

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -

    0

    - -
    - -

    Word

    - -
    -

    -0xFFFE -

    -
    - -

    If the first four bytes of a stream do not contain these values, the - stream is not a property set stream.

    - -
    - -

    2

    - -
    - -

    Word

    - -
    -

    -0x0000 -

    -
    - -

    4

    - -
    - -

    DWord

    - -
    - -

    Denotes the operating system and the OS version under which this - stream was created. The operating system ID is in the DWord's higher - word (after little endian decoding): 0x0000 for Win16, - 0x0001 for Macintosh and 0x0002 for Win32 - that's - all. The reader is most likely aware of the fact that there are some - more operating systems. However, Microsoft does not seem to know.

    - -
    - -

    8

    - -
    - -

    ClassID

    - -
    -

    -0x00000000000000000000000000000000 -

    -
    - -

    Most property set streams have this value but this is not - required.

    - -
    - -

    24

    - -
    - -

    DWord

    - -
    - -

    -0x01000000 or greater

    - -
    - -

    Section count. This field's value should be equal to 1 or greater. - Microsoft claims that this is a "reserved" field, but it seems to tell - how many sections (see below) are following in the stream. This would - really make sense because otherwise you could not know where and how - far you should read section data.

    - -
    - -
    -
    -
    - - - - -
    - - - - - - - -
    Section List
    -
    - - -

    Following the header is the section list. This is an array of pairs each - consisting of a section format ID and an offset. This array has as many - pairs of ClassID and and DWord fields as the section count field in the - header says. The Summary Information stream contains a single section, the - Document Summary Information stream contains two.

    - - - - - - - -

    Type

    - - - - - -

    Contents

    - - - - - -

    Remarks

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -

    ClassID

    - -
    - -

    Section format ID

    - -
    - -

    -0xF29F85E04FF91068AB9108002B27B3D9 for the single section - in the Summary Information stream.

    - - -

    -0xD5CDD5022E9C101B939708002B2CF9AE for the first - section in the Document Summary Information stream.

    - -
    - -

    DWord

    - -
    - -

    Offset

    - -
    - -

    The number of bytes between the beginning of the stream and the - beginning of the section within the stream.

    - -
    - -

    ClassID

    - -
    - -

    Section format ID

    - -
    - -

    ...

    - -
    - -

    DWord

    - -
    - -

    Offset

    - -
    - -

    ...

    - -
    - -

    ...

    - -
    - -

    ...

    - -
    - -

    ...

    - -
    - -
    -
    -
    - - - - -
    - - - - - - - -
    Section
    -
    - - -

    A section is divided into three parts: the section header (with the - section length and the number of properties in the section), the - properties list (with type and offset of each property), and the - properties themselves. Here are the details:

    - - - - - - - -

     

    - - - - - -

    Type

    - - - - - -

    Contents

    - - - - - -

    Remarks

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -

    Section header

    - -
    - -

    DWord

    - -
    - -

    Length

    - -
    - -

    The length of the section in bytes.

    - -
    - -

    DWord

    - -
    - -

    Property count

    - -
    - -

    The number of properties in the section.

    - -
    - -

    Properties list

    - -
    - -

    DWord

    - -
    - -

    Property ID

    - -
    - -

    The property ID tells what the property means. For example, an ID of - 0x0002 in the Summary Information stands for the document's - title. See the Property IDs - chapter below for more details.

    - -
    - -

    DWord

    - -
    - -

    Offset

    - -
    - -

    The number of bytes between the beginning of the section and the - property.

    - -
    - -

    ...

    - -
    - -

    ...

    - -
    - -

    ...

    - -
    - -

    Properties

    - -
    - -

    DWord

    - -
    - -

    Property type ("variant")

    - -
    - -

    This is the property's data type, e.g. an integer value, a byte - string or a Unicode string. See the - Property Types chapter for - details!

    - -
    -

    -Field length depends on the property type - ("variant") -

    -
    - -

    Property value

    - -
    - -

    This field's length depends on the property's type. These are the - bytes that make out the DWord, the byte string or some other data of - fixed or variable length.

    - - -

    The property value's length is always stored in an area which is a - multiple of 4 in length. If the property is shorter, e.g. a byte - string of 13 bytes, the remaining bytes are padded with 0x00 - bytes.

    - -
    - -

    ...

    - -
    - -

    ...

    - -
    - -

    ...

    - -
    - -
    -
    -
    - - - - -
    - - - - - - - -
    Property IDs
    -
    - - - - -

    As seen above, a section holds a property list: an array with property - IDs and offsets. The property ID gives each property a meaning. For - example, in the Summary Information stream the property ID 2 says that - this property is the document's title.

    - - -

    If you want to know a property ID's meaning, it is not sufficient to - know the ID itself. You must also know the - section format ID. For example, in the Document Summary - Information stream the property ID 2 means not the document's title but - its category. Due to Microsoft's infinite wisdom the section format ID is - not part of the section. Thus if you have only a section without the - stream it is in, you cannot make any sense of the properties because you - do not know what they mean.

    - - -

    So each section format ID has its own name space of property IDs. - Microsoft defined some "well-known" property IDs for the Summary - Information and the Document Summary Information streams. You can extend - them by your own additional IDs. This will be described below.

    - - -
    - - - - - - - -
    Property IDs in The Summary Information Stream
    -
    - - -

    The Summary Information stream has a single section with a section - format ID of 0xF29F85E04FF91068AB9108002B27B3D9. The following - table defines the meaning of its property IDs. Each row associates a - property ID with a name and an ID string. (The property - type is just for informational purposes given here. As we have - seen above, the type is always given along with the value.)

    - - -

    The property name is a readable string which could be - displayed to the user. However, this string is useful only for users who - understand English. The property name does not help with other - languages.

    - - -

    The property ID string is about the same but looks more - technically and is nothing a user should bother with. You could the ID - string and map it to an appropriate display string in a particular - language. Of course you could do that with the property ID as well and - with less overhead, but people (including software developers) tend to be - better in remembering symbolic constants than remembering numbers.

    - - - - - - -

    Property ID

    - - - -

    Property Name

    - - - -

    Property ID String

    - - - -

    Property Type

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    2

    -
    -

    Title

    -
    -

    PID_TITLE

    -
    -

    VT_LPSTR

    -
    -

    3

    -
    -

    Subject

    -
    -

    PID_SUBJECT

    -
    -

    VT_LPSTR

    -
    -

    4

    -
    -

    Author

    -
    -

    PID_AUTHOR

    -
    -

    VT_LPSTR

    -
    -

    5

    -
    -

    Keywords

    -
    -

    PID_KEYWORDS

    -
    -

    VT_LPSTR

    -
    -

    6

    -
    -

    Comments

    -
    -

    PID_COMMENTS

    -
    -

    VT_LPSTR

    -
    -

    7

    -
    -

    Template

    -
    -

    PID_TEMPLATE

    -
    -

    VT_LPSTR

    -
    -

    8

    -
    -

    Last Saved By

    -
    -

    PID_LASTAUTHOR

    -
    -

    VT_LPSTR

    -
    -

    9

    -
    -

    Revision Number

    -
    -

    PID_REVNUMBER

    -
    -

    VT_LPSTR

    -
    -

    10

    -
    -

    Total Editing Time

    -
    -

    PID_EDITTIME

    -
    -

    VT_FILETIME

    -
    -

    11

    -
    -

    Last Printed

    -
    -

    PID_LASTPRINTED

    -
    -

    VT_FILETIME

    -
    -

    12

    -
    -

    Create Time/Date

    -
    -

    PID_CREATE_DTM

    -
    -

    VT_FILETIME

    -
    -

    13

    -
    -

    Last Saved Time/Date

    -
    -

    PID_LASTSAVE_DTM

    -
    -

    VT_FILETIME

    -
    -

    14

    -
    -

    Number of Pages

    -
    -

    PID_PAGECOUNT

    -
    -

    VT_I4

    -
    -

    15

    -
    -

    Number of Words

    -
    -

    PID_WORDCOUNT

    -
    -

    VT_I4

    -
    -

    16

    -
    -

    Number of Characters

    -
    -

    PID_CHARCOUNT

    -
    -

    VT_I4

    -
    -

    17

    -
    -

    Thumbnail

    -
    -

    PID_THUMBNAIL

    -
    -

    VT_CF

    -
    -

    18

    -
    -

    Name of Creating Application

    -
    -

    PID_APPNAME

    -
    -

    VT_LPSTR

    -
    -

    19

    -
    -

    Security

    -
    -

    PID_SECURITY

    -
    -

    VT_I4

    -
    - -
    -
    -
    - - - - -
    - - - - - - - -
    Property IDs in The Document Summary Information Stream
    -
    - - -

    The Document Summary Information stream has two sections with a section - format ID of 0xD5CDD5022E9C101B939708002B2CF9AE for the first - one. The following table defines the meaning of the property IDs in the - first section. See the preceeding section for interpreting the table.

    - - - - - - -

    Property ID

    - - - -

    Property name

    - - - -

    Property ID string

    - - - -

    VT type

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    2

    -
    -

    Category

    -
    -

    PID_CATEGORY

    -
    -

    VT_LPSTR

    -
    -

    3

    -
    -

    PresentationTarget

    -
    -

    PID_PRESFORMAT

    -
    -

    VT_LPSTR

    -
    -

    4

    -
    -

    Bytes

    -
    -

    PID_BYTECOUNT

    -
    -

    VT_I4

    -
    -

    5

    -
    -

    Lines

    -
    -

    PID_LINECOUNT

    -
    -

    VT_I4

    -
    -

    6

    -
    -

    Paragraphs

    -
    -

    PID_PARCOUNT

    -
    -

    VT_I4

    -
    -

    7

    -
    -

    Slides

    -
    -

    PID_SLIDECOUNT

    -
    -

    VT_I4

    -
    -

    8

    -
    -

    Notes

    -
    -

    PID_NOTECOUNT

    -
    -

    VT_I4

    -
    -

    9

    -
    -

    HiddenSlides

    -
    -

    PID_HIDDENCOUNT

    -
    -

    VT_I4

    -
    -

    10

    -
    -

    MMClips

    -
    -

    PID_MMCLIPCOUNT

    -
    -

    VT_I4

    -
    -

    11

    -
    -

    ScaleCrop

    -
    -

    PID_SCALE

    -
    -

    VT_BOOL

    -
    -

    12

    -
    -

    HeadingPairs

    -
    -

    PID_HEADINGPAIR

    -
    -

    VT_VARIANT | VT_VECTOR

    -
    -

    13

    -
    -

    TitlesofParts

    -
    -

    PID_DOCPARTS

    -
    -

    VT_LPSTR | VT_VECTOR

    -
    -

    14

    -
    -

    Manager

    -
    -

    PID_MANAGER

    -
    -

    VT_LPSTR

    -
    -

    15

    -
    -

    Company

    -
    -

    PID_COMPANY

    -
    -

    VT_LPSTR

    -
    -

    16

    -
    -

    LinksUpTo Date

    -
    -

    PID_LINKSDIRTY

    -
    -

    VT_BOOL

    -
    - -
    -
    -
    - -
    -
    -
    - - - - -
    - - - - - - - -
    Property Types
    -
    - - - - -

    A property consists of a DWord type field followed by the - property value. The property type is an integer value and tells how the - data byte following it are to be interpreted. In the Microsoft world it is - also known as the variant.

    - - -

    The Usage column says where a variant type may occur. Not all - of them are allowed in a property set but just those marked with a [P]. - [V] - may appear in a VARIANT, [T] - may - appear in a TYPEDESC, [P] - may appear in an OLE property - set, [S] - may appear in a Safe Array.

    - - - - - - -

    Variant ID

    - - - -

    Variant Type

    - - - -

    Usage

    - - - -

    Description

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    0

    -
    -

    VT_EMPTY

    -
    -

    [V] [P]

    -
    -

    nothing

    -
    -

    1

    -
    -

    VT_NULL

    -
    -

    [V] [P]

    -
    -

    SQL style Null

    -
    -

    2

    -
    -

    VT_I2

    -
    -

    [V] [T] [P] [S]

    -
    -

    2 byte signed int

    -
    -

    3

    -
    -

    VT_I4

    -
    -

    [V] [T] [P] [S]

    -
    -

    4 byte signed int

    -
    -

    4

    -
    -

    VT_R4

    -
    -

    [V] [T] [P] [S]

    -
    -

    4 byte real

    -
    -

    5

    -
    -

    VT_R8

    -
    -

    [V] [T] [P] [S]

    -
    -

    8 byte real

    -
    -

    6

    -
    -

    VT_CY

    -
    -

    [V] [T] [P] [S]

    -
    -

    currency

    -
    -

    7

    -
    -

    VT_DATE

    -
    -

    [V] [T] [P] [S]

    -
    -

    date

    -
    -

    8

    -
    -

    VT_BSTR

    -
    -

    [V] [T] [P] [S]

    -
    -

    OLE Automation string

    -
    -

    9

    -
    -

    VT_DISPATCH

    -
    -

    [V] [T] [P] [S]

    -
    -

    IDispatch *

    -
    -

    10

    -
    -

    VT_ERROR

    -
    -

    [V] [T] [S]

    -
    -

    SCODE

    -
    -

    11

    -
    -

    VT_BOOL

    -
    -

    [V] [T] [P] [S]

    -
    -

    True=-1, False=0

    -
    -

    12

    -
    -

    VT_VARIANT

    -
    -

    [V] [T] [P] [S]

    -
    -

    VARIANT *

    -
    -

    13

    -
    -

    VT_UNKNOWN

    -
    -

    [V] [T] [S]

    -
    -

    IUnknown *

    -
    -

    14

    -
    -

    VT_DECIMAL

    -
    -

    [V] [T] [S]

    -
    -

    16 byte fixed point

    -
    -

    16

    -
    -

    VT_I1

    -
    -

    [T]

    -
    -

    signed char

    -
    -

    17

    -
    -

    VT_UI1

    -
    -

    [V] [T] [P] [S]

    -
    -

    unsigned char

    -
    -

    18

    -
    -

    VT_UI2

    -
    -

    [T] [P]

    -
    -

    unsigned short

    -
    -

    19

    -
    -

    VT_UI4

    -
    -

    [T] [P]

    -
    -

    unsigned short

    -
    -

    20

    -
    -

    VT_I8

    -
    -

    [T] [P]

    -
    -

    signed 64-bit int

    -
    -

    21

    -
    -

    VT_UI8

    -
    -

    [T] [P]

    -
    -

    unsigned 64-bit int

    -
    -

    22

    -
    -

    VT_INT

    -
    -

    [T]

    -
    -

    signed machine int

    -
    -

    23

    -
    -

    VT_UINT

    -
    -

    [T]

    -
    -

    unsigned machine int

    -
    -

    24

    -
    -

    VT_VOID

    -
    -

    [T]

    -
    -

    C style void

    -
    -

    25

    -
    -

    VT_HRESULT

    -
    -

    [T]

    -
    -

    Standard return type

    -
    -

    26

    -
    -

    VT_PTR

    -
    -

    [T]

    -
    -

    pointer type

    -
    -

    27

    -
    -

    VT_SAFEARRAY

    -
    -

    [T]

    -
    -

    (use VT_ARRAY in VARIANT)

    -
    -

    28

    -
    -

    VT_CARRAY

    -
    -

    [T]

    -
    -

    C style array

    -
    -

    29

    -
    -

    VT_USERDEFINED

    -
    -

    [T]

    -
    -

    user defined type

    -
    -

    30

    -
    -

    VT_LPSTR

    -
    -

    [T] [P]

    -
    -

    null terminated string

    -
    -

    31

    -
    -

    VT_LPWSTR

    -
    -

    [T] [P]

    -
    -

    wide null terminated string

    -
    -

    64

    -
    -

    VT_FILETIME

    -
    -

    [P]

    -
    -

    FILETIME

    -
    -

    65

    -
    -

    VT_BLOB

    -
    -

    [P]

    -
    -

    Length prefixed bytes

    -
    -

    66

    -
    -

    VT_STREAM

    -
    -

    [P]

    -
    -

    Name of the stream follows

    -
    -

    67

    -
    -

    VT_STORAGE

    -
    -

    [P]

    -
    -

    Name of the storage follows

    -
    -

    68

    -
    -

    VT_STREAMED_OBJECT

    -
    -

    [P]

    -
    -

    Stream contains an object

    -
    -

    69

    -
    -

    VT_STORED_OBJECT

    -
    -

    [P]

    -
    -

    Storage contains an object

    -
    -

    70

    -
    -

    VT_BLOB_OBJECT

    -
    -

    [P]

    -
    -

    Blob contains an object

    -
    -

    71

    -
    -

    VT_CF

    -
    -

    [P]

    -
    -

    Clipboard format

    -
    -

    72

    -
    -

    VT_CLSID

    -
    -

    [P]

    -
    -

    A Class ID

    -
    -

    0x1000

    -
    -

    VT_VECTOR

    -
    -

    [P]

    -
    -

    simple counted array

    -
    -

    0x2000

    -
    -

    VT_ARRAY

    -
    -

    [V]

    -
    -

    SAFEARRAY*

    -
    -

    0x4000

    -
    -

    VT_BYREF

    -
    -

    [V]

    -
    -

    void* for local use

    -
    -

    0x8000

    -
    -

    VT_RESERVED

    -
    -

    -

    -

    -
    -

    -

    -

    -
    -

    0xFFFF

    -
    -

    VT_ILLEGAL

    -
    -

    -

    -

    -
    -

    -

    -

    -
    -

    0xFFF

    -
    -

    VT_ILLEGALMASKED

    -
    -

    -

    -

    -
    -

    -

    -

    -
    -

    0xFFF

    -
    -

    VT_TYPEMASK

    -
    -

    -

    -

    -
    -

    -

    -

    -
    - -
    -
    -
    - - - - -
    - - - - - - - -
    References
    -
    - - -

    In order to assemble the HPSF description I used information publically - available on the Internet only. The references given below have been very - helpful. If you have any amendments or corrections, please let us know! - Thank you!

    - - -
      - - -
    1. - -

      In - Understanding OLE - documents, Ken Kyler gives an introduction to OLE2 - documents - and especially to property sets. He names the property names, types, and - IDs of the Summary Information and Document Summary Information - stream.

      - -
    2. - - -
    3. - -

      The - ActiveX Programmer's - Reference at - http://www.dwam.net/docs/oleref/ - seems a little outdated, but that's what I have found.

      - -
    4. - - -
    5. - -

      An overview of the VT_ types is in - Variant - Type Definitions.

      - -
    6. - - -
    7. - -

      What is a FILETIME? The answer can be found for example under - http://www.vbapi.com/ref/f/filetime.html - or - http://www.cs.rpi.edu/courses/fall01/os/FILETIME.html. In - short: - The FILETIME structure holds a date and time associated with a file. - The structure identifies a 64-bit integer specifying the number of - 100-nanosecond intervals which have passed since January 1, 1601. This - 64-bit value is split into the two dwords stored in the - structure. -

      - -
    8. - - -
    9. - -

      This documentation origins from the HPSF description available at http://www.rainer-klute.de/~klute/Software/poibrowser/doc/HPSF-Description.html.

      - -
    10. - -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/hpsf/todo.html b/build/jakarta-poi/docs/hpsf/todo.html deleted file mode 100644 index 6641d7388d..0000000000 --- a/build/jakarta-poi/docs/hpsf/todo.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - -To Do - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -HPSF -
    -Overview -
    -How To -
    -Internals -
    -To Do -
    -
    -
    -
    -To Do - - - - - - -
    - - - - - - -
    - - - - - - -
    To Do
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    To Do
    -
    - - -

    The following functionalities should be added to HPFS:

    - - -
      - -
    1. - -

      Complete writing the HPSF documentation.

      - -
    2. - -
    3. - -

      Add writing capability for property sets.

      - -
    4. - -
    5. - -

      Add codepage support.

      - -
    6. - -
    7. - -

      Add Unicode support.

      - -
    8. - -
    9. - -

      Add resource bundles to - org.apache.poi.hpsf.wellknown to ease - localizations.

      - -
    10. - -
    11. - -

      Implement reading functionality for those property types that are not - yet supported (other than byte arrays).

      - -
    12. - -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/hssf/alternatives.html b/build/jakarta-poi/docs/hssf/alternatives.html deleted file mode 100644 index 98fbb79007..0000000000 --- a/build/jakarta-poi/docs/hssf/alternatives.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - -
    How do I...?
    -
    Learn more about this project?
    -
    Print this page...
    -
    Troubleshoot...
    -
    -
    -
    -
    - - - - -
    -
    -   -   -   - web site mail lists -
    -
    -
    -

    HSSF

    -Alternatives to HSSF -
    - -

    - -

    -
    - -
    - - - - - - - -
    Alternatives
    -
    - -

    - Maybe it's unwise to advertise your competitors but we believe - competition is good and we have the best support reading and - write Excel workbooks currently available. -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ProductURLDescription
    Formula One - www.tidestone.com - An alternative to this project is to - buy the $10,000 Formula 1 library - and accept its crude api and limitations.
    Visual Basic - www.microsoft.com - Give up XML and write Visual Basic code on a Microsoft Windows based - Environment or output in Microsoft's beta and primarily undocumented - XML for office format.
    JExcelhttp://stareyes.homeip.net:8888Frequently unavailable. Little currently known about it's capabilities.
    JWorkbookhttp://www.object-refinery.com/jworkbook/index.htmlThis effort supports Gnumeric and Excel, however the Excel part is done using POI anyway.
    xlReaderhttp://www.sourceforge.net/projects/xlrdProvides decent support for reading Excel.
    Excel ODBC Driverhttp://www.nwlink.com/~leewal/content/exceljavasample.htmODBC offers a somewhat wierd method for using Excel.
    ExtenXLShttp://www.extentech.com/products/ExtenXLS/docs/intro3.jspCommercial library for reading, modifying and writing Excel spreadsheets. Not cheap but - certainly a lot more affordable than Formula 1. No idea as to it's quality.
    J-Integra Java-Excel Bridgehttp://www.intrinsyc.com/products/bridging/jintegra.aspUses DCOM to an Excel instance on a windows machine.
    Perl & C-There are a number of perl and C libraries, however none of them are consistent.
    - -
    -
    -
    - -
    - - - diff --git a/build/jakarta-poi/docs/hssf/diagram1.html b/build/jakarta-poi/docs/hssf/diagram1.html deleted file mode 100644 index 1e342014d7..0000000000 --- a/build/jakarta-poi/docs/hssf/diagram1.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - -HSSF - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -HSSF -
    -Quick Guide -
    -HOWTO -
    -Use Case -
    -Pictorial Docs -
    -Alternatives -
    -
    -Contributer's Guide -
    -Record Generator -
    -
    -
    -
    -HSSF - - - - - - -
    - - - - - - -
    - - - - - - -
    HSSF
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Usermodel Class Diagram by Matthew Young
    -
    - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/hssf/diagrams.html b/build/jakarta-poi/docs/hssf/diagrams.html deleted file mode 100644 index a4fe26df27..0000000000 --- a/build/jakarta-poi/docs/hssf/diagrams.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - -HSSF - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -HSSF -
    -Quick Guide -
    -HOWTO -
    -Use Case -
    -Pictorial Docs -
    -Alternatives -
    -
    -Contributer's Guide -
    -Record Generator -
    -
    -
    -
    -HSSF - - - - - - -
    - - - - - - -
    - - - - - - -
    HSSF
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Overview
    -
    - -

    - This section is intended for diagrams (UML/etc) that help - explain HSSF. -

    - - - -

    - Have more? Add a new "bug" to the bug database with [DOCUMENTATION] - prefacing the description and a link to the file on an http server - somewhere. If you don't have your own webserver, then you can email it - to (acoliver at apache dot org) provided its < 5MB. Diagrams should be - in some format that can be read at least on Linux and Windows. Diagrams - that can be edited are preferrable, but lets face it, there aren't too - many good affordable UML tools yet! And no they don't HAVE to be UML... - just useful. -

    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/hssf/how-to.html b/build/jakarta-poi/docs/hssf/how-to.html deleted file mode 100644 index 37ffa9f763..0000000000 --- a/build/jakarta-poi/docs/hssf/how-to.html +++ /dev/null @@ -1,870 +0,0 @@ - - - - -The New Halloween Document - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -HSSF -
    -Quick Guide -
    -HOWTO -
    -Use Case -
    -Pictorial Docs -
    -Alternatives -
    -
    -Contributer's Guide -
    -Record Generator -
    -
    -
    -
    -The New Halloween Document - - - - - - -
    - - - - - - -
    - - - - - - -
    The New Halloween Document
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    How to use the HSSF prototype API
    -
    - - -
    - - - - - - - -
    Capabilities
    -
    - -

    This release of the how-to outlines functionality for 1.5. - Those looking for information on the release edition should - look in the poi-src for the release or at a - previous edition in CVS tagged for that release.

    - -

    - This release allows numeric and string cell values to be written to - or read from an XLS file as well as reading and writing dates. Also - in this release is row and column sizing, cell styling (bold, - italics, borders,etc), and support for built-in data formats. New - to this release is an event-based API for reading XLS files. - It differs greatly from the read/write API - and is intended for intermediate developers who need a smaller - memory footprint. It will also serve as the basis for the HSSF - Generator.

    - -
    -
    -
    - -
    - - - - - - - -
    Target Audience
    -
    - -

    This release is intended for developers, java-fanatics and the -just generally all around impatient. HSSF has not yet been -extensively tested in a high load multi-threaded situation. This -release is not considered to be "golden" as it has new -features that have not been extensively tested, and is an early 2.0 -build that could be restructured significantly in the future (not -that there are necessarily plans to do so, just that you're better -off basing your code on 1.0 and sticking with it if you don't need -2.0 stuff bad enough to deal with us pulling the rug out from under -you regularly).

    - -
    -
    -
    - -
    - - - - - - - -
    General Use
    -
    - -
    - - - - - - - -
    User API
    -
    - -
    - - - - - - - -
    Writing a new one
    -
    - - -

    The high level API (package: org.apache.poi.hssf.usermodel) -is what most people should use. Usage is very simple. -

    - -

    Workbooks are created by creating an instance of -org.apache.poi.hssf.usermodel.HSSFWorkbook. -

    - -

    Sheets are created by calling createSheet() from an existing -instance of HSSFWorkbook, the created sheet is automatically added in -sequence to the workbook. Sheets do not in themselves have a sheet -name (the tab at the bottom); you set -the name associated with a sheet by calling -HSSFWorkbook.setSheetName(sheetindex,"SheetName").

    - -

    Rows are created by calling createRow(rowNumber) from an existing -instance of HSSFSheet. Only rows that have cell values should be -added to the sheet. To set the row's height, you just call -setRowHeight(height) on the row object. The height must be given in -twips, or 1/20th of a point. If you prefer, there is also a -setRowHeightInPoints method. -

    - -

    Cells are created by calling createCell(column, type) from an -existing HSSFRow. Only cells that have values should be added to the -row. Cells should have their cell type set to either -HSSFCell.CELL_TYPE_NUMERIC or HSSFCell.CELL_TYPE_STRING depending on -whether they contain a numeric or textual value. Cells must also have -a value set. Set the value by calling setCellValue with either a -String or double as a parameter. Individual cells do not have a -width; you must call setColumnWidth(colindex, width) (use units of -1/256th of a character) on the HSSFSheet object. (You can't do it on -an individual basis in the GUI either).

    - -

    Cells are styled with HSSFCellStyle objects which in turn contain -a reference to an HSSFFont object. These are created via the -HSSFWorkbook object by calling createCellStyle() and createFont(). -Once you create the object you must set its parameters (colors, -borders, etc). To set a font for an HSSFCellStyle call -setFont(fontobj). -

    - -

    Once you have generated your workbook, you can write it out by -calling write(outputStream) from your instance of Workbook, passing -it an OutputStream (for instance, a FileOutputStream or -ServletOutputStream). You must close the OutputStream yourself. HSSF -does not close it for you. -

    - -

    Here is some example code (excerpted and adapted from -org.apache.poi.hssf.dev.HSSF test class):

    - -
    - - - - -
    -
            short rownum;
    -
    -        // create a new file
    -        FileOutputStream out = new FileOutputStream("workbook.xls");
    -        // create a new workbook
    -        HSSFWorkbook wb = new HSSFWorkbook();
    -        // create a new sheet
    -        HSSFSheet s = wb.createSheet();
    -        // declare a row object reference
    -        HSSFRow r = null;
    -        // declare a cell object reference
    -        HSSFCell c = null;
    -        // create 3 cell styles
    -        HSSFCellStyle cs = wb.createCellStyle();
    -        HSSFCellStyle cs2 = wb.createCellStyle();
    -        HSSFCellStyle cs3 = wb.createCellStyle();
    -        // create 2 fonts objects
    -        HSSFFont f = wb.createFont();
    -        HSSFFont f2 = wb.createFont();
    -
    -        //set font 1 to 12 point type
    -        f.setFontHeightInPoints((short) 12);
    -        //make it red
    -        f.setColor((short) HSSFCellStyle.RED);
    -        // make it bold
    -        //arial is the default font
    -        f.setBoldweight(f.BOLDWEIGHT_BOLD);
    -
    -        //set font 2 to 10 point type
    -        f2.setFontHeightInPoints((short) 10);
    -        //make it the color at palette index 0xf (white)
    -        f2.setColor((short) HSSFCellStyle.WHITE);
    -        //make it bold
    -        f2.setBoldweight(f2.BOLDWEIGHT_BOLD);
    -
    -        //set cell stlye
    -        cs.setFont(f);
    -        //set the cell format see HSSFDataFromat for a full list
    -        cs.setDataFormat(HSSFDataFormat.getFormat("($#,##0_);[Red]($#,##0)"));
    -
    -        //set a thin border
    -        cs2.setBorderBottom(cs2.BORDER_THIN);
    -        //fill w fg fill color
    -        cs2.setFillPattern((short) HSSFCellStyle.SOLID_FOREGROUND);
    -        // set foreground fill to red
    -        cs2.setFillForegroundColor((short) HSSFCellStyle.RED);
    -
    -        // set the font
    -        cs2.setFont(f2);
    -
    -        // set the sheet name to HSSF Test
    -        wb.setSheetName(0, "HSSF Test");
    -        // create a sheet with 300 rows (0-299)
    -        for (rownum = (short) 0; rownum < 300; rownum++)
    -        {
    -            // create a row
    -            r = s.createRow(rownum);
    -            // on every other row
    -            if ((rownum % 2) == 0)
    -            {
    -                // make the row height bigger  (in twips - 1/20 of a point)
    -                r.setHeight((short) 0x249);
    -            }
    -
    -            //r.setRowNum(( short ) rownum);
    -            // create 50 cells (0-49) (the += 2 becomes apparent later
    -            for (short cellnum = (short) 0; cellnum < 50; cellnum += 2)
    -            {
    -                // create a numeric cell
    -                c = r.createCell(cellnum);
    -                // do some goofy math to demonstrate decimals
    -                c.setCellValue(rownum * 10000 + cellnum
    -                        + (((double) rownum / 1000)
    -                        + ((double) cellnum / 10000)));
    -
    -                // on every other row
    -                if ((rownum % 2) == 0)
    -                {
    -                    // set this cell to the first cell style we defined
    -                    c.setCellStyle(cs);
    -                }
    -
    -                // create a string cell (see why += 2 in the
    -                c = r.createCell((short) (cellnum + 1));
    -
    -                // set the cell's string value to "TEST"
    -                c.setCellValue("TEST");
    -                // make this column a bit wider
    -                s.setColumnWidth((short) (cellnum + 1), (short) ((50 * 8) / ((double) 1 / 20)));
    -
    -                // on every other row
    -                if ((rownum % 2) == 0)
    -                {
    -                    // set this to the white on red cell style
    -                    // we defined above
    -                    c.setCellStyle(cs2);
    -                }
    -
    -            }
    -        }
    -
    -        //draw a thick black border on the row at the bottom using BLANKS
    -        // advance 2 rows
    -        rownum++;
    -        rownum++;
    -
    -        r = s.createRow(rownum);
    -
    -        // define the third style to be the default
    -        // except with a thick black border at the bottom
    -        cs3.setBorderBottom(cs3.BORDER_THICK);
    -
    -        //create 50 cells
    -        for (short cellnum = (short) 0; cellnum < 50; cellnum++)
    -        {
    -            //create a blank type cell (no value)
    -            c = r.createCell(cellnum);
    -            // set it to the thick black border style
    -            c.setCellStyle(cs3);
    -        }
    -
    -        //end draw thick black border
    -
    -
    -        // demonstrate adding/naming and deleting a sheet
    -        // create a sheet, set its title then delete it
    -        s = wb.createSheet();
    -        wb.setSheetName(1, "DeletedSheet");
    -        wb.removeSheetAt(1);
    -        //end deleted sheet
    -
    -        // write the workbook to the output stream
    -        // close our file (don't blow out our file handles
    -        wb.write(out);
    -        out.close();
    -        
    -
    -
    - -
    -
    -
    - -
    - - - - - - - -
    Reading or modifying an existing file
    -
    - - -

    Reading in a file is equally simple. To read in a file, create a -new instance of org.apache.poi.poifs.Filesystem, passing in an open InputStream, such as a FileInputStream -for your XLS, to the constructor. Construct a new instance of -org.apache.poi.hssf.usermodel.HSSFWorkbook passing the -Filesystem instance to the constructor. From there you have access to -all of the high level model objects through their assessor methods -(workbook.getSheet(sheetNum), sheet.getRow(rownum), etc). -

    - -

    Modifying the file you have read in is simple. You retrieve the -object via an assessor method, remove it via a parent object's remove -method (sheet.removeRow(hssfrow)) and create objects just as you -would if creating a new xls. When you are done modifying cells just -call workbook.write(outputstream) just as you did above.

    - -

    An example of this can be seen in -org.apache.poi.hssf.dev.HSSF.

    - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - -
    Event API
    -
    - - -

    The event API is brand new. It is intended for intermediate -developers who are willing to learn a little bit of the low level API -structures. Its relatively simple to use, but requires a basic -understanding of the parts of an Excel file (or willingness to -learn). The advantage provided is that you can read an XLS with a -relatively small memory footprint. -

    - -

    To use this API you construct an instance of -org.apache.poi.hssf.eventmodel.HSSFRequest. Register a class you -create that supports the -org.apache.poi.hssf.eventmodel.HSSFListener interface using the -HSSFRequest.addListener(yourlistener, recordsid). The recordsid -should be a static reference number (such as BOFRecord.sid) contained -in the classes in org.apache.poi.hssf.record. The trick is you -have to know what these records are. Alternatively you can call -HSSFRequest.addListenerForAllRecords(mylistener). In order to learn -about these records you can either read all of the javadoc in the -org.apache.poi.hssf.record package or you can just hack up a -copy of org.apache.poi.hssf.dev.EFHSSF and adapt it to your -needs. TODO: better documentation on records.

    - -

    Once you've registered your listeners in the HSSFRequest object -you can construct an instance of -org.apache.poi.poifs.filesystem.FileSystem (see POIFS howto) and -pass it your XLS file inputstream. You can either pass this, along -with the request you constructed, to an instance of HSSFEventFactory -via the HSSFEventFactory.processWorkbookEvents(request, Filesystem) -method, or you can get an instance of DocumentInputStream from -Filesystem.createDocumentInputStream("Workbook") and pass -it to HSSFEventFactory.processEvents(request, inputStream). Once you -make this call, the listeners that you constructed receive calls to -their processRecord(Record) methods with each Record they are -registered to listen for until the file has been completely read. -

    - -

    A code excerpt from org.apache.poi.hssf.dev.EFHSSF (which is -in CVS or the source distribution) is reprinted below with excessive -comments:

    - -
    - - - - -
    -
    -/**
    - * This example shows how to use the event API for reading a file.
    - */
    -public class EventExample
    -        implements HSSFListener
    -{
    -    private SSTRecord sstrec;
    -
    -    /**
    -     * This method listens for incoming records and handles them as required.
    -     * @param record    The record that was found while reading.
    -     */
    -    public void processRecord(Record record)
    -    {
    -        switch (record.getSid())
    -        {
    -            // the BOFRecord can represent either the beginning of a sheet or the workbook
    -            case BOFRecord.sid:
    -                BOFRecord bof = (BOFRecord) record;
    -                if (bof.getType() == bof.TYPE_WORKBOOK)
    -                {
    -                    System.out.println("Encountered workbook");
    -                    // assigned to the class level member
    -                } else if (bof.getType() == bof.TYPE_WORKSHEET)
    -                {
    -                    System.out.println("Encountered sheet reference");
    -                }
    -                break;
    -            case BoundSheetRecord.sid:
    -                BoundSheetRecord bsr = (BoundSheetRecord) record;
    -                System.out.println("New sheet named: " + bsr.getSheetname());
    -                break;
    -            case RowRecord.sid:
    -                RowRecord rowrec = (RowRecord) record;
    -                System.out.println("Row found, first column at "
    -                        + rowrec.getFirstCol() + " last column at " + rowrec.getLastCol());
    -                break;
    -            case NumberRecord.sid:
    -                NumberRecord numrec = (NumberRecord) record;
    -                System.out.println("Cell found with value " + numrec.getValue()
    -                        + " at row " + numrec.getRow() + " and column " + numrec.getColumn());
    -                break;
    -                // SSTRecords store a array of unique strings used in Excel.
    -            case SSTRecord.sid:
    -                sstrec = (SSTRecord) record;
    -                for (int k = 0; k < sstrec.getNumUniqueStrings(); k++)
    -                {
    -                    System.out.println("String table value " + k + " = " + sstrec.getString(k));
    -                }
    -                break;
    -            case LabelSSTRecord.sid:
    -                LabelSSTRecord lrec = (LabelSSTRecord) record;
    -                System.out.println("String cell found with value "
    -                        + sstrec.getString(lrec.getSSTIndex()));
    -                break;
    -        }
    -    }
    -
    -    /**
    -     * Read an excel file and spit out what we find.
    -     *
    -     * @param args      Expect one argument that is the file to read.
    -     * @throws IOException  When there is an error processing the file.
    -     */
    -    public static void main(String[] args) throws IOException
    -    {
    -        // create a new file input stream with the input file specified
    -        // at the command line
    -        FileInputStream fin = new FileInputStream(args[0]);
    -        // create a new org.apache.poi.poifs.filesystem.Filesystem
    -        POIFSFileSystem poifs = new POIFSFileSystem(fin);
    -        // get the Workbook (excel part) stream in a InputStream
    -        InputStream din = poifs.createDocumentInputStream("Workbook");
    -        // construct out HSSFRequest object
    -        HSSFRequest req = new HSSFRequest();
    -        // lazy listen for ALL records with the listener shown above
    -        req.addListenerForAllRecords(new EventExample());
    -        // create our event factory
    -        HSSFEventFactory factory = new HSSFEventFactory();
    -        // process our events based on the document input stream
    -        factory.processEvents(req, din);
    -        // once all the events are processed close our file input stream
    -        fin.close();
    -        // and our document input stream (don't want to leak these!)
    -        din.close();
    -        System.out.println("done.");
    -    }
    -}
    -
    -
    -
    - -
    -
    -
    - -
    - - - - - - - -
    Low Level APIs
    -
    - - -

    The low level API is not much to look at. It consists of lots of -"Records" in the org.apache.poi.hssf.record.* package, -and set of helper classes in org.apache.poi.hssf.model.*. The -record classes are consistent with the low level binary structures -inside a BIFF8 file (which is embedded in a POIFS file system). You -probably need the book: "Microsoft Excel 97 Developer's Kit" -from Microsoft Press in order to understand how these fit together -(out of print but easily obtainable from Amazon's used books). In -order to gain a good understanding of how to use the low level APIs -should view the source in org.apache.poi.hssf.usermodel.* and -the classes in org.apache.poi.hssf.model.*. You should read the -documentation for the POIFS libraries as well.

    - -
    -
    -
    - -
    - - - - - - - -
    HSSF Class/Test Application
    -
    - - -

    The HSSF application is nothing more than a test for the high -level API (and indirectly the low level support). The main body of -its code is repeated above. To run it: -

    - -
      - -
    • download the poi-alpha build and untar it (tar xvzf - tarball.tar.gz) -
    • - -
    • set up your classpath as follows: - export HSSFDIR={wherever you put HSSF's jar files} -export LOG4JDIR={wherever you put LOG4J's jar files} -export CLASSPATH=$CLASSPATH:$HSSFDIR/hssf.jar:$HSSFDIR/poi-poifs.jar:$HSSFDIR/poi-util.jar:$LOG4JDIR/jog4j.jar - -
    • -
    • type: - java org.apache.poi.hssf.dev.HSSF ~/myxls.xls write -
    • - -
    - -

    - -

    This should generate a test sheet in your home directory called "myxls.xls".

    - -
      - -
    • Type: - java org.apache.poi.hssf.dev.HSSF ~/input.xls output.xls - -

      -This is the read/write/modify test. It reads in the spreadsheet, modifies a cell, and writes it back out. -Failing this test is not necessarily a bad thing. If HSSF tries to modify a non-existant sheet then this will -most likely fail. No big deal.

      -
    • - -
    - -
    -
    -
    - -
    - - - - - - - -
    HSSF Logging facility
    -
    - -

    HSSF now has a logging facility (using - commons logging) -that will record massive amounts of debugging information. Its mostly -useful to us hssf-developing geeks, but might be useful in tracking -down problems. -

    - -

    So Why use commons logging rather than log4j? Well the following discussion from -the jakarta-general mailing list sums it up pretty well. (Thanks Morgan) -

    - -

    -Here's the problem, as I see it. - -

    - -

    -Suppose Commons component A decides to adopt Log4J, Commons component B -decides to adopt LogKit, and Commons component C adopts JDK1.4 logging. -They will all minimally function with the right jars in the classpath. -However you (the end-user) are left with maintaining configuration for 3 -different logging APIs, which is tedious at best. When you take into -account cool features like variable log levels, Log4J appenders and the -like, you're pretty much guaranteed to swallow up useful configuration -options because sophisticated configurations are too difficult to maintain -over mutiple logging implementations. - -

    - -

    - -Contrarily, if all three Commons components use a logging facade, you can -focus all your configuration efforts on one logging implementation. Sure, -there is a trade-off; you don't have access to all the features, and the -interface between the facade and the implementation must be maintained. But -the benefits are not just political; they potentially make the end-users -configuration much easier. - -

    - -

    -Even if all Commons components used the same logging implementation (Log4J -for example), other projects in Jakarta-land may choose otherwise. If you -add enough Jakarta projects to your environment, you eventually end up with -the scenario described above. It's a worthwhile effort to attempt a logging -solution that plays well with the Jakarta community at large. I think in -many cases the Commons Logging component can fill that role. - -

    - -

    -Refer to the commons logging package level javadoc for more information concerning how to -configure commons logging. - -

    - -
    -
    -
    - -
    - - - - - - - -
    HSSF Developer's tools
    -
    - - -

    HSSF has a number of tools useful for developers to debug/develop -stuff using HSSF (and more generally XLS files). We've already -discussed the app for testing HSSF read/write/modify capabilities; -now we'll talk a bit about BiffViewer. Early on in the development of -HSSF, it was decided that knowing what was in a record, what was -wrong with it, etc. was virtually impossible with the available -tools. So we developed BiffViewer. You can find it at -org.apache.poi.hssf.dev.BiffViewer. It performs two basic -functions and a derivative. -

    - -

    The first is "biffview". To do this you run it (assumes -you have everything setup in your classpath and that you know what -you're doing enough to be thinking about this) with an xls file as a -parameter. It will give you a listing of all understood records with -their data and a list of not-yet-understood records with no data -(because it doesn't know how to interpret them). This listing is -useful for several things. First, you can look at the values and SEE -what is wrong in quasi-English. Second, you can send the output to a -file and compare it. -

    - -

    The second function is "big freakin dump", just pass a -file and a second argument matching "bfd" exactly. This -will just make a big hexdump of the file. -

    - -

    Lastly, there is "mixed" mode which does the same as -regular biffview, only it includes hex dumps of certain records -intertwined. To use that just pass a file with a second argument -matching "on" exactly.

    - -

    In the next release cycle we'll also have something called a -FormulaViewer. The class is already there, but its not very useful -yet. When it does something, we'll document it.

    - - -
    -
    -
    - -
    - - - - - - - -
    What's Next?
    -
    - - -

    This release contains code that supports "internationalization" -or more accurately non-US/UK languages; however, it has not been -tested with the new API changes (please help us with this). We've -shifted focus a bit for this release in recognition of the -international support we've gotten. We're going to focus on western -European languages for our first beta. We're more than happy to -accept help in supporting non-Western European languages if someone -who knows what they're doing in this area is willing to pitch in! -(There is next to no documentation on what is necessary to support -such a move and its really hard to support a language when you don't even -know the alphabet).

    - -

    This release of HSSF does not yet support Formulas. I've been -focusing on the requests I've gotten in. That being said, if we get -more user feedback on what is most useful first we'll aim for that. -As a general principal, HSSF's goal is to support HSSF-Serializer -(meaning an emphasis on write). We would like to hear from you! How -are you using HSSF/POIFS? How would you like to use it? What features -are most important first? -

    - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/hssf/images/cocoon2-small.jpg b/build/jakarta-poi/docs/hssf/images/cocoon2-small.jpg deleted file mode 100644 index e8f6dd8c8c0e17f7d97b7265f637000ed61d703a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmb7AdpOez82)Wzmu#{%wPMVKijo;glS{;Op)xH>VU*FZIthD3>zP zDwk3-ks3>4IFw6H%e5uBw4>A0bIxM00SUu>QM09%ti|UgTWv$7!H9# zA>UU(;JF#v0KhEJh7v6tx6v}2v4;LI_(GD?v86^1;T@l&-fyYHNBSsJxS6PM4WjhWFWa3YVC+4q zNoXBAQa7tN$Jj61FsZh`^xjIB12tO&r__#1;v~1lU6k)cGa?G-wWg?Uej_HJsn9^l|ZyEbtLzX z55}4=`KHJ7({d!%&~mK{&RK#(r#f$%F?8$%>=f1%{AeKOtzMh+SZy2gINNb9o~Yy;f~ZUey?Ta822a)vH!Z z{)zF4bPeD7ohWaNTg2Mt(d-^hM|X)@I1lgBRh}viyv<;F_=vSb>n&YT+%qZ6b3Nz% zhbK87WsIQuP3ped0cUN}9$8noQ3HM-Rn!&ObwPwOK7z8VTReoHEtbqq&DuVZE0c_N zOw{gx;LnluvfZ0S>sYcQZ}yg_i{IU0gtgxy(?Y2hZXZfB-eS;(>G@O~DmR2iIGSH*{*J<)zOX(|fBJKR^2?%> zyBFsNoC)z2#mbzD_!G7bQ40D*Ci@4F%Enp-;-f$3 zMX(xcTEz}rs^!C!fiI?@*@p|h{yfi|D2^%k5i+Q>gi+K~jJk;Sn%Nv77aHB1&UAj_ zO!Mp<$^?6quoJ5F5)6_P43CB!e0^zC82#8IG-6Z*7#P}B>~j@9>WgZA`*n|~yC^)civFQS7LLDs^03R#Acsq5FTb-W55H$}=j<)y6FY=qA}ww* K45idpwf_kby7q4X diff --git a/build/jakarta-poi/docs/hssf/images/header.gif b/build/jakarta-poi/docs/hssf/images/header.gif deleted file mode 100644 index b9c2ee13910846fc549adb17e9c4466f407daeea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3165 zcmZvb`#Teg4fk0DwRsBog@>4Myg{ zDIyeAg5}iE+S}U)-}MrSL>L}CJ~Kq(!uWhXlms?4HMJ&z84LzXLL{&eFp?!l!k$_j z$FZ=BEAwzFELD_@e;cz?{MuEbKP^O4LW0NAeWTBKn zqzcoYK(rGSYXB$a<`baDts z$B>vlSSpMvLXo*}6vbMukYB5$l7$#+G8jvP;plKY1CAnD6IghuR7&O}t%+b>B^^Vt zMi8MSE}SW1h->&58j{94&XH0lXU3^w42ldTatXo)7Lo|Xvk(|63_$>sm{^JsBW)-n zvXSfSs}w$R^wT>s+n2~iuB@+6#aLktlfc1KMOY6yiY!DCSO^3jOy;3*Oe}^1Lz194 z1{_OWyW~f3GyDW-X zNt7*4;ps>O$(qPSkr@OG**2|`Mr9M3A_|p{qwy&;Apt>v(!^K_&jCrW;#YDB3{+PA zWilVdmXL-<`?+E!RfKUR!I4C30vm~?B5*VWoloLP*bE^KMusNvXml=_%)wqRJE2f0 zBu!kp7?&=kt*k7QIGA<$I-c>b7=y|pl2|yZ@ZTCJEX58-gOAOOGQ|WkAM;uEks&6| z$fgqbQ3NImLr0RiSQOcs$U@C5P6_LOPc91^myOamC*MsD@uc+0$w}FwjKass<#G~- zNa5h=Wq7uf$}3}WYc7cDSwsdFMuhs%5hxOjCdQ|W**F@C!KdJ5Hh3Z8Zgxia40o>| zqDKRHDPcf;7-5zQ+utr)P`g7Nj>e-C3=7d#t^qI)CF>~hp z{9B(N8K0WjYlt7hgm1U*xz6AuJ>Ps%RNRcB#(Sd1eXGK6I`P9nz?dD zYV~Yrew*l|ZcSIKfuoRDi^^fkXR~~tHGWHltt(FUJ%6@3J5cU(XZ+}^WX6cy*<*bz zo9Oo8Rz=1E+n*~y<>{WpwLXcnpl3T4)_*}iad`bl#^GDrw*O2ju}v2H(Y>mC4TDAS~HLq=3XgY7omLstNLT#hnRPPk59$uQyV9E2tUWbwA}!0 zK)6l?5$xWb(`W!HteuPSgQ4=gvj80lNfoX6(k^C>hvrB;P_MDaB&NkI#ko7^&mVFyB?j$ zI~E9nhw7IaY7ew%#(mh6{|jT(u&^iAJyJ@wv};=GdKAe$B-VO6gb8P1lcK zU78l-HXf$F>CKs}X;lP%X-#drvKryyAMo9D1J}aeG3%r)ulL_I_@N{|@5)PP*3z?$ zrTezWmi+1^y;~zW&rTl#tK;YT=_+o813nop|<4+Z%MVYgFI{| z0B|cWZ@b6dFs}Y&2TJ=hqa?sW`K%WddGmSfpa5do)~O!Rfd(infQqNlr5@x0oxKQ1 zN~ck$s;98EXg-#6>~Zdn-h6bLwvGk%Y=`uoN*XTcb}J1FG& z&5ujCBYC5m9z$&(66c)%=2>`by?ON;CzPec8Jn?fWe0bAC z`=_Jp!TLa+X0j1r*ZbGD@Qc?oQ^ucmHRiNx&L7awojl;Y(V>KZWSA%4_1qKsB0$oA z0x)1PO*&x?#M)#(_*jHFYuMvAq?3ukE`%^J-dV-N;!HY$eij@cAypGO82nUzla zO71-lH~9p7m#MbrYIRq<^nPJr#e26c!$FMcYN6wwH`>p?cj-;GDb*VMFlS(NZ}SgA z^e0~{S3}I8PZOiaphX?2X6CDE`u_(vtGEr$Xx%eDLBg!h4d)_x+fKvPtXe;Mb6f4Ik)@>5AK_;r=1 z4o@eiE2H>*-kitZ>3a3xshiVL0FoZB?XkStB`!GP>v>Yn6OH&Xrmjiave>Jx590J~ zYStBWzw@GDgHKeGAb3f3{P)Yd|7bq@)eGnFmaq03wBVdV2A@75oPHVnnBlPyx>WHt z+z~kf>|J`t%D0mZnvQaTpUu3wbmDyN7L!i zF@iZ>X44g8sb`1}rn?JbD3sSw(ctk
  • !@Q>Q2Y$Z-3o3-aRJ4%@`Q!oPCI9iRcZ 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

    W5$s(%B8H!pL)tF zJji()$^n+kyG+atwWHq6Bg&Es>-$XuitZ~)hg&DqQW+04z?yv^OL z%~i6@@C(V&Y|i*J&D1PszdX*)T+ZhV&%~6@>I`Z|+|Fh9%<-(x0yEF_oVxaW&w%>Q z`%KWr?9a~1&H??%Q(VvuEyM?{s|o$5FYG*DY_e3FuTt#L8(n_=4ACUZ&;aHm$C8lX z*{d1t&LPdwE4^DD{n5S)&}`b6Y;Y5jSj&zmiIED&Uc1vf-L)Pw6bsGLLp^jZ{nFAK z)1x+wzZi_VSV8}464aAHQJsvA{9XA>)LDHUMt#)&Ty@Ex{HvFvHNyI}l$pd5JkVOL z)|kT8UHyhh9X->UjM_TYj2zZM&6!ZFhgY4}Ywg!?($;Qmzi=%*a-Fi_Ak{8utUWxf zy(H9s4cUDb*n$l)Umey|ow6mZmYxaLjxEZ49oeBhFsr$}+LU+fYLZJcs>xhJ9K5yU z_|p}g$dmc1nJKJ!9Y`rH+Pj@r?FzUcYi&srva7vwDt%`Py@8<3+snOn21;+FYn3)9 zqKLU~MB75>o4z#~v?tY+y$jREy#vV2y2{Pm{hAnezW~I$4GNv6&ECr!Ki++W z;N4x~9lYdi-uwL(tCP8Wl6N2AesquM8W84kX?Ie`uC;6AM15{}{=;oE#?ow6IaK6|wE8J`Fa;|f0F_T6YD zF3>oh;ypejD{guLZraG3aTCg*&ilOsUgSkv&pbYCID6f2C;r=~UkmAZxQ%A5*H&%fh`#E(eiRGd>era(w=P5# z?Uqw`G6Hdsqn40j4YRt=>(8#@zh1=7z7?)Lti)Q#oII0v{J@R9*SQYu;eLbCo`|n* z*p_*di;T&Ieb!MJ>9PHOX*9~!|4e7v7yvn#u+pC=0d>rospBcvkM!;RT z)W){0xofDM+VKiCffMY;2IXIn>I9GR75NNsbmyZw@nm(&85-yr z&+@i*-A=h1Cpwi?Ip6H-wCa1gIB%oVhe~wI-S0-C*?DhC3G}56H78&3xpna^&-AME z@DA!qs^^z?DfQ$FPPJLS{?)nj2P#9Do8-{T;P2iMNk4Ea-}Glsgub?%F5bLUU!lwvM9B= zRR_K^BGG&Arc3|#n-6Wm4VVBPXv!wR$N!aJ+!Bt?@A4GX z!FfF;nrz(S?DYHuKM6|ud z&DBL5E#0Jg9J&PZ@nJIF32ss3bJ64EINDk?w-Yc z9X(Eih*19INRlN@o6Hn`osH$fxFnxoQ@C2JUabUHL9Y2N~S+cgj=qhIrahXEpT9-5Hl}op;TSAQS z7*?EG_3A68C%=XrTlQ?)VCojLJJ$kkx4Hqv{jEE9=4Qk@8{g1*vv9e66S@cuT7(?~*&M7Wv2xgiy{&i!JcjmcgpUEjXXrawH`3-z~wN>Go=VA1x zr8R;F=fZUUxoWGg9#-U`x8|BEs_!tjVTt2SH)g1vDcfeI#l~3bP>RMnZn@`HPwTGl z#@nv19ZZ;Qbk(KV?1#s`*YA4^cbgix>1Mof#~rgfZ^^k{oQ;(0otfeON9{HIn2R#! zJaEquPh6VHA4ffP)m4goa@R{fU5%r`o86I{OMiRs)pzH;camCvJ@|oRPowt5GFKdQ zM>H7SZv?`hHpSL7Hz4bL@er9-I{1iB~8r{!<4}{NlH)h z&5~S&s&EAdTrw1z2gv}!8#a+9Ipkp!rMNpE0;*IVBBBfDBq#nPl1zzXV4@Sn=m;oI z(Tr!DTNR=8oNal^O;=pip1Me|FNz_IW5i=v8i+=$B9BCXmN*(Huus z$1vP6kB_Xz9{o5;O3H16io|4T%4j)Ac2aShtYj!fiK$Cw(v)73B$zz8%I2kVl&^#( zze;&ZT7rO)wqa#1J#oue_R^QJnPn}7nH*5cPM60dN-=-AOlHa^n8SqTZj`weWLA@m zu54yDwYi>WM$?PbhDzgyeLUkx>A;U!=xuQWlCE*Q<~OP6)%M;CS__ - - - -HSSF - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -HSSF -
    -Quick Guide -
    -HOWTO -
    -Use Case -
    -Pictorial Docs -
    -Alternatives -
    -
    -Contributer's Guide -
    -Record Generator -
    -
    -
    -
    -HSSF - - - - - - -
    - - - - - - -
    - - - - - - -
    HSSF
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Overview
    -
    - - -

    HSSF is the POI Project's pure Java implementation of the Excel '97(-2002) file format.

    - -

    HSSF provides a way to read spreadsheets create, modify, read and write XLS spreadsheets - It provides: -

    - -
      - -
    • low level structures for those with special needs
    • - -
    • an eventmodel api for efficient read-only access
    • - -
    • a full usermodel api for creating, reading and modifying XLS files
    • - -
    - -

    - Truth be told there is probably a better way to generate your spreadsheet - generation (yet you'll still be using HSSF indirectly). At the time of - this writing we're in the process of moving the HSSF Serializer over to - the Apache Cocoon - Project. With Cocoon you can serialize any XML datasource (of - which might be a ESQL page outputting in SQL for instance) by simply - applying the stylesheet and designating the serializer. -

    - -

    - If you're merely reading spreadsheet data, then use the eventmodel api - in the org.apache.poi.hssf.eventmodel package. -

    - -

    - If you're modifying spreadsheet data then use the usermodel api. You - can also generate spreadsheets this way, but using Cocoon (which will do - it this way indirectly) is the best way...we promise. -

    - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/hssf/quick-guide.html b/build/jakarta-poi/docs/hssf/quick-guide.html deleted file mode 100644 index f053d86d29..0000000000 --- a/build/jakarta-poi/docs/hssf/quick-guide.html +++ /dev/null @@ -1,597 +0,0 @@ - - - - - - - - - - -

    - - - - - -
    - -
    - - - - - - - -
    How do I...?
    -
    Learn more about this project?
    -
    Print this page...
    -
    Troubleshoot...
    -
    -
    -
    -
    - - - - -
    -
    -   -   -   - web site mail lists -
    -
    -
    -

    Quick Guide to HSSF Features

    - -

    - -

    -
    - -
    - - - - - - - -
    Quick Guide to Features
    -
    - -

    - Want to use HSSF read and write spreadsheets in a hurry? This guide is for you. If you're after - more in-depth coverage of the HSSF user-API please consult the HOWTO - guide as it contains actual descriptions of how to use this stuff. -

    - - -
    - -
    - - - - - - - -
    Features
    -
    - - - -

    New Workbook

    - -
    - - - - -
    -
    -    HSSFWorkbook wb = new HSSFWorkbook();
    -    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    -    wb.write(fileOut);
    -    fileOut.close();
    -                    
    -
    -
    - - - - -

    New Sheet

    - -
    - - - - -
    -
    -    HSSFWorkbook wb = new HSSFWorkbook();
    -    HSSFSheet sheet1 = wb.createSheet("new sheet");
    -    HSSFSheet sheet2 = wb.createSheet("second sheet");
    -    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    -    wb.write(fileOut);
    -    fileOut.close();
    -                    
    -
    -
    - - - - -

    Creating Cells

    - -
    - - - - -
    -
    -    HSSFWorkbook wb = new HSSFWorkbook();
    -    HSSFSheet sheet = wb.createSheet("new sheet");
    -
    -    // Create a row and put some cells in it. Rows are 0 based.
    -    HSSFRow row = sheet.createRow((short)0);
    -    // Create a cell and put a value in it.
    -    HSSFCell cell = row.createCell((short)0);
    -    cell.setCellValue(1);
    -
    -    // Or do it on one line.
    -    row.createCell((short)1).setCellValue(1.2);
    -    row.createCell((short)2).setCellValue("This is a string");
    -    row.createCell((short)3).setCellValue(true);
    -
    -    // Write the output to a file
    -    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    -    wb.write(fileOut);
    -    fileOut.close();
    -                    
    -
    -
    - - - - -

    Creating Date Cells

    - -
    - - - - -
    -
    -    HSSFWorkbook wb = new HSSFWorkbook();
    -    HSSFSheet sheet = wb.createSheet("new sheet");
    -
    -    // Create a row and put some cells in it. Rows are 0 based.
    -    HSSFRow row = sheet.createRow((short)0);
    -
    -    // Create a cell and put a date value in it.  The first cell is not styled
    -    // as a date.
    -    HSSFCell cell = row.createCell((short)0);
    -    cell.setCellValue(new Date());
    -
    -    // we style the second cell as a date (and time).  It is important to
    -    // create a new cell style from the workbook otherwise you can end up
    -    // modifying the built in style and effecting not only this cell but other cells.
    -    HSSFCellStyle cellStyle = wb.createCellStyle();
    -    cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));
    -    cell = row.createCell((short)1);
    -    cell.setCellValue(new Date());
    -    cell.setCellStyle(cellStyle);
    -
    -    // Write the output to a file
    -    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    -    wb.write(fileOut);
    -    fileOut.close();
    -                    
    -
    -
    - - - - -

    Working with different types of cells

    - -
    - - - - -
    -
    -    HSSFWorkbook wb = new HSSFWorkbook();
    -    HSSFSheet sheet = wb.createSheet("new sheet");
    -    HSSFRow row = sheet.createRow((short)2);
    -    row.createCell((short) 0).setCellValue(1.1);
    -    row.createCell((short) 1).setCellValue(new Date());
    -    row.createCell((short) 2).setCellValue("a string");
    -    row.createCell((short) 3).setCellValue(true);
    -    row.createCell((short) 4).setCellType(HSSFCell.CELL_TYPE_ERROR);
    -
    -    // Write the output to a file
    -    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    -    wb.write(fileOut);
    -    fileOut.close();
    -                    
    -
    -
    - - - - -

    Demonstrates various alignment options

    - -
    - - - - -
    -
    -    public static void main(String[] args)
    -            throws IOException
    -    {
    -        HSSFWorkbook wb = new HSSFWorkbook();
    -        HSSFSheet sheet = wb.createSheet("new sheet");
    -        HSSFRow row = sheet.createRow((short) 2);
    -        createCell(wb, row, (short) 0, HSSFCellStyle.ALIGN_CENTER);
    -        createCell(wb, row, (short) 1, HSSFCellStyle.ALIGN_CENTER_SELECTION);
    -        createCell(wb, row, (short) 2, HSSFCellStyle.ALIGN_FILL);
    -        createCell(wb, row, (short) 3, HSSFCellStyle.ALIGN_GENERAL);
    -        createCell(wb, row, (short) 4, HSSFCellStyle.ALIGN_JUSTIFY);
    -        createCell(wb, row, (short) 5, HSSFCellStyle.ALIGN_LEFT);
    -        createCell(wb, row, (short) 6, HSSFCellStyle.ALIGN_RIGHT);
    -
    -        // Write the output to a file
    -        FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    -        wb.write(fileOut);
    -        fileOut.close();
    -
    -    }
    -
    -    /**
    -     * Creates a cell and aligns it a certain way.
    -     *
    -     * @param wb        the workbook
    -     * @param row       the row to create the cell in
    -     * @param column    the column number to create the cell in
    -     * @param align     the alignment for the cell.
    -     */
    -    private static void createCell(HSSFWorkbook wb, HSSFRow row, short column, short align)
    -    {
    -        HSSFCell cell = row.createCell(column);
    -        cell.setCellValue("Align It");
    -        HSSFCellStyle cellStyle = wb.createCellStyle();
    -        cellStyle.setAlignment(align);
    -        cell.setCellStyle(cellStyle);
    -    }
    -                    
    -
    -
    - - - - -

    Working with borders

    - -
    - - - - -
    -
    -    HSSFWorkbook wb = new HSSFWorkbook();
    -    HSSFSheet sheet = wb.createSheet("new sheet");
    -
    -    // Create a row and put some cells in it. Rows are 0 based.
    -    HSSFRow row = sheet.createRow((short) 1);
    -
    -    // Create a cell and put a value in it.
    -    HSSFCell cell = row.createCell((short) 1);
    -    cell.setCellValue(4);
    -
    -    // Style the cell with borders all around.
    -    HSSFCellStyle style = wb.createCellStyle();
    -    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    -    style.setBottomBorderColor(HSSFCellStyle.BLACK);
    -    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    -    style.setLeftBorderColor(HSSFCellStyle.GREEN);
    -    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
    -    style.setRightBorderColor(HSSFCellStyle.BLUE);
    -    style.setBorderTop(HSSFCellStyle.BORDER_MEDIUM_DASHED);
    -    style.setTopBorderColor(HSSFCellStyle.AUTOMATIC);
    -    cell.setCellStyle(style);
    -
    -    // Write the output to a file
    -    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    -    wb.write(fileOut);
    -    fileOut.close();
    -                    
    -
    -
    - - - - -

    Fills and colors

    - -
    - - - - -
    -
    -    HSSFWorkbook wb = new HSSFWorkbook();
    -    HSSFSheet sheet = wb.createSheet("new sheet");
    -
    -    // Create a row and put some cells in it. Rows are 0 based.
    -    HSSFRow row = sheet.createRow((short) 1);
    -
    -    // Aqua background
    -    HSSFCellStyle style = wb.createCellStyle();
    -    style.setFillBackgroundColor(HSSFCellStyle.AQUA);
    -    style.setFillPattern(HSSFCellStyle.BIG_SPOTS);
    -    HSSFCell cell = row.createCell((short) 1);
    -    cell.setCellValue("X");
    -    cell.setCellStyle(style);
    -
    -    // Orange "foreground", foreground being the fill foreground not the font color.
    -    style = wb.createCellStyle();
    -    style.setFillForegroundColor(HSSFCellStyle.ORANGE);
    -    style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    -    cell = row.createCell((short) 2);
    -    cell.setCellValue("X");
    -    cell.setCellStyle(style);
    -
    -    // Write the output to a file
    -    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    -    wb.write(fileOut);
    -    fileOut.close();
    -                    
    -
    -
    - - - - -

    Merging cells

    - -
    - - - - -
    -
    -    HSSFWorkbook wb = new HSSFWorkbook();
    -    HSSFSheet sheet = wb.createSheet("new sheet");
    -
    -    HSSFRow row = sheet.createRow((short) 1);
    -    HSSFCell cell = row.createCell((short) 1);
    -    cell.setCellValue("This is a test of merging");
    -
    -    sheet.addMergedRegion(new Region(1,(short)1,1,(short)2));
    -
    -    // Write the output to a file
    -    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    -    wb.write(fileOut);
    -    fileOut.close();
    -                    
    -
    -
    - - - - -

    Working with fonts

    - -
    - - - - -
    -
    -    HSSFWorkbook wb = new HSSFWorkbook();
    -    HSSFSheet sheet = wb.createSheet("new sheet");
    -
    -    // Create a row and put some cells in it. Rows are 0 based.
    -    HSSFRow row = sheet.createRow((short) 1);
    -
    -    // Create a new font and alter it.
    -    HSSFFont font = wb.createFont();
    -    font.setFontHeightInPoints((short)24);
    -    font.setFontName("Courier New");
    -    font.setItalic(true);
    -    font.setStrikeout(true);
    -
    -    // Fonts are set into a style so create a new one to use.
    -    HSSFCellStyle style = wb.createCellStyle();
    -    style.setFont(font);
    -
    -    // Create a cell and put a value in it.
    -    HSSFCell cell = row.createCell((short) 1);
    -    cell.setCellValue("This is a test of fonts");
    -    cell.setCellStyle(style);
    -
    -    // Write the output to a file
    -    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    -    wb.write(fileOut);
    -    fileOut.close();
    -                    
    -
    -
    - - - - -

    Reading and Rewriting Workbooks

    - -
    - - - - -
    -
    -    POIFSFileSystem fs      =
    -            new POIFSFileSystem(new FileInputStream("workbook.xls"));
    -    HSSFWorkbook wb = new HSSFWorkbook(fs);
    -    HSSFSheet sheet = wb.getSheetAt(0);
    -    HSSFRow row = sheet.getRow(2);
    -    HSSFCell cell = row.getCell((short)3);
    -    if (cell == null)
    -        cell = row.createCell((short)3);
    -    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
    -    cell.setCellValue("a test");
    -
    -    // Write the output to a file
    -    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    -    wb.write(fileOut);
    -    fileOut.close();
    -                    
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - -
    - - - diff --git a/build/jakarta-poi/docs/hssf/record-generator.html b/build/jakarta-poi/docs/hssf/record-generator.html deleted file mode 100644 index e691284e0c..0000000000 --- a/build/jakarta-poi/docs/hssf/record-generator.html +++ /dev/null @@ -1,321 +0,0 @@ - - - - -Record Generator HOWTO - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -HSSF -
    -Quick Guide -
    -HOWTO -
    -Use Case -
    -Pictorial Docs -
    -Alternatives -
    -
    -Contributer's Guide -
    -Record Generator -
    -
    -
    -
    -Record Generator HOWTO - - - - - - -
    - - - - - - -
    - - - - - - -
    Record Generator HOWTO
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    How to Use the Record Generator
    -
    - - -
    - - - - - - - -
    History
    -
    - -

    - The record generator was born from frustration with translating - the Excel records to Java classes. Doing this manually is a time - consuming process. It's also very easy to make mistakes. -

    - -

    - A utility was needed to take the defintition of what a - record looked like and do all the boring stuff. Thus the - record generator was born. -

    - -
    -
    -
    - - -
    - - - - - - - -
    Capabilities
    -
    - -

    - The record generator takes XML as input and produced the following - output: -

      - -
    • A Java file capabile of decoding and encoding the record.
    • - -
    • A test class with provides a fill-in-the-blanks implementation of a test case - for ensuring the record operates as designed.
    • - -
    - -

    - -
    -
    -
    - -
    - - - - - - - -
    Usage
    -
    - -

    - The record generator is invoked as an Ant target (generate-records). It goes - through looking for all files in src/records/defintitions ending with _record.xml. - It then creates two files; the Java record definition and the Java test case template. -

    - -

    - The records themselves have the following general layout: -

    - -
    - - - - -
    -
    -<record id="0x1032" name="Frame" package="org.apache.poi.hssf.record">
    -    <description>The frame record indicates whether there is a border 
    -                 around the displayed text of a chart.</description>
    -    <author>Glen Stampoultzis (glens at apache.org)</author>
    -    <fields>
    -        <field type="int" size="2" name="border type">
    -            <const name="regular" value="0" description="regular rectangle or no border"/>
    -            <const name="shadow" value="1" description="rectangle with shadow"/>
    -        </field>
    -        <field type="int" size="2" name="options">
    -            <bit number="0" name="auto size" 
    -               description="excel calculates the size automatically if true"/>
    -            <bit number="1" name="auto position" 
    -               description="excel calculates the position automatically"/>
    -        </field>
    -    </fields>
    -</record>
    -        
    -
    -
    - -

    - Currently the type can be of type int, float or string. The 'int' - type covers bytes, shorts and integers which is selected using a - size of 1, 2 or 4. An additional type called varword is used to - represent a array of word values where the first short is the length - of the array. The string type generation is only partially - implemented. If choosing string you must select a size of 'var'. -

    - -

    - The Java records are regenerated each time the record generator is - run, however the test stubs are only created if the test stub does - not already exist. What this means is that you may change test - stubs but not the generated records. -

    - -
    -
    -
    - -
    - - - - - - - -
    How it Works
    -
    - -

    - The record generation works by taking an XML file and styling it - using XLST. Given that XSLT is a little limited in some ways it was - necessary to add a little Java code to the mix. -

    - -

    - See record.xsl, record_test.xsl, FieldIterator.java, - RecordUtil.java, RecordGenerator.java -

    - -
    -
    -
    - -
    - - - - - - - -
    Limitations
    -
    - -

    - The record generator does not handle all possible record types and - is not ment to. Sometimes it's going to make more sense to generate - the records manually. The main point of this thing is to make the - easy stuff simple. -

    - -

    - Currently the record generator is optimized to create Excel records. - It could be adapted to create Word records with a little poking - around. -

    - -

    - Currently the the XSL file that generates the record calls out to - Java objects. This would have been better done as Javascript inside - the XSL file itself. The Java code for the record generation is - currently quite messy with minimal comments. -

    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/hssf/use-case.html b/build/jakarta-poi/docs/hssf/use-case.html deleted file mode 100644 index a8548ee287..0000000000 --- a/build/jakarta-poi/docs/hssf/use-case.html +++ /dev/null @@ -1,520 +0,0 @@ - - - - -HSSF Use Cases - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -HSSF -
    -Quick Guide -
    -HOWTO -
    -Use Case -
    -Pictorial Docs -
    -Alternatives -
    -
    -Contributer's Guide -
    -Record Generator -
    -
    -
    -
    -HSSF Use Cases - - - - - - -
    - - - - - - -
    - - - - - - -
    HSSF Use Cases
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    HSSF Use Cases
    -
    - -
    - - - - - - - -
    Use Case 1: Read existing HSSF
    -
    - - -

    -Primary Actor: HSSF client

    - -

    -Scope: HSSF

    - -

    -Level: Summary

    - -

    -Stakeholders and Interests: -

    - -
      - -
    • HSSF client- wants to read content - of HSSF file
    • - -
    • HSSF - understands HSSF file
    • - -
    • POIFS - understands underlying POI - file system
    • - -
    - -

    -Precondition: None

    - -

    -Minimal Guarantee: None

    - -

    -Main Success Guarantee: -

    - -
      - -
    1. HSSF client requests HSSF to read - a HSSF file, providing an InputStream - containing HSSF file in question.
    2. - -
    3. HSSF requests POIFS to read the HSSF - file, passing the InputStream - object to POIFS (POIFS use case 1, read existing file system)
    4. - -
    5. HSSF reads the "Workbook" - file (use case 4, read workbook entry)
    6. - -
    - -

    -Extensions: -

    - -

    2a. Exceptions -thrown by POIFS will be passed on to the HSSF client.

    - -
    -
    -
    - -
    - - - - - - - -
    Use Case 2: Write HSSF file
    -
    - - -

    -Primary Actor: HSSF client

    - -

    -Scope: HSSF

    - -

    -Level: Summary

    - -

    -Stakeholders and Interests: -

    - -
      - -
    • HSSF client- wants to write file - out.
    • - -
    • HSSF - knows how to write file - out.
    • - -
    • POIFS - knows how to write file - system out.
    • - -
    - -

    -Precondition: -

    - -
      - -
    • File has been - read (use case 1, read existing HSSF file) and subsequently modified - or file has been created (use case 3, create HSSF file)
    • - -
    - -

    -Minimal Guarantee: None

    - -

    -Main Success Guarantee: -

    - -
      - -
    1. HSSF client - provides an OutputStream to - write the file to.
    2. - -
    3. HSSF writes - the "Workbook" to its associated POIFS file system (use case - 5, write workbook entry)
    4. - -
    5. HSSF - requests POIFS to write its file system out, using the OutputStream - obtained from the HSSF client (POIFS use case 2, write file system).
    6. - -
    - -

    -Extensions: -

    - -

    3a. Exceptions -from POIFS are passed to the HSSF client.

    - - -
    -
    -
    - -
    - - - - - - - -
    Use Case 3:Create HSSF file
    -
    - - -

    -Primary Actor: HSSF client

    - -

    -Scope: HSSF

    - -

    - -Level: Summary

    - -

    -Stakeholders and Interests: -

    - -
      - -
    • HSSF client- wants to create a new - file.
    • - -
    • HSSF - knows how to create a new - file.
    • - -
    • POIFS - knows how to creat a new - file system.
    • - -
    - -

    -Precondition: -

    - -

    -Minimal Guarantee: None

    - -

    -Main Success Guarantee: -

    - -
      - -
    1. HSSF requests - POIFS to create a new file system (POIFS use case 3, create new file - system)
    2. - -
    - -

    -Extensions: -None

    - - -
    -
    -
    - -
    - - - - - - - -
    Use Case 4: Read workbook entry
    -
    - -

    -Primary Actor: HSSF

    - -

    -Scope: HSSF

    - -

    - -Level: Summary

    - -

    -Stakeholders and Interests: -

    - -
      - -
    • HSSF - knows how to read the - workbook entry
    • - -
    • POIFS - knows how to manage the file - system.
    • - -
    - -

    -Precondition: -

    - -
      - -
    • The file - system has been read (use case 1, read existing HSSF file) or has - been created and written to (use case 3, create HSSF file system; - use case 5, write workbook entry).
    • - -
    - -

    -Minimal -Guarantee: None

    - -

    -Main Success Guarantee: -

    - -
      - -
    1. - HSSF requests POIFS for the "Workbook" file
    2. - -
    3. POIFS returns - an InputStream for the file.
    4. - -
    5. HSSF reads - from the InputStream provided by POIFS
    6. - -
    7. HSSF closes - the InputStream provided by POIFS
    8. - -
    - -

    -Extensions: -

    - -

    3a. Exceptions -thrown by POIFS will be passed on

    - -
    -
    -
    - -
    - - - - - - - -
    Use Case 5: Write workbook entry
    -
    - - - -

    -Primary Actor: HSSF

    - -

    -Scope: HSSF

    - -

    - -Level: Summary

    - -

    -Stakeholders and Interests: -

    - -
      - -
    • HSSF - knows how to manage the - write the workbook entry.
    • - -
    • POIFS - knows how to manage the file - system.
    • - -
    - -

    -Precondition: - -

    - -
      - -
    • Either an existing HSSF file has - been read (use case 1, read existing HSSF file) or an HSSF file has - been created (use case 3, create HSSF file).
    • - -
    - -

    -Minimal Guarantee: None

    - -

    -Main Success Guarantee: -

    - -
      - -
    1. HSSF - checks the POIFS file system directory for the "Workbook" - file (POIFS use case 8, read file system directory)
    2. - -
    3. If "Workbook" is in the directory, HSSF requests POIFS to - replace it with the new workbook entry (POIFS use case 4, replace file - in file system). Otherwise, HSSF requests POIFS to write the new - workbook file, with the name "Workbook" (POIFS use case 6, - write new file to file system)
    4. - -
    - -

    -Extensions:None

    - -
    -
    -
    - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/images/built-with-cocoon.gif b/build/jakarta-poi/docs/images/built-with-cocoon.gif deleted file mode 100644 index 0b38f7857b6e621a964664dec8f6e12f07ff71de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2252 zcmWlYk6X+80>`&c?Q6*Ty|ly1Vlr)YCcFJ$W@+ZDmL@wHr<=uO+^J!wGfd~JhObO5 zEhbab8SO9`O;5+usnKFLlghY55+}}X9E9uF;X3a>;QhRw_w#x$UcyUCUXzQ7!aTuX z2t<;#%>fMUKy3y}6Oid4wN;`-NenKHK@$jsQngO3Kv9Fm;p!ucRDh=@vjid;Vzb#s zd_Ex5(0CGoRINk}gM))y9?xoTrwA25q9c+iK;N#@>wwO#QmIfBC5cpSw_9(v@kA1q zP@a;K5<+3v+MGaPqzdGH-a(~C55%b1)-DiBsVOi(ZA3AmRH{NKOjx1#Zb zu6TmdNTe_(NDV|<3Yp21sw&xBZlA{sL?{E60F{|YA`?i|wzjquk%BFhxLhuvvH+!- z#*+fMQD?O3^?FEAPo>dDMn;TgtJCQOYO7FM>ht*^>0ugoHGtKWlpL4at56|>!y}NW zQlT+GsEtHr0GSaeOnC}ag&G+=sn%!}$u&F}Cgzn{tyZJSM53`sd1a6oZFjgl-r*GC zCY45Kx7$gy6pzOPsmzev7(%8wU44Q)IV_ezN)sf|KzTZc)5R7ke7@(9+(2OoAc>wO zkaNXK3X>;O>xYMj313wZDz$n86P6L=1_fdO8as_Efy6o@g{je-P1Z{ehXeXbn5VPa z9YCN7AriF)3sHiSs7#?qOrbFqh|c3392xNewFSrw5~Y^J-~q%&W^h$n6Zm^oHkkHnf!<#&$X(w!Dv#=ym$&HKd33ak<_(uPu2m}j)4msQWtZw3IFID zn0tTwkf$N7lhBpiaTP>Qyc~F?p`s=@=kW#$ZN0nY<@9~@D{sFkAiSaUH}XH9adw~0 ztlj?PZpY9`O?nJ~M#nd=`s424&Q-_f7;|LDi=8*7b!8WK|0^gnYn*>Lrn%R@wu1-M~UshE9KC#uP3O$Deg%>$bz3LW0DboKUC;jQh^` zD6f2XP&0nsQcIybS_03g+!g=fyM9hmDR>e`#1~wjo^)kRXOez(f}8#MB(c$gi(fn9 zJ9@h-yKY8&!0YSDpZpz}^Uoi9R2b99hdXq&G>IF-P7qdKh-W9BSq_DFH{n)IO?<|g z5_y5XaO$nz^qK?4(1Rtqwp#(?=!s(;ejg95>@R(wR>fBwHT;LZ@V;Qn*s<62Ip8j}+nKD;YH z7mPL+ObE&Uh`oucFFbI?^Eq}mXsF;11%`Zo^i|8f0L~%T?a|V|-h2jQqg{Bv%^zc0 zZ$It1Ty-}urn6=EW~Fb|qK`?6ebYj7V4m>AXb>sa~Njm-)y zZhYLAOR4tO^8`}pP%#Ipx>qzm>c$vWo0?t9)kL;&{&aubx%OcNj=xOeob)^)t39=A zG{niC9n=}&`ro`&(L+%ill&@R>|QQEJwN>}8g*ycfxY~76UQn$=x8q{E}(P6^t5VR zF9wOPA5Xb)2Z^?qmTwJuh~JrjW0Gy>hD-eL!FM!xR`!(2_fIB$u5Csh#C34ObFOdx zW;w(P$~O=9I>MXo)X!~xLD=-nxuCFQQTVrSD+H|)6d#RDb|(;uOHZ#lg#iFm9*o@~ zE0~KlkqyI9jMb)yI@Dk;D(e0znI8IWepdusg{3EDN;mnXK@~&ij^Q2Hm}VU0X|`vE z`Qz%|EsVNzHO)LfD6+Q1vD4pHzO;4dP-zi1TKET&TlX-mupW~v_z_lMD1ICH9DhOZ zZbh%I=JX{e+p;W$lk~8*G#6sMF4C+Y?U?vm&Wz|w`FPBtX_y6jxh)VSU`bE0_#t;u zQrOp)L;ZCVdOIQ-ZT?$z=j$vlFrhcg_WocBJ;t@?4<`zu$NlhjxgRE0vrEuWw%s@u zh$-n#eEqU)PHF#!v8UzaPtL@{%eWO^yh{r2ZePo82z} diff --git a/build/jakarta-poi/docs/images/cocoon2-small.jpg b/build/jakarta-poi/docs/images/cocoon2-small.jpg deleted file mode 100644 index e8f6dd8c8c0e17f7d97b7265f637000ed61d703a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmb7AdpOez82)Wzmu#{%wPMVKijo;glS{;Op)xH>VU*FZIthD3>zP zDwk3-ks3>4IFw6H%e5uBw4>A0bIxM00SUu>QM09%ti|UgTWv$7!H9# zA>UU(;JF#v0KhEJh7v6tx6v}2v4;LI_(GD?v86^1;T@l&-fyYHNBSsJxS6PM4WjhWFWa3YVC+4q zNoXBAQa7tN$Jj61FsZh`^xjIB12tO&r__#1;v~1lU6k)cGa?G-wWg?Uej_HJsn9^l|ZyEbtLzX z55}4=`KHJ7({d!%&~mK{&RK#(r#f$%F?8$%>=f1%{AeKOtzMh+SZy2gINNb9o~Yy;f~ZUey?Ta822a)vH!Z z{)zF4bPeD7ohWaNTg2Mt(d-^hM|X)@I1lgBRh}viyv<;F_=vSb>n&YT+%qZ6b3Nz% zhbK87WsIQuP3ped0cUN}9$8noQ3HM-Rn!&ObwPwOK7z8VTReoHEtbqq&DuVZE0c_N zOw{gx;LnluvfZ0S>sYcQZ}yg_i{IU0gtgxy(?Y2hZXZfB-eS;(>G@O~DmR2iIGSH*{*J<)zOX(|fBJKR^2?%> zyBFsNoC)z2#mbzD_!G7bQ40D*Ci@4F%Enp-;-f$3 zMX(xcTEz}rs^!C!fiI?@*@p|h{yfi|D2^%k5i+Q>gi+K~jJk;Sn%Nv77aHB1&UAj_ zO!Mp<$^?6quoJ5F5)6_P43CB!e0^zC82#8IG-6Z*7#P}B>~j@9>WgZA`*n|~yC^)civFQS7LLDs^03R#Acsq5FTb-W55H$}=j<)y6FY=qA}ww* K45idpwf_kby7q4X diff --git a/build/jakarta-poi/docs/images/header.gif b/build/jakarta-poi/docs/images/header.gif deleted file mode 100644 index b9c2ee13910846fc549adb17e9c4466f407daeea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3165 zcmZvb`#Teg4fk0DwRsBog@>4Myg{ zDIyeAg5}iE+S}U)-}MrSL>L}CJ~Kq(!uWhXlms?4HMJ&z84LzXLL{&eFp?!l!k$_j z$FZ=BEAwzFELD_@e;cz?{MuEbKP^O4LW0NAeWTBKn zqzcoYK(rGSYXB$a<`baDts z$B>vlSSpMvLXo*}6vbMukYB5$l7$#+G8jvP;plKY1CAnD6IghuR7&O}t%+b>B^^Vt zMi8MSE}SW1h->&58j{94&XH0lXU3^w42ldTatXo)7Lo|Xvk(|63_$>sm{^JsBW)-n zvXSfSs}w$R^wT>s+n2~iuB@+6#aLktlfc1KMOY6yiY!DCSO^3jOy;3*Oe}^1Lz194 z1{_OWyW~f3GyDW-X zNt7*4;ps>O$(qPSkr@OG**2|`Mr9M3A_|p{qwy&;Apt>v(!^K_&jCrW;#YDB3{+PA zWilVdmXL-<`?+E!RfKUR!I4C30vm~?B5*VWoloLP*bE^KMusNvXml=_%)wqRJE2f0 zBu!kp7?&=kt*k7QIGA<$I-c>b7=y|pl2|yZ@ZTCJEX58-gOAOOGQ|WkAM;uEks&6| z$fgqbQ3NImLr0RiSQOcs$U@C5P6_LOPc91^myOamC*MsD@uc+0$w}FwjKass<#G~- zNa5h=Wq7uf$}3}WYc7cDSwsdFMuhs%5hxOjCdQ|W**F@C!KdJ5Hh3Z8Zgxia40o>| zqDKRHDPcf;7-5zQ+utr)P`g7Nj>e-C3=7d#t^qI)CF>~hp z{9B(N8K0WjYlt7hgm1U*xz6AuJ>Ps%RNRcB#(Sd1eXGK6I`P9nz?dD zYV~Yrew*l|ZcSIKfuoRDi^^fkXR~~tHGWHltt(FUJ%6@3J5cU(XZ+}^WX6cy*<*bz zo9Oo8Rz=1E+n*~y<>{WpwLXcnpl3T4)_*}iad`bl#^GDrw*O2ju}v2H(Y>mC4TDAS~HLq=3XgY7omLstNLT#hnRPPk59$uQyV9E2tUWbwA}!0 zK)6l?5$xWb(`W!HteuPSgQ4=gvj80lNfoX6(k^C>hvrB;P_MDaB&NkI#ko7^&mVFyB?j$ zI~E9nhw7IaY7ew%#(mh6{|jT(u&^iAJyJ@wv};=GdKAe$B-VO6gb8P1lcK zU78l-HXf$F>CKs}X;lP%X-#drvKryyAMo9D1J}aeG3%r)ulL_I_@N{|@5)PP*3z?$ zrTezWmi+1^y;~zW&rTl#tK;YT=_+o813nop|<4+Z%MVYgFI{| z0B|cWZ@b6dFs}Y&2TJ=hqa?sW`K%WddGmSfpa5do)~O!Rfd(infQqNlr5@x0oxKQ1 zN~ck$s;98EXg-#6>~Zdn-h6bLwvGk%Y=`uoN*XTcb}J1FG& z&5ujCBYC5m9z$&(66c)%=2>`by?ON;CzPec8Jn?fWe0bAC z`=_Jp!TLa+X0j1r*ZbGD@Qc?oQ^ucmHRiNx&L7awojl;Y(V>KZWSA%4_1qKsB0$oA z0x)1PO*&x?#M)#(_*jHFYuMvAq?3ukE`%^J-dV-N;!HY$eij@cAypGO82nUzla zO71-lH~9p7m#MbrYIRq<^nPJr#e26c!$FMcYN6wwH`>p?cj-;GDb*VMFlS(NZ}SgA z^e0~{S3}I8PZOiaphX?2X6CDE`u_(vtGEr$Xx%eDLBg!h4d)_x+fKvPtXe;Mb6f4Ik)@>5AK_;r=1 z4o@eiE2H>*-kitZ>3a3xshiVL0FoZB?XkStB`!GP>v>Yn6OH&Xrmjiave>Jx590J~ zYStBWzw@GDgHKeGAb3f3{P)Yd|7bq@)eGnFmaq03wBVdV2A@75oPHVnnBlPyx>WHt z+z~kf>|J`t%D0mZnvQaTpUu3wbmDyN7L!i zF@iZ>X44g8sb`1}rn?JbD3sSw(ctk
  • !@Q>Q2Y$Z-3o3-aRJ4%@`Q!oPCI9iRcZ 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 Por~XaX)J26|9=wz|Ftd} diff --git a/build/jakarta-poi/docs/index.html b/build/jakarta-poi/docs/index.html deleted file mode 100644 index 73cc87acb3..0000000000 --- a/build/jakarta-poi/docs/index.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - - - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -About -
    -Index -
    -History -
    -Future -
    -Download -
    -1.0 Vision -
    -2.0 Vision -
    -Who we are -
    -Changes -
    -FAQ -
    -
    -Sub-Projects -
    -Overview -
    -POIFS -
    -HSSF -
    -HDF -
    -HPSF -
    -POI-Utils -
    -
    -References -
    -In The News -
    -Live Sites -
    -XLS spec [PDF] -
    -Apache Cocoon -
    -Resolutions -
    -
    -Get Involved -
    -Contributing -
    -Bug Database -
    -CVS -
    -Mail Lists -
    -
    -
    -
    -

    - -

    -
    -
    - - - - - - - -
    Logo Contest
    -
    - -

    - The POI committers have voted to - "innovate" and hold a - logo contest. The big P at the top of the page is just a placeholder. - So the rules are pretty much this: -

    - -
      - -
    • - -Only PNG submissions - be accepted (we can convert them as needed). -
    • - -
    • - Submissions must be sent to the POI - User's mailing list via an http link. If you do not - have an available webserver contact Andy (acoliver at apache dot - org) and ask him to post it for you (and he will if it doesn't - suck royally). Large binary attachments annoyingly posted to - the list will be rebuked. :-) -
    • - -
    • - Image authors must be willing to work with us on any font and - sizing issues, etc. -
    • - -
    • - All submissions become property of the Apache Software - Foundation to do whatever it wants with them (thanks!). -
    • - -
    • - A non-binding poll will be taken and everyone can vote. -
    • - -
    • - Based on the poll results and the fact that Andy won't vote for - anything that isn't some kind of tiki god or hawaiian theme - (maybe a poi pounder would be acceptable), the committers will - vote on the new POI logo. -
    • - -
    • - Logos should be submitted in two flavors: one for the top of the - page and another for posting on other sites that note projects - that use POI technology. -
    • - -
    • - The winner will get credit posted somewhere on the POI site and - have their logo used wherever POI is proudly served. -
    • - -
    - -

    - You can see the current submissions here. - -

    - -
    -
    -
    -
    - - - - - - - -
    Purpose
    -
    - -

    - The POI project consists of APIs for manipulating various file formats - based upon Microsoft's OLE 2 Compound Document format using pure Java. -

    - -

    - OLE 2 Compound Document Format based files include most Microsoft Office - files such as XLS and DOC. -

    - -

    - As a general policy we try to collaborate as much as possible with other projects to - provide this functionality. Examples include: Cocoon for - which you'll soon find generators and serializers for our projects; - Open Office.org with whom we collaborate in documenting the - XLS format; and Lucene for which we'll soon have file - format interpretors. When practical, we donate components directly to those projects for POI-enabling them. -

    - -
    - - - - - - - -
    Why/when would I use POI?
    -
    - -

    - We'll tackle this on a component level. POI refers to the whole project. -

    - -

    - So why should you use POIFS or HSSF? -

    - -

    - You'd use POIFS if you had a document written in OLE 2 Compound Document Format, probably written using - MFC, that you needed to read in Java. Alternatively, you'd use POI to write OLE 2 Compound Document Format - if you needed to inter-operate with software running on the Windows platform. We are not just bragging when - 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 - spreadsheets using this API, although right now writing is more mature. -

    - -
    -
    -
    - - -
    - - - - - - - -
    What does POI stand for?
    -
    - -

    - POI stands for Poor Obfuscation Implementation. Why would we name our project such a derogatory name? Well, - Microsoft's OLE 2 Compound Document Format is a poorly conceived thing. It is essentially an archive structured - much like the old DOS FAT filesystem. Redmond chose, instead of using tar, gzip, zip or arc, to invent their own - archive format that does not provide any standard encryption or compression, is not very appendable and is prone - to fragmentation. -

    - -

    - Poi is also a Hawaiian delicacy that Merriam Webster's dictionary defines as: - "A Hawaiian food of taro root cooked, pounded, and kneaded to a paste and often allowed to ferment." This seemed - strangely descriptive of the file format. -

    - -

    - So if you like acronyms, then POI is an acronym. If you hate them, then we just used the name of the food for our - project. If you wish to signify your love or hate for acronyms, use POI or Poi to refer to the project respectively. -

    - -
    -
    -
    - - -
    -
    -
    -
    - - - - - - - -
    Components To Date
    -
    - -
    - - - - - - - -
    Overview
    -
    - -

    A common misconception is that POI writes Excel files. POI is the name of the project. POI contains several - components, one of which, HSSF, writes Excel files. The following are components of the entire POI project - and a brief summary of their purpose.

    - -
    -
    -
    - -
    - - - - - - - -
    POIFS (POI Filesystem)
    -
    - -

    POIFS is the oldest and most stable part of the project. It is our port of the OLE 2 Compound Document Format to - pure Java. It supports both read and write functionality. All of our components ultimately rely on it by - definition. Please see the POIFS project page for more information.

    - -
    -
    -
    - -
    - - - - - - - -
    HSSF (Horrible Spreadsheet Format)
    -
    - -

    HSSF is our port of the Microsoft Excel 97(-2002) file format (BIFF8) to pure Java. It supports read and write - capability. Please see the HSSF project page for more information.

    - -
    -
    -
    - -
    - - - - - - - -
    HDF (Horrible Document Format)
    -
    - -

    HDF is our port of the Microsoft Word 97 file format to pure Java. It supports read and write capability. - Please see the HDF project page for more information. This component is - in the early stages of design. Jump in!

    - -
    -
    -
    - -
    - - - - - - - -
    HPSF (Horrible Property Set Format)
    -
    - -

    HPSF is our port of the OLE 2 property set format to pure - Java. Property sets are mostly use to store a document's properties - (title, author, date of last modification etc.), but they can be used - for application-specific purposes as well. Currently HPSF supports - read functionality only. Please see the HPSF project page for more - information.

    - -
    -
    -
    - - -
    -
    -
    -
    - - - - - - - -
    What happened to the HSSF Serializer?
    -
    - -

    The HSSF Serializer, which was part of our 1.0 release and last builds on - Sourceforge, has been donated to the Cocoon project. We're - currently in the process of porting it over.

    - -
    -
    -
    -
    - - - - - - - -
    Contributing
    -
    - -

    - So you'd like to contribute to the project? Great! We need enthusiastic, hard-working, talented folks to help - us on the project in several areas. The first is bug reports and feature requests! The second is documentation - - we'll be at your every beck and call if you've got a critique or you'd like to contribute or otherwise improve - the documentation. We could especially use some help documenting the HSSF file format! Last, but not least, we - could use some binary crunching Java coders to chew through the convolution that characterizes Microsoft's file - formats and help us port new ones to a superior Java platform! -

    - -

    So if you're motivated, ready, and have the time, join the mail lists and we'll be happy to help you get started on the - project! -

    - - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/inthenews.html b/build/jakarta-poi/docs/inthenews.html deleted file mode 100644 index 6b859afe4c..0000000000 --- a/build/jakarta-poi/docs/inthenews.html +++ /dev/null @@ -1,365 +0,0 @@ - - - - - - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -About -
    -Index -
    -History -
    -Future -
    -Download -
    -1.0 Vision -
    -2.0 Vision -
    -Who we are -
    -Changes -
    -FAQ -
    -
    -Sub-Projects -
    -Overview -
    -POIFS -
    -HSSF -
    -HDF -
    -HPSF -
    -POI-Utils -
    -
    -References -
    -In The News -
    -Live Sites -
    -XLS spec [PDF] -
    -Apache Cocoon -
    -Resolutions -
    -
    -Get Involved -
    -Contributing -
    -Bug Database -
    -CVS -
    -Mail Lists -
    -
    -
    -
    -

    - -

    -
    -
    - - - - - - - -
    POI in the news
    -
    - -

    - These are articles/etc. posted about POI around the web. If you - see POI in the news or mentioned at least somewhat prominently - on a site (not your homepage that you put the work POI on in - order to get us to link you and by the why here is a picture of - your wife in kids) then send a patch to the list. In general - equal time will be given so please feel free to send inflamatory - defamation as well as favorable, technical and factual. Really - stupid things won't be mentioned (sorry). -

    - -
    -
    -
    -
    - - - - - - - -
    English
    -
    - - - -
    -
    -
    -
    - - - - - - - -
    Deutsch (German)
    -
    - - - -
    -
    -
    -
    - - - - - - - -
    Español (Spanish)
    -
    - - - -
    -
    -
    -
    - - - - - - - -
    Francais (French)
    -
    - - - -
    -
    -
    -
    - - - - - - - -
    Nihongo (Japanese)
    -
    - - - - -
    -
    -
    -
    - - - - - - - -
    No freaking idea
    -
    - -

    - If you can read one of these languages, send mail to the list - telling us what language it is and we'll categorize it! -

    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/livesites.html b/build/jakarta-poi/docs/livesites.html deleted file mode 100644 index f6e4b8684b..0000000000 --- a/build/jakarta-poi/docs/livesites.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - -Live Sites using Poi - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -About -
    -Index -
    -History -
    -Future -
    -Download -
    -1.0 Vision -
    -2.0 Vision -
    -Who we are -
    -Changes -
    -FAQ -
    -
    -Sub-Projects -
    -Overview -
    -POIFS -
    -HSSF -
    -HDF -
    -HPSF -
    -POI-Utils -
    -
    -References -
    -In The News -
    -Live Sites -
    -XLS spec [PDF] -
    -Apache Cocoon -
    -Resolutions -
    -
    -Get Involved -
    -Contributing -
    -Bug Database -
    -CVS -
    -Mail Lists -
    -
    -
    -
    -Live Sites using Poi - - - - - - -
    - - - - - - -
    - - - - - - -
    Live Sites using Poi
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Live Sites using Poi
    -
    - -

    Currently we don't have any sites listed that use Poi, but we're sure they're out there. - Help us change this. If you've - written a site that utilises Poi let us know. -

    - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/mail-archives.html b/build/jakarta-poi/docs/mail-archives.html deleted file mode 100644 index 8e1916bca4..0000000000 --- a/build/jakarta-poi/docs/mail-archives.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - -Mail Archives - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -About -
    -Index -
    -History -
    -Future -
    -Download -
    -1.0 Vision -
    -2.0 Vision -
    -Who we are -
    -Changes -
    -FAQ -
    -
    -Sub-Projects -
    -Overview -
    -POIFS -
    -HSSF -
    -HDF -
    -HPSF -
    -POI-Utils -
    -
    -References -
    -In The News -
    -Live Sites -
    -XLS spec [PDF] -
    -Apache Cocoon -
    -Resolutions -
    -
    -Get Involved -
    -Contributing -
    -Bug Database -
    -CVS -
    -Mail Lists -
    -
    -
    -
    -Mail Archives - - - - - - -
    - - - - - - -
    - - - - - - -
    Mail Archives
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Mailing List Archives
    -
    - -

    - There are a number of mailing list archives available. -

    - - - - - - - - - - - - - - - - - - - - - - - -
    poi-userpoi-devRegularly updated?Searchable?SpeedOther features?
    - Apache - ApacheYes???
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/mail-lists.html b/build/jakarta-poi/docs/mail-lists.html deleted file mode 100644 index 0407222193..0000000000 --- a/build/jakarta-poi/docs/mail-lists.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - -Mailing Lists - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -About -
    -Index -
    -History -
    -Future -
    -Download -
    -1.0 Vision -
    -2.0 Vision -
    -Who we are -
    -Changes -
    -FAQ -
    -
    -Sub-Projects -
    -Overview -
    -POIFS -
    -HSSF -
    -HDF -
    -HPSF -
    -POI-Utils -
    -
    -References -
    -In The News -
    -Live Sites -
    -XLS spec [PDF] -
    -Apache Cocoon -
    -Resolutions -
    -
    -Get Involved -
    -Contributing -
    -Bug Database -
    -CVS -
    -Mail Lists -
    -
    -
    -
    -Mailing Lists - - - - - - -
    - - - - - - -
    - - - - - - -
    Mailing Lists
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Important Notice
    -
    - -

    -IMPORTANT: Before posting a question or problem to any mailing list, - please first look at the following resources in this order:

    - -
      - -
    1. -FAQs -
    2. - -
    3. -ODP XML links - - a wealth of general XML information.
    4. - -
    5. -Mailing list archives - - a veritable goldmine of Poi-specific information - if you know where to look!
    6. - -
    - - -

    -IMPORTANT: Careful postings please. - These are high-volume lists, so we all needs ways to help us all - work smarter. - See tips for Contributing - -

    - -
    -
    -
    -
    - - - - - - - -
    Poi Users
    -
    - -

    -Subscribe - Unsubscribe - -

    - - -

    The general list, for problems, bug reports, asking for advice on how - best to implement a site, comparisons with other frameworks, etc. - But don't forget to look in the FAQ first, please!

    - - -

    -This is also not an appropriate list for general Java questions. - Instead try news:comp.lang.java.help - or http://hotdispatch.com/, for - example.

    - - -

    -This is not an appropriate list for general XML questions. - Instead - look at the ODP for - XML/XSL links - (such as the excellent - XSL tutorial at Zvon.org) or try the - Mulberrytech XSL list.

    - - -

    -IMPORTANT: If you are posting about a problem - you are having (as most people do), it will aid in finding a - speedy resolution if you provide full configuration details - (especially the version number, but also your - operating system, JDK version, etc.), and full details of any - errors encountered (including full error messages and stack - traces).

    - - -

    Please also have some consideration for the other users on the list - this is a - busy list and we do not appreciate getting the exact same message posted impatiently - several times a day/week! Doing so is only likely to make your question answered more - slowly, or not at all, not faster.

    - -
    -
    -
    -
    - - - - - - - -
    Poi Dev
    -
    - -

    -Subscribe - Unsubscribe - -

    - - -

    This list is for developers working on or wanting to work on - Poi itself (not developers merely working with Poi), - for code patches to Poi to be posted (please use diff -u format), - and for general Poi questions.

    - - -

    Note this is NOT for general Poi questions like "Why - isn't Poi working on my machine?" - - please ask those sorts of questions on users list (after reading the - FAQ first, of course).

    - -
    -
    -
    -
    - - - - - - - -
    Related Mailing Lists
    -
    - - -

    (See also - ODP XML links for related websites.)

    - -
      - -
    • -XML Apache Projects - - list of mailing lists for all the projects on xml.apache.org.
    • - -
    • Some servlet engines have their own mailing lists for servlet-engine - configuration questions, such as - tomcat-user (note it is "user" - and not "users").
    • - -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/news/images/built-with-cocoon.gif b/build/jakarta-poi/docs/news/images/built-with-cocoon.gif deleted file mode 100644 index 0b38f7857b6e621a964664dec8f6e12f07ff71de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2252 zcmWlYk6X+80>`&c?Q6*Ty|ly1Vlr)YCcFJ$W@+ZDmL@wHr<=uO+^J!wGfd~JhObO5 zEhbab8SO9`O;5+usnKFLlghY55+}}X9E9uF;X3a>;QhRw_w#x$UcyUCUXzQ7!aTuX z2t<;#%>fMUKy3y}6Oid4wN;`-NenKHK@$jsQngO3Kv9Fm;p!ucRDh=@vjid;Vzb#s zd_Ex5(0CGoRINk}gM))y9?xoTrwA25q9c+iK;N#@>wwO#QmIfBC5cpSw_9(v@kA1q zP@a;K5<+3v+MGaPqzdGH-a(~C55%b1)-DiBsVOi(ZA3AmRH{NKOjx1#Zb zu6TmdNTe_(NDV|<3Yp21sw&xBZlA{sL?{E60F{|YA`?i|wzjquk%BFhxLhuvvH+!- z#*+fMQD?O3^?FEAPo>dDMn;TgtJCQOYO7FM>ht*^>0ugoHGtKWlpL4at56|>!y}NW zQlT+GsEtHr0GSaeOnC}ag&G+=sn%!}$u&F}Cgzn{tyZJSM53`sd1a6oZFjgl-r*GC zCY45Kx7$gy6pzOPsmzev7(%8wU44Q)IV_ezN)sf|KzTZc)5R7ke7@(9+(2OoAc>wO zkaNXK3X>;O>xYMj313wZDz$n86P6L=1_fdO8as_Efy6o@g{je-P1Z{ehXeXbn5VPa z9YCN7AriF)3sHiSs7#?qOrbFqh|c3392xNewFSrw5~Y^J-~q%&W^h$n6Zm^oHkkHnf!<#&$X(w!Dv#=ym$&HKd33ak<_(uPu2m}j)4msQWtZw3IFID zn0tTwkf$N7lhBpiaTP>Qyc~F?p`s=@=kW#$ZN0nY<@9~@D{sFkAiSaUH}XH9adw~0 ztlj?PZpY9`O?nJ~M#nd=`s424&Q-_f7;|LDi=8*7b!8WK|0^gnYn*>Lrn%R@wu1-M~UshE9KC#uP3O$Deg%>$bz3LW0DboKUC;jQh^` zD6f2XP&0nsQcIybS_03g+!g=fyM9hmDR>e`#1~wjo^)kRXOez(f}8#MB(c$gi(fn9 zJ9@h-yKY8&!0YSDpZpz}^Uoi9R2b99hdXq&G>IF-P7qdKh-W9BSq_DFH{n)IO?<|g z5_y5XaO$nz^qK?4(1Rtqwp#(?=!s(;ejg95>@R(wR>fBwHT;LZ@V;Qn*s<62Ip8j}+nKD;YH z7mPL+ObE&Uh`oucFFbI?^Eq}mXsF;11%`Zo^i|8f0L~%T?a|V|-h2jQqg{Bv%^zc0 zZ$It1Ty-}urn6=EW~Fb|qK`?6ebYj7V4m>AXb>sa~Njm-)y zZhYLAOR4tO^8`}pP%#Ipx>qzm>c$vWo0?t9)kL;&{&aubx%OcNj=xOeob)^)t39=A zG{niC9n=}&`ro`&(L+%ill&@R>|QQEJwN>}8g*ycfxY~76UQn$=x8q{E}(P6^t5VR zF9wOPA5Xb)2Z^?qmTwJuh~JrjW0Gy>hD-eL!FM!xR`!(2_fIB$u5Csh#C34ObFOdx zW;w(P$~O=9I>MXo)X!~xLD=-nxuCFQQTVrSD+H|)6d#RDb|(;uOHZ#lg#iFm9*o@~ zE0~KlkqyI9jMb)yI@Dk;D(e0znI8IWepdusg{3EDN;mnXK@~&ij^Q2Hm}VU0X|`vE z`Qz%|EsVNzHO)LfD6+Q1vD4pHzO;4dP-zi1TKET&TlX-mupW~v_z_lMD1ICH9DhOZ zZbh%I=JX{e+p;W$lk~8*G#6sMF4C+Y?U?vm&Wz|w`FPBtX_y6jxh)VSU`bE0_#t;u zQrOp)L;ZCVdOIQ-ZT?$z=j$vlFrhcg_WocBJ;t@?4<`zu$NlhjxgRE0vrEuWw%s@u zh$-n#eEqU)PHF#!v8UzaPtL@{%eWO^yh{r2ZePo82z} diff --git a/build/jakarta-poi/docs/news/images/built-with-cocoon.png b/build/jakarta-poi/docs/news/images/built-with-cocoon.png deleted file mode 100644 index 64e25d3bbfe01b4a080ed30fe74e41159dde91f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2472 zcmV;Z30L-sP)>XQc-PNuU=3V(2$|L+kd$!+az5h3`_r%_{{|ErM zt6k}zBL@?s-s7$Jc)vJ*JO=H~fTI!+fs_O~H4utK5r6`r6fp>65K>sd%7g%=001cg zDLF_HkY$V+83V?cP+)WQM8i=+03g@riqa7P1ThpPp)=vSzmK2 z!21JydI9|b9smyQ*?#b7{m7CQ*-VRPyNdEn8&|sz9<5IYNBFfhbGNLoIdSev`odcQ ze$#6AX#U34ZncVg>Dg~S;-2pH_3)u+*8kr*V^ObbX1}u{YPLc=2?i|?iWCgQ1rSpp z%ZO4$2u-ChrX-O-g21E*6NwW+fVhA{VGvSGC{Cg=IuvJQA`=-WQjkhvLgHE@A;i+z zmd-V1Mz~6BKY!!>AHK40^ZMl`qkiI5N_WSG7j}KeR@XS)EP!f8uK+|{mhFO27V zeLWjq*nQ;FOOHQ1H$yq4(X}jotY!WxG2c#E22vu5#4sT+7(q#a4um0*M3T%TB{~?R zdX!W&@ zBptIg>OEdQGz0+cz8+VJZDJ$Fqu%39H-*WluWRtSt6hs{yXqRecOnA-9~uG}lPIY- z`b(x`1VqVDL7>410sugS$|z1iOhGb%qDhb?j4&{mDmYNEM6W^$mLdcyCE{2l5P~RD za72k~%K$-?5CjM@EMYLs z!4Qd41+e*MDH4TXl+`H9FP=!LG>8yZOpebx#t3({tF~q?0OT2U^&YRQ#FlRL3A$r+ z^8-L#gLm`#YevO$CNYB1}863i)y zBw0Q5CRrMTma01PJ6H>Kr!H z?*0EtBt?H9SeS3BaN19tyP{Dm>pfnRQST4%iKGaCyuKc_imPziNB=Q@fUj`c|2sZW zy~oRkq8b&K!7s9z(pQa~N?*>~oe9F>fe_`xcyI_1gK~4I*#KG%!3fMtQoNTDchxd4O$03ZYi0FXKo6tsF}Z0P>7-`jJ<{~Up`S%6^BU{-YW zNn#SLIu_JeDaj%tm{PToNk&}FXTG4?eY*e;+z54q@8c}c*KPs95blNG1FPgg8sVQd zKPt$k7_VlMx?tY}tOPQQa28r;R5%%y$x7u1Bd5Z21Mn&+q(g>vccF;8(YAnO9ZP)O1-)iCHz<+B^2X z_eoy9!vkJ*M8&iwyrRz zHDxUt05k@3sl&GRkp(MPt+>gHN?jg|^_=6lpZ)mR@2*|=li##2s-9h4QTXV}6?{_3 zD0O$z)R}A#yQ_<)=oY${h)R<}m6MrNquTezFV`)r{KMh;mCNQKF|xFFgRHVJoF;>5 zH0bxg_4?{X<$pbT5g|Bm;JtS~IL;_k88n7ve(;@*+n)OR>ADM`(2Oy{Vlwi4?^WMG z!SrQ!syK}z+mx1;=AH<#O>>V?XYj@~%RfB+*~yD-uROCZIoMTEw)V5LXL(U&nL2x7 z%?hXelaD{928XqN zGoecR>@(cTVS;f!?T_9my4vMTMw6$1bTzzC`I znO#FE#3Ov5{X7MrK!H+1C;(`4?RVFt6f+E`&g=zQmIu1858P}*2mpW*nNW%`R_XGD zc+}_lbi5SC7%0doVf?A_7)={CqNgutw&X8y&%f)%o&KK6%Bq$K|S3um^pwjz{mNKT01t>F*!?>l&G-#^R%&m5=tnQ@ z@pbhcI#$1L_s&oxCXZvPmC9r+{N$$RRE9Fo)sDKxj=$`El@CYml)j;<{k7ly?evAq z%NI=l`#Zl1MPd|a2FIY)-nj1F`}XfOjzvdL|9k0znIF8pb8sljCk(w-+uGdt$9E5y zs~#nUrX*=RCk;xeB*~*Qjd{ejXdzdTAlY8d03a5RHQnIN&RGCp(?brEl*P>Ziy#V~ zD_0e{&Kzq=dX8GPat?}7B4^d?3G{R))CQ{)0TdZQDMzTB$&AKg7aN;$opUq>D*#{w z4g+PS2$0NW2#3RsSG~sKSsJ6Yw8++U<{wJ?be2<(&&x7QiA7a+_SBTJd0CA3Dr531 m_An-m7{;U#!4fk0DwRsBog@>4Myg{ zDIyeAg5}iE+S}U)-}MrSL>L}CJ~Kq(!uWhXlms?4HMJ&z84LzXLL{&eFp?!l!k$_j z$FZ=BEAwzFELD_@e;cz?{MuEbKP^O4LW0NAeWTBKn zqzcoYK(rGSYXB$a<`baDts z$B>vlSSpMvLXo*}6vbMukYB5$l7$#+G8jvP;plKY1CAnD6IghuR7&O}t%+b>B^^Vt zMi8MSE}SW1h->&58j{94&XH0lXU3^w42ldTatXo)7Lo|Xvk(|63_$>sm{^JsBW)-n zvXSfSs}w$R^wT>s+n2~iuB@+6#aLktlfc1KMOY6yiY!DCSO^3jOy;3*Oe}^1Lz194 z1{_OWyW~f3GyDW-X zNt7*4;ps>O$(qPSkr@OG**2|`Mr9M3A_|p{qwy&;Apt>v(!^K_&jCrW;#YDB3{+PA zWilVdmXL-<`?+E!RfKUR!I4C30vm~?B5*VWoloLP*bE^KMusNvXml=_%)wqRJE2f0 zBu!kp7?&=kt*k7QIGA<$I-c>b7=y|pl2|yZ@ZTCJEX58-gOAOOGQ|WkAM;uEks&6| z$fgqbQ3NImLr0RiSQOcs$U@C5P6_LOPc91^myOamC*MsD@uc+0$w}FwjKass<#G~- zNa5h=Wq7uf$}3}WYc7cDSwsdFMuhs%5hxOjCdQ|W**F@C!KdJ5Hh3Z8Zgxia40o>| zqDKRHDPcf;7-5zQ+utr)P`g7Nj>e-C3=7d#t^qI)CF>~hp z{9B(N8K0WjYlt7hgm1U*xz6AuJ>Ps%RNRcB#(Sd1eXGK6I`P9nz?dD zYV~Yrew*l|ZcSIKfuoRDi^^fkXR~~tHGWHltt(FUJ%6@3J5cU(XZ+}^WX6cy*<*bz zo9Oo8Rz=1E+n*~y<>{WpwLXcnpl3T4)_*}iad`bl#^GDrw*O2ju}v2H(Y>mC4TDAS~HLq=3XgY7omLstNLT#hnRPPk59$uQyV9E2tUWbwA}!0 zK)6l?5$xWb(`W!HteuPSgQ4=gvj80lNfoX6(k^C>hvrB;P_MDaB&NkI#ko7^&mVFyB?j$ zI~E9nhw7IaY7ew%#(mh6{|jT(u&^iAJyJ@wv};=GdKAe$B-VO6gb8P1lcK zU78l-HXf$F>CKs}X;lP%X-#drvKryyAMo9D1J}aeG3%r)ulL_I_@N{|@5)PP*3z?$ zrTezWmi+1^y;~zW&rTl#tK;YT=_+o813nop|<4+Z%MVYgFI{| z0B|cWZ@b6dFs}Y&2TJ=hqa?sW`K%WddGmSfpa5do)~O!Rfd(infQqNlr5@x0oxKQ1 zN~ck$s;98EXg-#6>~Zdn-h6bLwvGk%Y=`uoN*XTcb}J1FG& z&5ujCBYC5m9z$&(66c)%=2>`by?ON;CzPec8Jn?fWe0bAC z`=_Jp!TLa+X0j1r*ZbGD@Qc?oQ^ucmHRiNx&L7awojl;Y(V>KZWSA%4_1qKsB0$oA z0x)1PO*&x?#M)#(_*jHFYuMvAq?3ukE`%^J-dV-N;!HY$eij@cAypGO82nUzla zO71-lH~9p7m#MbrYIRq<^nPJr#e26c!$FMcYN6wwH`>p?cj-;GDb*VMFlS(NZ}SgA z^e0~{S3}I8PZOiaphX?2X6CDE`u_(vtGEr$Xx%eDLBg!h4d)_x+fKvPtXe;Mb6f4Ik)@>5AK_;r=1 z4o@eiE2H>*-kitZ>3a3xshiVL0FoZB?XkStB`!GP>v>Yn6OH&Xrmjiave>Jx590J~ zYStBWzw@GDgHKeGAb3f3{P)Yd|7bq@)eGnFmaq03wBVdV2A@75oPHVnnBlPyx>WHt z+z~kf>|J`t%D0mZnvQaTpUu3wbmDyN7L!i zF@iZ>X44g8sb`1}rn?JbD3sSw(ctk
  • !@Q>Q2Y$Z-3o3-aRJ4%@`Q!oPCI9iRcZ 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 diff --git a/build/jakarta-poi/docs/news/images/logoGustafsson1.png b/build/jakarta-poi/docs/news/images/logoGustafsson1.png deleted file mode 100644 index ff13834ff59ee4581adecfa387f5339fb1c0238e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7820 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 diff --git a/build/jakarta-poi/docs/news/images/logoGustafsson2.png b/build/jakarta-poi/docs/news/images/logoGustafsson2.png deleted file mode 100644 index a3f5c86d243f8afda321cbd7096beb4da810ff8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3908 zcmd^B`#)6M-`}(M3}cWPF)@mfOD-dWaThZh8ARhYX5>0GhE(o^&Y5v5Ldju{%4FOs zrISpzrzi<^$R(9VmlIv265OKs55L}AjcPAQxzrjV$-Ee{A)BI@waN(XK>d=k2WLaH3J@8O+?9fK@dT|M zKx1=+8yyUbg)GRR1&Kgds}Z*sNik5eu?MYeK|BHB><*e(AnaU06I0wq3PJ-17?~kL zSxh4noVz!)frJR&pi1}hp!-8R^fky1h_0?K)(+%me~3z@3WY+^3HlG38O;xR{?~24 zP{=zF3W`E{ZG))3P;fLdFcKNcMaIR&`G!DYJCFfvh!F(M&(C`>p#SN}-?Rk^jDUQC zp)X(N_vdM2vDlH35$1NNt}!@(14$$jGMPLu*ic?ciHV6RI%Hf?QE}$nj@h}%wo7Rf z6BEhF$#16~5Q)U)k^Wn^Znd?wS=xe2OG~V9sGy)gE|)WzOcsaM-CODG2F|#d*xA|n z`}><(A|5?%UzSukYy!*6%U{2KZAAgc$H(`s#o1E8y1F`=FXX`h-5Fp~Qc_DxOVMx2 z5s@6vt&rGE_riq>FJHcNrGxh=M3G43OarY6D1ksgWq|zMm|uxn-hNPLXQy8nGK?Kq zZj9e(4|bCEy#m1VB)y!R9ItJleEO}EvuQ*$&5s39=^!%#@}QFG#%Qu5XhB9e;gz>A zq3oP2dH~ed*JtZsNDly?I~ncdMaRTM4G#|+5b-W9E?QbxEiJ9I^*FLU&cg@da3SAy z7*}`wNG>um4w;ySijIyB4h|;UfhH!zyej3HnVIA)WK^`j7ZdUgg{-U%?Cr_n5lkOH zs+BF;nt}@p3nLH+ji+{5+Yp08{I>;b2S!5IZWPxyW*s|TQPG4>+(V<&sZy!b+uJ*W z2W{U8Sz6=V*P%E2gIl(N`wu9krKM$L#wI4C^@$q3{x<$>sN|4v-D)U4#V#lUGBsbb zH`8-xiuT!abtT7@L$}+`&CU4)fs8;=LZP> zqHF>Hn43OyTFAbq+^-&H2r6Ks7Qja!M~E4CDxe=O&{NAnd@S{?f0+r6HDs&m4Iq!MQZu;eARrFBe zK>ZCEUOair`I+HIxqRE3LGLSWgG!j$$D%K%rvj%oN^JhbveYV$Z7IVG0q*?Uq@?+u z(Z78NgjDp?5);#2%9jMOLRYHCK!I%*!vA7k+mF1hx!g+t61%xOC9hYWw&2!4_3?;x z-aL2VWh-GITBW)~)NBXC!4R4@=^djwJ{_ zeKJ~J-h)QVuu~5{54!6dRJjdjJfqe)q@E&iPv?)X&eVnNbU$7`Q1^Or5@&Mi{f9S7 zX`&;Ii@W>I)XF6cwV00HyB+emm&HvONelH!FJLbD6cZJMblSSQ;Pz+z)eB#eP@dC* zaJP!1WglAUlH(OMF+|HZ9z7(Iz7m?KbZU(t?X_F~U)Qcl>sgHh%jLwx(q;KJb^zLR@~el=?ssxI)v-q=+`m_&ebAuR&vSR> z(ZWO2oS7YgV(lOV<|eu#RnW%KX4j&yR5gQVdA5Gm+$<5{UMQlQdw-pNhJ<_;DB7l@Z0`hTMCDz{_F6U*Fzl9-g_v*7XSvOzeq zdM3Vy0%ij25ozIYel5zT9bKFMIxp5hmEx*ids2e3HfAjwsZM6#%_g;Jwi>1Yns`7y zcTAW%BNLmbr&oV)h{>-S&ZY8kr4j78jAK)XX)Q;E);SyHp1e)l^^8R5GD)xX84T&W<-! zrMZ1}MA~o2hX^68ajLC~1AwJU4*1uIcCLQT(Q7tE5^L>gpV4h+J~^Qo2yxq3RZUjJi}TlwM`-28cr9VAorJ{6Nzi-W#5d zPDr!q{jrLp4|owKymt))IOTNhB76G);pqcNG?CFb-jTpt^39GiGBPq0-JMzWv@`Vj zfw$e=_ockkKry-^Bv9Chc0P9vvM$ zIChWN?}n<&o*F|vkWUa_^t-5*z7A>)Ebj?HC}!p*wTm6~*i;HS-*ez@VAkRDpWNRI zWYqWw{3^%ZB5q(5wrJKiEd<4?F@+`KIp;LL+N_}eJok*Wc7v!2ec{JJsA)qCp<27# zFT*U{v8GL-d9$R_l7DDa{-$V5>R5zCn)C4n#a=#%d=Q^Ne4^bohAs=!&5z2V!W1`rfcw6>#A4FA^|`lgyLYIO)4`o<49bWS+y zYxopiw{VuETOoDh6{q1JbrcHd`SA@3^z=~Bzu!yt@qa?O9y10Hh}CR`DxQ*d*oaZ) zWvZh#tq6Xu$R_P#}hQT=_mcW`Rt zJ6Y;Yk;Wr@I)=U(9GY!)+W$v)dWKnwV&u$F{%Na}bUvrv)v`*cJr+OPzrJ6wuPM?X z6vI#Gs%_qUk2B@u%ciHQ^^%OxuCT0()b`H*E|hvcXy_s2=9M6WY(lY_@Oc*NtilS|Pnyea$^YHe?L(I6*QrW}qLT3vD>Fm|7VX$W! z>vOcTX07%XJB2xAoLD#5k%oPo7J0&yLLFQOp066@&}`v3DC6Fi3eZ`p%jusPCS#ll zb4Iv=DO0Rn@!heK!Kb;fdz>t*)fA{>L-|?WC1%8X=2zh(mBjbj@b#5h_eJf~4|Xc( zFfv$|LU)B=qFhx%-RV3nm`aw&*nvN(>tsP>ho0DR1yWftSt{42htsacYEUqT1&n%$;Y3o3pg(qLl%? z9QP;Ti;H%4i;LTbm9QU4_iws4eE*PG{>!8M6~H*h^xd!E3uNJ@?RIn0d~x#@8SHwO z?{LP;!sB}sHX;svKshJAnCd%u|KyhBeZ08YnBJ$`dak$^e?5wu2G++aSU2fj)0=L! zyL(;3njc4|ke-ZSA0~;LuH7B-`euL|T2ME6%2DZAWeh{po3hJ`iVn{gW-%5^MqPGg zZglB!Qr%ABDx>HcH()>y=O!0Fuq4@*wjgU+HtOfd`YMyJj3m2QLTY%=5Lh77FQ3SE z7LA9s2L1ICV z>&IKp_33rK@p!0L5%_E$-3)WhaZc+iIU{9E5Z&>Xe(7I9rNUVZRky3D1Y&Ko-x>2V zp3AD!cSakFYYaE1z_DN7>RQf?L%AmAUHR%UDn_YYM3Ne>y-%5v%YRdxPoCRX={29` zu{T~%%hlECD7@cLdFkFmH^ayMn932)^R2CoLCM2I-Bg`81gxet=hC0N%cgeyXv^E) ztcs<|@ET9H&Rv)lFc$>?e2Y{cwI2i!6ox`;3Le3<|F5b_04o0Mm#XSJ&*1w#;NulQ J|HCsT|3Bg!w{HLd diff --git a/build/jakarta-poi/docs/news/images/logoLoicLefevre.png b/build/jakarta-poi/docs/news/images/logoLoicLefevre.png deleted file mode 100644 index 520840dff78423f4efd863b9c9521f11497f8015..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40251 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 diff --git a/build/jakarta-poi/docs/news/logocontest.html b/build/jakarta-poi/docs/news/logocontest.html deleted file mode 100644 index 90d55ad755..0000000000 --- a/build/jakarta-poi/docs/news/logocontest.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -News -
    -Logo Submissions -
    -
    -
    -
    -

    - -

    -
    -
    - - - - - - - -
    POI logos
    -
    - -

    - Here are the current logo submissions. Thanks to the artists! -

    - -
    - - - - - - - -
    Michael Mosmann
    -
    - -

    - - -

    - -
    -
    -
    - -
    - - - - - - - -
    Loïc Lefèvre
    -
    - -

    - -    - -

    - -
    -
    -
    - -
    - - - - - - - -
    Glen Stampoultzis
    -
    - -

    - - -

    - -
    -
    -
    - -
    - - - - - - - -
    Marcus Gustafsson
    -
    - -

    - -    - -

    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/overview.html b/build/jakarta-poi/docs/overview.html deleted file mode 100644 index 9af14a038b..0000000000 --- a/build/jakarta-poi/docs/overview.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - -Overview - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -About -
    -Index -
    -History -
    -Future -
    -Download -
    -1.0 Vision -
    -2.0 Vision -
    -Who we are -
    -Changes -
    -FAQ -
    -
    -Sub-Projects -
    -Overview -
    -POIFS -
    -HSSF -
    -HDF -
    -HPSF -
    -POI-Utils -
    -
    -References -
    -In The News -
    -Live Sites -
    -XLS spec [PDF] -
    -Apache Cocoon -
    -Resolutions -
    -
    -Get Involved -
    -Contributing -
    -Bug Database -
    -CVS -
    -Mail Lists -
    -
    -
    -
    -Overview - - - - - - -
    - - - - - - -
    - - - - - - -
    Overview
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    What is it?
    -
    - -

    The POI project is the master project for developing pure - Java ports of file formats based on Microsoft's OLE 2 Compound - Document Format. OLE 2 Compound Document Format is used by - Microsoft Office Documents, as well as by programs using MFC - property sets to serialize their document objects. -

    - -
    -
    -
    -
    - - - - - - - -
    Sub-Projects
    -
    - -

    - There following are ports, packages or components contained in the POI project. -

    - -
    - - - - - - - -
    POIFS
    -
    - -

    - -POIFS is the set of APIs - for reading and writing OLE 2 Compound Document Formats using (only) Java. -

    - -
    -
    -
    - - -
    - - - - - - - -
    HSSF
    -
    - -

    - -HSSF is the set of APIs - for reading and writing Microsoft Excel 97(-XP) spreadsheet using (only) Java. -

    - -
    -
    -
    - - -
    - - - - - - - -
    HDF
    -
    - -

    - -HDF is the set of APIs - for reading and writing Microsoft Word 97(-XP) spreadsheet using (only) Java. -

    - -
    -
    -
    - - -
    - - - - - - - -
    HPSF
    -
    - -

    - -HPSF is the set of APIs - for reading property sets using (only) Java. -

    - -
    -
    -
    - - -
    - - - - - - - -
    POI-Utils
    -
    - -

    - -POI-Utils are general purpose artifacts - from POI development that have not yet been implemented elsewhere. We're - always looking to donate these and maintain them as part of a general library - used in another project. These are things we need to complete our mission but - are generally outside of it. -

    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/plan/POI10Vision.html b/build/jakarta-poi/docs/plan/POI10Vision.html deleted file mode 100644 index 40f7547167..0000000000 --- a/build/jakarta-poi/docs/plan/POI10Vision.html +++ /dev/null @@ -1,1142 +0,0 @@ - - - - -POI 1.0 Vision Document - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -Planning Documents -
    -1.0 Vision -
    -2.0 Vision -
    -
    -
    -
    -POI 1.0 Vision Document - - - - - - -
    - - - - - - -
    - - - - - - -
    POI 1.0 Vision Document
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Preface
    -
    - -

    - (21-Jan-02) While this document is just full of useful project - introductory information and I do suggest those interested in getting - involved in the project read it, it is woefully out of date. -

    - -

    - We deliberately allowed this document to run out of date because it - is a good reflection of what the original vision was for POI 1.0. - You'll note that some of the terminology is not used in quite the same - way any longer. I've made some minor corrections where reading this - confused me. An example: in some places this document may refer to - POI API instead of POIFS API. When this vision was written we had - an incomplete understanding of the project. -

    - -

    - Lastly, the scope of the project expanded dramatically near the end - of the 1.0 cycle. Our vision at the time was to focus merely on the - Excel port (having no idea how the project would grow or be received) - and provide the OLE 2 Compound Document port for others to port later - formats. We now plan to spearhead these ports under the umbrella of - the POI project. So, you've been warned. Read on, but just realize - that we had a fuzzy view of things to come, and hindsight is 20-20. -

    - -

    - If I recall major holes were: a complete understanding of the format - of OLE 2 Compound Document format, Excel file format, and exactly how - Cocoon 2 Serializers worked. (that just about covers the whole range - huh?) -

    - -
    -
    -
    -
    - - - - - - - -
    1. Introduction
    -
    - -
    - - - - - - - -
    1.1 Purpose of this document
    -
    - -

    - The purpose of this document is to - collect, analyze and define high-level requirements, user needs and - features of the HSSF Serializer for Cocoon 2 and related libraries. - The HSSF Serializer is a java class supporting the Serializer - interface from the Cocoon 2 project and outputting in a compatible - format of that used by the spreadsheet program Microsoft Excel '97. - The HSSF Serializer will be responsible for converting XML - spreadsheet-like documents into Excel-compatible XLS spreadsheets. -

    - -
    -
    -
    - - - -
    - - - - - - - -
    1.2 Project Overview
    -
    - -

    - Many web apps today hit a brick wall - when it comes to the user request that they be able to easily - manipulate their reports and data extracts in the popular Microsoft - Excel spreadsheet format. This often causes inferior technologies to be - chosen for the project simply because they easily support this - format. This project seeks to extend existing XML, Java and Apache - Cocoon 2 project technologies by: -

    - - -
      - -
    • - providing an extensible library - (POIFS) which reads/writes in a compatable format to OLE 2 Compound - Document Format (aka Structured Storage Format) for easy - implementation of other document types; -
    • - -
    • - providing a library (HSSF) for - manipulating spreadsheet data and outputting it in a compatible - format to Microsoft Excel XLS format; -
    • - -
    • - and providing a Cocoon 2 - Serializer (HSSFSerializer) for serializing XML documents as - Excel-compatible spreadsheets. -
    • - -
    - - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    2. User Description
    -
    - -
    - - - - - - - -
    2.1 User/Market Demographics
    -
    - -

    - There are a number of enthusiastic - users of XML, UNIX and Java technology. Secondly, the Microsoft - solution for outputting Office Document formats often involves - actually manipulating the software as an OLE Server. This method - provides extremely low performance, extremely high overhead and is - only capable of handling one document at a time. -

    - -
      - -
    1. - Our intended audience for the HSSF - Serializer portion of this project are developers writing reports or - data extracts in XML format. -
    2. - -
    3. - Our intended audience for the HSSF - library portion of this project is ourselves as we are developing - the Serializer and anyone who needs to write to Excel spreadsheets - in a non-XML Java environment or who has specific needs not - addressed by the Serializer. -
    4. - -
    5. - Our intended audience for the - "POIFS" OLE 2 Compound Document format reader/writer is - ourselves as we are writing the HSSF library and secondly, anyone - wishing to provide other libraries for reading/writing OLE 2 - Compound Document Format in Java. -
    6. - -
    - -
    -
    -
    - -
    - - - - - - - -
    2.2. User environment
    -
    - -

    - The users of this software shall be - developers in a Java environment on any Operating System or power - users who are capable of XML document generation/deployment. -

    - -
    -
    -
    - -
    - - - - - - - -
    2.3. Key User Needs
    -
    - -

    - The OLE 2 Compound Document format is - undocumented for all practical purposes and cryptic for all - impractical purposes. Developer needs in this area include - documentation and an easy to use library for reading and writing in - this format without requiring the developer to have intimate - knowledge of the format. -

    - -

    - There is currently no good way to write - to Microsoft Excel documents from Java or from a non-Microsoft - Windows based platform for that matter. Developers need an easy to - use library that supports a reasonable feature set and allows - seperation of data from formatting/stylistic concerns. -

    - -

    - There is currently no good way to - transform XML data to Microsoft Excel. Apache's Cocoon 2 project - supplies a complete framework for XML, but nothing for outputting in - Excel's XLS format. Developers and power users alike need a simple - method to output XML documents to Excel through server-side - processing. -

    - - - -
    -
    -
    - -
    - - - - - - - -
    2.4. Alternatives and Competition
    -
    - -

    - Originally there weren't any decent alternatives for reading or writing - to Excel. This has changed somewhat. -

    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    3. Project Overview
    -
    - -
    - - - - - - - -
    3.1. Project Perspective
    -
    - -

    - The produced code shall be licensed by - the Apache License as used by the Cocoon 2 project and maintained on - a project page until such time as the Cocoon 2 developers accept it - as a donation (at which time the copyright will be turned over to - them). -

    - -
    -
    -
    - -
    - - - - - - - -
    3.2. Project Position Statement
    -
    - -

    - For developers on a Java and/or XML - environment this project will provide all the tools necessary for - outputting XML data in the Microsoft Excel format. This project seeks - to make the use of Microsoft Windows based servers unnecessary for - file format considerations and to fully document the OLE 2 Compound - Document format. The project aims not only to provide the tools for - serializing XML to Excel's file format and the tools for writing to - that file format from Java, but also to provide the tools for later - projects to convert other OLE 2 Compound Document formats to pure - Java APIs. -

    - -
    -
    -
    - -
    - - - - - - - -
    3.3. Summary of Capabilities
    -
    - -

    - HSSF Serializer for Apache Cocoon 2 -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Benefit - - Supporting Features -
    - Standard XML tag language for sheet data - - Serializer will transform documents utilizing a defined tag - language -
    - Utilize XML to output in Excel - - Serializer will output in Excel -
    - Java API to output in Excel on any platform - - The project will develop an API that outputs in Excel using - pure Java. -
    - Make it easy for developers to port other OLE 2 Compound - Document-based formats to Java. - - The POIFS library will contain both a high-level abstraction - along with low-level constructs. The project will fully document - the OLE 2 Compound Document Format. -
    - -
    -
    -
    - -
    - - - - - - - -
    3.4. Assumptions and Dependencies
    -
    - -
      - -
    • - The HSSF Serializer will run on - any Java 2 supporting platform with Apache Cocoon 2 installed along - with the HSSF and POIFS APIs. -
    • - -
    • - The HSSF API requires a Java 2 - implementation and the POI API. -
    • - -
    • - The POIFS API requires a Java 2 - implementation. -
    • - -
    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    4. Project Features
    -
    - -

    - The POIFS API will include: -

    - -
      - -
    • - Low level structures representing - the structures in a POI filesystems. -
    • - -
    • - A low-level API for - creating/manipulating POI filesystems. -
    • - -
    • - A set of high level interfaces - abstracting the user from the POI filesystem constructs and - representing it as a standard filesystem (Files, directories, etc) -
    • - -
    - -

    - The HSSF API will include: -

    - -
      - -
    • - Low level structures representing - the structures in an Excel file. -
    • - -
    • - A low-level API for creating and - manipulating Excel files and writing them into POI filesystems. -
    • - -
    • - A high level model and style - interface for manipulating spreadsheet data without knowing anything - about the Excel format itself. -
    • - -
    - -
    - - - - - - - -
    4.1 POI Filesystem API
    -
    - -

    - The POI Filesystem API includes: -

    - -
      - -
    • An implementation of Big Blocks
    • - -
    • An implementation of Small Blocks
    • - -
    • An implementation of Header Blocks
    • - -
    • An implementation of Block Allocation Tables
    • - -
    • An implementation of Property Sets
    • - -
    • An implementation of the POI - filesystem including functions to get and set the above constructs; - compound functions for reading/writing files/directories. -
    • - -
    • An abstraction of the POI - filesystem providing interfaces representing Files, Directories, - FileSystems in normal terminology and encapulating the above - constructs. -
    • - -
    • Full documentation of the POI file - format. -
    • - -
    • Full documentation of the APIs and - interfaces provided through Javadoc, user documentation (aimed at - developers using the APIs) -
    • - -
    • Examples aimed at teaching the - user to write code using POI. (titled: recipes for POI) -
    • - -
    • Performance specifications. - (Example POI filesystems rated by some measure of complexity along - with system specifications and execution times for given operations) -
    • - -
    - -
    -
    -
    - -
    - - - - - - - -
    4.2 HSSF API
    -
    - -

    - The HSSF API includes: -

    - -
      - -
    • An implementation of Record - (binary 2 byte type followed by 2 byte size (n) followed by n bytes)
    • - -
    • Implementations of many standard - record types mapping the data bytes to fields along with methods to - reserialize those fields
    • - -
    • An implementation of the HSSF File - including functions to get/set the above constructs, create a blank - file with the minimum required record types and mappings between - getting/setting data and style in a workbook to the creation of - record types, and read HSSF files.
    • - -
    • An abstraction of the HSSF file - format providing interfaces representing the HSSF File, HSSF - Workbook, HSSF Sheet, HSSF Column, HSSF Formulas in a manner - seperating the data from the styling and encapsulating the above - constructs.
    • - -
    • Full documentation of the HSSF - file format (which will be a subset of the Excel '97 File format). - This must be done with care for legal reasons.
    • - -
    • Full documentation of the APIs and - interfaces provided through Javadoc, user documentation (aimed at - developers using the apis).
    • - -
    • Examples aimed at teaching - developers to use the APIs. -
    • - -
    • Performance specifications. - (Example files rated by some measure of complexity along with system - specifications and execution times for given operations - possibly - the same files used for POI's tests)
    • - -
    - -
    -
    -
    - -
    - - - - - - - -
    4.3 HSSF Serializer
    -
    - -

    - The HSSF Serializer subproject: -

    - -
      - -
    • A class supporting the Cocoon 2 - Serializer Interface.
    • - -
    • An interface between the SAX - events and the HSSF APIs.
    • - -
    • A specified tag language for using - with the Serializer.
    • - -
    • Documentation on the tag language - for the HSSF Serializer
    • - -
    • Normal javadocs.
    • - -
    • Example XML files
    • - -
    • Performance specifications. - (Example XML docs and stylesheets rated by some measure of - complexity along with system specifications and execution times)
    • - -
    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    5. Other Product Requirements
    -
    - -
    - - - - - - - -
    5.1. Applicable Standards
    -
    - -

    - All Java code will be 100% pure Java. -

    - -
    -
    -
    - -
    - - - - - - - -
    5.2. System Requirements
    -
    - -

    - The minimum system requirements for POIFS are: -

    - -
      - -
    • 64 Mbytes memory
    • - -
    • Java 2 environment
    • - -
    • Pentium or better processor (or equivalent on other platforms)
    • - -
    - -

    - The minimum system requirements for HSSF are: -

    - -
      - -
    • 64 Mbytes memory
    • - -
    • Java 2 environment
    • - -
    • Pentium or better processor (or equivalent on other platforms)
    • - -
    • POIFS API
    • - -
    - -

    - The minimum system requirements for the HSSF Serializer are: -

    - -
      - -
    • 64 Mbytes memory
    • - -
    • Java 2 environment
    • - -
    • Pentium or better processor (or equivalent on other platforms)
    • - -
    • Cocoon 2
    • - -
    • HSSF API
    • - -
    • POI API
    • - -
    - -
    -
    -
    - -
    - - - - - - - -
    5.3. Performance Requirements
    -
    - -

    - All components must perform well enough - to be practical for use in a webserver environment (especially - Cocoon2/Tomcat/Apache combo) -

    - -
    -
    -
    - -
    - - - - - - - -
    5.4. Environmental Requirements
    -
    - -

    - The software will run primarily in - developer environments. We should make some allowances for - not-highly-technical users to write XML documents for the HSSF - Serializer. All other components will assume intermediate Java 2 - knowledge. No XML knowledge will be required except for using the - HSSF Serializer. As much documentation as is practical shall be - required for all components as XML is relatively new, and the - concepts introduced for writing spreadsheets and to POI filesystems - will be brand new to Java and many Java developers. -

    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    6. Documentation Requirements
    -
    - -
    - - - - - - - -
    6.1 POI Filesystem
    -
    - -

    - The filesystem as read and written by - POI shall be fully documented and explained so that the average Java - developer can understand it. -

    - -
    -
    -
    - -
    - - - - - - - -
    6.2. POI API
    -
    - -

    - The POI API will be fully documented - through Javadoc. A walkthrough of using the high level POI API shall - be provided. No documentation outside of the Javadoc shall be - provided for the low-level POI APIs. -

    - -
    -
    -
    - -
    - - - - - - - -
    6.3. HSSF File Format
    -
    - -

    - The HSSF File Format as implemented by - the HSSF API will be fully documented. No documentation will be - provided for features that are not supported by HSSF API that are - supported by the Excel 97 File Format. Care will be taken not to - infringe on any "legal stuff". -

    - -
    -
    -
    - -
    - - - - - - - -
    6.4. HSSF API
    -
    - -

    - The HSSF API will be documented by - javadoc. A walkthrough of using the high level HSSF API shall be - provided. No documentation outside of the Javadoc shall be provided - for the low level HSSF APIs. -

    - -
    -
    -
    - - -
    - - - - - - - -
    6.5. HSSF Serializer
    -
    - -

    - The HSSF Serializer will be documented - by javadoc. -

    - -
    -
    -
    - - -
    - - - - - - - -
    6.6 HSSF Serializer Tag language
    -
    - -

    - The XML tag language along with - function and usage shall be fully documented. Examples will be - provided as well. -

    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    7. Terminology
    -
    - -
    - - - - - - - -
    7.1 Filesystem
    -
    - -

    - filesystem shall refer only to the POI formatted archive. -

    - -
    -
    -
    - -
    - - - - - - - -
    7.2 File
    -
    - -

    - file shall refer to the embedded data stream within a - POI filesystem. This will be the actual embedded document. -

    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/plan/POI20Vision.html b/build/jakarta-poi/docs/plan/POI20Vision.html deleted file mode 100644 index aa0e1f7010..0000000000 --- a/build/jakarta-poi/docs/plan/POI20Vision.html +++ /dev/null @@ -1,1214 +0,0 @@ - - - - -POI 2.0 Vision Document - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -Planning Documents -
    -1.0 Vision -
    -2.0 Vision -
    -
    -
    -
    -POI 2.0 Vision Document - - - - - - -
    - - - - - - -
    - - - - - - -
    POI 2.0 Vision Document
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Preface
    -
    - -

    - This is the POI 2.0 cycle vision document. Although the vision - has not changed and this document is certainly not out of date and - the vision has not changed, the structure of the project has - changed a bit. We're not going to change the vision document to - reflect this (however proper that may be) because it would only - involve deletion. There is no purpose in providing less - information provided we give clarification. -

    - -

    - This document was created before the POI components for - Apache Cocoon - were accepted into the Cocoon project itself. It was also - written before POI was accepted into Jakarta. So while the - vision hasn't changed some of the components are actually now - part of other projects. We'll still be working on them on the - same timeline roughly (minus the overhead of coordination with - other groups), but they are no longer technically part of the - POI project itself. -

    - -
    -
    -
    -
    - - - - - - - -
    1. Introduction
    -
    - -
    - - - - - - - -
    1.1 Purpose of this document
    -
    - -

    - The purpose of this document is to - collect, analyze and define high-level requirements, user needs, - and features of the second release of the POI project software. - The POI project currently consists of the following components: - the HSSF Serializer, the HSSF library and the POIFS library. -

    - -
      - -
    • - The HSSF Serializer is a set of Java classes whose main - class supports the Serializer interface from the Cocoon - 2 project and outputs the serialized data in a format - compatible with the spreadsheet program Microsoft Excel - '97. -
    • - -
    • - The HSSF library is a set of classes for reading and - writing Microsoft Excel 97 file format using pure Java. -
    • - -
    • - The POIFS library is a set of classes for reading and - writing Microsoft's OLE 2 Compound Document format using - pure Java. -
    • - -
    - -

    By the completion of this release cycle the POI project will also - include the HSSF Generator and the HDF library. -

    - -
      - -
    • The HSSF Generator will be responsible for using HSSF to read - in the XLS (Excel 97) file format and create SAX events. The HSSF - Generator will support the applicable interfaces specified by the - Apache Cocoon 2 project. -
    • - -
    • The HDF library will provide a set of high level interfaces - for reading and writing Microsoft Word 97 file format using pure - Java.
    • - -
    - - -
    -
    -
    - - - -
    - - - - - - - -
    1.2 Project Overview
    -
    - -

    - The first release of the POI project - was an astounding success. This release seeks to build on that - success by: -

    - -
      - -
    • - Refactoring POIFS into imput and - output classes as well as an event-driven API for reading. -
    • - -
    • - Refactor HSSF for greater - performance as well as an event-driven API for reading -
    • - -
    • - Extend HSSF by adding the ability to read and write formulas. -
    • - -
    • - Extend HSSF by adding the ability to read and write - user-defined styles. -
    • - -
    • - Create a Cocoon 2 Generator for HSSF using the same tags - as the HSSF Serializer. -
    • - -
    • - Create a new library (HDF) for reading and writing - Microsoft Word DOC format. -
    • - -
    • - Refactor the HSSFSerializer into a separate extensible - POIFSSerializer and HSSFSerializer -
    • - -
    • - Providing the create excel charts. (write only) -
    • - -
    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    2. User Description
    -
    - -
    - - - - - - - -
    2.1 User/Market Demographics
    -
    - -

    - There are a number of enthusiastic - users of XML, UNIX and Java technology. Furthermore, the Microsoft - solution for outputting Office Document formats often involves - actually manipulating the software as an OLE Server. This method - provides extremely low performance, extremely high overhead and is - only capable of handing one document at a time. -

    - -
      - -
    1. - Our intended audience for the HSSF - Serializer portion of this project are developers writing reports or - data extracts in XML format. -
    2. - -
    3. - Our intended audience for the HSSF - library portion of this project is ourselves as we are developing - the HSSF serializer and anyone who needs to read and write Excel - spreadsheets in a non-XML Java environment, or who has specific - needs not addressed by the Serializer -
    4. - -
    5. - Our intended audience for the - POIFS library is ourselves as we are developing the HSSF and HDF - libraries and anyone wishing to provide other libraries for - reading/writing other file formats utilizing the OLE 2 Compound - Document Format in Java. -
    6. - -
    7. - Our intended audience for the HSSF - generator are developers who need to export Excel spreadsheets to - XML in a non-proprietary environment. -
    8. - -
    9. - Our intended audience for the HDF - library is ourselves, as we will be developing a HDF Serializer in a - later release, and anyone wishing to add .DOC file processing and - creation to their projects. -
    10. - -
    - -
    -
    -
    - -
    - - - - - - - -
    2.2. User environment
    -
    - -

    - The users of this software shall be - developers in a Java environment on any operating system, or power - users who are capable of XML document generation/deployment. -

    - -
    -
    -
    - -
    - - - - - - - -
    2.3. Key User Needs
    -
    - -

    - The HSSF library currently requires a - full object representation to be created before reading values. This - results in very high memory utilization. We need to reduce this - substantially for reading. It would be preferable to do this for - writing, but it may not be possible due to the constraints imposed by - the file format itself. Memory utilization during read is our top - user complaint. -

    - -

    - The POIFS library currently requires a - full object representation to be created before reading values. This - results in very high memory utilization. We need to reduce this - substantially for reading. -

    - -

    - The HSSF library currently ignores - formula cells and identifies them as "UnknownRecord" at the - lower level of the API. We must provide a way to read and write - formulas. This is now the top requested feature. -

    - -

    - The HSSF library currently does not support - charts. This is a key requirement of some users who wish to use HSSF - in a reporting engine. -

    - -

    - The HSSF Serializer currently does not - provide serialization for cell styling. User's will want stylish - spreadsheets to result from their XML. -

    - -

    - There is currently no way to generate - the XML from an XLS that is consistent with the format used by the - HSSF Serializer. -

    - -

    - There should be a way to read and write - the DOC file format using pure Java. -

    - - -
    -
    -
    - -
    - - - - - - - -
    2.4. Alternatives and Competition
    -
    - -

    - Originally there weren't any decent alternatives for reading or writing - to Excel. This has changed somewhat. -

    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    3. Project Overview
    -
    - -
    - - - - - - - -
    3.1. Project Perspective
    -
    - -

    - The produced code shall be licensed by - the Apache License as used by the Cocoon 2 project (APL 1.1) and - maintained on at http://poi.sourceforge.net - and http://sourcefoge.net/projects/poi. - It is our hope to at some point integrate with the various Apache - projects (xml.apache.org and jakarta.apache.org), at which point we'd - turn the copyright over to them. -

    - -
    -
    -
    - -
    - - - - - - - -
    3.2. Project Position Statement
    -
    - -

    - For developers on a Java and/or XML - environment this project will provide all the tools necessary for - outputting XML data in the Microsoft Excel format. This project seeks - to make the use of Microsoft Windows based servers unnecessary for - file format considerations and to fully document the OLE 2 Compound - Document format. The project aims not only to provide the tools for - serializing XML to Excel and Word file formats and the tools for - writing to those file formats from Java, but also to provide the - tools for later projects to convert other OLE 2 Compound Document - formats to pure Java APIs. -

    - -
    -
    -
    - -
    - - - - - - - -
    3.3. Summary of Capabilities
    -
    - -

    - HSSF Serializer for Apache Cocoon 2 -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Benefit - - Supporting Features -
    - Ability to serialize styles from XML spreadsheets. - - HSSFSerialzier will support styles. -
    - Ability to read and write formulas in XLS files. - - HSSF will support reading/writing formulas. -
    - Ability to output in MS Word on any platform using Java. - - The project will develop an API that outputs in Word format - using pure Java. -
    - Enhance performance for reading and writing XLS files. - - HSSF will undergo a number of performance enhancements. HSSF - will include a new event-based API for reading XLS files. POIFS - will support a new event-based API for reading OLE2 CDF files. -
    - Ability to generate XML from XLS files - - The project will develop an HSSF Generator. -
    - The ability to generate charts - - HSSF will provide low level support for chart records as well - as high level API support for generating charts. The ability - to read chart information will not initially be provided. -
    - -
    -
    -
    - -
    - - - - - - - -
    3.4. Assumptions and Dependencies
    -
    - -
      - -
    • - The HSSF Serializer and Generator - will support the Gnumeric 1.0 XML tag language. -
    • - -
    • - The HSSF Generator and HSSF - Serializer will be mutually validating. It should be possible to - have an XLS file created by the Serializer run through the Generator - and the output back through the Serializer (via the Cocoon pipeline) - and get the same file or a reasonable facimille (no one cares if it - differs by the order of the binary records in some minor but - non-visually recognizable manner). -
    • - -
    • - The HSSF Generator will run on any - Java 2 supporting platform with Apache Cocoon 2 installed along with - the HSSF and POIFS APIs. -
    • - -
    • - The HSSF Serializer will run on - any Java 2 supporting platform with Apache Cocoon 2 installed along - with the HSSF and POIFS APIs. -
    • - -
    • - The HDF API requires a Java 2 - implementation and the POIFS API. -
    • - -
    • - The HSSF API requires a Java 2 - implementation and the POIFS API. -
    • - -
    • - The POIFS API requires a Java 2 - implementation. -
    • - - -
    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    4. Project Features
    -
    - -

    - Enhancements to the POIFS API will - include: -

    - -
      - -
    • - An event driven API for reading - POIFS Filesystems. -
    • - -
    • - A low-level API for - creating/manipulating POI filesystems. -
    • - -
    • - Code improvements supporting - greater separation between read and write structures. -
    • - -
    - -

    - Enhancements to the HSSF API will - include: -

    - -
      - -
    • - An event driven API for reading - XLS files. -
    • - -
    • - Performance improvements. -
    • - -
    • - Formula support (read/write) -
    • - -
    • - Support for user-defined data - formats -
    • - -
    • - Better documentation of the file - format and structure. -
    • - -
    • - An API for creation of charts. -
    • - -
    - -

    - The HSSF Generator will include: -

    - -
      - -
    • - A set of classes supporting the - Cocoon 2 Generator interfaces providing a method for reading XLS - files and outputting SAX events. -
    • - -
    • - The same tag format used by the - HSSFSerializer in any given release. -
    • - -
    - -

    - The HDF API will include: -

    - -
      - -
    • - An event driven API for reading - DOC files. -
    • - -
    • - A set of high and low level APIs - for reading and writing DOC files. -
    • - -
    • - Documentation of the DOC file - format or enhancements to existing documentation. -
    • - -
    - -
    -
    -
    -
    - - - - - - - -
    5. Other Product Requirements
    -
    - -
    - - - - - - - -
    5.1. Applicable Standards
    -
    - -

    - All Java code will be 100% pure Java. -

    - -
    -
    -
    - -
    - - - - - - - -
    5.2. System Requirements
    -
    - -

    - The minimum system requirements for the POIFS API are: -

    - -
      - -
    • 64 Mbytes memory
    • - -
    • Java 2 environment
    • - -
    • Pentium or better processor (or equivalent on other platforms)
    • - -
    - -

    - The minimum system requirements for the the HSSF API are: -

    - -
      - -
    • 64 Mbytes memory
    • - -
    • Java 2 environment
    • - -
    • Pentium or better processor (or equivalent on other platforms)
    • - -
    • POIFS API
    • - -
    - -

    - The minimum system requirements for the the HDF API are: -

    - -
      - -
    • 64 Mbytes memory
    • - -
    • Java 2 environment
    • - -
    • Pentium or better processor (or equivalent on other platforms)
    • - -
    • POIFS API
    • - -
    - - -

    - The minimum system requirements for the HSSF Serializer are: -

    - -
      - -
    • 64 Mbytes memory
    • - -
    • Java 2 environment
    • - -
    • Pentium or better processor (or equivalent on other platforms)
    • - -
    • Cocoon 2
    • - -
    • HSSF API
    • - -
    • POI API
    • - -
    - -
    -
    -
    - -
    - - - - - - - -
    5.3. Performance Requirements
    -
    - -

    - All components must perform well enough - to be practical for use in a webserver environment (especially - the "killer trio": Cocoon2/Tomcat/Apache combo) -

    - -
    -
    -
    - -
    - - - - - - - -
    5.4. Environmental Requirements
    -
    - -

    - The software will run primarily in - developer environments. We should make some allowances for - not-highly-technical users to write XML documents for the HSSF - Serializer. All other components will assume intermediate Java 2 - knowledge. No XML knowledge will be required except for using the - HSSF Serializer. As much documentation as is practical shall be - required for all components as XML is relatively new, and the - concepts introduced for writing spreadsheets and to POI filesystems - will be brand new to Java and many Java developers. -

    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    6. Documentation Requirements
    -
    - -
    - - - - - - - -
    6.1 POI Filesystem
    -
    - -

    - The filesystem as read and written by - POI shall be fully documented and explained so that the average Java - developer can understand it. -

    - -
    -
    -
    - -
    - - - - - - - -
    6.2. POI API
    -
    - -

    - The POI API will be fully documented - through Javadoc. A walkthrough of using the high level POI API shall - be provided. No documentation outside of the Javadoc shall be - provided for the low-level POI APIs. -

    - -
    -
    -
    - -
    - - - - - - - -
    6.3. HSSF File Format
    -
    - -

    - The HSSF File Format as implemented by - the HSSF API will be fully documented. No documentation will be - provided for features that are not supported by HSSF API that are - supported by the Excel 97 File Format. Care will be taken not to - infringe on any "legal stuff". Additionally, we are - collaborating with the fine folks at OpenOffice.org on - *free* documentation of the format. -

    - -
    -
    -
    - -
    - - - - - - - -
    6.4. HSSF API
    -
    - -

    - The HSSF API will be documented by - javadoc. A walkthrough of using the high level HSSF API shall be - provided. No documentation outside of the Javadoc shall be provided - for the low level HSSF APIs. -

    - -
    -
    -
    - -
    - - - - - - - -
    6.5 HDF API
    -
    - -

    - The HDF API will be documented by - javadoc. A walkthrough of using the high level HDF API shall be - provided. No documentation outside of the Javadoc shall be provided - for the low level HDF APIs. -

    - -
    -
    -
    - -
    - - - - - - - -
    6.6 HSSF Serializer
    -
    - -

    - The HSSF Serializer will be documented - by javadoc. -

    - -
    -
    -
    - -
    - - - - - - - -
    6.7 HSSF Generator
    -
    - -

    - The HSSF Generator will be documented - by javadoc. -

    - -
    -
    -
    - -
    - - - - - - - -
    6.8 HSSF Serializer Tag language
    -
    - -

    - The XML tag language along with - function and usage shall be fully documented. Examples will be - provided as well. -

    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    7. Terminology
    -
    - -
    - - - - - - - -
    7.1 Filesystem
    -
    - -

    - filesystem shall refer only to the POI formatted archive. -

    - -
    -
    -
    - -
    - - - - - - - -
    7.2 File
    -
    - -

    - file shall refer to the embedded data stream within a - POI filesystem. This will be the actual embedded document. -

    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/plan/images/built-with-cocoon.gif b/build/jakarta-poi/docs/plan/images/built-with-cocoon.gif deleted file mode 100644 index 0b38f7857b6e621a964664dec8f6e12f07ff71de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2252 zcmWlYk6X+80>`&c?Q6*Ty|ly1Vlr)YCcFJ$W@+ZDmL@wHr<=uO+^J!wGfd~JhObO5 zEhbab8SO9`O;5+usnKFLlghY55+}}X9E9uF;X3a>;QhRw_w#x$UcyUCUXzQ7!aTuX z2t<;#%>fMUKy3y}6Oid4wN;`-NenKHK@$jsQngO3Kv9Fm;p!ucRDh=@vjid;Vzb#s zd_Ex5(0CGoRINk}gM))y9?xoTrwA25q9c+iK;N#@>wwO#QmIfBC5cpSw_9(v@kA1q zP@a;K5<+3v+MGaPqzdGH-a(~C55%b1)-DiBsVOi(ZA3AmRH{NKOjx1#Zb zu6TmdNTe_(NDV|<3Yp21sw&xBZlA{sL?{E60F{|YA`?i|wzjquk%BFhxLhuvvH+!- z#*+fMQD?O3^?FEAPo>dDMn;TgtJCQOYO7FM>ht*^>0ugoHGtKWlpL4at56|>!y}NW zQlT+GsEtHr0GSaeOnC}ag&G+=sn%!}$u&F}Cgzn{tyZJSM53`sd1a6oZFjgl-r*GC zCY45Kx7$gy6pzOPsmzev7(%8wU44Q)IV_ezN)sf|KzTZc)5R7ke7@(9+(2OoAc>wO zkaNXK3X>;O>xYMj313wZDz$n86P6L=1_fdO8as_Efy6o@g{je-P1Z{ehXeXbn5VPa z9YCN7AriF)3sHiSs7#?qOrbFqh|c3392xNewFSrw5~Y^J-~q%&W^h$n6Zm^oHkkHnf!<#&$X(w!Dv#=ym$&HKd33ak<_(uPu2m}j)4msQWtZw3IFID zn0tTwkf$N7lhBpiaTP>Qyc~F?p`s=@=kW#$ZN0nY<@9~@D{sFkAiSaUH}XH9adw~0 ztlj?PZpY9`O?nJ~M#nd=`s424&Q-_f7;|LDi=8*7b!8WK|0^gnYn*>Lrn%R@wu1-M~UshE9KC#uP3O$Deg%>$bz3LW0DboKUC;jQh^` zD6f2XP&0nsQcIybS_03g+!g=fyM9hmDR>e`#1~wjo^)kRXOez(f}8#MB(c$gi(fn9 zJ9@h-yKY8&!0YSDpZpz}^Uoi9R2b99hdXq&G>IF-P7qdKh-W9BSq_DFH{n)IO?<|g z5_y5XaO$nz^qK?4(1Rtqwp#(?=!s(;ejg95>@R(wR>fBwHT;LZ@V;Qn*s<62Ip8j}+nKD;YH z7mPL+ObE&Uh`oucFFbI?^Eq}mXsF;11%`Zo^i|8f0L~%T?a|V|-h2jQqg{Bv%^zc0 zZ$It1Ty-}urn6=EW~Fb|qK`?6ebYj7V4m>AXb>sa~Njm-)y zZhYLAOR4tO^8`}pP%#Ipx>qzm>c$vWo0?t9)kL;&{&aubx%OcNj=xOeob)^)t39=A zG{niC9n=}&`ro`&(L+%ill&@R>|QQEJwN>}8g*ycfxY~76UQn$=x8q{E}(P6^t5VR zF9wOPA5Xb)2Z^?qmTwJuh~JrjW0Gy>hD-eL!FM!xR`!(2_fIB$u5Csh#C34ObFOdx zW;w(P$~O=9I>MXo)X!~xLD=-nxuCFQQTVrSD+H|)6d#RDb|(;uOHZ#lg#iFm9*o@~ zE0~KlkqyI9jMb)yI@Dk;D(e0znI8IWepdusg{3EDN;mnXK@~&ij^Q2Hm}VU0X|`vE z`Qz%|EsVNzHO)LfD6+Q1vD4pHzO;4dP-zi1TKET&TlX-mupW~v_z_lMD1ICH9DhOZ zZbh%I=JX{e+p;W$lk~8*G#6sMF4C+Y?U?vm&Wz|w`FPBtX_y6jxh)VSU`bE0_#t;u zQrOp)L;ZCVdOIQ-ZT?$z=j$vlFrhcg_WocBJ;t@?4<`zu$NlhjxgRE0vrEuWw%s@u zh$-n#eEqU)PHF#!v8UzaPtL@{%eWO^yh{r2ZePo82z} diff --git a/build/jakarta-poi/docs/plan/images/cocoon2-small.jpg b/build/jakarta-poi/docs/plan/images/cocoon2-small.jpg deleted file mode 100644 index e8f6dd8c8c0e17f7d97b7265f637000ed61d703a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmb7AdpOez82)Wzmu#{%wPMVKijo;glS{;Op)xH>VU*FZIthD3>zP zDwk3-ks3>4IFw6H%e5uBw4>A0bIxM00SUu>QM09%ti|UgTWv$7!H9# zA>UU(;JF#v0KhEJh7v6tx6v}2v4;LI_(GD?v86^1;T@l&-fyYHNBSsJxS6PM4WjhWFWa3YVC+4q zNoXBAQa7tN$Jj61FsZh`^xjIB12tO&r__#1;v~1lU6k)cGa?G-wWg?Uej_HJsn9^l|ZyEbtLzX z55}4=`KHJ7({d!%&~mK{&RK#(r#f$%F?8$%>=f1%{AeKOtzMh+SZy2gINNb9o~Yy;f~ZUey?Ta822a)vH!Z z{)zF4bPeD7ohWaNTg2Mt(d-^hM|X)@I1lgBRh}viyv<;F_=vSb>n&YT+%qZ6b3Nz% zhbK87WsIQuP3ped0cUN}9$8noQ3HM-Rn!&ObwPwOK7z8VTReoHEtbqq&DuVZE0c_N zOw{gx;LnluvfZ0S>sYcQZ}yg_i{IU0gtgxy(?Y2hZXZfB-eS;(>G@O~DmR2iIGSH*{*J<)zOX(|fBJKR^2?%> zyBFsNoC)z2#mbzD_!G7bQ40D*Ci@4F%Enp-;-f$3 zMX(xcTEz}rs^!C!fiI?@*@p|h{yfi|D2^%k5i+Q>gi+K~jJk;Sn%Nv77aHB1&UAj_ zO!Mp<$^?6quoJ5F5)6_P43CB!e0^zC82#8IG-6Z*7#P}B>~j@9>WgZA`*n|~yC^)civFQS7LLDs^03R#Acsq5FTb-W55H$}=j<)y6FY=qA}ww* K45idpwf_kby7q4X diff --git a/build/jakarta-poi/docs/plan/images/header.gif b/build/jakarta-poi/docs/plan/images/header.gif deleted file mode 100644 index b9c2ee13910846fc549adb17e9c4466f407daeea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3165 zcmZvb`#Teg4fk0DwRsBog@>4Myg{ zDIyeAg5}iE+S}U)-}MrSL>L}CJ~Kq(!uWhXlms?4HMJ&z84LzXLL{&eFp?!l!k$_j z$FZ=BEAwzFELD_@e;cz?{MuEbKP^O4LW0NAeWTBKn zqzcoYK(rGSYXB$a<`baDts z$B>vlSSpMvLXo*}6vbMukYB5$l7$#+G8jvP;plKY1CAnD6IghuR7&O}t%+b>B^^Vt zMi8MSE}SW1h->&58j{94&XH0lXU3^w42ldTatXo)7Lo|Xvk(|63_$>sm{^JsBW)-n zvXSfSs}w$R^wT>s+n2~iuB@+6#aLktlfc1KMOY6yiY!DCSO^3jOy;3*Oe}^1Lz194 z1{_OWyW~f3GyDW-X zNt7*4;ps>O$(qPSkr@OG**2|`Mr9M3A_|p{qwy&;Apt>v(!^K_&jCrW;#YDB3{+PA zWilVdmXL-<`?+E!RfKUR!I4C30vm~?B5*VWoloLP*bE^KMusNvXml=_%)wqRJE2f0 zBu!kp7?&=kt*k7QIGA<$I-c>b7=y|pl2|yZ@ZTCJEX58-gOAOOGQ|WkAM;uEks&6| z$fgqbQ3NImLr0RiSQOcs$U@C5P6_LOPc91^myOamC*MsD@uc+0$w}FwjKass<#G~- zNa5h=Wq7uf$}3}WYc7cDSwsdFMuhs%5hxOjCdQ|W**F@C!KdJ5Hh3Z8Zgxia40o>| zqDKRHDPcf;7-5zQ+utr)P`g7Nj>e-C3=7d#t^qI)CF>~hp z{9B(N8K0WjYlt7hgm1U*xz6AuJ>Ps%RNRcB#(Sd1eXGK6I`P9nz?dD zYV~Yrew*l|ZcSIKfuoRDi^^fkXR~~tHGWHltt(FUJ%6@3J5cU(XZ+}^WX6cy*<*bz zo9Oo8Rz=1E+n*~y<>{WpwLXcnpl3T4)_*}iad`bl#^GDrw*O2ju}v2H(Y>mC4TDAS~HLq=3XgY7omLstNLT#hnRPPk59$uQyV9E2tUWbwA}!0 zK)6l?5$xWb(`W!HteuPSgQ4=gvj80lNfoX6(k^C>hvrB;P_MDaB&NkI#ko7^&mVFyB?j$ zI~E9nhw7IaY7ew%#(mh6{|jT(u&^iAJyJ@wv};=GdKAe$B-VO6gb8P1lcK zU78l-HXf$F>CKs}X;lP%X-#drvKryyAMo9D1J}aeG3%r)ulL_I_@N{|@5)PP*3z?$ zrTezWmi+1^y;~zW&rTl#tK;YT=_+o813nop|<4+Z%MVYgFI{| z0B|cWZ@b6dFs}Y&2TJ=hqa?sW`K%WddGmSfpa5do)~O!Rfd(infQqNlr5@x0oxKQ1 zN~ck$s;98EXg-#6>~Zdn-h6bLwvGk%Y=`uoN*XTcb}J1FG& z&5ujCBYC5m9z$&(66c)%=2>`by?ON;CzPec8Jn?fWe0bAC z`=_Jp!TLa+X0j1r*ZbGD@Qc?oQ^ucmHRiNx&L7awojl;Y(V>KZWSA%4_1qKsB0$oA z0x)1PO*&x?#M)#(_*jHFYuMvAq?3ukE`%^J-dV-N;!HY$eij@cAypGO82nUzla zO71-lH~9p7m#MbrYIRq<^nPJr#e26c!$FMcYN6wwH`>p?cj-;GDb*VMFlS(NZ}SgA z^e0~{S3}I8PZOiaphX?2X6CDE`u_(vtGEr$Xx%eDLBg!h4d)_x+fKvPtXe;Mb6f4Ik)@>5AK_;r=1 z4o@eiE2H>*-kitZ>3a3xshiVL0FoZB?XkStB`!GP>v>Yn6OH&Xrmjiave>Jx590J~ zYStBWzw@GDgHKeGAb3f3{P)Yd|7bq@)eGnFmaq03wBVdV2A@75oPHVnnBlPyx>WHt z+z~kf>|J`t%D0mZnvQaTpUu3wbmDyN7L!i zF@iZ>X44g8sb`1}rn?JbD3sSw(ctk
  • !@Q>Q2Y$Z-3o3-aRJ4%@`Q!oPCI9iRcZ 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 - - - - - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -How To -
    -File System Documentation -
    -Use Cases -
    -
    -
    -
    -

    - -

    -
    -
    - - - - - - - -
    POIFS File System Internals
    -
    - -
    - - - - - - - -
    Introduction
    -
    - -

    POIFS file systems are essentially normal files stored on a - Java-compatible platform's native file system. They are - typically identified by names ending in a four character - extension noting what type of data they contain. For - example, a file ending in ".xls" would likely - contain spreadsheet data, and a file ending in - ".doc" would probably contain a word processing - document. POIFS file systems are called "file - system", because they contain multiple embedded files - in a manner similar to traditional file systems. Along - functional lines, it would be more accurate to call these - POIFS archives. For the remainder of this document it is - referred to as a file system in order to avoid confusion - with the "files" it contains.

    - -

    POIFS file systems are compatible with those document - formats used by a well-known software company's popular - office productivity suite and programs outputting - compatible data. Because the POIFS file system does not - provide compression, encryption or any other worthwhile - feature, its not a good choice unless you require - interoperability with these programs.

    - -

    The POIFS file system does not encode the documents - themselves. For example, if you had a word processor file - with the extension ".doc", you would actually - have a POIFS file system with a document file archived - inside of that file system.

    - -
    -
    -
    - -
    - - - - - - - -
    Document Conventions
    -
    - -

    This document utilizes the numeric types as described by - the Java Language Specification, which can be found at - http://java.sun.com. In - short:

    - -
      - -
    • A byte is an 8 bit signed integer ranging from - -128 to 127.
    • - -
    • A short is a 16 bit signed integer ranging from - -32768 to 32767
    • - -
    • An int is a 32 bit signed integer ranging from - -2147483648 to 2147483647
    • - -
    • A long is a 64 bit signed integer ranging from - -9.22E18 to 9.22E18.
    • - -
    - -

    The Java Language Specification spells out a number of - other types that are not referred to by this document.

    - -

    Where this document makes references to "endian - conversion" it is referring to the byte order of - stored numbers. Numbers in "little-endian order" - are stored with the least significant byte first. In - order to properly read a short, for example, you'd read two - bytes and then shift the second byte 8 bits to the left - before performing an or operation to it - against the first byte. The following code illustrates this - method:

    - -
    - - - - -
    -
    -public int getShort (byte[] rec)
    -{
    -    return ((rec[1] << 8) | (rec[0] & 0x00ff));
    -}
    -
    -
    - -
    -
    -
    - -
    - - - - - - - -
    File System Walkthrough
    -
    - -

    This is a walkthrough of a POIFS file system and how it is - put together. It is not intended to give a concise - description but to give a "big picture" of the - general structure and how it's interpreted.

    - -

    A POIFS file system begins with a header. This header - identifies locations in the file by function and provides a - sanity check identifying a file as a POIFS file system.

    - -

    The first 64 bits of the header compose a magic number - identifier. This identifier tells the client software - that this is indeed a POIFS file system and that it should - be treated as such. This is a "sanity check" to - make sure this is a POIFS file system and not some other - format. The header also contains an array of block - numbers. These block numbers refer to blocks in the - file. When these blocks are read together they form the - Block Allocation Table. The header also contains a - pointer to the first element in the property table, - also known as the root element, and a pointer to the - small Block Allocation Table (SBAT).

    - -

    The block allocation table or BAT, along with - the property table, specify which blocks in the file - system belong to which files. After the header block, the - file system is divided into identically sized blocks of - data, numbered from 0 to however many blocks there are in - the file system. For each file in the file system, its - entry in the property table includes the index of the first - block in the array of blocks. Each block's index into the - array of blocks is also its index into the BAT, and the - integer value stored at that index in the BAT gives the - index of the next block in the array (and thus the index of - the next BAT value). A special value is stored in the BAT - to indicate "end of file".

    - -

    The property table is essentially the directory - storage for the file system. It consists of the name of the - file or directory, its start block in both the file - system and BAT, and its actual size. The first - property in the property table is the root - element. It has two purposes: to be a directory entry - (the root of the directory tree, to be specific), and to - hold the start block for the small block data.

    - -

    Small block data is a special file that contains the data - for small files (less than 4K bytes). It subdivides its - blocks into smaller blocks and there is a special small - block allocation table that, like the main BAT for larger - files, is used to map a small file to its small blocks.

    - -
    -
    -
    - -
    - - - - - - - -
    Header Block
    -
    - -

    The POIFS file system begins with a header - block. The first 64 bits of the header form a long - file type id or magic number identifier of - 0xE11AB1A1E011CFD0L. This is basically a - sanity check. If this isn't the first thing in the header - (and consequently the file system) then this is not a - POIFS file system and should be read with some other - library.

    - -

    It's important to know the most important parts of the - header. These are discussed in the rest of this - section.

    - -
    - - - - - - - -
    BATs
    -
    - -

    At offset 0x2C is an int specifying the number - of elements in the BAT array. The array at - 0x4C an array of ints. This array contains the - indices of every block in the Block Allocation - Table.

    - -
    -
    -
    - -
    - - - - - - - -
    XBATs
    -
    - -

    Very large POIFS archives may have more blocks than can - be addressed by the BAT blocks enumerated in the header - block. How large? Well, the BAT array in the header can - contain up to 109 BAT block indices; each BAT block - references up to 128 blocks, and each block is 512 - bytes, so we're talking about 109 * 128 * 512 = - 6.8MB. That's a pretty respectable document! But, you - could have much more data than that, and in today's - world of cheap gigabyte drives, why not? So, the BAT - may be extended in that event. The integer value at - offset 0x44 of the header is the index of the - first extended BAT (XBAT) block. At offset - 0x48 of the header, there is an int value that - specifies how many XBAT blocks there are. The XBAT - blocks begin at the specified index into the array of - blocks making up the POIFS file system, and continue in - sequence for the specified count of XBAT blocks.

    - -

    Each XBAT block contains the indices of up to 128 BAT - blocks, so the document size can be expanded by another - 8MB for each XBAT block. The BAT blocks indexed by an - XBAT block are appended to the end of the list of BAT - blocks enumerated in the header block. Thus the BAT - blocks enumerated in the header block are BAT blocks 0 - through 108, the BAT blocks enumerated in the first - XBAT block are BAT blocks 109 through 236, the BAT - blocks enumerated in the second XBAT block are BAT - blocks 237 through 364, and so on.

    - -

    Through the use of XBAT blocks, the limit on the - overall document size is that imposed by the 4-byte - block indices; if the indices are unsigned ints, the - maximum file size is 2 terabytes, 1 terabyte if the - indices are treated as signed ints. Either way, I have - yet to see a disk drive large enough to accommodate - such a file on the shelves at the local office supply - stores.

    - -
    -
    -
    - -
    - - - - - - - -
    SBATs
    -
    - -

    If a file contained in a POIFS archive is smaller than - 4096 bytes, it is stored in small blocks. Small blocks - are 64 bytes in length and are contained within big - blocks, up to 8 to a big block. As the main BAT is used - to navigate the array of big blocks, so the small - block allocation table is used to navigate the - array of small blocks. The SBAT's start block index is - found at offset 0x3C of the header block, and - remaining blocks constituting the SBAT are found by - walking the main BAT as if it were an ordinary file in - the POIFS file system (this process is described - below).

    - -
    -
    -
    - -
    - - - - - - - -
    Property Table Start Index
    -
    - -

    An integer at address 0x30 specifies the start - index of the property table. This integer is specified - as a "block index". The Property Table - is stored, as is almost everything in a POIFS file - system, in big blocks and walked via the BAT. The - Property Table is described below.

    - -
    -
    -
    - -
    -
    -
    - -
    - - - - - - - -
    Property Table
    -
    - -

    The property table is essentially nothing more than the - directory system. Properties are 128 byte records - contained within the 512 byte blocks. The first property - is always the Root Entry. The following applies to - individual properties within a property table:

    - -
      - -
    • At offset 0x00 in the property is the - "name". This is stored as an - uncompressed 16 bit unicode string. In short every - other byte corresponds to an "ASCII" - character. The size of this string is stored at offset - 0x40 (string size) as a short.
    • - -
    • At offset 0x42 is the property type - (byte). The type is 1 for directory, 2 for file or 5 - for the Root Entry.
    • - -
    • At offset 0x43 is the node color - (byte). The color is either 1, (black), or 0, - (red). Properties are apparently meant to be arranged - in a red-black binary tree, subject to the following - rules: -
        - -
      1. The root of the tree is always black
      2. - -
      3. Two consecutive nodes cannot both be red
      4. - -
      5. A property is less than another property if its - name length is less than the other property's name - length
      6. - -
      7. If two properties have the same name length, the - sort order is determined by the sort order of the - properties' names.
      8. - -
      -
    • - -
    • At offset 0x44 is the index (int) of the - previous property.
    • - -
    • At offset 0x48 is the index (int) of the - next property.
    • - -
    • At offset 0x4C is the index (int) of the - first directory entry. This is used by - directory entries.
    • - -
    • At offset 0x74 is an integer giving the - start block for the file described by this - property. This index corresponds to an index in the - array of indices that is the Block Allocation Table - (or the Small Block Allocation Table) as well as the - index of the first block in the file. This is used by - files and the root entry.
    • - -
    • At offset 0x78 is an integer giving the total - actual size of the file pointed at by this - property. If the file size is less than 4096, the file - is stored in small blocks and the SBAT is used to walk - the small blocks making up the file. If the file size - is 4096 or larger, the file is stored in big blocks - and the main BAT is used to walk the big blocks making - up the file. The exception to this rule is the Root - Entry, which, regardless of its size, is - always stored in big blocks and the main BAT is - used to walk the big blocks making up this special - file.
    • - -
    - -
    -
    -
    - -
    - - - - - - - -
    Root Entry
    -
    - -

    The Root Entry in the Property Table - contains the information necessary to read and write - small files, which are files less than 4096 bytes - long. The start block field of the Root Entry is the - start index of the Small Block Array, which is - read like any other file in the POIFS file system. Since - the SBAT cannot be used without the Small Block Array, - the Root Entry MUST be read or written using the Block - Allocation Table. The blocks making up the Small - Block Array are divided into 64-byte small blocks, up to - the size indicated in the Root Entry (which should always - be a multiple of 64).

    - -
    -
    -
    - -
    - - - - - - - -
    Walking the Nodes of the Property Table
    -
    - -

    The individual properties form a directory tree, with the - Root Entry as the directory tree's root, as shown - in the accompanying drawing. Note the numbers in - parentheses in each node; they represent the node's index - in the array of properties. The NEXT_PROP, - PREVIOUS_PROP, and CHILD_PROP fields hold - these indices, and are used to navigate the tree.

    - - -

    Each directory entry (i.e., a property whose type is - directory or root entry) uses its - CHILD_PROP field to point to one of its - subordinate (child) properties. It doesn't seem to matter - which of its children it points to. Thus in the previous - drawing, the Root Entry's CHILD_PROP field may contain 1, - 4, or the index of one of its other children. Similarly, - the directory node (index 1) may have, in its CHILD_PROP - field, 2, 3, or the index of one of its other - children.

    - -

    The children of a given directory property point to each - other in a similar fashion by using their - NEXT_PROP and PREVIOUS_PROP fields.

    - -

    Unused NEXT_PROP, PREVIOUS_PROP, and - CHILD_PROP fields contain the marker value of - -1. All file properties have a value of -1 for their - CHILD_PROP fields for example.

    - -
    -
    -
    - -
    - - - - - - - -
    Block Allocation Table
    -
    - -

    The BAT blocks are pointed at by the bat array - contained in the header and supplemented, if necessary, - by the XBAT blocks. These blocks form a large - table of integers. These integers are block numbers. The - Block Allocation Table holds chains of integers. - These chains are terminated with -2. The elements in - these chains refer to blocks in the files. The starting - block of a file is NOT specified in the BAT. It is - specified by the property for a given file. The - elements in this BAT are both the block number (within - the file minus the header) and the number of the - next BAT element in the chain. This can be thought of as - a linked list of blocks. The BAT array contains the links - from one block to the next, including the end of chain - marker.

    - -

    Here's an example: Let's assume that the BAT begins as - follows:

    - -

    -BAT[ 0 ] = 2 -

    - -

    -BAT[ 1 ] = 5 -

    - -

    -BAT[ 2 ] = 3 -

    - -

    -BAT[ 3 ] = 4 -

    - -

    -BAT[ 4 ] = 6 -

    - -

    -BAT[ 5 ] = -2 -

    - -

    -BAT[ 6 ] = 7 -

    - -

    -BAT[ 7 ] = -2 -

    - -

    -... -

    - -

    Now, if we have a file whose Property Table entry says it - begins with index 0, we walk the BAT array and see that - the file consists of blocks 0 (because the start block is - 0), 2 (because BAT[ 0 ] is 2), 3 (BAT[ 2 ] is 3), 4 (BAT[ - 3 ] is 4), 6 (BAT[ 4 ] is 6), and 7 (BAT[ 6 ] is 7). It - ends at block 7 because BAT[ 7 ] is -2, which is the end - of chain marker.

    - -

    Similarly, a file beginning at index 1 consists of - blocks 1 and 5.

    - -

    Other special numbers in a BAT array are:

    - -
      - -
    • -1, which indicates an unused block
    • - -
    • -3, which indicates a "special" block, such - as a block used to make up the Small Block Array, the - Property Table, the main BAT, or the SBAT
    • - -
    - -
    -
    -
    - -
    - - - - - - - -
    File System Structures
    -
    - -

    The following outlines the basic file system structures.

    - -
    - - - - - - - -
    Header (block 1) -- 512 (0x200) bytes
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionOffsetLengthDefault value or const
    FILETYPEMagic number identifying this as a POIFS file - system.0x0000Long0xE11AB1A1E011CFD0
    UK1Unknown constant0x0008Integer0
    UK2Unknown Constant0x000CInteger0
    UK3Unknown Constant0x0014Integer0
    UK4Unknown Constant (revision?)0x0018Short0x003B
    UK5Unknown Constant (version?)0x001AShort0x0003
    UK6Unknown Constant0x001CShort-2
    LOG_2_BIG_BLOCK_SIZELog, base 2, of the big block size0x001EShort9 (2 ^ 9 = 512 bytes)
    LOG_2_SMALL_BLOCK_SIZELog, base 2, of the small block size0x0020Integer6 (2 ^ 6 = 64 bytes)
    UK7Unknown Constant0x0024Integer0
    UK8Unknown Constant0x0028Integer0
    BAT_COUNTNumber of elements in the BAT array0x002CIntegerrequired
    PROPERTIES_STARTBlock index of the first block of the property - table0x0030Integerrequired
    UK9Unknown Constant0x0034Integer0
    UK10Unknown Constant0x0038Integer0x00001000
    SBAT_STARTBlock index of first big block containing the small - block allocation table (SBAT)0x003CInteger-2
    UK11Unknown Constant0x0040Integer1
    XBAT_STARTBlock index of the first block in the Extended Block - Allocation Table (XBAT)0x0044Integer-2
    XBAT_COUNTNumber of elements in the Extended Block Allocation - Table (to be added to the BAT)0x0048Integer0
    BAT_ARRAYArray of block indices constituting the Block - Allocation Table (BAT)0x004C, 0x0050, 0x0054 ... 0x01FCInteger[]-1 for unused elements, at least first element must - be filled.
    N/AHeader block data not otherwise described in this - tableN/AN/A-1
    - -
    -
    -
    - -
    - - - - - - - -
    Block Allocation Table Block -- 512 (0x200) bytes
    -
    - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionOffsetLengthDefault value or const
    BAT_ELEMENTAny given element in the BAT block0x0000, 0x0004, 0x0008, ... 0x01FCInteger - -
      - -
    • -1 = unused
    • - -
    • -2 = end of chain
    • - -
    • -3 = special (e.g., BAT block)
    • - -
    - -

    All other values point to the next element in the - chain and the next index of a block composing the - file.

    - -
    - -
    -
    -
    - -
    - - - - - - - -
    Property Block -- 512 (0x200) byte block
    -
    - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionOffsetLengthDefault value or const
    Properties[]This block contains the properties.0x0000, 0x0080, 0x0100, 0x0180128 bytesAll unused space is set to -1.
    - -
    -
    -
    - -
    - - - - - - - -
    Property -- 128 (0x80) byte block
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionOffsetLengthDefault value or const
    NAMEA unicode null-terminated uncompressed 16bit string - (lose the high bytes) containing the name of the - property.0x00, 0x02, 0x04, ... 0x3EShort[]0x0000 for unused elements, field required, 32 - (0x40) element max
    NAME_SIZENumber of characters in the NAME field0x40ShortRequired
    PROPERTY_TYPEProperty type (directory, file, or root)0x42Byte1 (directory), 2 (file), or 5 (root entry)
    NODE_COLORNode color0x43Byte0 (red) or 1 (black)
    PREVIOUS_PROPPrevious property index0x44Integer-1
    NEXT_PROPNext property index0x48Integer-1
    CHILD_PROPFirst child property index0x4cInteger-1
    SECONDS_1Seconds component of the created timestamp?0x64Integer0
    DAYS_1Days component of the created timestamp?0x68Integer0
    SECONDS_2Seconds component of the modified timestamp?0x6CInteger0
    DAYS_2Days component of the modified timestamp?0x70Integer0
    START_BLOCKStarting block of the file, used as the first block - in the file and the pointer to the next block from - the BAT0x74IntegerRequired
    SIZEActual size of the file this property points - to. (used to truncate the blocks to the real - size).0x78Integer0
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/poifs/how-to.html b/build/jakarta-poi/docs/poifs/how-to.html deleted file mode 100644 index 3db863416f..0000000000 --- a/build/jakarta-poi/docs/poifs/how-to.html +++ /dev/null @@ -1,1018 +0,0 @@ - - - - - - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -How To -
    -File System Documentation -
    -Use Cases -
    -
    -
    -
    -

    - -

    -
    -
    - - - - - - - -
    How To Use the POIFS APIs
    -
    - -

    This document describes how to use the POIFS APIs to read, write, and modify files that employ a POIFS-compatible data structure to organize their content.

    - -
    - - - - - - - -
    Revision History
    -
    - -
      - -
    • 02.10.2002 - completely rewritten from original documents on sourceforge -
    • - -
    - -
    -
    -
    - -
    - - - - - - - -
    Target Audience
    -
    - -

    This document is intended for Java developers who need to use the POIFS APIs to read, write, or modify files that employ a POIFS-compatible data structure to organize their content. It is not necessary for developers to understand the POIFS data structures, and an explanation of those data structures is beyond the scope of this document. It is expected that the members of the target audience will understand the rudiments of a hierarchical file system, and familiarity with the event pattern employed by Java APIs such as AWT would be helpful.

    - -
    -
    -
    - -
    - - - - - - - -
    Glossary
    -
    - -

    This document attempts to be consistent in its terminology, which is defined here:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TermDefinition
    DirectoryA special file that may contain other directories and documents.
    DirectoryEntryRepresentation of a directory within another directory.
    DocumentA file containing data, such as word processing data or a spreadsheet workbook.
    DocumentEntryRepresentation of a document within a directory.
    EntryRepresentation of a file in a directory.
    FileA named entity, managed and contained by the file system.
    File SystemThe POIFS data structures, plus the contained directories and documents, which are maintained in a hierarchical directory structure.
    Root DirectoryThe directory at the base of a file system. All file systems have a root directory. The POIFS APIs will not allow the root directory to be removed or renamed, but it can be accessed for the purpose of reading its contents or adding files (directories and documents) to it.
    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    Reading a File System
    -
    - -

    This section covers reading a file system. There are two ways to read a file system; these techniques are sketched out in the following table, and then explained in greater depth in the sections following the table.

    - - - - - - - - - - - - - - - - - - - - - - - -
    TechniqueAdvantagesDisadvantages
    Conventional Reading - -
      - -
    • Simpler API similar to reading a conventional file system.
    • - -
    • Can read documents in any order.
    • - -
    - -
    - -
      - -
    • All files are resident in memory, whether your application needs them or not.
    • - -
    - -
    Event-Driven Reading - -
      - -
    • Reduced footprint -- only the documents you care about are processed.
    • - -
    • Improved performance -- no time is wasted reading the documents you're not interested in.
    • - -
    - -
    - -
      - -
    • More complicated API.
    • - -
    • Need to know in advance which documents you want to read.
    • - -
    • No control over the order in which the documents are read.
    • - -
    • No way to go back and get additional documents except to re-read the file system, which may not be possible, e.g., if the file system is being read from an input stream that lacks random access support.
    • - -
    - -
    - -
    - - - - - - - -
    Conventional Reading
    -
    - -

    In this technique for reading, the entire file system is loaded into memory, and the entire directory tree can be walked by an application, reading specific documents at the application's leisure.

    - -
    - - - - - - - -
    Preparation
    -
    - -

    Before an application can read a file from the file system, the file system needs to be loaded into memory. This is done by using the org.apache.poi.poifs.filesystem.POIFSFileSystem class. Once the file system has been loaded into memory, the application may need the root directory. The following code fragment will accomplish this preparation stage:

    - -
    - - - - -
    -
    -// need an open InputStream; for a file-based system, this would be appropriate:
    -// InputStream stream = new FileInputStream(fileName);
    -POIFSFileSystem fs;
    -try
    -{
    -    fs = new POIFSFileSystem(inputStream);
    -}
    -catch (IOException e)
    -{
    -    // an I/O error occurred, or the InputStream did not provide a compatible
    -    // POIFS data structure
    -}
    -DirectoryEntry root = fs.getRoot();
    -
    -
    - -

    Assuming no exception was thrown, the file system can then be read.

    - -

    Note: loading the file system can take noticeable time, particularly for large file systems.

    - -
    -
    -
    - -
    - - - - - - - -
    Reading the Directory Tree
    -
    - -

    Once the file system has been loaded into memory and the root directory has been obtained, the root directory can be read. The following code fragment shows how to read the entries in an org.apache.poi.poifs.filesystem.DirectoryEntry instance:

    - -
    - - - - -
    -
    -// dir is an instance of DirectoryEntry ...
    -for (Iterator iter = dir.getEntries(); iter.hasNext(); )
    -{
    -    Entry entry = (Entry)iter.next();
    -    System.out.println("found entry: " + entry.getName());
    -    if (entry instanceof DirectoryEntry)
    -    {
    -        // .. recurse into this directory
    -    }
    -    else if (entry instanceof DocumentEntry)
    -    {
    -        // entry is a document, which you can read
    -    }
    -    else
    -    {
    -        // currently, either an Entry is a DirectoryEntry or a DocumentEntry,
    -	// but in the future, there may be other entry subinterfaces. The
    -	// internal data structure certainly allows for a lot more entry types.
    -    }
    -}
    -
    -
    - -
    -
    -
    - -
    - - - - - - - -
    Reading a Specific Document
    -
    - -

    There are a couple of ways to read a document, depending on whether the document resides in the root directory or in another directory. Either way, you will obtain an org.apache.poi.poifs.filesystem.DocumentInputStream instance.

    - -
    - - - - - - - -
    DocumentInputStream
    -
    - -

    The DocumentInputStream class is a simple implementation of InputStream that makes a few guarantees worth noting:

    - -
      - -
    • -available() always returns the number of bytes in the document from your current position in the document.
    • - -
    • -markSupported() returns true.
    • - -
    • -mark(int limit) ignores the limit parameter; basically the method marks the current position in the document.
    • - -
    • -reset() takes you back to the position when mark() was last called, or to the beginning of the document if mark() has not been called.
    • - -
    • -skip(long n) will take you to your current position + n (but not past the end of the document).
    • - -
    - -

    The behavior of available means you can read in a document in a single read call like this:

    - -
    - - - - -
    -
    -byte[] content = new byte[ stream.available() ];
    -stream.read(content);
    -stream.close();
    -
    -
    - -

    The combination of mark, reset, and skip provide the basic mechanisms needed for random access of the document contents.

    - -
    -
    -
    - -
    - - - - - - - -
    Reading a Document From the Root Directory
    -
    - -

    If the document resides in the root directory, you can obtain a DocumentInputStream like this:

    - -
    - - - - -
    -
    -// load file system
    -try
    -{
    -    DocumentInputStream stream = filesystem.createDocumentInputStream(documentName);
    -    // process data from stream
    -}
    -catch (IOException e)
    -{
    -    // no such document, or the Entry represented by documentName is not a
    -    // DocumentEntry
    -}
    -
    -
    - -
    -
    -
    - -
    - - - - - - - -
    Reading a Document From an Arbitrary Directory
    -
    - -

    A more generic technique for reading a document is to obtain an org.apache.poi.poifs.filesystem.DirectoryEntry instance for the directory containing the desired document (recall that you can use getRoot() to obtain the root directory from its file system). From that DirectoryEntry, you can then obtain a DocumentInputStream like this:

    - -
    - - - - -
    -
    -DocumentEntry document = (DocumentEntry)directory.getEntry(documentName);
    -DocumentInputStream stream = new DocumentInputStream(document);
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    - - - - - - - -
    Event-Driven Reading
    -
    - -

    The event-driven API for reading documents is a little more complicated and requires that your application know, in advance, which files it wants to read. The benefit of using this API is that each document is in memory just long enough for your application to read it, and documents that you never read at all are not in memory at all. When you're finished reading the documents you wanted, the file system has no data structures associated with it at all and can be discarded.

    - -
    - - - - - - - -
    Preparation
    -
    - -

    The preparation phase involves creating an instance of org.apache.poi.poifs.eventfilesystem.POIFSReader and to then register one or more org.apache.poi.poifs.eventfilesystem.POIFSReaderListener instances with the POIFSReader.

    - -
    - - - - -
    -
    -POIFSReader reader = new POIFSReader();
    -// register for everything
    -reader.registerListener(myOmnivorousListener);
    -// register for selective files
    -reader.registerListener(myPickyListener, "foo");
    -reader.registerListener(myPickyListener, "bar");
    -// register for selective files
    -reader.registerListener(myOtherPickyListener, new POIFSDocumentPath(),
    -     "fubar");
    -reader.registerListener(myOtherPickyListener, new POIFSDocumentPath(
    -    new String[] { "usr", "bin" ), "fubar");
    -
    -
    - -
    -
    -
    - -
    - - - - - - - -
    POIFSReaderListener
    -
    - -

    -org.apache.poi.poifs.eventfilesystem.POIFSReaderListener is an interface used to register for documents. When a matching document is read by the org.apache.poi.poifs.eventfilesystem.POIFSReader, the POIFSReaderListener instance receives an org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent instance, which contains an open DocumentInputStream and information about the document.

    - -

    A POIFSReaderListener instance can register for individual documents, or it can register for all documents; once it has registered for all documents, subsequent (and previous!) registration requests for individual documents are ignored. There is no way to unregister a POIFSReaderListener.

    - -

    Thus, it is possible to register a single POIFSReaderListener for multiple documents - one, some, or all documents. It is guaranteed that a single POIFSReaderListener will receive exactly one notification per registered document. There is no guarantee as to the order in which it will receive notification of its documents, as future implementations of POIFSReader are free to change the algorithm for walking the file system's directory structure.

    - -

    It is also permitted to register more than one POIFSReaderListener for the same document. There is no guarantee of ordering for notification of POIFSReaderListener instances that have registered for the same document when POIFSReader processes that document.

    - -

    It is guaranteed that all notifications occur in the same thread. A future enhancement may be made to provide multi-threaded notifications, but such an enhancement would very probably be made in a new reader class, a ThreadedPOIFSReader perhaps.

    - -

    The following table describes the three ways to register a POIFSReaderListener for a document or set of documents:

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Method SignatureWhat it does
    registerListener(POIFSReaderListener listener)registers listener for all documents.
    registerListener(POIFSReaderListener listener, String name)registers listener for a document with the specified name in the root directory.
    registerListener(POIFSReaderListener listener, POIFSDocumentPath path, String name)registers listener for a document with the specified name in the directory described by path
    - -
    -
    -
    - -
    - - - - - - - -
    POIFSDocumentPath
    -
    - -

    The org.apache.poi.poifs.filesystem.POIFSDocumentPath class is used to describe a directory in a POIFS file system. Since there are no reserved characters in the name of a file in a POIFS file system, a more traditional string-based solution for describing a directory, with special characters delimiting the components of the directory name, is not feasible. The constructors for the class are used as follows:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Constructor exampleDirectory described
    new POIFSDocumentPath()The root directory.
    new POIFSDocumentPath(null)The root directory.
    new POIFSDocumentPath(new String[ 0 ])The root directory.
    new POIFSDocumentPath(new String[ ] { "foo", "bar"} )in Unix terminology, "/foo/bar".
    new POIFSDocumentPath(new POIFSDocumentPath(new String[] { "foo" }), new String[ ] { "fu", "bar"} )in Unix terminology, "/foo/fu/bar".
    - -
    -
    -
    - -
    - - - - - - - -
    Processing POIFSReaderEvent Events
    -
    - -

    Processing org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent events is relatively easy. After all of the POIFSReaderListener instances have been registered with POIFSReader, the POIFSReader.read(InputStream stream) method is called.

    - -

    Assuming that there are no problems with the data, as the POIFSReader processes the documents in the specified InputStream's data, it calls registered POIFSReaderListener instances' processPOIFSReaderEvent method with a POIFSReaderEvent instance.

    - -

    The POIFSReaderEvent instance contains information to identify the document (a POIFSDocumentPath object to identify the directory that the document is in, and the document name), and an open DocumentInputStream instance from which to read the document.

    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    Writing a File System
    -
    - -

    Writing a file system is very much like reading a file system in that there are multiple ways to do so. You can load an existing file system into memory and modify it (removing files, renaming files) and/or add new files to it, and write it, or you can start with a new, empty file system:

    - -
    - - - - -
    -
    -POIFSFileSystem fs = new POIFSFileSystem();
    -
    -
    - -
    - - - - - - - -
    The Naming of Names
    -
    - -

    There are two restrictions on the names of files in a file system that must be considered when creating files:

    - -
      - -
    1. The name of the file must not exceed 31 characters. If it does, the POIFS API will silently truncate the name to fit.
    2. - -
    3. The name of the file must be unique within its containing directory. This seems pretty obvious, but if it isn't spelled out, there'll be hell to pay, to be sure. Uniqueness, of course, is determined after the name has been truncated, if the original name was too long to begin with.
    4. - -
    - -
    -
    -
    - -
    - - - - - - - -
    Creating a Document
    -
    - -

    A document can be created by acquiring a DirectoryEntry and calling one of the two createDocument methods:

    - - - - - - - - - - - - - - - - - - - - - - - -
    Method SignatureAdvantagesDisadvantages
    CreateDocument(String name, InputStream stream) - -
      - -
    • Simple API.
    • - -
    - -
    - -
      - -
    • Increased memory footprint (document is in memory until file system is written).
    • - -
    - -
    CreateDocument(String name, int size, POIFSWriterListener writer) - -
      - -
    • Decreased memory footprint (only very small documents are held in memory, and then only for a short time).
    • - -
    - -
    - -
      - -
    • More complex API.
    • - -
    • Determining document size in advance may be difficult.
    • - -
    • Lose control over when document is to be written.
    • - -
    - -
    - -

    Unlike reading, you don't have to choose between the in-memory and event-driven writing models; both can co-exist in the same file system.

    - -

    Writing is initiated when the POIFSFileSystem instance's writeFilesystem() method is called with an OutputStream to write to.

    - -

    The event-driven model is quite similar to the event-driven model for reading, in that the file system calls your org.apache.poi.poifs.filesystem.POIFSWriterListener when it's time to write your document, just as the POIFSReader calls your POIFSReaderListener when it's time to read your document. Internally, when writeFilesystem() is called, the final POIFS data structures are created and are written to the specified OutputStream. When the file system needs to write a document out that was created with the event-driven model, it calls the POIFSWriterListener back, calling its processPOIFSWriterEvent() method, passing an org.apache.poi.poifs.filesystem.POIFSWriterEvent instance. This object contains the POIFSDocumentPath and name of the document, its size, and an open org.apache.poi.poifs.filesystem.DocumentOutputStream to which to write. A DocumentOutputStream is a wrapper over the OutputStream that was provided to the POIFSFileSystem to write to, and has the responsibility of making sure that the document your application writes fits within the size you specified for it.

    - -
    -
    -
    - -
    - - - - - - - -
    Creating a Directory
    -
    - -

    Creating a directory is similar to creating a document, except that there's only one way to do so:

    - -
    - - - - -
    -
    -DirectoryEntry createdDir = existingDir.createDirectory(name);
    -
    -
    - -
    -
    -
    - -
    - - - - - - - -
    Using POIFSFileSystem Directly To Create a Document Or Directory
    -
    - -

    As with reading documents, it is possible to create a new document or directory in the root directory by using convenience methods of POIFSFileSystem.

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    DirectoryEntry Method SignaturePOIFSFileSystem Method Signature
    createDocument(String name, InputStream stream)createDocument(InputStream stream, String name)
    createDocument(String name, int size, POIFSWriterListener writer)createDocument(String name, int size, POIFSWriterListener writer)
    createDirectory(String name)createDirectory(String name)
    - -
    -
    -
    - -
    -
    -
    -
    - - - - - - - -
    Modifying a File System
    -
    - -

    It is possible to modify an existing POIFS file system, whether it's one your application has loaded into memory, or one which you are creating on the fly.

    - -
    - - - - - - - -
    Removing a Document
    -
    - -

    Removing a document is simple: you get the Entry corresponding to the document and call its delete() method. This is a boolean method, but should always return true, indicating that the operation succeeded.

    - -
    -
    -
    - -
    - - - - - - - -
    Removing a Directory
    -
    - -

    Removing a directory is also simple: you get the Entry corresponding to the directory and call its delete() method. This is a boolean method, but, unlike deleting a document, may not always return true, indicating that the operation succeeded. Here are the reasons why the operation may fail:

    - -
      - -
    • The directory still has files in it (to check, call isEmpty() on its DirectoryEntry; is the return value false?)
    • - -
    • The directory is the root directory. You cannot remove the root directory.
    • - -
    - -
    -
    -
    - -
    - - - - - - - -
    Renaming a File
    -
    - -

    Regardless of whether the file is a directory or a document, it can be renamed, with one exception - the root directory has a special name that is expected by the components of a major software vendor's office suite, and the POIFS API will not let that name be changed. Renaming is done by acquiring the file's corresponding Entry instance and calling its renameTo method, passing in the new name.

    - -

    Like delete, renameTo returns true if the operation succeeded, otherwise false. Reasons for failure include these:

    - -
      - -
    • The new name is the same as another file in the same directory. And don't forget - if the new name is longer than 31 characters, it will be silently truncated. In its original length, the new name may have been unique, but truncated to 31 characters, it may not be unique any longer.
    • - -
    • You tried to rename the root directory.
    • - -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/poifs/images/PropertySet.jpg b/build/jakarta-poi/docs/poifs/images/PropertySet.jpg deleted file mode 100644 index c0d1461020c090c83039f1db25ad2266a5a15e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17843 zcmdtJWmsHWwk}+_yE_R5A-GF`5JK<}0>PaCK?--*0KuUM5Fof~2o52^Ef8D_cXxtQ z+(r8IKD~SI?$hTveeZYgSIi&lVa=*J*H~i?dB;0$CvO)(`0~R?+24SHiI3pq>AP|6V+d*`|kE0;``hfo9gMf&HjDm`Wj)92< zOsK{OAtE3lAtEE8pdcdyv%P`)AY=j*!h75js6@&}X!q@jdHiED(HWk8ZXr<_Iso&& zb_l@0BqbxKpk!ov!2FPfk6%DgNcfTDGbw2qSvmPvs%q*Qnp)b%CZ=!9%q=V(ot#}< z-P}C_-v$MTybBG3#=VbENc@nLoRyuEo0nfuSX5D2Rb5kCSKrXu*51+C)!p-bcw}^J zd}4A6wz#ysvbwguvAK14bbRvj^z8iN@)ia{zZ07{=jam*>FOdSMaw#9O1VhE#D(4x`UXl^b;mX`q^dgEeOhd3wj%( zdJD?r)x8BZjT>CY%3OmV<=-^`Np8@jo9L;!AWFIOj_6)(YQEk};>>P1g`#P`Y^Vjq(;$uJ#EY zrv3ZH{%o(T>4$jN!PgINK}K5QCt+I+n18!J*7So1*KzYWzLP8yw;(C@->>#(8zmVy z4}nYi5CJO}svv&IdVh8#WGrO`(KhubcG|ymA;G`dNslt`8EDB4gbeKPJfRi_1%*QW9x${;SQzzKF)$|bz z<&c=RyDp=OOWoMcEm^gkcC9%~?r%v4&1Oo^QsGCJvpUAl)|K&)C2ac8OVA9o%@cHq zDt8AernWW&BP8&Aci$sN#CwfUM%8+08)$pti`;e-B=)Ur-XvLM(y5;PSoCF5s6`Tq ziTcqbHRX4bDO896-C(EVHF=n!Z$e8iRu}!yU`Uy+A7n(5J_P*k>hTtV)Na!66yu z2a;LSQbwnmHZ}=ITKbv{Ffe*B3T7V}bzDT+xlyQi+bxJ-?)*U~CEL1u@Vf38ZYC1r zXjEu}s*5xey&J*76X5}=E|G~j+Cw6@t*#DAr(_d{$H`99)1HA0?;PN7&ZnLnb9H4S zck7xen7(RtAxp!qI>ecOmp@#xYg?`5Ou(a080+4S6Vd+;75yci_bjS#-??#yj%2}k zxIvXFe4wE*VP0O%Db~0qN`vjSX|raUx&uB4wb@|`M?d|}csat60YBim_~{Bo`xdm3 zTNdzNIxxWV;NOC}ZCia$N#brnvSq~?cebk1Sx;p^a)g7Q=EW*|$?k|3v{s6)4{8UZ zhCZQSsxUdUO+<~0MAL-q%F)VJ9TG$M>@!f(p7s-R3DUO-2|JVbKLH;`hPi2T65NC< zLvYUPm2E?J`Y?}u7)nqsLGh}k1q3I)@^rJd&Z-R{4n}_uw$BPueaQtv@&hfC z*xWtt`ZZv%z-Mg+ro8f_7LRz+?3^B<`f?e%8LJ zspaO-@z&O&;5_X6_|`)Ly*J_R4sY?@X2LIwGw-Jv#y=KeY?Go7z2@tNl89&}Y>2Nl(=X)xF zeOTvgBhhK6`jM9Wz=NPF+?Uwm(s{2wSIMYgdM}p1=KBxJ9n3ndOhftD4QXi}1ag9{ zN8aOsi;Tlwba~Qo$fV=`dW0f+Q#Z$nJ%%|6LfCzt)KJcI$g}9SIqH!Ua~I-D|NCsQ z@7l`gcz0>A1T>G_AH?bK{qkS`K6U*~%>i{r^z9Kln79cj^*vFU`1K-xd(VG%p`~3D zYF3hi;Rg6&nZ*9k#X2aN46G++sG@e(g~oG2ym0d|_3(3udm#kEH+5tft=*Jh@i}t( zzMR501ms;bq&R<7yukhH=nIeW6V_L^Am!eqeX3g!10T18_-5Iv?ShdW-Sxc&v+Em3 z`nlNGThQ{TZ!1-v@4z^)*}&;}xR}hp^Y&QeqAf1W(uZKkcAt|!v96)KHd%vmc420h zGC_!N!6a_D#&;2CM0|Z4h!R_N_isV8*>L<>Ubs*7z%}jME$DDd{J(j>WLKtnaQ11j zX({B?F*`(qvST#t9BtLv!r|pdGYj?QVC`b#oJp}67s`zBl4`Vpgu+h-y~u6I@V(bt z6y;RRPwOVTEMAgt>YfX}fMPHx${6_1VwS{iyL!gNo&|5pc5inxj8a+$Z0VDX?4F!f z!iR_1@5>sc4ZdC@k3liux$o;9q?-`2_xg!uv5w;S$&F@rjRsX-2(1$#gA|`||2)qF zgb{i|L4?@u?o!L&!ka(8C`nb)899lgoSU&uwz}Ywj$|7#rmA`7_hkY9#h{(A5Q!w5 zgwF+Yn;pyDGfi5G_|d<_`I&fP*tfIv3tzupm%_QWG_UGjXC}+ z3j9;wtVZ*+b>vkAwEuD(tJs438^tmqgJA$qeqaE?H7i~37$02{t+&Q=>bm$^y=mrU zbi_4hBs6TVf%quXH<8yUBt>n~}2%SE)@*H4#PpmA5>Y(u>Jq zr}IvO>pf|L=6NAPvlXiMM(9BUfHZYjK`p#7Sqd}75TQp@M z&?EM<&yJxkifg8-OyVAa497YeW=7m3Wgn!}RcomeZ>Lz`7L-_Ah2wbtvI|f42>o6T zVN4nQam)bl*>wDztgQP`&yu3;zR4`PsHgts&KR zmkBzc9EsRv7Zg^G98=MWPMFW$<{O#3CV`|UvF0)~#*w$@j0sW}G z_+#{Jlkg02H*vKSe@dZ+wo9c=&1HOK=?>=NxX1@}HJkt*Bt+f-Y40CzY7$E<=ma9Y zY}vc6>$c)VmT!6^_`-YGTtglGipyUu9P)pHy{;YI<*4!u{Rn>OgU{CYf<#^QO+>wL zyJzjeiy22foPQ)hVs&eHv1!gU_-ul^IciC$&0)A6`K=W7mygse0ZN7t?y~Axvv6|p zijrx#e%T;@U-&k)7(+LGa7=;d}wAo)jW%AL|`ehhUa zxoRBjiw!jib8af;j4Dv+Eebu^7Gzp&!?xTa&aC zfd}O?mt)C!8e(H4sPScli=BS2uOvM%$YX}l<+_BnXTz{@kuTvU7C+?}T#jQNI8KfbA*-mP@AdRkZYl8b})4_4y0LiuX6!12`&O$|Q?Po>zAT;lhUV>^_- zw164BbD9orq$G{D_t{Wam@c)ncwh=9%#8fh9TdFJj+g;nl!Dw;cHDwa5C?BT2abZb zp!-9o17x?LK`bEgYw4T64wso0HMj*mVaK}#q4D}2vA-Ovo+sY86g$ne&)mepNo`Cd zWYccU4a-WPe=~`_;1RaNoK?Sn{^A-4s3i68Bt`CfUL?LKau9NZ<3R_|IjBkP+ z4BAT~?!S~ksX!NfUEB1(dk_EJhbUT0DcgKBk#dt*G&z4Ebo{v24!YBCpPI8QB<77{ zInI6>R{N^-CTCb{i#tPe5C5||2uiBif~dM$XCr;eq8zmqfMZ{pAJwKOyHf_XCl=I+ zx8A4zh(N0u?-+YkyDk!tgqTnk9LAcK-exc3$i5b9&lK;@kObxe8K(C1@U;4Bo|e1+cJ zzhcT|;`Oz-Dm(&V)rVYmkQ>CF-GkM?3JcuTryp)|<6Dlg>m^TRJdSk<`;&BRRtAyq|0;Yz){ z;(W*VX-?Ah=8NrF8r5fNL57K5w=rWIR79RK1ws>~u-d%sQ|-uJtw6@F*OvMUtno+d zYRHJwO7l;;Y(E6W#MpJ#6#Vw^fDJ+O?IvA^w>Big6Mp=SZv@=@J^*8d`tFc8129%H z0Au|#Adh5V3cyh%$ARg9<;k|${*~SSr%L`sH(ApTT(A9Ye0Nw2eK)PfUMxzhewYxo#pLX4hT&iRJ}?1I^n`(WMR|;Wp5RyxRE2rAwey~$IjxJ=s7^XY<6t2E4mtYL8>kf7KNXGEd%)h4@ zdHih}_+McdTCZFnVhJqJhwZRU3pIZx%V{Sz5aCi-yt&Ul{on>GoSX zi+=9a!W`n)ZeO{L8Q zrGBP`H)6dsblfyv(vX@kCt@Km+FkCZI(8#CrA@a;w2h_U^}igpHTD5oDeHtpZc7)6ov;E`6VDae&Di zP~4EJ>x0#@p`bQIWg$11}&#UR3Pb{KWX_ zEe%_Ke#B;Y^sUE@g9JWS?{EvEUlm9b-X2xYePdZMue~`zw3!g@=}u`AHno2AEdT1u z!4si=9`27O{@tGzfA|cvH{hgw&aVm{-c(@v3HvU=@?ECDP=x6IMtM#;L=NPmh{0Z1O+syN%Ylz6e+~F*rK@X+8n1q8}ZTv-LJ2Sm%XyR z*|CR^CzB@0Z_8foXC%v%5BjY@e>7<6>QRl04upAvHR;w32{r|;TyN0ManoC zPYBM_6_Q$o*2NiCE(Ge1ql9HfE#7)9843^U-A2xAtR8q)l5||F5A%!T zdx?(ndDFHk^!C<mWupi5nt7j5 zxeUswp{>E>qwIL~#f=sXh^MYa4_-vUslPyeQ0eJx=P0CDxyvzpQ%!mT4z)w0E;d6# z-jG}sr>v@YP%=;0XCa!|Lvhy^N-Kcn#AgxgNgUVR9dHZJe;e` zCdqn289EyERgFP-u{gArVw9TXE)nVhNIw#g#L%iDRggw~x z^stq@u#@vRkV`rkWVvtrfRfL&OH;g&rb%@STR2Hv$)T zJT}~!x<+EH$a0Quc)G2JDSX+RNVd9ZWEeI2MR@{o!`p9@u=TTH;+GeZd8Wv=rVfrZ zU-pB}@aN1uQfMA4U`_sf5c0D67^wrN-M)*8?ZE>AYqi#upjDagq^SqP?r)SxyV#(Q zB$sqfBDF%%zr>e+3v}de-jmzcyCJ@dPX8E`CavK~$|Unh;}P#%Q9fBX6<<_{-C~}r z?_5kTMe#ek)Zlhr)R|T2IIv7ks68#cKde??F|7FB$mpX?xvc4G3RSA#GPdga>UsfS zCI7WhjYXW7VJ}(vo)C(iBJG<;QOw7}o#NWqZ=DUghuuReZiI8$>;t&dJ-mS}|9RL_ z&v>x9+7#|g)scYpgG?(_I@8pp{lWqKnrnyyv!Vf1RvLH|SQnj83aBa7Vz58^bX&57 zKSk<&0Rn4vLnM5G1ws-DvD0YzTI);;0quyh(+0KpuRB+b+aIilz;X67(;u)u#$XJ* zdR}?37LwoMY-^geSu?0t*86U;`k7WDvQaa+Q7{AA=;c_Xp!`S`#HDt`%GxT!jALl} z>F0-52vA~#k09QihsicUIUC<>Pxa%Cjn<9(uGkx-nkYJ5{6Cuf{K;pjO&V9~ZU9SG zi@XKJrE~78Z*uf43(es2`i~5%0EvTz_%t2t7Br;_oqOf5EL0Qg?iXl`Ix(KKQbbdVIU77M zH=ACiV7I}WggGg$>1-mXY@}SLoE1XPGJ`PoL4TN+a0YBs(N*ju*4Dx%PuM-j)yzd) z{f#KpTTV0;1{k%w9QhCNt%E-II6oHi$u6g~d7S!K*|%P7Xgt##SIJR71K2%<#4%!- z(c@+$?odYKkTci|`RtN$22nvhLU(Q^h}WF5rF zc~UtA$<%QR2)7X6&j&wCgW^|CHDLXjws{h+n5bM725UC5 zUEOrZj!^EXEQMlor)dZss+-5Sf)Hb^J>O{w+12BDWZQmM_p&K;cgDc_+0Xu~KD6ef zb4=$XIh#j5TekB(5QqAC$fE(yL>_zz?EEzJ0ftQeDK|WQTVgjVnXwfMN{b9Ek%pqg zcnmoztY(z>cb!5E{=*F(fQ(twfm{e0QUVmOS%Au&^z5J40yM-H_Ad};fLR)V?hQ{B z1KAF98B)h!l>xyuN}>Evml;jRYO(wgi$7br&#tgAV;C3tzW->%#Ci9G1|6Qwi6;%G z$|xr%j6c$9m)0;7Ec3=88fU#s`Fj``^w@|+v#Hxf(&ZYul+C5+q`ML(H7@I^Jn&t$LD{2?FtaODJdw#<}%PyA*{2bo#I2-A3_KC*jqoePsBUw*Couj#k4YSk5%BF}db5h_h~ z>+Jq+!wBhcs9b9ls@#LatgX)B^On;uvK*qJ>TX^eZ5Ixlv(5w36haKK8s`711nfPe z=04?U&1%&K^Xo*PT=hWBnW`r@8T+6Qsq)pY${zV^r~mI}`jALZceuI|%}L?~@z+Af zm5G=8DygWmy3quwugmhI4Rpu$|0mQWmiLcY8`HMdhD0Bhri6RvY4#;pJ~4_nN{Lck z@M~jWX%kjKng9I)B+&(KaBHR&Nza8_5TP_Cn#DLeE%^l4bX6;io*bND1Z1>pgpy)N;lld>S=8(iMCrpuR*j@)?Z%z~QfiVXV=^PMmkZWmJl7nZ+G& z>2g@r@C*PhgOHb20N@g{=~Vm<`EA1|S zLy8S;Bgx?dfhPs0San)lx$O+ z4-we4&zsktYc5mHsYx<@If;f`$RI?&Jfj}}E9ks4GXHF-(}nG=k9aYZ8fXh9I$9fv z4$1ksG<0^nz(YgEt@czZuN|q{hEQoXe(^MilE>MLC_lmEaTfwP-yyCf@r9e|Hb;B( zDLb&BZ;D^L^`;#oyL)552{g~tQ#8{Tvs5I%$v@ranRD~`QJ}M+t3x_lD-7G3q*}J3 zDfRz||Foi_tQ3FN$ zhE;FOTGgwSDimeK2440ChhwCfrQ!inWKKdZ(RtaxW9zcSqKu1VS+J)t_begPF-b}k zmb_nFU=>bBb_bUZ-FfonW!?v$Lta=CgDU*$2L=?Z-0v#XOhJ!LRG7Eb02J3ID6M}2 z#kEyR1&ahV96vjGC~p9+SO);i{xdoLy6dRV#?Gd#7;pjQLWtP8FNT;AQP!@4)LPp{{1i_d{uS&b0C1 zCgo*qb6pMl7aPawv2wxANf8|+A^IRwQ$6jwQ&3_p*#>+3N$5+{2)o&rXHzsi?=Y4? zPyyM;PV`U-6?D-E%KTdp`tFY!-1xGsnxe->IPC#Pg1#EOsEHN}Bw9rNox=($q1PH_ z=>ii9V=ujafC@AJ^EVF>E_jQakr%1=dne;-fM4r z2$|PKJ{n@jpkj=UIO~aM)j}c#F2_$%93mO3dRc;-g&5^1TF_{hstW$WdHw4-t}k9b zO{cO@U%7~ZY0v0aL|>S4KO}zM?(|)35OiSIg`6j&@JsaS9EC=FXX=;nq0dIG35M@+ zc-0#_#|b4JUERm?&sJ)>DAgB5|D9tjp*hFj)dZ+qJv{p1MnD70ZweIh@*92E~KHf zDEfn>J$+;3{8(R0F3b%@{n>(j6?8Pqmt<=FNA>VeRXScd}<*!ouGn-dtD|ZW$KeT>UdflG97)& zo1TJ{^B2*VC`z}QHBcse9O@|O^ygZ6w`Yu;&hi}59x7jloC)@maPp+|$;Qnmfbv5h z8aq-S$b+C1AmnU6*?x5T010FsXbw^SZ`%L=_+fR_C%m}{TFaW}OFTQ{b}Goq2qnktgBEl|oQ?l7Rwn-ZlY}-$C$Z`ti>)--Xk&TTnE> z=tj3mx&?`Aufy?deb0Z={hz(BitolCQyakQ1|C}s0Aop-~N05|I2 z%6kelOW1CqrK?NRVoKI~G`j+oX6x@{1Vi1yX#ktTagL?Fp=L0)lq07qO{Z7E_c6b; ziI&al$alCDj@1J%EqoVg0W!QJK!*R32+*~L0MVTShDS0Dpk?`3HC@m~pUYG$T~hxX zxH<;N_}xDh-~_Cd1viau#kyqDoQ$c)l~i%U2!6F~hU*mlvp*titY(3dgy$Utf8dUR zFJN#TEpyEP%fG?(SiiZb0E(F&;{VM>PkdX&fDV9lpaUR<6E2etC)j-j4-s>OUr+fS ziP0TITc)1~Z>OKF^#YUw0IL3()-hIjCuVC@*c zvSmG|nb-hKMVdY$@jYL5E#{)zX0MsY@72A`vt|AW1rU9CS?(<;w^Bp$H?#LAB*^tf zz_!!t*j{07HeKrAIPv{Wh~NmPy(4pmi|??~!DF@W(tdzl1s{1{0X@3h!qPE6{ARI2 zkhS8+)8!9+a&7tZFGfc>89qLD1nY;?G1S-3t~@;g9qm$B7r9&EzIddz#S)e73-D28 z+>M<9K5EhwA0Y-oxvY>;OAE3O$zLDk@5+dSL;v{*e=ObB?~?;cMLG?XIBnqxZGThZ z{FU5?G_43O4P0S%-GXw|?|KtRnl0DZ&6f5eb7p1k1j*YnnQdjZ?5VO5CW)`fd zalo>VpkB4q=RZ^{%Uy=(P>FFkE}myKL@k-R4ZSw+D=EvIN>j|XT(&%Dk6%>$A=0J& zbw0F_6Q@7c8j|Z4_Fc|;Vi#qP!6`yk>m8K<{*#x&Ei>{TGd|sdu*ft4)lz^HeX0a5 zTKP}ErW+m2@1~m_i>CAT%~tjuKepwx5jboT9qUyhbSt_AbtO-PSQ`${%|CCbcIPmO z93ibJbbUb`Cx96wgy|wI^gZnR=kugeOBajMNed!93kN+C#m6`-dkP7)$eA&^2rEfQ zh;s(dalV{sC@gc54J=;$c%V>O%XFm{-|q0WsuqLT-fx&YjB`$QQV5evBmv~uH|O>A zkUepdRFS@t#u7&?wd$gD{PJNfu{m;ourTpGb&Z)XVX2eF4sNyW`+06h-xv9|*>GhM?e*u{URwCi(dA(Xv!aIM^A~?WamUo%kky`RO#f7LrfiO12 zqTKXChiwvDlbQq9wzqIQVUF)WEvm^PW5C@jF-y+6G&OlD7V8ZKO$E}!2(Ia=din@6 z&Fkmm)gpZ3JA9#KRrMTUdFen2m9bYR;AJ-l=;*n>zb$7T>g-jqPO}gH*tM4P0~oti zMi^Zc`)oy`PB_KeqR*1|Kd&=`trtMDtZ$iJ<#NcYY{MJ+;~>-lI68{q8m4o|_RlNG zb&C)p>L&Z9dRY4%xaa?>fqwv5R`-1Fxj76Ut5hd=?u$HMJ7G$6TADFT?dzpLkVOve zN2fpzs}v6x6-RqJ(ScW3I3&+{Q^apZ{svPBRO5<|-YL;Vo8ACaS`a^2C_ zjO@$ykDI8a5F#1qSpEqekoy+broEz0nNxEp;nHi<{mmXxz%GtdO(X>Did2Z0GcM|B zoq6u7GXBX)&y<~Sd&G=mgMgy*X=n^@dH0^S2T|z8&OSI`$`v~c z-$SjmDqdoBu5}W?_USJQ=BK}y=RTV9-%My(z{v@0PJT}|hhO*TMtU$8d4e6gBX{0K$5DRz7u^eEneNU1ijLLiC2F6akZP$IKVJ4pU&BLQCaKr zSnpq-R_0-b3aC_`b^@JpojGmS@Fz;d6JY$>crV17^?D(*G-qgyuWLvH`wMAs1{VnAo^!p{_ z{OVq_vk4eY9fXLNZzn74(G|d7s?YvN=M#|(<7`?^a;R%L6Z=pldA4kV8oHkdD!8(i z!iyPk@jxcE%&ln8^Je@pLv_@gr&FL+%ue`s>ke6){`~y2ZIK9HEOhJhsFV zEE}#bb#-_*jnR6#LuIujHrlxd?!BUted9fA+eVh0AHhfCz%Gx@Fmydzvuml_yB1kt zdfgKJ9@{G)Ew0X93&!ckDJl-W^hsKR)QO5Pw!}Lv;+h6w)@)?gvDf2Qn$g>kF9wnt ziw9q0UedkmuXio#DVX;)lgUp?Mu}X-l;ne!gS%IX3PkaXkjTXOB^R^tLLbv_&9T(T z;Y5CY@1YnE6XMo?Ee$n$DJ`o3^Y>@5n|x5~{U0{`?}<8)fonzp_VHZeylE3ZNi7Z^ zul81IQwK7R{YF7w#@yV5d^3CGSQ+ZiU;8rEHx(Y$yjW9F#aHzcLJk~)6hpvd%%{+ZKRzt`rX=~;WxG6pJ?Tk zwE-f6HSvq|O=-goy~itfv%8br0bTsYGUHy>%L-x;m65WAA=|3mCz_Hu&lwVM4vBf) zhu?Bc2l7O7z7dFe;i$H=|H?#?3H1x}s{7UMr)T+sZf)tF~W3GysZ`&t@@ z=^o+Fc<-*IaxLbtC-wpEBf6KAD@t{Te@ztg!jd=&uQSdT07gtL# zn*8LQ$^0`z^d~9jALAlj&vOLd8vd^@rrR4fz?&vSa0c6i^SzI+5Glo8`!RZfNVtgj9w%jAK%@C>h1 zm*2^kXkvXx-qHmn92^Gk0ob$Bjp$t8UK7Omftu;@(dmQjh9Dmf25pz0GpJ zJWe%o=jlNyCOV40kmQz#f4Va*v5bbAT>+FToU^yJBfmhB=V5#BY5pp^4z>Zl2$Crh zf=4Tak3fwG{l@2>8P!k-Eqy~3bo>@%@YS;>KvVreFsS`$RG9oeOo4l`Vnsmqhs*oB z%In{^N&Yd`lx=cJDBNn$%d5_vv8df-fa&J-C^NeCa@yCU3yA?mD*6LOO7%pGtWB3o z>j2q=gq{kpyZ+PSNgIb3Xis>Xo2e0Wue<~fDmPsljHmRzrv7YhXbAmDl|UrVdt77E z13vPWRdG;#-T7&O6K8wCf+N=md<>heE^)jmGJW6PTOGTifxQsWy!T*V@GQy$kk|Me ztEXFbFnSEwzB5ye7#jpy010)--Px``35WkCSOzBi8h@;i|7Upqhq@nN3%lS?YUWQ# zMto0dC^yW1g#c?Ik$gzmw;;>X(<`PgSJWzC9zht>Y^@bN$D5vR6eOg;0W|E|!-)`^ zs#K+y0dScRd56TFQ;WAXE6(!-iVL_7E(_MSdmnB8A!%Fn*X!{FdR*D=dR%=kr6B*H zx$6({4sf!TL}eTui`)j}4|4Oe8B3Tj_}P`ZUBg`bDb&Go#CDWVT@8a_`LXFKbW1Pd zN)@uVlULH%z6_O~YE5;-C=IsEpqXF*7vz5bZp%_=q$v`b|S%~Upel?`L7AGE;=kZ;?k^*#%Bp7GHJJ? z9v6ek)HyU7*|EBZ_I!J|)@1lwTb86*j*fQd4*Th5v2*<}ndWyUCH4rKoWPGn+q$l8 zp&SP7`kdifHAmMfiFT<^%~x=cKNE|a5gbiyt+_7x#gt=Sp}hfQfICl>T`i^545hKqXlH8bY0J zL6MhwJIB(6g&T2`uncUi+%UCx|7DPsRbcue!-()V{^*X&^w8|8=vD*R99i`=eJ$mC zuF{i9Z0yX6=jM*@4iHSS<;W3z-_2W%!b!C^AH@WZ=#1x9R1zE+>*U8$B(i?N6sYf4 z!W#W(HeB!@hV}O?V7g}!zAISPca&tHQlnt>7fLcvR1FRU8sG)rIxA8aku~@yaB?T9 znbPrD$shYID*2@1$q&>--GVyc)a8(iYHuW!syg)s9px1wQNv*6#z(yf4;c1Yu}u!7 zv}#658Y%KDJw7PPy!w**qhoZ5vr2Ea>DfzyC(Xz#1(-!*sEWMJ$?R*{bL9Ni zPxl~KCjn2pnc{m5O+FgAa3C%nRYN$e30u7#rnQsj`@YqLW(LT(+-J0HRFi|1c#tC5Q=3t%=iXU_ zKM=E7(+;Dr{jHmJSn~iqu;L#CbOV_8YXC;`UpbX_m$Y9{qb*!bJxxp4dJ7H2_fEp= zRf}ikwr0vcoQSS0Cdp+Jo2*O@`D4w-chDq`N+^Eys&9{grmcZ6z>wf#O UUFpTrFDe0GcK`&c?Q6*Ty|ly1Vlr)YCcFJ$W@+ZDmL@wHr<=uO+^J!wGfd~JhObO5 zEhbab8SO9`O;5+usnKFLlghY55+}}X9E9uF;X3a>;QhRw_w#x$UcyUCUXzQ7!aTuX z2t<;#%>fMUKy3y}6Oid4wN;`-NenKHK@$jsQngO3Kv9Fm;p!ucRDh=@vjid;Vzb#s zd_Ex5(0CGoRINk}gM))y9?xoTrwA25q9c+iK;N#@>wwO#QmIfBC5cpSw_9(v@kA1q zP@a;K5<+3v+MGaPqzdGH-a(~C55%b1)-DiBsVOi(ZA3AmRH{NKOjx1#Zb zu6TmdNTe_(NDV|<3Yp21sw&xBZlA{sL?{E60F{|YA`?i|wzjquk%BFhxLhuvvH+!- z#*+fMQD?O3^?FEAPo>dDMn;TgtJCQOYO7FM>ht*^>0ugoHGtKWlpL4at56|>!y}NW zQlT+GsEtHr0GSaeOnC}ag&G+=sn%!}$u&F}Cgzn{tyZJSM53`sd1a6oZFjgl-r*GC zCY45Kx7$gy6pzOPsmzev7(%8wU44Q)IV_ezN)sf|KzTZc)5R7ke7@(9+(2OoAc>wO zkaNXK3X>;O>xYMj313wZDz$n86P6L=1_fdO8as_Efy6o@g{je-P1Z{ehXeXbn5VPa z9YCN7AriF)3sHiSs7#?qOrbFqh|c3392xNewFSrw5~Y^J-~q%&W^h$n6Zm^oHkkHnf!<#&$X(w!Dv#=ym$&HKd33ak<_(uPu2m}j)4msQWtZw3IFID zn0tTwkf$N7lhBpiaTP>Qyc~F?p`s=@=kW#$ZN0nY<@9~@D{sFkAiSaUH}XH9adw~0 ztlj?PZpY9`O?nJ~M#nd=`s424&Q-_f7;|LDi=8*7b!8WK|0^gnYn*>Lrn%R@wu1-M~UshE9KC#uP3O$Deg%>$bz3LW0DboKUC;jQh^` zD6f2XP&0nsQcIybS_03g+!g=fyM9hmDR>e`#1~wjo^)kRXOez(f}8#MB(c$gi(fn9 zJ9@h-yKY8&!0YSDpZpz}^Uoi9R2b99hdXq&G>IF-P7qdKh-W9BSq_DFH{n)IO?<|g z5_y5XaO$nz^qK?4(1Rtqwp#(?=!s(;ejg95>@R(wR>fBwHT;LZ@V;Qn*s<62Ip8j}+nKD;YH z7mPL+ObE&Uh`oucFFbI?^Eq}mXsF;11%`Zo^i|8f0L~%T?a|V|-h2jQqg{Bv%^zc0 zZ$It1Ty-}urn6=EW~Fb|qK`?6ebYj7V4m>AXb>sa~Njm-)y zZhYLAOR4tO^8`}pP%#Ipx>qzm>c$vWo0?t9)kL;&{&aubx%OcNj=xOeob)^)t39=A zG{niC9n=}&`ro`&(L+%ill&@R>|QQEJwN>}8g*ycfxY~76UQn$=x8q{E}(P6^t5VR zF9wOPA5Xb)2Z^?qmTwJuh~JrjW0Gy>hD-eL!FM!xR`!(2_fIB$u5Csh#C34ObFOdx zW;w(P$~O=9I>MXo)X!~xLD=-nxuCFQQTVrSD+H|)6d#RDb|(;uOHZ#lg#iFm9*o@~ zE0~KlkqyI9jMb)yI@Dk;D(e0znI8IWepdusg{3EDN;mnXK@~&ij^Q2Hm}VU0X|`vE z`Qz%|EsVNzHO)LfD6+Q1vD4pHzO;4dP-zi1TKET&TlX-mupW~v_z_lMD1ICH9DhOZ zZbh%I=JX{e+p;W$lk~8*G#6sMF4C+Y?U?vm&Wz|w`FPBtX_y6jxh)VSU`bE0_#t;u zQrOp)L;ZCVdOIQ-ZT?$z=j$vlFrhcg_WocBJ;t@?4<`zu$NlhjxgRE0vrEuWw%s@u zh$-n#eEqU)PHF#!v8UzaPtL@{%eWO^yh{r2ZePo82z} diff --git a/build/jakarta-poi/docs/poifs/images/cocoon2-small.jpg b/build/jakarta-poi/docs/poifs/images/cocoon2-small.jpg deleted file mode 100644 index e8f6dd8c8c0e17f7d97b7265f637000ed61d703a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmb7AdpOez82)Wzmu#{%wPMVKijo;glS{;Op)xH>VU*FZIthD3>zP zDwk3-ks3>4IFw6H%e5uBw4>A0bIxM00SUu>QM09%ti|UgTWv$7!H9# zA>UU(;JF#v0KhEJh7v6tx6v}2v4;LI_(GD?v86^1;T@l&-fyYHNBSsJxS6PM4WjhWFWa3YVC+4q zNoXBAQa7tN$Jj61FsZh`^xjIB12tO&r__#1;v~1lU6k)cGa?G-wWg?Uej_HJsn9^l|ZyEbtLzX z55}4=`KHJ7({d!%&~mK{&RK#(r#f$%F?8$%>=f1%{AeKOtzMh+SZy2gINNb9o~Yy;f~ZUey?Ta822a)vH!Z z{)zF4bPeD7ohWaNTg2Mt(d-^hM|X)@I1lgBRh}viyv<;F_=vSb>n&YT+%qZ6b3Nz% zhbK87WsIQuP3ped0cUN}9$8noQ3HM-Rn!&ObwPwOK7z8VTReoHEtbqq&DuVZE0c_N zOw{gx;LnluvfZ0S>sYcQZ}yg_i{IU0gtgxy(?Y2hZXZfB-eS;(>G@O~DmR2iIGSH*{*J<)zOX(|fBJKR^2?%> zyBFsNoC)z2#mbzD_!G7bQ40D*Ci@4F%Enp-;-f$3 zMX(xcTEz}rs^!C!fiI?@*@p|h{yfi|D2^%k5i+Q>gi+K~jJk;Sn%Nv77aHB1&UAj_ zO!Mp<$^?6quoJ5F5)6_P43CB!e0^zC82#8IG-6Z*7#P}B>~j@9>WgZA`*n|~yC^)civFQS7LLDs^03R#Acsq5FTb-W55H$}=j<)y6FY=qA}ww* K45idpwf_kby7q4X diff --git a/build/jakarta-poi/docs/poifs/images/header.gif b/build/jakarta-poi/docs/poifs/images/header.gif deleted file mode 100644 index b9c2ee13910846fc549adb17e9c4466f407daeea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3165 zcmZvb`#Teg4fk0DwRsBog@>4Myg{ zDIyeAg5}iE+S}U)-}MrSL>L}CJ~Kq(!uWhXlms?4HMJ&z84LzXLL{&eFp?!l!k$_j z$FZ=BEAwzFELD_@e;cz?{MuEbKP^O4LW0NAeWTBKn zqzcoYK(rGSYXB$a<`baDts z$B>vlSSpMvLXo*}6vbMukYB5$l7$#+G8jvP;plKY1CAnD6IghuR7&O}t%+b>B^^Vt zMi8MSE}SW1h->&58j{94&XH0lXU3^w42ldTatXo)7Lo|Xvk(|63_$>sm{^JsBW)-n zvXSfSs}w$R^wT>s+n2~iuB@+6#aLktlfc1KMOY6yiY!DCSO^3jOy;3*Oe}^1Lz194 z1{_OWyW~f3GyDW-X zNt7*4;ps>O$(qPSkr@OG**2|`Mr9M3A_|p{qwy&;Apt>v(!^K_&jCrW;#YDB3{+PA zWilVdmXL-<`?+E!RfKUR!I4C30vm~?B5*VWoloLP*bE^KMusNvXml=_%)wqRJE2f0 zBu!kp7?&=kt*k7QIGA<$I-c>b7=y|pl2|yZ@ZTCJEX58-gOAOOGQ|WkAM;uEks&6| z$fgqbQ3NImLr0RiSQOcs$U@C5P6_LOPc91^myOamC*MsD@uc+0$w}FwjKass<#G~- zNa5h=Wq7uf$}3}WYc7cDSwsdFMuhs%5hxOjCdQ|W**F@C!KdJ5Hh3Z8Zgxia40o>| zqDKRHDPcf;7-5zQ+utr)P`g7Nj>e-C3=7d#t^qI)CF>~hp z{9B(N8K0WjYlt7hgm1U*xz6AuJ>Ps%RNRcB#(Sd1eXGK6I`P9nz?dD zYV~Yrew*l|ZcSIKfuoRDi^^fkXR~~tHGWHltt(FUJ%6@3J5cU(XZ+}^WX6cy*<*bz zo9Oo8Rz=1E+n*~y<>{WpwLXcnpl3T4)_*}iad`bl#^GDrw*O2ju}v2H(Y>mC4TDAS~HLq=3XgY7omLstNLT#hnRPPk59$uQyV9E2tUWbwA}!0 zK)6l?5$xWb(`W!HteuPSgQ4=gvj80lNfoX6(k^C>hvrB;P_MDaB&NkI#ko7^&mVFyB?j$ zI~E9nhw7IaY7ew%#(mh6{|jT(u&^iAJyJ@wv};=GdKAe$B-VO6gb8P1lcK zU78l-HXf$F>CKs}X;lP%X-#drvKryyAMo9D1J}aeG3%r)ulL_I_@N{|@5)PP*3z?$ zrTezWmi+1^y;~zW&rTl#tK;YT=_+o813nop|<4+Z%MVYgFI{| z0B|cWZ@b6dFs}Y&2TJ=hqa?sW`K%WddGmSfpa5do)~O!Rfd(infQqNlr5@x0oxKQ1 zN~ck$s;98EXg-#6>~Zdn-h6bLwvGk%Y=`uoN*XTcb}J1FG& z&5ujCBYC5m9z$&(66c)%=2>`by?ON;CzPec8Jn?fWe0bAC z`=_Jp!TLa+X0j1r*ZbGD@Qc?oQ^ucmHRiNx&L7awojl;Y(V>KZWSA%4_1qKsB0$oA z0x)1PO*&x?#M)#(_*jHFYuMvAq?3ukE`%^J-dV-N;!HY$eij@cAypGO82nUzla zO71-lH~9p7m#MbrYIRq<^nPJr#e26c!$FMcYN6wwH`>p?cj-;GDb*VMFlS(NZ}SgA z^e0~{S3}I8PZOiaphX?2X6CDE`u_(vtGEr$Xx%eDLBg!h4d)_x+fKvPtXe;Mb6f4Ik)@>5AK_;r=1 z4o@eiE2H>*-kitZ>3a3xshiVL0FoZB?XkStB`!GP>v>Yn6OH&Xrmjiave>Jx590J~ zYStBWzw@GDgHKeGAb3f3{P)Yd|7bq@)eGnFmaq03wBVdV2A@75oPHVnnBlPyx>WHt z+z~kf>|J`t%D0mZnvQaTpUu3wbmDyN7L!i zF@iZ>X44g8sb`1}rn?JbD3sSw(ctk
  • !@Q>Q2Y$Z-3o3-aRJ4%@`Q!oPCI9iRcZ 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 - - - -PoiFS - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -How To -
    -File System Documentation -
    -Use Cases -
    -
    -
    -
    -PoiFS - - - - - - -
    - - - - - - -
    - - - - - - -
    PoiFS
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Overview
    -
    - -

    POIFS is a pure Java implementation of the OLE 2 Compound - Document format.

    - -

    By definition, all APIs developed by the POI project are - based somehow on the POIFS API.

    - -

    A common confusion is on just what POIFS buys you or what OLE - 2 Compound Document format is exactly. POIFS does not buy you - DOC, or XLS, but is necessary to generate or read DOC or XLS - files. You see, all file formats based on the OLE 2 Compound - Document Format have a common structure. The OLE 2 Compound - Document Format is essentially a convoluted archive - format. Think of POIFS as a "zip" library. Once you can get - the data in a zip file you still need to interpret the - data. As a general rule, while all of our formats use - POIFS, most of them attempt to abstract you from it. There - are some circumstances where this is not possible, but as a - general rule this is true.

    - -

    If you're an end user type just looking to generate XLS - files, then you'd be looking for HSSF not POIFS; however, if - you have legacy code that uses MFC property sets, POIFS is - for you! Regardless, you may or may not need to know how to - use POIFS but ultimately if you use technologies that come - from the POI project, you're using POIFS underneith. Perhaps - we should have a branding campaign "POIFS Inside!". ;-)

    - -

    TODO: copy POIFS docs and port to XML (in progress). For now - please reference old - site.

    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/poifs/usecases.html b/build/jakarta-poi/docs/poifs/usecases.html deleted file mode 100644 index 942914ec66..0000000000 --- a/build/jakarta-poi/docs/poifs/usecases.html +++ /dev/null @@ -1,1266 +0,0 @@ - - - - - - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -How To -
    -File System Documentation -
    -Use Cases -
    -
    -
    -
    -

    - -

    -
    -
    - - - - - - - -
    POIFS Use Cases
    -
    - -
    - - - - - - - -
    Use Case 1: Read existing file system
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Primary Actor:POIFS client
    Scope:POIFS
    Level:Summary
    Stakeholders and Interests: - -
      - -
    • POIFS client- wants to read content of file - system
    • - -
    • POIFS - understands POIFS file system
    • - -
    - -
    Precondition:None
    Minimal Guarantee:None
    Main Success Guarantee: - -
      - -
    1. POIFS client requests POIFS to read a POIFS file - system, providing an InputStream - containing POIFS file system in question.
    2. - -
    3. POIFS reads from the InputStream in - 512 byte blocks
    4. - -
    5. POIFS verifies that the first block begins with - the well known signature - (0xE11AB1A1E011CFD0)
    6. - -
    7. POIFS reads the Block Allocation Table from the - first block and, if necessary, from the XBAT - blocks.
    8. - -
    9. POIFS obtains the start block of the Property - Table and reads the Property Table (use case 9, - read file)
    10. - -
    11. POIFS reads the individual entries in the Property - Table
    12. - -
    13. POIFS obtains the start block of the Small Block - Allocation Table and reads the Small Block - Allocation Table (use case 9, read file)
    14. - -
    15. POIFS obtains the start block of the Small Block - store from the first entry in the Property Table - and reads the Small Block Array (use case 9, read - file)
    16. - -
    - -
    Extensions: - -
      - -
    • 2a. If the last block read is not a 512 byte - block, the InputStream is not that of - a POIFS file system, and POIFS throws an - appropriate exception.
    • - -
    • 3a. If the signature is incorrect, the - InputStream is not that of a POIFS - file system, and POIFS throws an appropriate - exception.
    • - -
    - -
    - -
    -
    -
    - -
    - - - - - - - -
    Use Case 2: Write file system
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Primary Actor:POIFS client
    Scope:POIFS
    Level:Summary
    Stakeholders and Interests: - -
      - -
    • POIFS client- wants to write file system out.
    • - -
    • POIFS - knows how to write file system out.
    • - -
    - -
    Precondition: - -
      - -
    • File system has been read (use case 1, read - existing file system) and subsequently modified - (use case 4, replace file in file system; use case - 5, delete file from file system; or use case 6, - write new file to file system; in any - combination)
    • - -
    - -

    or

    - -
      - -
    • File system has been created (use case 3, create - new file system)
    • - -
    - -
    Minimal Guarantee:None
    Main Success Guarantee: - -
      - -
    1. POIFS client provides an OutputStream - to write the file system to.
    2. - -
    3. POIFS gets the sizes of the Property Table and - each file in the file system.
    4. - -
    5. If any files in the file system requires storage - in a Small Block Array, POIFS creates a Small - Block Array of sufficient size to hold all of the - small files.
    6. - -
    7. POIFS calculates the number of big blocks needed - to hold all of the large files, the Property - Table, and, if necessary, the Small Block Array - and the Small Block Allocation Table.
    8. - -
    9. POIFS creates a set of big blocks sufficient to - store the Block Allocation Table
    10. - -
    11. POIFS creates and writes the header block
    12. - -
    13. POIFS writes out the XBAT blocks, if needed.
    14. - -
    15. POIFS writes out the Small Block Array, if - needed
    16. - -
    17. POIFS writes out the Small Block Allocation Table, - if needed
    18. - -
    19. POIFS writes out the Property Table
    20. - -
    21. POIFS writes out the large files, if needed
    22. - -
    23. POIFS closes the OutputStream.
    24. - -
    - -
    Extensions: - -
      - -
    • 6a. Exceptions writing to the - OutputStream will be propagated back - to the POIFS client.
    • - -
    • 7a. Exceptions writing to the - OutputStream will be propagated back - to the POIFS client.
    • - -
    • 8a. Exceptions writing to the - OutputStream will be propagated back - to the POIFS client.
    • - -
    • 9a. Exceptions writing to the - OutputStream will be propagated back - to the POIFS client.
    • - -
    • 10a. Exceptions writing to the - OutputStream will be propagated back - to the POIFS client.
    • - -
    • 11a. Exceptions writing to the - OutputStream will be propagated back - to the POIFS client.
    • - -
    • 12a. Exceptions closing the - OutputStream will be propagated back - to the POIFS client.
    • - -
    - -
    - -
    -
    -
    - -
    - - - - - - - -
    Use Case 3: Create new file system
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Primary Actor:POIFS client
    Scope:POIFS
    Level:Summary
    Stakeholders and Interests: - -
      - -
    • POIFS client- wants to create a new file - system
    • - -
    • POIFS - knows how to create a new file system
    • - -
    - -
    Precondition:None
    Minimal Guarantee:None
    Main Success Guarantee: - -
      - -
    1. POIFS creates an empty Property Table.
    2. - -
    - -
    Extensions:None
    - -
    -
    -
    - -
    - - - - - - - -
    Use Case 4: Replace file in file system
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Primary Actor:POIFS client
    Scope:POIFS
    Level:Summary
    Stakeholders and Interests: - -
      - -
    • POIFS client- wants to replace an existing file in - the file system
    • - -
    • POIFS - knows how to manage the file system
    • - -
    - -
    Precondition: - -

    Either

    - -
      - -
    • The file system has been read (use case 1, read - existing file system) and a file has been - extracted from the file system (use case 7, read - existing file from file system)
    • - -
    - -

    or

    - -
      - -
    • The file system has been created (use case 3, - create new file system) and a file has been - written to the file system (use case 6, write new - file to file system)
    • - -
    - -
    Minimal Guarantee:None
    Main Success Guarantee: - -
      - -
    1. POIFS discards storage of the existing file.
    2. - -
    3. POIFS updates the existing file's entry in the - Property Table
    4. - -
    5. POIFS stores the new file's data
    6. - -
    - -
    Extensions: - -
      - -
    • 1a. POIFS throws an exception if the file does not - exist.
    • - -
    - -
    - -
    -
    -
    - -
    - - - - - - - -
    Use Case 5: Delete file from file system
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Primary Actor:POIFS client
    Scope:POIFS
    Level:Summary
    Stakeholders and Interests: - -
      - -
    • POIFS client- wants to remove a file from a file - system
    • - -
    • POIFS - knows how to manage the file system
    • - -
    - -
    Precondition: - -

    Either

    - -
      - -
    • The file system has been read (use case 1, read - existing file system) and a file has been - extracted from the file system (use case 7, read - existing file from file system)
    • - -
    - -

    or

    - -
      - -
    • The file system has been created (use case 3, - create new file system) and a file has been - written to the file system (use case 6, write new - file to file system)
    • - -
    - -
    Minimal Guarantee:None
    Main Success Guarantee: - -
      - -
    1. POIFS discards the specified file's storage.
    2. - -
    3. POIFS discards the file's Property Table - entry.
    4. - -
    - -
    Extensions: - -
      - -
    • 1a. POIFS throws an exception if the file does not - exist.
    • - -
    - -
    - -
    -
    -
    - -
    - - - - - - - -
    Use Case 6: Write new file to file system
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Primary Actor:POIFS client
    Scope:POIFS
    Level:Summary
    Stakeholders and Interests: - -
      - -
    • POIFS client- wants to add a new file to the file - system
    • - -
    • POIFS - knows how to manage the file system
    • - -
    - -
    Precondition:The specified file does not yet exist in the file - system
    Minimal Guarantee:None
    Main Success Guarantee: - -
      - -
    1. The POIFS client provides a file name
    2. - -
    3. POIFS creates a new Property Table entry for the - new file
    4. - -
    5. POIFS provides the POIFS client with an - OutputStream to write to.
    6. - -
    7. The POIFS client writes data to the provided - OutputStream.
    8. - -
    9. The POIFS client closes the provided - OutputStream -
    10. - -
    11. POIFS updates the Property Table entry with the - new file's size
    12. - -
    - -
    Extensions: - -
      - -
    • 1a. POIFS throws an exception if a file with the - specified name already exists in the file - system.
    • - -
    • 1b. POIFS throws an exception if the file name is - too long. The limit on file name length is 31 - characters.
    • - -
    - -
    - -
    -
    -
    - -
    - - - - - - - -
    Use Case 7: Read existing file from file system
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Primary Actor:POIFS client
    Scope:POIFS
    Level:Summary
    Stakeholders and Interests: - -
      - -
    • POIFS client- wants to read a file from the file - system
    • - -
    • POIFS - knows how to manage the file system
    • - -
    - -
    Precondition: - -
      - -
    • The file system has been read (use case 1, read - existing file system) or has been created and - written to (use case 3, create new file system; - use case 6, write new file to file system).
    • - -
    • The specified file exists in the file system.
    • - -
    - -
    Minimal Guarantee:None
    Main Success Guarantee: - -
      - -
    1. The POIFS client provides the name of a file to be - read
    2. - -
    3. POIFS provides an InputStream to read - from.
    4. - -
    5. The POIFS client reads from the - InputStream.
    6. - -
    7. The POIFS client closes the - InputStream.
    8. - -
    - -
    Extensions:1a. POIFS throws an exception if no file with the - specified name exists.
    - -
    -
    -
    - -
    - - - - - - - -
    Use Case 8: Read file system directory
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Primary Actor:POIFS client
    Scope:POIFS
    Level:Summary
    Stakeholders and Interests: - -
      - -
    • POIFS client- wants to know what files exist in - the file system
    • - -
    • POIFS - knows how to manage the file system
    • - -
    - -
    Precondition:The file system has been read (use case 1, read - existing file system) or created (use case 3, create - new file system)
    Minimal Guarantee:None
    Main Success Guarantee: - -
      - -
    1. The POIFS client requests the file system - directory.
    2. - -
    3. POIFS returns an Iterator. The - Iterator will not include the root - entry in the Property Table, and may be an - Iterator over an empty - Collection.
    4. - -
    - -
    Extensions:None
    - -
    -
    -
    - -
    - - - - - - - -
    Use Case 9: Read file
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Primary Actor:POIFS
    Scope:POIFS
    Level:Summary
    Stakeholders and Interests: - -
      - -
    • POIFS - POIFS needs to read a file, or something - resembling a file (i.e., the Property Table, the - Small Block Array, or the Small Block Allocation - Table)
    • - -
    - -
    Precondition:None
    Minimal Guarantee:None
    Main Success Guarantee: - -
      - -
    1. POIFS begins with a start block, a file size, and - a flag indicating whether to use the Big Block - Allocation Table or the Small Block Allocation - Table
    2. - -
    3. POIFS returns an InputStream.
    4. - -
    5. Reads from the InputStream are - performed by walking the specified Block - Allocation Table and reading the blocks - indicated.
    6. - -
    7. POIFS closes the InputStream when - finished reading the file, or its client wants to - close the InputStream.
    8. - -
    - -
    Extensions:3a. An exception will be thrown if the specified Block - Allocation Table is corrupt, as evidenced by an index - pointing to a non-existent block, or by a chain - extending past the known size of the file.
    - -
    -
    -
    - -
    - - - - - - - -
    Use Case 10: Rename existing file in the file system
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Primary Actor:POIFS client
    Scope:POIFS
    Level:Summary
    Stakeholders and Interests: - -
      - -
    • POIFS client- wants to rename an existing file in - the file system.
    • - -
    • POIFS - knows how to manage the file system.
    • - -
    - -
    Precondition: - -
      - -
    • The file system is has been read (use case 1, read - existing file system) or has been created and - written to (use case 3, create new file system; - use case 6, write new file to file system.
    • - -
    • The specified file exists in the file system.
    • - -
    • The new name for the file does not duplicate - another file in the file system.
    • - -
    - -
    Minimal Guarantee:None
    Main Success Guarantee: - -
      - -
    1. POIFS updates the Property Table entry for the - specified file with its new name.
    2. - -
    - -
    Extensions: - -
      - -
    • 1a. If the old file name is not in the file - system, POIFS throws an exception.
    • - -
    • 1b. If the new file name already exists in the - file system, POIFS throws an exception.
    • - -
    • 1c. If the new file name is too long (the limit is - 31 characters), POIFS throws an exception.
    • - -
    - -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/resolutions/images/built-with-cocoon.gif b/build/jakarta-poi/docs/resolutions/images/built-with-cocoon.gif deleted file mode 100644 index 0b38f7857b6e621a964664dec8f6e12f07ff71de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2252 zcmWlYk6X+80>`&c?Q6*Ty|ly1Vlr)YCcFJ$W@+ZDmL@wHr<=uO+^J!wGfd~JhObO5 zEhbab8SO9`O;5+usnKFLlghY55+}}X9E9uF;X3a>;QhRw_w#x$UcyUCUXzQ7!aTuX z2t<;#%>fMUKy3y}6Oid4wN;`-NenKHK@$jsQngO3Kv9Fm;p!ucRDh=@vjid;Vzb#s zd_Ex5(0CGoRINk}gM))y9?xoTrwA25q9c+iK;N#@>wwO#QmIfBC5cpSw_9(v@kA1q zP@a;K5<+3v+MGaPqzdGH-a(~C55%b1)-DiBsVOi(ZA3AmRH{NKOjx1#Zb zu6TmdNTe_(NDV|<3Yp21sw&xBZlA{sL?{E60F{|YA`?i|wzjquk%BFhxLhuvvH+!- z#*+fMQD?O3^?FEAPo>dDMn;TgtJCQOYO7FM>ht*^>0ugoHGtKWlpL4at56|>!y}NW zQlT+GsEtHr0GSaeOnC}ag&G+=sn%!}$u&F}Cgzn{tyZJSM53`sd1a6oZFjgl-r*GC zCY45Kx7$gy6pzOPsmzev7(%8wU44Q)IV_ezN)sf|KzTZc)5R7ke7@(9+(2OoAc>wO zkaNXK3X>;O>xYMj313wZDz$n86P6L=1_fdO8as_Efy6o@g{je-P1Z{ehXeXbn5VPa z9YCN7AriF)3sHiSs7#?qOrbFqh|c3392xNewFSrw5~Y^J-~q%&W^h$n6Zm^oHkkHnf!<#&$X(w!Dv#=ym$&HKd33ak<_(uPu2m}j)4msQWtZw3IFID zn0tTwkf$N7lhBpiaTP>Qyc~F?p`s=@=kW#$ZN0nY<@9~@D{sFkAiSaUH}XH9adw~0 ztlj?PZpY9`O?nJ~M#nd=`s424&Q-_f7;|LDi=8*7b!8WK|0^gnYn*>Lrn%R@wu1-M~UshE9KC#uP3O$Deg%>$bz3LW0DboKUC;jQh^` zD6f2XP&0nsQcIybS_03g+!g=fyM9hmDR>e`#1~wjo^)kRXOez(f}8#MB(c$gi(fn9 zJ9@h-yKY8&!0YSDpZpz}^Uoi9R2b99hdXq&G>IF-P7qdKh-W9BSq_DFH{n)IO?<|g z5_y5XaO$nz^qK?4(1Rtqwp#(?=!s(;ejg95>@R(wR>fBwHT;LZ@V;Qn*s<62Ip8j}+nKD;YH z7mPL+ObE&Uh`oucFFbI?^Eq}mXsF;11%`Zo^i|8f0L~%T?a|V|-h2jQqg{Bv%^zc0 zZ$It1Ty-}urn6=EW~Fb|qK`?6ebYj7V4m>AXb>sa~Njm-)y zZhYLAOR4tO^8`}pP%#Ipx>qzm>c$vWo0?t9)kL;&{&aubx%OcNj=xOeob)^)t39=A zG{niC9n=}&`ro`&(L+%ill&@R>|QQEJwN>}8g*ycfxY~76UQn$=x8q{E}(P6^t5VR zF9wOPA5Xb)2Z^?qmTwJuh~JrjW0Gy>hD-eL!FM!xR`!(2_fIB$u5Csh#C34ObFOdx zW;w(P$~O=9I>MXo)X!~xLD=-nxuCFQQTVrSD+H|)6d#RDb|(;uOHZ#lg#iFm9*o@~ zE0~KlkqyI9jMb)yI@Dk;D(e0znI8IWepdusg{3EDN;mnXK@~&ij^Q2Hm}VU0X|`vE z`Qz%|EsVNzHO)LfD6+Q1vD4pHzO;4dP-zi1TKET&TlX-mupW~v_z_lMD1ICH9DhOZ zZbh%I=JX{e+p;W$lk~8*G#6sMF4C+Y?U?vm&Wz|w`FPBtX_y6jxh)VSU`bE0_#t;u zQrOp)L;ZCVdOIQ-ZT?$z=j$vlFrhcg_WocBJ;t@?4<`zu$NlhjxgRE0vrEuWw%s@u zh$-n#eEqU)PHF#!v8UzaPtL@{%eWO^yh{r2ZePo82z} diff --git a/build/jakarta-poi/docs/resolutions/images/cocoon2-small.jpg b/build/jakarta-poi/docs/resolutions/images/cocoon2-small.jpg deleted file mode 100644 index e8f6dd8c8c0e17f7d97b7265f637000ed61d703a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmb7AdpOez82)Wzmu#{%wPMVKijo;glS{;Op)xH>VU*FZIthD3>zP zDwk3-ks3>4IFw6H%e5uBw4>A0bIxM00SUu>QM09%ti|UgTWv$7!H9# zA>UU(;JF#v0KhEJh7v6tx6v}2v4;LI_(GD?v86^1;T@l&-fyYHNBSsJxS6PM4WjhWFWa3YVC+4q zNoXBAQa7tN$Jj61FsZh`^xjIB12tO&r__#1;v~1lU6k)cGa?G-wWg?Uej_HJsn9^l|ZyEbtLzX z55}4=`KHJ7({d!%&~mK{&RK#(r#f$%F?8$%>=f1%{AeKOtzMh+SZy2gINNb9o~Yy;f~ZUey?Ta822a)vH!Z z{)zF4bPeD7ohWaNTg2Mt(d-^hM|X)@I1lgBRh}viyv<;F_=vSb>n&YT+%qZ6b3Nz% zhbK87WsIQuP3ped0cUN}9$8noQ3HM-Rn!&ObwPwOK7z8VTReoHEtbqq&DuVZE0c_N zOw{gx;LnluvfZ0S>sYcQZ}yg_i{IU0gtgxy(?Y2hZXZfB-eS;(>G@O~DmR2iIGSH*{*J<)zOX(|fBJKR^2?%> zyBFsNoC)z2#mbzD_!G7bQ40D*Ci@4F%Enp-;-f$3 zMX(xcTEz}rs^!C!fiI?@*@p|h{yfi|D2^%k5i+Q>gi+K~jJk;Sn%Nv77aHB1&UAj_ zO!Mp<$^?6quoJ5F5)6_P43CB!e0^zC82#8IG-6Z*7#P}B>~j@9>WgZA`*n|~yC^)civFQS7LLDs^03R#Acsq5FTb-W55H$}=j<)y6FY=qA}ww* K45idpwf_kby7q4X diff --git a/build/jakarta-poi/docs/resolutions/images/header.gif b/build/jakarta-poi/docs/resolutions/images/header.gif deleted file mode 100644 index b9c2ee13910846fc549adb17e9c4466f407daeea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3165 zcmZvb`#Teg4fk0DwRsBog@>4Myg{ zDIyeAg5}iE+S}U)-}MrSL>L}CJ~Kq(!uWhXlms?4HMJ&z84LzXLL{&eFp?!l!k$_j z$FZ=BEAwzFELD_@e;cz?{MuEbKP^O4LW0NAeWTBKn zqzcoYK(rGSYXB$a<`baDts z$B>vlSSpMvLXo*}6vbMukYB5$l7$#+G8jvP;plKY1CAnD6IghuR7&O}t%+b>B^^Vt zMi8MSE}SW1h->&58j{94&XH0lXU3^w42ldTatXo)7Lo|Xvk(|63_$>sm{^JsBW)-n zvXSfSs}w$R^wT>s+n2~iuB@+6#aLktlfc1KMOY6yiY!DCSO^3jOy;3*Oe}^1Lz194 z1{_OWyW~f3GyDW-X zNt7*4;ps>O$(qPSkr@OG**2|`Mr9M3A_|p{qwy&;Apt>v(!^K_&jCrW;#YDB3{+PA zWilVdmXL-<`?+E!RfKUR!I4C30vm~?B5*VWoloLP*bE^KMusNvXml=_%)wqRJE2f0 zBu!kp7?&=kt*k7QIGA<$I-c>b7=y|pl2|yZ@ZTCJEX58-gOAOOGQ|WkAM;uEks&6| z$fgqbQ3NImLr0RiSQOcs$U@C5P6_LOPc91^myOamC*MsD@uc+0$w}FwjKass<#G~- zNa5h=Wq7uf$}3}WYc7cDSwsdFMuhs%5hxOjCdQ|W**F@C!KdJ5Hh3Z8Zgxia40o>| zqDKRHDPcf;7-5zQ+utr)P`g7Nj>e-C3=7d#t^qI)CF>~hp z{9B(N8K0WjYlt7hgm1U*xz6AuJ>Ps%RNRcB#(Sd1eXGK6I`P9nz?dD zYV~Yrew*l|ZcSIKfuoRDi^^fkXR~~tHGWHltt(FUJ%6@3J5cU(XZ+}^WX6cy*<*bz zo9Oo8Rz=1E+n*~y<>{WpwLXcnpl3T4)_*}iad`bl#^GDrw*O2ju}v2H(Y>mC4TDAS~HLq=3XgY7omLstNLT#hnRPPk59$uQyV9E2tUWbwA}!0 zK)6l?5$xWb(`W!HteuPSgQ4=gvj80lNfoX6(k^C>hvrB;P_MDaB&NkI#ko7^&mVFyB?j$ zI~E9nhw7IaY7ew%#(mh6{|jT(u&^iAJyJ@wv};=GdKAe$B-VO6gb8P1lcK zU78l-HXf$F>CKs}X;lP%X-#drvKryyAMo9D1J}aeG3%r)ulL_I_@N{|@5)PP*3z?$ zrTezWmi+1^y;~zW&rTl#tK;YT=_+o813nop|<4+Z%MVYgFI{| z0B|cWZ@b6dFs}Y&2TJ=hqa?sW`K%WddGmSfpa5do)~O!Rfd(infQqNlr5@x0oxKQ1 zN~ck$s;98EXg-#6>~Zdn-h6bLwvGk%Y=`uoN*XTcb}J1FG& z&5ujCBYC5m9z$&(66c)%=2>`by?ON;CzPec8Jn?fWe0bAC z`=_Jp!TLa+X0j1r*ZbGD@Qc?oQ^ucmHRiNx&L7awojl;Y(V>KZWSA%4_1qKsB0$oA z0x)1PO*&x?#M)#(_*jHFYuMvAq?3ukE`%^J-dV-N;!HY$eij@cAypGO82nUzla zO71-lH~9p7m#MbrYIRq<^nPJr#e26c!$FMcYN6wwH`>p?cj-;GDb*VMFlS(NZ}SgA z^e0~{S3}I8PZOiaphX?2X6CDE`u_(vtGEr$Xx%eDLBg!h4d)_x+fKvPtXe;Mb6f4Ik)@>5AK_;r=1 z4o@eiE2H>*-kitZ>3a3xshiVL0FoZB?XkStB`!GP>v>Yn6OH&Xrmjiave>Jx590J~ zYStBWzw@GDgHKeGAb3f3{P)Yd|7bq@)eGnFmaq03wBVdV2A@75oPHVnnBlPyx>WHt z+z~kf>|J`t%D0mZnvQaTpUu3wbmDyN7L!i zF@iZ>X44g8sb`1}rn?JbD3sSw(ctk
  • !@Q>Q2Y$Z-3o3-aRJ4%@`Q!oPCI9iRcZ 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 - - - -Resolutons - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -About -
    -About -
    -
    -Resolutions -
    -Coding Standards -
    -
    -
    -
    -Resolutons - - - - - - -
    - - - - - - -
    - - - - - - -
    Resolutons
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    About Resolutions
    -
    - -

    - Every project on Jakarta has resolutions that they vote on. - Decisions are made, etc. But what happens once those decisions - are made? They are archived in the mail list archive never to - be read again (once its not in the top 10 or so posts). So they - get discussed again and again. -

    - -

    - Rather than have that big waste of time, we have this section to - record important POI decisions. Once a decision is passed it - need only be linked to this page (either by creating a page for - it or by simply linking it to the archive messages). Wherever - possible a brief about how many votes for and against an maybe - some background should be posted. -

    - -

    - This section is intended mainly to reduce big waste of time - discussions from taking away from whats important...developing - POI! :-D -

    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/resolutions/res001.html b/build/jakarta-poi/docs/resolutions/res001.html deleted file mode 100644 index 9e0c8260bf..0000000000 --- a/build/jakarta-poi/docs/resolutions/res001.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - -POI Resoluton - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -About -
    -About -
    -
    -Resolutions -
    -Coding Standards -
    -
    -
    -
    -POI Resoluton - - - - - - -
    - - - - - - -
    - - - - - - -
    POI Resoluton
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Resolution 001 - Minimal Coding Standards
    -
    - -
    - - - - - - - -
    Majority Position
    -
    - -

    - As the POI project has grown the "styles" used have become more - varied, some see this as a bad thing, but in reality it - can be a good thing. Each can learn from the different - styles by working with different code. That being said - there are some universal "good quality" guidelines that - must be adopted on a project of any proportions. -

    - -

    - Marc Johnson Authored the following resolution: -

    - -

    - On Tue, 2002-01-08 at 22:23, Marc Johnson wrote: - Standards are wonderful; everyone should have a set. - Here's what I propose for coding standards for POI WRT comments (should I - feel the need, I'll post more of these little gems): -

    - -
      - -
    1. - All classes and interfaces MUST have, right at the beginning, the POI - License (see poi/doc/LICENSE). -
    2. - -
    3. - All classes and interfaces MUST include class javadoc. Conventionally, - this goes after the package and imports, and before the start of the class - or interface. The class javadoc MUST have at least one @author tag -
    4. - -
    5. - All methods that are accessible outside the class MUST have javadoc - comments. In other words, if it isn't private, it MUST have javadoc - comments. Simple getters can consist of a simple @return tag; simple setters - can consist of a simple @param tag. Anything else requires some verbiage - plus all the standard javadoc tags as appropriate. You MUST include @throws - or @exception for any non-runtime exceptions, and you SHOULD document any - runtime exceptions you expect to throw. @throws/@exception tags SHOULD - include an explanation of why that exception would be thrown. If your method - might return null, you MUST say so. An accompanying explanation of the - circumstances for doing so would be nice. -
    6. - -
    - -
    -
    -
    - -
    - - - - - - - -
    Amendments (informal by extension and not by vote)
    -
    - -

    - As opposed to the formerly used POI License which was - based on the Apache Public License, now that POI is part of - Jakarta, use the APL 1.1 for the header. Currently, the - Apache Software Foundation requires us to use the full - long version. -

    - -
    -
    -
    - -
    - - - - - - - -
    Dissent
    -
    - -

    - The motion was passed unanimously with no negative or - positive votes. -

    - -
    -
    -
    - -
    - - - - - - - -
    Comments
    -
    - -

    - Andy didn't feel like going through his mail and sucking - out the comments.. If there is anything you feel should - be added here do it yourself ;-). -

    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/todo.html b/build/jakarta-poi/docs/todo.html deleted file mode 100644 index 97fd01ee4e..0000000000 --- a/build/jakarta-poi/docs/todo.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - -Things To Do for Poi - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -About -
    -Index -
    -History -
    -Future -
    -Download -
    -1.0 Vision -
    -2.0 Vision -
    -Who we are -
    -Changes -
    -FAQ -
    -
    -Sub-Projects -
    -Overview -
    -POIFS -
    -HSSF -
    -HDF -
    -HPSF -
    -POI-Utils -
    -
    -References -
    -In The News -
    -Live Sites -
    -XLS spec [PDF] -
    -Apache Cocoon -
    -Resolutions -
    -
    -Get Involved -
    -Contributing -
    -Bug Database -
    -CVS -
    -Mail Lists -
    -
    -
    -
    -Things To Do for Poi - - - - - - -
    - - - - - - -
    - - - - - - -
    Things To Do for Poi
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    high
    -
    - -
  • -[code] - Finish HDF -
  • -
  • -[code] - Finish Charts -
  • -
  • -[code] - Add Formulas. -
  • -
    -
    -
    -
    -
    - - - - - - - -
    medium
    -
    - -
  • -[code] - Expose functionality in low level records in higher level API -
  • -
  • -[code] - Implement more record types (for other things ... not sure - what this will mean yet). -
  • -
  • -[code] - Implement more record types (for other things ... not sure - what this will mean yet). -
  • -
  • -[code] - Add more dummy checks (for when API user's do things they - "can't" do) -
  • -
  • -[code] - Add support for embedded graphics and stuff like that. -
  • -
  • -[code] - Create new adapter object for handling MulBlank, MulRk, Rk - records. -
  • -
    -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/utils/images/built-with-cocoon.gif b/build/jakarta-poi/docs/utils/images/built-with-cocoon.gif deleted file mode 100644 index 0b38f7857b6e621a964664dec8f6e12f07ff71de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2252 zcmWlYk6X+80>`&c?Q6*Ty|ly1Vlr)YCcFJ$W@+ZDmL@wHr<=uO+^J!wGfd~JhObO5 zEhbab8SO9`O;5+usnKFLlghY55+}}X9E9uF;X3a>;QhRw_w#x$UcyUCUXzQ7!aTuX z2t<;#%>fMUKy3y}6Oid4wN;`-NenKHK@$jsQngO3Kv9Fm;p!ucRDh=@vjid;Vzb#s zd_Ex5(0CGoRINk}gM))y9?xoTrwA25q9c+iK;N#@>wwO#QmIfBC5cpSw_9(v@kA1q zP@a;K5<+3v+MGaPqzdGH-a(~C55%b1)-DiBsVOi(ZA3AmRH{NKOjx1#Zb zu6TmdNTe_(NDV|<3Yp21sw&xBZlA{sL?{E60F{|YA`?i|wzjquk%BFhxLhuvvH+!- z#*+fMQD?O3^?FEAPo>dDMn;TgtJCQOYO7FM>ht*^>0ugoHGtKWlpL4at56|>!y}NW zQlT+GsEtHr0GSaeOnC}ag&G+=sn%!}$u&F}Cgzn{tyZJSM53`sd1a6oZFjgl-r*GC zCY45Kx7$gy6pzOPsmzev7(%8wU44Q)IV_ezN)sf|KzTZc)5R7ke7@(9+(2OoAc>wO zkaNXK3X>;O>xYMj313wZDz$n86P6L=1_fdO8as_Efy6o@g{je-P1Z{ehXeXbn5VPa z9YCN7AriF)3sHiSs7#?qOrbFqh|c3392xNewFSrw5~Y^J-~q%&W^h$n6Zm^oHkkHnf!<#&$X(w!Dv#=ym$&HKd33ak<_(uPu2m}j)4msQWtZw3IFID zn0tTwkf$N7lhBpiaTP>Qyc~F?p`s=@=kW#$ZN0nY<@9~@D{sFkAiSaUH}XH9adw~0 ztlj?PZpY9`O?nJ~M#nd=`s424&Q-_f7;|LDi=8*7b!8WK|0^gnYn*>Lrn%R@wu1-M~UshE9KC#uP3O$Deg%>$bz3LW0DboKUC;jQh^` zD6f2XP&0nsQcIybS_03g+!g=fyM9hmDR>e`#1~wjo^)kRXOez(f}8#MB(c$gi(fn9 zJ9@h-yKY8&!0YSDpZpz}^Uoi9R2b99hdXq&G>IF-P7qdKh-W9BSq_DFH{n)IO?<|g z5_y5XaO$nz^qK?4(1Rtqwp#(?=!s(;ejg95>@R(wR>fBwHT;LZ@V;Qn*s<62Ip8j}+nKD;YH z7mPL+ObE&Uh`oucFFbI?^Eq}mXsF;11%`Zo^i|8f0L~%T?a|V|-h2jQqg{Bv%^zc0 zZ$It1Ty-}urn6=EW~Fb|qK`?6ebYj7V4m>AXb>sa~Njm-)y zZhYLAOR4tO^8`}pP%#Ipx>qzm>c$vWo0?t9)kL;&{&aubx%OcNj=xOeob)^)t39=A zG{niC9n=}&`ro`&(L+%ill&@R>|QQEJwN>}8g*ycfxY~76UQn$=x8q{E}(P6^t5VR zF9wOPA5Xb)2Z^?qmTwJuh~JrjW0Gy>hD-eL!FM!xR`!(2_fIB$u5Csh#C34ObFOdx zW;w(P$~O=9I>MXo)X!~xLD=-nxuCFQQTVrSD+H|)6d#RDb|(;uOHZ#lg#iFm9*o@~ zE0~KlkqyI9jMb)yI@Dk;D(e0znI8IWepdusg{3EDN;mnXK@~&ij^Q2Hm}VU0X|`vE z`Qz%|EsVNzHO)LfD6+Q1vD4pHzO;4dP-zi1TKET&TlX-mupW~v_z_lMD1ICH9DhOZ zZbh%I=JX{e+p;W$lk~8*G#6sMF4C+Y?U?vm&Wz|w`FPBtX_y6jxh)VSU`bE0_#t;u zQrOp)L;ZCVdOIQ-ZT?$z=j$vlFrhcg_WocBJ;t@?4<`zu$NlhjxgRE0vrEuWw%s@u zh$-n#eEqU)PHF#!v8UzaPtL@{%eWO^yh{r2ZePo82z} diff --git a/build/jakarta-poi/docs/utils/images/cocoon2-small.jpg b/build/jakarta-poi/docs/utils/images/cocoon2-small.jpg deleted file mode 100644 index e8f6dd8c8c0e17f7d97b7265f637000ed61d703a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmb7AdpOez82)Wzmu#{%wPMVKijo;glS{;Op)xH>VU*FZIthD3>zP zDwk3-ks3>4IFw6H%e5uBw4>A0bIxM00SUu>QM09%ti|UgTWv$7!H9# zA>UU(;JF#v0KhEJh7v6tx6v}2v4;LI_(GD?v86^1;T@l&-fyYHNBSsJxS6PM4WjhWFWa3YVC+4q zNoXBAQa7tN$Jj61FsZh`^xjIB12tO&r__#1;v~1lU6k)cGa?G-wWg?Uej_HJsn9^l|ZyEbtLzX z55}4=`KHJ7({d!%&~mK{&RK#(r#f$%F?8$%>=f1%{AeKOtzMh+SZy2gINNb9o~Yy;f~ZUey?Ta822a)vH!Z z{)zF4bPeD7ohWaNTg2Mt(d-^hM|X)@I1lgBRh}viyv<;F_=vSb>n&YT+%qZ6b3Nz% zhbK87WsIQuP3ped0cUN}9$8noQ3HM-Rn!&ObwPwOK7z8VTReoHEtbqq&DuVZE0c_N zOw{gx;LnluvfZ0S>sYcQZ}yg_i{IU0gtgxy(?Y2hZXZfB-eS;(>G@O~DmR2iIGSH*{*J<)zOX(|fBJKR^2?%> zyBFsNoC)z2#mbzD_!G7bQ40D*Ci@4F%Enp-;-f$3 zMX(xcTEz}rs^!C!fiI?@*@p|h{yfi|D2^%k5i+Q>gi+K~jJk;Sn%Nv77aHB1&UAj_ zO!Mp<$^?6quoJ5F5)6_P43CB!e0^zC82#8IG-6Z*7#P}B>~j@9>WgZA`*n|~yC^)civFQS7LLDs^03R#Acsq5FTb-W55H$}=j<)y6FY=qA}ww* K45idpwf_kby7q4X diff --git a/build/jakarta-poi/docs/utils/images/header.gif b/build/jakarta-poi/docs/utils/images/header.gif deleted file mode 100644 index b9c2ee13910846fc549adb17e9c4466f407daeea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3165 zcmZvb`#Teg4fk0DwRsBog@>4Myg{ zDIyeAg5}iE+S}U)-}MrSL>L}CJ~Kq(!uWhXlms?4HMJ&z84LzXLL{&eFp?!l!k$_j z$FZ=BEAwzFELD_@e;cz?{MuEbKP^O4LW0NAeWTBKn zqzcoYK(rGSYXB$a<`baDts z$B>vlSSpMvLXo*}6vbMukYB5$l7$#+G8jvP;plKY1CAnD6IghuR7&O}t%+b>B^^Vt zMi8MSE}SW1h->&58j{94&XH0lXU3^w42ldTatXo)7Lo|Xvk(|63_$>sm{^JsBW)-n zvXSfSs}w$R^wT>s+n2~iuB@+6#aLktlfc1KMOY6yiY!DCSO^3jOy;3*Oe}^1Lz194 z1{_OWyW~f3GyDW-X zNt7*4;ps>O$(qPSkr@OG**2|`Mr9M3A_|p{qwy&;Apt>v(!^K_&jCrW;#YDB3{+PA zWilVdmXL-<`?+E!RfKUR!I4C30vm~?B5*VWoloLP*bE^KMusNvXml=_%)wqRJE2f0 zBu!kp7?&=kt*k7QIGA<$I-c>b7=y|pl2|yZ@ZTCJEX58-gOAOOGQ|WkAM;uEks&6| z$fgqbQ3NImLr0RiSQOcs$U@C5P6_LOPc91^myOamC*MsD@uc+0$w}FwjKass<#G~- zNa5h=Wq7uf$}3}WYc7cDSwsdFMuhs%5hxOjCdQ|W**F@C!KdJ5Hh3Z8Zgxia40o>| zqDKRHDPcf;7-5zQ+utr)P`g7Nj>e-C3=7d#t^qI)CF>~hp z{9B(N8K0WjYlt7hgm1U*xz6AuJ>Ps%RNRcB#(Sd1eXGK6I`P9nz?dD zYV~Yrew*l|ZcSIKfuoRDi^^fkXR~~tHGWHltt(FUJ%6@3J5cU(XZ+}^WX6cy*<*bz zo9Oo8Rz=1E+n*~y<>{WpwLXcnpl3T4)_*}iad`bl#^GDrw*O2ju}v2H(Y>mC4TDAS~HLq=3XgY7omLstNLT#hnRPPk59$uQyV9E2tUWbwA}!0 zK)6l?5$xWb(`W!HteuPSgQ4=gvj80lNfoX6(k^C>hvrB;P_MDaB&NkI#ko7^&mVFyB?j$ zI~E9nhw7IaY7ew%#(mh6{|jT(u&^iAJyJ@wv};=GdKAe$B-VO6gb8P1lcK zU78l-HXf$F>CKs}X;lP%X-#drvKryyAMo9D1J}aeG3%r)ulL_I_@N{|@5)PP*3z?$ zrTezWmi+1^y;~zW&rTl#tK;YT=_+o813nop|<4+Z%MVYgFI{| z0B|cWZ@b6dFs}Y&2TJ=hqa?sW`K%WddGmSfpa5do)~O!Rfd(infQqNlr5@x0oxKQ1 zN~ck$s;98EXg-#6>~Zdn-h6bLwvGk%Y=`uoN*XTcb}J1FG& z&5ujCBYC5m9z$&(66c)%=2>`by?ON;CzPec8Jn?fWe0bAC z`=_Jp!TLa+X0j1r*ZbGD@Qc?oQ^ucmHRiNx&L7awojl;Y(V>KZWSA%4_1qKsB0$oA z0x)1PO*&x?#M)#(_*jHFYuMvAq?3ukE`%^J-dV-N;!HY$eij@cAypGO82nUzla zO71-lH~9p7m#MbrYIRq<^nPJr#e26c!$FMcYN6wwH`>p?cj-;GDb*VMFlS(NZ}SgA z^e0~{S3}I8PZOiaphX?2X6CDE`u_(vtGEr$Xx%eDLBg!h4d)_x+fKvPtXe;Mb6f4Ik)@>5AK_;r=1 z4o@eiE2H>*-kitZ>3a3xshiVL0FoZB?XkStB`!GP>v>Yn6OH&Xrmjiave>Jx590J~ zYStBWzw@GDgHKeGAb3f3{P)Yd|7bq@)eGnFmaq03wBVdV2A@75oPHVnnBlPyx>WHt z+z~kf>|J`t%D0mZnvQaTpUu3wbmDyN7L!i zF@iZ>X44g8sb`1}rn?JbD3sSw(ctk
  • !@Q>Q2Y$Z-3o3-aRJ4%@`Q!oPCI9iRcZ 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 - - - -Poi Utils - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -Navigation -
    -Main -
    -
    -
    -
    -Poi Utils - - - - - - -
    - - - - - - -
    - - - - - - -
    Poi Utils
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Overview
    -
    - - -

    The POI Utils are classes we're looking to donate elsewhere and include. - These are usually classes that while are required for our mission, - are somehow outside of it. General utilities that could be used in - any project are what we would normally put here. If you see one, and you - think "gee that would be great as part of X project" then let us know. - While we wish to put these in their rightful place, we also don't want to - include a 40mb jar file just to process text strings, so that will - be a consideraton. -

    - -

    - Currently, we're looking into which subprojects in the Jakarta Commons project - to donate these too. The "Poi Utils" package won't go away, as there may - be later classes. The idea is that "go ahead and add it, we'll merge it or - find an alternative later, just keep pounding out that poi!" -

    - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - diff --git a/build/jakarta-poi/docs/who.html b/build/jakarta-poi/docs/who.html deleted file mode 100644 index 44885e2c87..0000000000 --- a/build/jakarta-poi/docs/who.html +++ /dev/null @@ -1,267 +0,0 @@ - - - - -Who we are - - - - - - - - - - - - - -
    www.apache.org >jakarta.apache.org >jakarta.apache.org/poi
    - - - - -
    -
    -
    -
    -About -
    -Index -
    -History -
    -Future -
    -Download -
    -1.0 Vision -
    -2.0 Vision -
    -Who we are -
    -Changes -
    -FAQ -
    -
    -Sub-Projects -
    -Overview -
    -POIFS -
    -HSSF -
    -HDF -
    -HPSF -
    -POI-Utils -
    -
    -References -
    -In The News -
    -Live Sites -
    -XLS spec [PDF] -
    -Apache Cocoon -
    -Resolutions -
    -
    -Get Involved -
    -Contributing -
    -Bug Database -
    -CVS -
    -Mail Lists -
    -
    -
    -
    -Who we are - - - - - - -
    - - - - - - -
    - - - - - - -
    Who we are
    -
    -
    - -

    - -

    -
    -
    - - - - - - - -
    Who we are
    -
    - -

    - The Poi Project operates on a meritocracy: the more you do, the more - responsibility you will obtain. This page lists all of the people who have - gone the extra mile and are Committers. If you would like to get involved, - the first step is to join the mailing lists. -

    - - -

    - We ask that you please do not send us emails privately asking for support. - We are non-paid volunteers who help out with the project and we do not - necessarily have the time or energy to help people on an individual basis. - Instead, we have set up mailing lists which often contain hundreds of - individuals who will help answer detailed requests for help. The benefit of - using mailing lists over private communication is that it is a shared - resource where others can also learn from common mistakes and as a - community we all grow together. -

    - - -
    - - - - - - - -
    Advisors
    -
    - - - -
    -
    -
    - - -
    - - - - - - - -
    Committers
    -
    - -
      - -
    • -Andrew C. Oliver (acoliver at apache dot org)
    • - -
    • -Marc Johnson (mjohnson at apache dot org)
    • - -
    • Glen Stampoultzis (glens at apache.org)
    • - -
    • -Rainer Klute (klute at apache dot org)
    • - -
    • Nicola Ken Barozzi (barozzi at nicolaken dot com)
    • - -
    - -
    -
    -
    - -
    - - - - - - - -
    Developers
    -
    - -
      - -
    • Ryan Ackley (sackley at cfl dot rr dot com)
    • - -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    Copyright © 2002 Apache Software Foundation
    -
    -
    Krysalis LogoCocoon Logo
    - - -- 2.39.5