]> source.dussan.org Git - poi.git/commitdiff
Merged from BUILD_BRANCH. Note: There is one problem. The HDF testcases are failin...
authorGlen Stampoultzis <glens@apache.org>
Thu, 24 Apr 2003 00:53:41 +0000 (00:53 +0000)
committerGlen Stampoultzis <glens@apache.org>
Thu, 24 Apr 2003 00:53:41 +0000 (00:53 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353067 13f79535-47bb-0310-9956-ffa450edef68

236 files changed:
.cvsignore
appendcp.bat [deleted file]
build.bat [deleted file]
build.sh [deleted file]
build.xml
centibuild.xml [deleted file]
changelog.xsl [new file with mode: 0644]
forrest.properties [new file with mode: 0644]
gump.xml [new file with mode: 0644]
index.html [deleted file]
jdepend.xsl [new file with mode: 0644]
layout.xml [deleted file]
lib/.cvsignore [new file with mode: 0644]
lib/core/commons-logging-1.0.jar [deleted file]
lib/endorsed/xalan-2.2.0.jar [deleted file]
lib/endorsed/xerces-2.0.0.jar [deleted file]
lib/endorsed/xml-apis.jar [deleted file]
lib/optional/log4j-core.jar [deleted file]
module.xml [deleted file]
properties.xml [deleted file]
src/contrib/lib/.cvsignore [new file with mode: 0644]
src/contrib/lib/commons-beanutils.jar [deleted file]
src/contrib/lib/commons-collections.jar [deleted file]
src/contrib/lib/commons-lang-1.0-b1.jar [deleted file]
src/contrib/lib/placeholder [deleted file]
src/contrib/targets/poibrowser/xbuild.xml [deleted file]
src/contrib/targets/sheetviewer/xbuild.xml [deleted file]
src/contrib/testcases/dummy.txt [new file with mode: 0644]
src/documentation/README.txt [new file with mode: 0644]
src/documentation/content/xdocs/3rdparty.xml [new file with mode: 0644]
src/documentation/content/xdocs/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/casestudies.xml [new file with mode: 0644]
src/documentation/content/xdocs/changes.xml [new file with mode: 0644]
src/documentation/content/xdocs/faq.xml [new file with mode: 0644]
src/documentation/content/xdocs/getinvolved/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/getinvolved/branching.xml [new file with mode: 0644]
src/documentation/content/xdocs/getinvolved/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/hdf/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/hdf/docoverview.xml [new file with mode: 0644]
src/documentation/content/xdocs/hdf/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/historyandfuture.xml [new file with mode: 0644]
src/documentation/content/xdocs/hpsf/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/hpsf/how-to.xml [new file with mode: 0644]
src/documentation/content/xdocs/hpsf/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/hpsf/internals.xml [new file with mode: 0644]
src/documentation/content/xdocs/hpsf/thumbnails.xml [new file with mode: 0644]
src/documentation/content/xdocs/hpsf/todo.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/alternatives.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/chart.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/diagram1.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/diagrams.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/formula.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/hacking-hssf.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/how-to.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/limitations.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/quick-guide.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/record-generator.xml [new file with mode: 0644]
src/documentation/content/xdocs/hssf/use-case.xml [new file with mode: 0644]
src/documentation/content/xdocs/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/mirrors.xml [new file with mode: 0644]
src/documentation/content/xdocs/news.xml [new file with mode: 0644]
src/documentation/content/xdocs/news/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/news/logocontest.xml [new file with mode: 0644]
src/documentation/content/xdocs/overview.xml [new file with mode: 0644]
src/documentation/content/xdocs/patches.xml [new file with mode: 0644]
src/documentation/content/xdocs/plan/POI10Vision.xml [new file with mode: 0644]
src/documentation/content/xdocs/plan/POI20Vision.xml [new file with mode: 0644]
src/documentation/content/xdocs/plan/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/plan/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/plan/release.xml [new file with mode: 0644]
src/documentation/content/xdocs/poifs/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/poifs/fileformat.xml [new file with mode: 0644]
src/documentation/content/xdocs/poifs/how-to.xml [new file with mode: 0644]
src/documentation/content/xdocs/poifs/html/POIFSDesignDocument.html [new file with mode: 0644]
src/documentation/content/xdocs/poifs/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/poifs/usecases.xml [new file with mode: 0644]
src/documentation/content/xdocs/references/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/references/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/resolutions/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/resolutions/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/resolutions/res001.xml [new file with mode: 0644]
src/documentation/content/xdocs/site.xml [new file with mode: 0644]
src/documentation/content/xdocs/status.xml [new file with mode: 0644]
src/documentation/content/xdocs/tabs.xml [new file with mode: 0644]
src/documentation/content/xdocs/todo.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/de/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/de/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/3rdparty.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/casestudies.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/changes.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/faq.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/historyandfuture.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/alternatives.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/diagram1.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/diagrams.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/formula.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/hacking-hssf.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/how-to.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/limitations.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/quick-guide.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/record-generator.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/hssf/use-case.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/news.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/overview.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/patches.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/todo.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/es/who.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/guidelines.xml [new file with mode: 0644]
src/documentation/content/xdocs/trans/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/utils/book.xml [new file with mode: 0644]
src/documentation/content/xdocs/utils/index.xml [new file with mode: 0644]
src/documentation/content/xdocs/utils/logging.xml [new file with mode: 0644]
src/documentation/content/xdocs/who.xml [new file with mode: 0644]
src/documentation/resources/images/BlockClassDiagram.gif [new file with mode: 0644]
src/documentation/resources/images/POIFSAddDocument.gif [new file with mode: 0644]
src/documentation/resources/images/POIFSClassDiagram.gif [new file with mode: 0644]
src/documentation/resources/images/POIFSInitialization.gif [new file with mode: 0644]
src/documentation/resources/images/POIFSLifeCycle.gif [new file with mode: 0644]
src/documentation/resources/images/POIFSPropertyTablePreWrite.gif [new file with mode: 0644]
src/documentation/resources/images/POIFSRootPropertyPreWrite.gif [new file with mode: 0644]
src/documentation/resources/images/POIFSWriteArchive.gif [new file with mode: 0644]
src/documentation/resources/images/POIFSWriteFilesystem.gif [new file with mode: 0644]
src/documentation/resources/images/PropertySet.jpg [new file with mode: 0644]
src/documentation/resources/images/PropertyTableClassDiagram.gif [new file with mode: 0644]
src/documentation/resources/images/add.jpg [new file with mode: 0644]
src/documentation/resources/images/fix.jpg [new file with mode: 0644]
src/documentation/resources/images/group-logo.gif [new file with mode: 0644]
src/documentation/resources/images/logoAdria1.png [new file with mode: 0644]
src/documentation/resources/images/logoAdria2.png [new file with mode: 0644]
src/documentation/resources/images/logoAdria3.png [new file with mode: 0644]
src/documentation/resources/images/logoAndrewClements.png [new file with mode: 0644]
src/documentation/resources/images/logoAndrewClements2.png [new file with mode: 0644]
src/documentation/resources/images/logoDanielFernandez.png [new file with mode: 0644]
src/documentation/resources/images/logoGlenStampoutlzis.png [new file with mode: 0644]
src/documentation/resources/images/logoGustafsson1.png [new file with mode: 0644]
src/documentation/resources/images/logoGustafsson2.png [new file with mode: 0644]
src/documentation/resources/images/logoJanssen1.png [new file with mode: 0644]
src/documentation/resources/images/logoJanssen2.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar1.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar1s.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar2.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar2s.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar3.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar3s.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar4.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar4s.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar5.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar5s.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar6.png [new file with mode: 0644]
src/documentation/resources/images/logoKarmokar6s.png [new file with mode: 0644]
src/documentation/resources/images/logoLoicLefevre.png [new file with mode: 0644]
src/documentation/resources/images/logoLoicLefevre2.png [new file with mode: 0644]
src/documentation/resources/images/logoMichaelMosmann.png [new file with mode: 0644]
src/documentation/resources/images/logoRaPiGmbH1.png [new file with mode: 0644]
src/documentation/resources/images/logoRaPiGmbH10.png [new file with mode: 0644]
src/documentation/resources/images/logoRaPiGmbH11.png [new file with mode: 0644]
src/documentation/resources/images/logoRaPiGmbH12.png [new file with mode: 0644]
src/documentation/resources/images/logoRaPiGmbH2.png [new file with mode: 0644]
src/documentation/resources/images/logoRaPiGmbH5.png [new file with mode: 0644]
src/documentation/resources/images/logoRaPiGmbH6.png [new file with mode: 0644]
src/documentation/resources/images/logoRaPiGmbH7.png [new file with mode: 0644]
src/documentation/resources/images/logoRaPiGmbH8.png [new file with mode: 0644]
src/documentation/resources/images/logoRaPiGmbH9.png [new file with mode: 0644]
src/documentation/resources/images/logoRandyStanard01.png [new file with mode: 0644]
src/documentation/resources/images/logoRandyStanard02.png [new file with mode: 0644]
src/documentation/resources/images/logoRandyStanard03.png [new file with mode: 0644]
src/documentation/resources/images/logoRandyStanard04.png [new file with mode: 0644]
src/documentation/resources/images/logoRandyStanard05.png [new file with mode: 0644]
src/documentation/resources/images/logoRandyStanard06.png [new file with mode: 0644]
src/documentation/resources/images/logoRandyStanard07.png [new file with mode: 0644]
src/documentation/resources/images/logoRandyStanard08.png [new file with mode: 0644]
src/documentation/resources/images/logoRussellBeattie1.png [new file with mode: 0644]
src/documentation/resources/images/logoRussellBeattie2.png [new file with mode: 0644]
src/documentation/resources/images/logoRussellBeattie3.png [new file with mode: 0644]
src/documentation/resources/images/logoRussellBeattie4.png [new file with mode: 0644]
src/documentation/resources/images/logoRussellBeattie5.png [new file with mode: 0644]
src/documentation/resources/images/logoWendyWise.png [new file with mode: 0644]
src/documentation/resources/images/logoWendyWise2.png [new file with mode: 0644]
src/documentation/resources/images/poi-logo.png [new file with mode: 0644]
src/documentation/resources/images/project-logo.gif [new file with mode: 0644]
src/documentation/resources/images/remove.jpg [new file with mode: 0644]
src/documentation/resources/images/update.jpg [new file with mode: 0644]
src/documentation/resources/images/usermodel.gif [new file with mode: 0644]
src/documentation/resources/images/utilClasses.gif [new file with mode: 0644]
src/documentation/skinconf.xml [new file with mode: 0644]
src/scratchpad/lib/.cvsignore [new file with mode: 0644]
src/scratchpad/lib/dummy.txt [deleted file]
src/scratchpad/targets/dummy.txt [deleted file]
src/scratchpad/testcases/dummy.txt [new file with mode: 0644]
src/targets/record-generation/xbuild.xml [deleted file]
status.xml [deleted file]
tools/.cvsignore [deleted file]
tools/antipede/bin/ant [deleted file]
tools/antipede/bin/ant.bat [deleted file]
tools/antipede/bin/antRun [deleted file]
tools/antipede/bin/antRun.bat [deleted file]
tools/antipede/bin/antRun.pl [deleted file]
tools/antipede/bin/complete-ant-cmd.pl [deleted file]
tools/antipede/bin/lcp.bat [deleted file]
tools/antipede/bin/runant.pl [deleted file]
tools/antipede/bin/runant.py [deleted file]
tools/antipede/build.dtd [deleted file]
tools/antipede/build.xtarget [deleted file]
tools/antipede/lib/ant-1.5-dev-20020402.jar [deleted file]
tools/antipede/lib/ant-contrib-0.1.jar [deleted file]
tools/antipede/lib/ant-optional-1.5-dev-20020402.jar [deleted file]
tools/antipede/lib/ant-taskdefs-dev-20020402.jar [deleted file]
tools/antipede/lib/ant-xmlproperty-1.5-cvs.jar [deleted file]
tools/antipede/lib/jjar.jar [deleted file]
tools/antipede/lib/krysalis-centipede.jar [deleted file]
tools/antipede/resources/stylesheets/build.xsl [deleted file]
tools/antipede/resources/stylesheets/getcent.xsl [deleted file]
tools/antipede/resources/stylesheets/getcorelibs.xsl [deleted file]
tools/antipede/resources/stylesheets/layout.xsl [deleted file]
tools/antipede/resources/stylesheets/log.xsl [deleted file]
tools/antipede/resources/stylesheets/module.css [deleted file]
tools/antipede/resources/stylesheets/module.xsl [deleted file]
tools/antipede/resources/stylesheets/properties.xsl [deleted file]
tools/antipede/resources/stylesheets/status.xsl [deleted file]
tools/antipede/resources/stylesheets/xml.xsl [deleted file]
tools/antipede/tasks.properties [deleted file]
tools/cents/.cvsignore [deleted file]
tools/cents/automagic.cent.jar [deleted file]
tools/cents/centipede.cent.jar [deleted file]
tools/cents/forrest.cent.jar [deleted file]
tools/cents/javasrc.cent.jar [deleted file]
tools/cents/jdepend.cent.jar [deleted file]
tools/cents/junit.cent.jar [deleted file]
tools/cents/umldoclet.cent.jar [deleted file]

index 6192d8d9dc617524a0ee6436b37f8a33692ba65d..558342ccee7129e2e247d81bc013a271d9be7dd2 100644 (file)
@@ -1,8 +1,9 @@
-*.properties
 dist
+scripts
 *.el
 *.ipr
 *.iws
+*.iml
 build.number
 log*.*
 *.log
diff --git a/appendcp.bat b/appendcp.bat
deleted file mode 100644 (file)
index 128ae87..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-set CLASSPATH=%CLASSPATH%;%1
-
diff --git a/build.bat b/build.bat
deleted file mode 100755 (executable)
index 66c19ca..0000000
--- a/build.bat
+++ /dev/null
@@ -1,14 +0,0 @@
-@echo off
-
-set OLD_ANT_HOME=%ANT_HOME%
-set ANT_HOME=tools\antipede
-
-set OLD_CLASSPATH=%CLASSPATH%
-set CLASSPATH=
-for %%i in (.\lib\endorsed\*.jar) do call appendcp.bat %%i
-
-echo Using classpath: "%CLASSPATH%"
-call %ANT_HOME%\bin\ant -emacs -logger org.apache.tools.ant.NoBannerLogger %1 %2 %3 %4 %5 %6 %7 %8 %9
-
-set ANT_HOME=%OLD_ANT_HOME%
-set CLASSPATH=%OLD_CLASSPATH%
\ No newline at end of file
diff --git a/build.sh b/build.sh
deleted file mode 100755 (executable)
index 262837b..0000000
--- a/build.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/sh
-# ----- Verify and Set Required Environment Variables -------------------------
-
-if [ "$JAVA_HOME" = "" ] ; then
-  echo You must set JAVA_HOME to point at your Java Development Kit installation
-  exit 1
-fi
-
-chmod u+x ./tools/antipede/bin/antRun
-chmod u+x ./tools/antipede/bin/ant
-
-# ----- Verify and Set Required Environment Variables -------------------------
-
-if [ "$TERM" = "cygwin" ] ; then
-  S=';'
-else
-  S=':'
-fi
-
-# ----- Set Up The Runtime Classpath ------------------------------------------
-
-OLD_ANT_HOME=$ANT_HOME
-unset ANT_HOME
-
-CP=$CLASSPATH
-export CP
-unset CLASSPATH
-
-CLASSPATH="`echo ./lib/endorsed/*.jar | tr ' ' $S`"
-export CLASSPATH
-
-echo Using classpath: \"$CLASSPATH\"
-$PWD/./tools/antipede/bin/ant -emacs -logger org.apache.tools.ant.NoBannerLogger $@ 
-
-unset CLASSPATH
-
-CLASSPATH=$CP
-export CLASSPATH
-ANT_HOME=OLD_ANT_HOME
-export ANT_HOME
index 31e0ebcfe5867226e3ec3407e29b1d84f61a0677..73f795c034f78330a1bf4953343e6e69f49d163c 100644 (file)
--- a/build.xml
+++ b/build.xml
 <?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="./tools/antipede/resources/stylesheets/build.xsl"?>
-
-<!--<!DOCTYPE project SYSTEM "./tools/antipede/build.dtd" >-->
-<!DOCTYPE project [
-  <!-- antipede -->    
-  <!ENTITY import-antipede  SYSTEM "./tools/antipede/build.xtarget"> 
-                   
-]>
-<project default="interactive" basedir="." name="project build file">
-
-<description>
-                   * ===================================== *
-                   |   Krysalis Centipede Build System     |
-                   * ===================================== *
-                                     by               
-                                             
-                   Nicola Ken Barozzi (nicolaken@apache.org)
-                   Marc Johnson (mjohnson@apache.org)       
-                   
-                   
-                   For a simple interactive build, simply 
-                   run the build script (build.bar or build.sh)
-</description>
-  <!-- =================================================================== -->
-  <!-- Basic build targets for the project                                 -->
-  <!-- =================================================================== -->
-
-  <!-- =================================================================== -->
-  <!-- Interactive build                                                   -->
-  <!-- =================================================================== -->
-  <target name="interactive" description="Interactive Build" depends="-init">          
-    <echo> 
-    --------------------------------------------------------------
-
-          ${xgump.module.project.name} ${xgump.module.project.version.major}.${xgump.module.project.version.minor}   [${YEAR}]
-
-    --------------------------------------------------------------
-     Using ${ant.version}
-     Build file ${ant.file}
-    --------------------------------------------------------------   
-     These are the most common build targets.   
-     You can also invoke them directly; see build.xml for more info. 
-     Builds will be in /build directory, distributions in /dist.        
-        
-     all -------------- creates the jars and the site      
-     compile ---------- compiles the source code      
-     test ------------- performs the jUnit tests       
-     jar -------------- create the jar files
-     docs ------------- generates the html docs - clean not needed        
-     javadocs --------- generates the API documentation   
-     site ------------- generates the html site (docs+reports)    
-     clean ------------ cleans the build directory    
-     dist ------------- creates src and bin distributions    
-     scratchpad ------- build-run scratchpad code       
-     contrib ---------- build-run contributed code    
-     generate-records - generate excel records    
-     generate-types --- generate word types    
-
-    </echo>
-    <property name="input.selection" value="all"/>        
-    <centipede-user-input name="input.selection">Please select a target </centipede-user-input>   
-    
-    <antcall target="call-cent">
-      <param name="cent-name"   value="centipede"/> 
-      <param name="cent-target" value="splash"/> 
-    </antcall>
-    <antcall target="${input.selection}"/>
-    
-  </target>
-
-
-
-  <!-- =================================================================== -->
-  <!-- Interactive scratchpad builds                                       -->
-  <!-- =================================================================== -->
-  <target name="scratchpad" depends="compile" description="Interactive Scratchpad Build">
-    <echo> 
-    --------------------------------------------------------------
-         
-              ${xgump.module.project.name} ${xgump.module.project.version.major}.${xgump.module.project.version.minor} SCRATCHPAD 
-         
-    --------------------------------------------------------------  
-    Building with ${ant.version}  
-    using build file ${ant.file}  
-    --------------------------------------------------------------   
-             
-     These are SCRATCHPAD BUILDS. They are not guaranteed to work.
-     You have been warned. 
-     
-     -
-     -
-     -
-     -
-     -
-     -
-     
-    </echo> 
-    <property name="input.selection" value=""/>
-    <centipede-user-input name="input.selection">Please select a target </centipede-user-input>
-
-    <ant antfile="${xlayout.source.scratchpad.targets.dir}/${input.selection}/xbuild.xml"/>
-
-  </target>
-
-  <!-- =================================================================== -->
-  <!-- Interactive contrib builds                                       -->
-  <!-- =================================================================== -->
-  <target name="contrib" depends="compile" description="Interactive Contributors' Build">
-    <echo> 
-    --------------------------------------------------------------
-         
-              ${xgump.module.project.name} ${xgump.module.project.version.major}.${xgump.module.project.version.minor}  CONTRIB
-         
-    --------------------------------------------------------------
-    Building with ${ant.version}  
-    using build file ${ant.file}  
-    --------------------------------------------------------------   
-             
-     These are CONTRIB BUILDS. They are not guaranteed to work.
-     You have been warned. 
-     
-     poibrowser  - POIBrowser 0.10 GUI POI Viewer
-     sheetviewer - SheetViewer 0.20 GUI Applet/Application Viewer for XLS files
-     -
-     -
-     -
-     -
-     
-    </echo> 
-
-    <property name="input.selection" value="poibrowser"/>
-    <centipede-user-input name="input.selection">Please select a target </centipede-user-input>
-
-    <ant antfile="${xlayout.source.contributions.targets.dir}/${input.selection}/xbuild.xml"/>
-    
-  </target>
-
-
-  <!-- ================================== -->
-  <!--              Compile               -->
-  <!-- ================================== -->
-
-  <target  name="compile"   depends="-init"
-           description="Compile java source code">
-           
-    <antcall target="call-cent">
-      <param name="cent-name"   value="automagic"/> 
-      <param name="cent-target" value="compile"/> 
-    </antcall>
-    
-  </target>               
-
-  
-  <!-- ================================== -->
-  <!--             Build jars             -->
-  <!-- ================================== -->
-
-  <target  name="jar"   depends="-init"
-           description="Compile java source code">
-
-    <antcall target="call-cent">
-      <param name="cent-name"   value="automagic"/> 
-      <param name="cent-target" value="jar"/> 
-    </antcall>
-    
-  </target>     
-
-  <!-- ====================================== -->
-  <!--  dist target wo single build checks    -->
-  <!-- ====================================== -->
-  <target  name="dist"   depends="-init"
-           description="Build distribution packages wo single build checks">
-
-    <antcall target="call-cent">
-      <param name="cent-name"   value="automagic"/> 
-      <param name="cent-target" value="dist"/> 
-    </antcall>
-    
-  </target>    
-  
-    
-  <!-- ================================== -->
-  <!--         Clean build dir            -->
-  <!-- ================================== -->
-
-  <target  name="clean"   depends="-init"
-           description="Compile java source code">
-
-    <antcall target="call-cent">
-      <param name="cent-name"   value="automagic"/> 
-      <param name="cent-target" value="clean"/> 
-    </antcall>
-    
-  </target>     
-
-  <!-- ================================== -->
-  <!--         Run Junit tests            -->
-  <!-- ================================== -->
-  
-  <target  name="test"   depends="-init"
-           description="Compile java source code">
-
-     <antcall target="call-cent">
-      <param name="cent-name"   value="automagic"/> 
-      <param name="cent-target" value="test"/> 
-    </antcall>
-  </target>     
-
-  
-  <!-- ================================== -->
-  <!--      Generate project metrics      -->
-  <!-- ================================== -->
-  
-  <target  name="metrics"   depends="-init"
-           description="Generate project metrics">
-
-    <antcall target="call-cent">
-      <param name="cent-name"   value="automagic"/>
-      <param name="cent-target" value="metrics"/> 
-    </antcall>
-
- </target>     
-
-  
-  <!-- ================================== -->
-  <!--    Generates the documentation     -->
-  <!-- ================================== -->
-  
-  <target  name="docs"   depends="-init"
-           description="Compile java source code">
-
-    <antcall target="call-cent">
-      <param name="cent-name"   value="automagic"/> 
-      <param name="cent-target" value="docs"/> 
-    </antcall>
-  </target>     
-
-  <!-- ================================== -->
-  <!--    Generates the site              -->
-  <!-- ================================== -->
-  
-  <target  name="site"
-           description="Makes all the site doco"
-           depends="-init">
-
-     <antcall target="call-cent">
-      <param name="cent-name"   value="automagic"/> 
-      <param name="cent-target" value="site"/> 
-    </antcall>
-  </target>     
-   
-  <!-- ================================== -->
-  <!--       Generates the java docs      -->
-  <!-- ================================== -->
-  
-  <target  name="javadocs"   depends="-init"
-           description="Compile java source code">
-
-    <antcall target="call-cent">
-      <param name="cent-name"   value="automagic"/> 
-      <param name="cent-target" value="javadocs"/> 
-    </antcall>
-
-  </target>     
-
-  <!-- ================================== -->
-  <!--       Generate records                -->
-  <!-- ================================== -->
-  
-  <target  name="generate-records"   depends="-init"
-           description="generate-records">
-
-    <ant antfile="${xlayout.source.targets.dir}/record-generation/xbuild.xml"
-            target="generate-records"/>
-    
-  </target>     
-
-  <!-- ================================== -->
-  <!--       Generate types                -->
-  <!-- ================================== -->
-  
-  <target  name="generate-types"   depends="-init"
-           description="generate-types">
-
-    <ant antfile="${xlayout.source.targets.dir}/record-generation/xbuild.xml"
-            target="generate-types"/>
-    
-  </target>     
-
-  <!-- ================================== -->
-  <!--    Test the main module stuff      -->
-  <!-- ================================== -->
-  
-  <target  name="testmodule"   
-           depends="clean, docs, compile, test, jar, metrics, javadocs"
-           description="Testing that all major targets work; useful before a commit"/>
-
-  <!-- ================================== -->
-  <!--    Test the main module stuff  2   -->
-  <!-- ================================== -->
-  
-  <target  name="testtargets"
-           description="Testing that all major targets work indipendently; useful before a commit">
-           
-      <antcall target="clean"/>
-      <antcall target="compile"/>
-      <antcall target="clean"/>
-      <antcall target="test"/>
-      <antcall target="clean"/>
-      <antcall target="jar"/>
-      <antcall target="clean"/>
-      <antcall target="docs"/>
-      <antcall target="clean"/>
-      <antcall target="metrics"/>
-      <antcall target="clean"/>
-      <antcall target="javadocs"/>
-
-  </target>
-
-  <!-- ================================== -->
-  <!--         Test 4 distribution        -->
-  <!-- ================================== -->
-
-  <target  name="testall" depends="-init"
-           description="Make big full test">
-           
-    <antcall target="gump"/>
-    <antcall target="dist"/>
-    
-  </target>       
-                      
-  <!-- ================================== -->
-  <!--        Target used by Gump         -->
-  <!-- ================================== -->
-  
-  <target  name="gump"   
-           depends="-init, compile, test, jar, metrics, javadocs"
-           description="Target used by Gump"/>
-
-  <!-- ================================== -->
-  <!--        Generate all                -->
-  <!-- ================================== -->
-  
-  <target  name="all"   
-           depends="-init, jar, site"
-           description="Generate all"/>
-                      
-  <!-- =================================================================== -->
-  <!-- Import Ant-Centipede -init targets - sets up basic build stuff                          -->
-  <!-- =================================================================== -->
-  <!--  
-        This is the target that initializes tasks and properties used
-        commonly in every other target.
-        
-        Remember to add depends="-init" to every target, so that this
-        target is called before any other.
-                 
-        This target is internal; to make it unusable from the commandline,
-        its name starts with a hyphen. To make it invisible when
-        using -projecthelp, it lacks a description.
-  -->      
-
-    &import-antipede;
-    
+
+<!--
+    POI Build System.  Written by:
+
+        Glen Stampoultzis   glens at apache.org
+
+
+    This build was tested with and 1.5.3 although it will probably work with
+    other versions.  The following optional jar files should be installed
+    into the ant lib directory:
+
+    LIBRARY         LOCATION
+    =======         ========
+    junit           http://www.ibiblio.org/maven/junit/jars/
+    xerces          http://www.ibiblio.org/maven/xerces/jars/
+    jdepend         http://www.ibiblio.org/maven/jdepend/jars/
+
+    To build the documentation you will need to install forrest and set
+    the FORREST_HOME environment variable.
+
+
+    TO BE COMPLETED:
+
+    Convert book.xml files to a sitemap.
+
+ -->
+<project name="POI Build" default="compile" basedir=".">
+
+    <description>
+        The POI project Ant build.
+    </description>
+
+    <property environment="env"/>
+
+    <property name="repository" value="http://www.ibiblio.org/maven"/>
+    <property name="forrest.home" value="${env.FORREST_HOME}"/>
+
+    <property name="main.src" value="src/java"/>
+    <property name="main.src.test" value="src/testcases"/>
+    <property name="main.documentation" value="src/documentation"/>
+    <property name="main.output.dir" value="build/classes"/>
+    <property name="main.output.test.dir" value="build/test-classes"/>
+    <property name="main.lib" value="lib"/>
+    <property name="main.reports.test" value="build/test-results"/>
+    <property name="main.jar1.dir" value="${main.lib}/commongs-logging-1.0.1.jar"/>
+    <property name="main.jar1.url" value="${repository}/commons-logging/jars/commons-logging-1.0.1.jar"/>
+    <property name="main.jar2.dir" value="${main.lib}/log4j-1.2.8.jar"/>
+    <property name="main.jar2.url" value="${repository}/log4j/jars/log4j-1.2.8.jar"/>
+    <property name="main.testokfile" value="build/main-testokfile.txt"/>
+    <property name="scratchpad.src" value="src/scratchpad/src"/>
+    <property name="scratchpad.src.test" value="src/scratchpad/testcases"/>
+    <property name="scratchpad.lib" value="src/scratchpad/lib"/>
+    <property name="scratchpad.reports.test" value="build/scratchpad-test-results"/>
+    <property name="scratchpad.output.dir" value="build/scratchpad-classes"/>
+    <property name="scratchpad.output.test.dir" value="build/scratchpad-test-classes"/>
+    <property name="scratchpad.testokfile" value="build/scratchpad-testokfile.txt"/>
+    <property name="contrib.src" value="src/contrib/src"/>
+    <property name="contrib.src.test" value="src/contrib/testcases"/>
+    <property name="contrib.lib" value="src/contrib/lib"/>
+    <property name="contrib.reports.test" value="build/contrib-test-results"/>
+    <property name="contrib.output.dir" value="build/contrib-classes"/>
+    <property name="contrib.output.test.dir" value="build/contrib-test-classes"/>
+    <property name="contrib.jar1.dir" value="${contrib.lib}/commons-beanutils-1.6.jar"/>
+    <property name="contrib.jar1.url" value="${repository}/commons-beanutils/jars/commons-beanutils-1.6.jar"/>
+    <property name="contrib.jar2.dir" value="${contrib.lib}/commons-collections-2.1.jar"/>
+    <property name="contrib.jar2.url" value="${repository}/commons-collections/jars/commons-collections-2.1.jar"/>
+    <property name="contrib.jar3.dir" value="${contrib.lib}/commons-lang-1.0-b1.jar"/>
+    <property name="contrib.jar3.url" value="${repository}/commons-lang/jars/commons-lang-1.0-b1.jar"/>
+    <property name="contrib.testokfile" value="build/contrib-testokfile.txt"/>
+    <property name="junit.jar1.dir" value="${main.lib}/junit-3.8.1.jar"/>
+    <property name="junit.jar1.url" value="${repository}/junit/jars/junit-3.8.1.jar"/>
+    <property name="build.site" value="build/tmp/site/build/site"/>
+    <property name="build.site.src" value="build/tmp/site"/>
+    <property name="junit.report.dir" value="${build.site}/junit"/>
+    <property name="jdepend.report.dir" value="${build.site}/jdepend"/>
+    <property name="jdepend.report.out.dir" value="${build.site.src}/src/documentation/content/jdepend"/>
+    <property name="apidocs.report.dir" value="${build.site}/apidocs"/>
+    <property name="changelog.file" value="${build.site}/changelog.html"/>
+    <property name="dist.dir" value="build/dist"/>
+    <property name="jar.name" value="poi"/>
+    <property name="version.id" value="1.10.0-dev"/>
+    <property name="halt.on.test.failure" value="true"/>
+
+    <path id="main.classpath">
+        <pathelement location="${main.jar1.dir}"/>
+        <pathelement location="${main.jar2.dir}"/>
+    </path>
+
+    <path id="scratchpad.classpath">
+        <path refid="main.classpath"/>
+        <pathelement location="${main.output.dir}"/>
+    </path>
+
+    <path id="contrib.classpath">
+        <path refid="main.classpath"/>
+        <pathelement location="${contrib.jar1.dir}"/>
+        <pathelement location="${contrib.jar2.dir}"/>
+        <pathelement location="${contrib.jar3.dir}"/>
+        <pathelement location="${main.output.dir}"/>
+        <pathelement location="${main.output.test.dir}"/>
+        <pathelement location="${scratchpad.output.dir}"/>
+        <pathelement location="${scratchpad.output.test.dir}"/>
+        <pathelement location="${contrib.output.dir}"/>
+        <pathelement location="${contrib.output.test.dir}"/>
+    </path>
+
+    <target name="init" depends="check-jars,fetch-jars">
+
+        <tstamp/>
+
+        <mkdir dir="build"/>
+        <mkdir dir="${main.output.dir}"/>
+        <mkdir dir="${contrib.output.dir}"/>
+        <mkdir dir="${scratchpad.output.dir}"/>
+        <mkdir dir="${main.output.test.dir}"/>
+        <mkdir dir="${contrib.output.test.dir}"/>
+        <mkdir dir="${scratchpad.output.test.dir}"/>
+        <mkdir dir="${main.reports.test}"/>
+        <mkdir dir="${scratchpad.reports.test}"/>
+        <mkdir dir="${contrib.reports.test}"/>
+        <mkdir dir="${junit.report.dir}"/>
+        <mkdir dir="${jdepend.report.dir}"/>
+        <mkdir dir="${jdepend.report.out.dir}"/>
+        <mkdir dir="${apidocs.report.dir}"/>
+        <mkdir dir="${dist.dir}"/>
+        <mkdir dir="${build.site.src}/${main.documentation}"/>
+
+        <copy todir="${build.site.src}/${main.documentation}">
+            <fileset dir="${main.documentation}"/>
+        </copy>
+        <copy file="forrest.properties" tofile="${build.site.src}/forrest.properties"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="build"/>
+    </target>
+
+    <target name="check-jars">
+        <condition property="jars.present">
+            <and>
+                <available file="${main.jar1.dir}"/>
+                <available file="${main.jar2.dir}"/>
+                <available file="${contrib.jar1.dir}"/>
+                <available file="${contrib.jar2.dir}"/>
+                <available file="${contrib.jar3.dir}"/>
+                <available file="${junit.jar1.dir}"/>
+            </and>
+        </condition>
+    </target>
+
+    <target name="fetch-jars" unless="jars.present">
+        <get src="${main.jar1.url}" dest="${main.jar1.dir}"/>
+        <get src="${main.jar2.url}" dest="${main.jar2.dir}"/>
+        <get src="${contrib.jar1.url}" dest="${contrib.jar1.dir}"/>
+        <get src="${contrib.jar2.url}" dest="${contrib.jar2.dir}"/>
+        <get src="${contrib.jar3.url}" dest="${contrib.jar3.dir}"/>
+        <get src="${junit.jar1.url}" dest="${junit.jar1.dir}"/>
+    </target>
+
+    <target name="compile" depends="init,compile-main,compile-scratchpad,compile-contrib">
+
+    </target>
+
+    <target name="compile-main" depends="init">
+        <javac srcdir="${main.src}" destdir="${main.output.dir}">
+            <classpath refid="main.classpath"/>
+        </javac>
+        <javac srcdir="${main.src.test}" destdir="${main.output.test.dir}">
+            <classpath>
+                <path refid="main.classpath"/>
+                <pathelement location="${main.output.dir}"/>
+                <pathelement location="${junit.jar1.dir}"/>
+            </classpath>
+        </javac>
+    </target>
+
+    <target name="compile-scratchpad" depends="init">
+        <javac srcdir="${scratchpad.src}" destdir="${scratchpad.output.dir}">
+            <classpath refid="scratchpad.classpath"/>
+        </javac>
+        <javac srcdir="${scratchpad.src.test}" destdir="${scratchpad.output.test.dir}">
+            <classpath>
+                <path refid="scratchpad.classpath"/>
+                <pathelement location="${scratchpad.output.dir}"/>
+                <pathelement location="${junit.jar1.dir}"/>
+            </classpath>
+        </javac>
+    </target>
+
+    <target name="compile-contrib" depends="init">
+        <javac srcdir="${contrib.src}" destdir="${contrib.output.dir}">
+            <classpath refid="contrib.classpath"/>
+        </javac>
+        <javac srcdir="${contrib.src.test}" destdir="${contrib.output.test.dir}">
+            <classpath>
+                <path refid="contrib.classpath"/>
+                <pathelement location="${contrib.output.dir}"/>
+                <pathelement location="${junit.jar1.dir}"/>
+            </classpath>
+        </javac>
+    </target>
+
+    <target name="test" depends="test-main,test-scratchpad,test-contrib"
+        description="Test main, contrib and scratchpad"/>
+
+    <target name="-test-main-check">
+        <uptodate property="main.test.notRequired" targetfile="${main.testokfile}">
+            <srcfiles dir="${main.src}"/>
+            <srcfiles dir="${main.src.test}"/>
+        </uptodate>
+    </target>
+
+    <target name="test-main" depends="compile-main,-test-main-check" unless="main.test.notRequired">
+        <junit printsummary="yes" showoutput="true" filtertrace="no" fork="no"
+            haltonfailure="${halt.on.test.failure}" failureproperty="main.test.failed">
+            <classpath>
+                <path refid="main.classpath"/>
+                <pathelement location="${main.output.dir}"/>
+                <pathelement location="${main.output.test.dir}"/>
+                <pathelement location="${junit.jar1.dir}"/>
+            </classpath>
+            <sysproperty key="HSSF.testdata.path" value="${main.src.test}/org/apache/poi/hssf/data"/>
+            <sysproperty key="HPSF.testdata.path" value="${main.src.test}/org/apache/poi/hpsf/data"/>
+            <formatter type="plain"/>
+            <formatter type="xml"/>
+            <batchtest todir="${main.reports.test}">
+                <fileset dir="${main.src.test}">
+                    <include name="**/Test*.java"/>
+                    <exclude name="**/AllTests.java"/>
+                </fileset>
+            </batchtest>
+        </junit>
+        <delete file="${main.testokfile}"/>
+        <antcall target="-test-main-write-testfile"/>
+    </target>
+
+    <target name="-test-main-write-testfile" unless="main.test.failed">
+        <echo file="${main.testokfile}" append="false" message="testok"/>
+    </target>
+
+    <target name="-test-scratchpad-check">
+        <uptodate property="scratchpad.test.notRequired" targetfile="${scratchpad.testokfile}">
+            <srcfiles dir="${scratchpad.src}"/>
+            <srcfiles dir="${scratchpad.src.test}"/>
+        </uptodate>
+    </target>
+
+    <target name="test-scratchpad" depends="compile-scratchpad,-test-scratchpad-check" unless="scratchpad.test.notRequired">
+        <junit printsummary="yes" fork="no" haltonfailure="${halt.on.test.failure}">
+            <classpath>
+                <path refid="scratchpad.classpath"/>
+                <pathelement location="${main.output.dir}"/>
+                <pathelement location="${scratchpad.output.dir}"/>
+                <pathelement location="${scratchpad.output.test.dir}"/>
+                <pathelement location="${junit.jar1.dir}"/>
+            </classpath>
+            <sysproperty key="HSSF.testdata.path" value="${scratchpad.src.test}/org/apache/poi/hssf/data"/>
+            <sysproperty key="HPSF.testdata.path" value="${scratchpad.src.test}/org/apache/poi/hpsf/data"/>
+            <sysproperty key="HDF.testdata.path" value="${scratchpad.src.test}/org/apache/poi/hdf/data"/>
+            <formatter type="xml"/>
+            <batchtest todir="${scratchpad.reports.test}">
+                <fileset dir="${scratchpad.src.test}">
+                    <include name="**/Test*.java"/>
+                    <exclude name="**/AllTests.java"/>
+                </fileset>
+            </batchtest>
+        </junit>
+        <delete file="${scratchpad.testokfile}"/>
+        <antcall target="-test-scratchpad-write-testfile"/>
+    </target>
+
+    <target name="-test-scratchpad-write-testfile" unless="scratchpad.test.failed">
+        <echo file="${scratchpad.testokfile}" append="false" message="testok"/>
+    </target>
+
+    <target name="-test-contrib-check">
+        <uptodate property="contrib.test.notRequired" targetfile="${contrib.testokfile}">
+            <srcfiles dir="${contrib.src}"/>
+            <srcfiles dir="${contrib.src.test}"/>
+        </uptodate>
+    </target>
+
+    <target name="test-contrib" depends="compile-contrib,-test-contrib-check" unless="contrib.test.notRequired">
+        <junit printsummary="yes" fork="no" haltonfailure="${halt.on.test.failure}">
+            <classpath>
+                <path refid="contrib.classpath"/>
+                <pathelement location="${main.output.dir}"/>
+                <pathelement location="${contrib.output.dir}"/>
+                <pathelement location="${contrib.output.test.dir}"/>
+                <pathelement location="${junit.jar1.dir}"/>
+            </classpath>
+            <sysproperty key="HSSF.testdata.path" value="${contrib.src.test}/org/apache/poi/hssf/data"/>
+            <sysproperty key="HPSF.testdata.path" value="${contrib.src.test}/org/apache/poi/hpsf/data"/>
+            <formatter type="xml"/>
+            <batchtest todir="${contrib.reports.test}">
+                <fileset dir="${contrib.src.test}">
+                    <include name="**/Test*.java"/>
+                    <exclude name="**/AllTests.java"/>
+                </fileset>
+            </batchtest>
+        </junit>
+        <delete file="${contrib.testokfile}"/>
+        <antcall target="-test-contrib-write-testfile"/>
+    </target>
+
+    <target name="-test-contrib-write-testfile" unless="contrib.test.failed">
+        <echo file="${contrib.testokfile}" append="false" message="testok"/>
+    </target>
+
+    <target name="-check-docs">
+        <uptodate property="main.docs.notRequired" targetfile="${build.site}/index.html">
+            <srcfiles dir="${build.site.src}"/>
+        </uptodate>
+    </target>
+
+    <target name="-check-forrest-installed" unless="env.FORREST_HOME">
+        <echo>
+            Please install apache forrest and set the
+            FORREST_HOME environment variable.
+        </echo>
+        <fail/>
+    </target>
+
+    <!--    <target name="check-docs">-->
+    <!--        <uptodate property="main.docs.notRequired" targetfile="${build.site}/index.html" >-->
+    <!--            <srcfiles dir= "${build.site.src}"/>-->
+    <!--        </uptodate>-->
+    <!--    </target>-->
+
+    <target name="docs" depends="init,-check-forrest-installed,-check-docs" unless="main.docs.notRequired"
+        description="Builds the POI website">
+
+        <mkdir dir="${build.site.src}/src/documentation/content/apidocs"/>
+        <copy todir="${build.site.src}/src/documentation/content/apidocs">
+            <fileset dir="${apidocs.report.dir}"/>
+        </copy>
+        <copy tofile="${build.site.src}/src/documentation/content/jdepend.ehtml" file="${jdepend.report.dir}/index.html" failonerror="false"/>
+        <mkdir dir="${build.site.src}/src/documentation/content/junit"/>
+        <copy todir="${build.site.src}/src/documentation/content/junit">
+            <fileset dir="${junit.report.dir}"/>
+        </copy>
+
+        <move file="${build.site.src}/src/documentation/content/xdocs/status.xml" tofile="${build.site.src}/status.xml"/>
+
+
+        <ant antfile="${forrest.home}/forrest.antproxy.xml" target="site">
+            <property name="project.home" value="${build.site.src}"/>
+        </ant>
+
+        <echo>Broken links:</echo>
+        <echo file="${build.site}/../tmp/brokenlinks.txt"/>
+
+        <touch>
+            <fileset dir="${build.site}"/>
+        </touch>
+    </target>
+
+    <!-- Checks whether reports are required to be run.  If nothing has changed then they dont. -->
+    <target name="-check-reports">
+        <condition property="reports.notRequired">
+            <and>
+                <equals arg1="${main.test.notRequired}" arg2="true"/>
+                <equals arg1="${scratchpad.test.notRequired}" arg2="true"/>
+                <equals arg1="${contrib.test.notRequired}" arg2="true"/>
+            </and>
+        </condition>
+    </target>
+
+    <target name="reports" depends="-check-reports" unless="reports.notRequired"
+        description="Creates junit,jdepend and javadoc reports">
+        <antcall target="test">
+            <param name="${halt.on.test.failure}" value="false"/>
+        </antcall>
+        <junitreport todir="${junit.report.dir}">
+            <fileset dir="${main.reports.test}">
+                <include name="TEST-*.xml"/>
+            </fileset>
+            <fileset dir="${scratchpad.reports.test}">
+                <include name="TEST-*.xml"/>
+            </fileset>
+            <fileset dir="${contrib.reports.test}">
+                <include name="TEST-*.xml"/>
+            </fileset>
+            <report format="frames" todir="${junit.report.dir}"/>
+        </junitreport>
+
+        <jdepend outputfile="${jdepend.report.dir}/jdepend.xml" format="xml">
+            <sourcespath>
+                <pathelement location="${main.src}"/>
+                <pathelement location="${contrib.src}"/>
+                <pathelement location="${scratchpad.src}"/>
+            </sourcespath>
+            <classpath>
+                <path refid="main.classpath"/>
+                <path refid="contrib.classpath"/>
+                <path refid="scratchpad.classpath"/>
+                <pathelement location="${main.output.dir}"/>
+                <pathelement location="${contrib.output.dir}"/>
+                <pathelement location="${scratchpad.output.dir}"/>
+            </classpath>
+        </jdepend>
+
+        <style basedir="${jdepend.report.dir}"
+            in="${jdepend.report.dir}/jdepend.xml"
+            out="${jdepend.report.out.dir}/index.html"
+            style="jdepend.xsl"/>
+
+        <cvschangelog destfile="${changelog.file}" daysinpast="30"/>
+
+        <style in="${changelog.file}"
+            out="${build.site.src}/src/documentation/content/changelog.html"
+            style="changelog.xsl">
+            <param name="title" expression="POI Change Log"/>
+            <param name="module" expression="jakarta-poi"/>
+            <param name="cvsweb" expression="http://cvs.apache.org/viewcvs/"/>
+        </style>
+
+        <javadoc
+            destdir="${apidocs.report.dir}"
+            author="true"
+            version="true"
+            use="true"
+            verbose="false"
+            windowtitle="POI API">
+
+            <packageset dir="${main.src}" defaultexcludes="yes">
+                <include name="org/apache/poi/**"/>
+            </packageset>
+            <packageset dir="${scratchpad.src}" defaultexcludes="yes">
+                <include name="org/apache/poi/**"/>
+            </packageset>
+            <packageset dir="${contrib.src}" defaultexcludes="yes">
+                <include name="org/apache/poi/**"/>
+            </packageset>
+
+            <classpath>
+                <path refid="main.classpath"/>
+                <path refid="scratchpad.classpath"/>
+                <path refid="contrib.classpath"/>
+            </classpath>
+
+            <doctitle><![CDATA[<h1>POI Documentation</h1>]]></doctitle>
+            <bottom><![CDATA[<i>Copyright &#169; 2003 Apache Software Foundation.</i>]]></bottom>
+            <group title="HSSF" packages="org.apache.poi.hssf*"/>
+            <group title="HPSF" packages="org.apache.poi.hpsf*"/>
+            <group title="POIFS" packages="org.apache.poi.poifs*"/>
+            <group title="HDF" packages="org.apache.poi.hdf*"/>
+            <group title="Record Generator" packages="org.apache.poi.record*"/>
+            <group title="Utils" packages="org.apache.poi.util*"/>
+        </javadoc>
+
+
+    </target>
+
     <!-- ================================== -->
-    <!-- POI specific extensions to the the build file -->
+    <!--       Generate records                -->
     <!-- ================================== -->
-    
-    
-      <patternset id="teststhatfail">
-      </patternset>
-  
-   <!-- ================================== -->
-   <!-- run tests one at a time -->
-   <!-- ================================== -->
-    
-    <target name="single-test" if="testcase" depends="-init,compile-tests"
-      description="--> runs the single unit test defined in the testcase property">
-  
-  
-    <junit2 printsummary="no" haltonfailure="${junit.test.haltonfailure}" fork="yes">
-          <formatter type="xml" />
-         <formatter type="plain" usefile="no"/>
-         <sysproperty key="UTIL.testdata.path"
-                          value="${xlayout.source.test.dir}/org/apache/poi/util/data"/>
-         <sysproperty key="HSSF.testdata.path"
-                   value="${xlayout.source.test.dir}/org/apache/poi/hssf/data"/>
-         <sysproperty key="HPSF.testdata.path"
-                   value="${xlayout.source.test.dir}/org/apache/poi/hpsf/data"/>
-        <classpath>
-               <path>
-                        <fileset dir="." casesensitive="yes"> 
-                         <patternset>
-                          <include name="${cents.dir}/*.${cent.dir.suffix}/${cent.lib.dir.name}/*.jar"/>
-                          <include name="${cents.dir}/*.${cent.dir.suffix}/${cent.lib.dir.name}/*.zip"/>
-                         </patternset>
-                        </fileset>         
-                           <fileset dir="${xlayout.library.dir}" casesensitive="yes"> 
-                            <patternset>
-                              <include name="*/*.jar"/>
-                              <include name="*/*.zip"/>
-                            </patternset>
-                          </fileset>  
-                           <fileset dir="${xlayout.source.scratchpad.library.dir}" casesensitive="yes"> 
-                            <patternset>
-                              <include name="*.jar"/>
-                              <include name="*.zip"/>
-                            </patternset>
-                          </fileset>           
-                           <fileset dir="${xlayout.source.examples.library.dir}" casesensitive="yes"> 
-                            <patternset>
-                              <include name="*.jar"/>
-                              <include name="*.zip"/>
-                            </patternset>
-                          </fileset>           
-                        </path> 
-        <pathelement path="${xlayout.build.classes.dir}" />      
-                <pathelement location="${xlayout.build.test.dir}" />
-                        <pathelement location="${xlayout.build.classes.dir}" />
-                </classpath>
-        <test name="${testcase}" />
-      </junit2>
+
+    <target name="generate-records" depends="init"
+        description="generate-records">
+        <java classname="org.apache.poi.dev.RecordGenerator" fork="yes">
+            <arg value="src/records/definitions"/>
+            <arg value="src/records/styles"/>
+            <arg value="src/java"/>
+            <arg value="src/testcases"/>
+            <classpath>
+                <path refid="scratchpad.classpath">
+                </path>
+                <pathelement location="${main.output.dir}"/>
+                <pathelement location="${scratchpad.output.dir}"/>
+            </classpath>
+        </java>
+
     </target>
-    
-    <target name="compile-tests" depends="-init,compile">
-
-    <mkdir dir="${xlayout.build.test.dir}"/>
-  
-        <!-- Compile tests -->
-        <javac srcdir="${xlayout.source.test.dir}"
-                destdir="${xlayout.build.test.dir}"
-                debug=      "${build.compiler.debug}"
-                optimize=   "${build.compiler.optimize}"
-                deprecation="${build.compiler.deprecation}"
-                target=     "${build.compiler.vm}"
-                nowarn=     "false">
-         <classpath>
-         <path>
-                 <fileset dir="." casesensitive="yes"> 
-                  <patternset>
-                   <include name="${cents.dir}/*.${cent.dir.suffix}/${cent.lib.dir.name}/*.jar"/>
-                   <include name="${cents.dir}/*.${cent.dir.suffix}/${cent.lib.dir.name}/*.zip"/>
-                  </patternset>
-                 </fileset>         
-                    <fileset dir="${xlayout.library.dir}" casesensitive="yes"> 
-                     <patternset>
-                       <include name="*/*.jar"/>
-                       <include name="*/*.zip"/>
-                     </patternset>
-                   </fileset>  
-                    <fileset dir="${xlayout.source.scratchpad.library.dir}" casesensitive="yes"> 
-                     <patternset>
-                       <include name="*.jar"/>
-                       <include name="*.zip"/>
-                     </patternset>
-                   </fileset>           
-                    <fileset dir="${xlayout.source.examples.library.dir}" casesensitive="yes"> 
-                     <patternset>
-                       <include name="*.jar"/>
-                       <include name="*.zip"/>
-                     </patternset>
-                   </fileset>           
-                 </path> 
-        <pathelement path="${xlayout.build.classes.dir}" />      
-        </classpath>
-      </javac>
+
+    <!-- ================================== -->
+    <!--       Generate types                -->
+    <!-- ================================== -->
+
+    <target name="generate-types" depends="init"
+        description="generate-types">
+
+        <java classname="org.apache.poi.dev.RecordGenerator" fork="yes">
+            <arg value="src/types/definitions"/>
+            <arg value="src/types/styles"/>
+            <arg value="src/scratchpad/src"/>
+            <arg value="src/scratchpad/testcases"/>
+            <classpath>
+                <path refid="scratchpad.classpath">
+                </path>
+                <pathelement location="${main.output.dir}"/>
+                <pathelement location="${scratchpad.output.dir}"/>
+            </classpath>
+        </java>
+
     </target>
-       
-       
-      
+
+    <target name="site" depends="reports,docs"
+        description="generate the documentation and reports"/>
+
+    <target name="jar" depends="compile" description="Creates jar files for distribution">
+        <jar basedir="${main.output.dir}" destfile="${dist.dir}/${jar.name}-${version.id}-${DSTAMP}.jar"/>
+        <jar basedir="${contrib.output.dir}" destfile="${dist.dir}/${jar.name}-contrib-${version.id}-${DSTAMP}.jar"/>
+        <jar basedir="${scratchpad.output.dir}" destfile="${dist.dir}/${jar.name}-scratchpad-${version.id}-${DSTAMP}.jar"/>
+    </target>
+
+    <target name="dist" depends="compile,site,jar" description="Creates the entire distribution into build/dist">
+
+        <zip destfile="${dist.dir}/${jar.name}-bin-${version.id}-${DSTAMP}.zip">
+            <zipfileset dir="${build.site}" prefix="docs"/>
+            <zipfileset file="${dist.dir}/${jar.name}-${version.id}.jar"/>
+            <zipfileset file="${dist.dir}/${jar.name}-contrib-${version.id}.jar"/>
+            <zipfileset file="${dist.dir}/${jar.name}-scratchpad-${version.id}.jar"/>
+        </zip>
+
+        <zip destfile="${dist.dir}/${jar.name}-src-${version.id}-${DSTAMP}.zip">
+            <zipfileset dir="${build.site}" prefix="docs"/>
+            <zipfileset dir=".">
+                <exclude name="build/**"/>
+                <exclude name="scripts/**"/>
+                <exclude name="*.ipr"/>
+                <exclude name="*.iml"/>
+                <exclude name="*.iws"/>
+            </zipfileset>
+        </zip>
+
+        <tar destfile="${dist.dir}/${jar.name}-bin-${version.id}-${DSTAMP}.tar.gz" compression="gzip">
+            <tarfileset dir="${build.site}" prefix="docs"/>
+            <tarfileset file="${dist.dir}/${jar.name}-${version.id}.jar"/>
+            <tarfileset file="${dist.dir}/${jar.name}-contrib-${version.id}.jar"/>
+            <tarfileset file="${dist.dir}/${jar.name}-scratchpad-${version.id}.jar"/>
+        </tar>
+
+        <tar destfile="${dist.dir}/${jar.name}-src-${version.id}-${DSTAMP}.tar.gz" compression="gzip">
+            <tarfileset dir="${build.site}" prefix="docs"/>
+            <tarfileset dir=".">
+                <exclude name="build/**"/>
+                <exclude name="scripts/**"/>
+                <exclude name="*.ipr"/>
+                <exclude name="*.iml"/>
+                <exclude name="*.iws"/>
+            </tarfileset>
+        </tar>
+
+        <echo>Distribution located in build/dist</echo>
+
+    </target>
+
+    <target name="clean-dist" depends="clean,dist" description="Cleans the build directory then creates a distribution"/>
+
 </project>
diff --git a/centibuild.xml b/centibuild.xml
deleted file mode 100644 (file)
index 51e9eea..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0"?>
-
-<project default="interactive" basedir="." name="project build file">
-
-  <description>Jakarta POI buildfile</description>
-    <taskdef resource="centipede"/>
-    <centipede/>
-    
-    <importcent name="java" />
-    <importcent name="junit" />
-    
-   <!-- These work locally, but still need to be set in Gump
-      
-    <importcent name="doxygen-gpl" />
-    <importcent name="pmd" />
-    <importcent name="statcvs-gpl" />
-    <importcent name="nounit-gpl" />
-    <importcent name="dir2xml" />
-    <importcent name="essmodel-gpl" />
-    <importcent name="checkstyle" />
-    <importcent name="forrest" />
-    <importcent name="changelog" />
-    
-    -->
-            
-  <!-- =================================================================== -->
-  <!-- Basic build targets for the project                                 -->
-  <!-- =================================================================== -->
-
-  <!-- =================================================================== -->
-  <!-- Interactive build                                                   -->
-  <!-- =================================================================== -->
-  <target name="interactive" description="Interactive Build">          
-    <echo> 
-    --------------------------------------------------------------
-
-          ${jxpath:/references/module.xml/root/module/project[1]/@name}  [${YEAR}]
-
-    --------------------------------------------------------------
-     Using ${ant.version}
-     Build file ${ant.file}
-    --------------------------------------------------------------   
-     These are the most common build targets.   
-     You can also invoke them directly; see build.xml for more info. 
-     Builds will be in /build directory, distributions in /dist.        
-        
-     all -------------- creates the jars and the site      
-     compile ---------- compiles the source code      
-     test ------------- performs the jUnit tests       
-     jar -------------- create the jar files
-     docs ------------- generates the html docs - clean not needed        
-     javadocs --------- generates the API documentation   
-     site ------------- generates the html site (docs+reports)    
-     clean ------------ cleans the build directory    
-     dist ------------- creates src and bin distributions    
-     scratchpad ------- build-run scratchpad code       
-     contrib ---------- build-run contributed code    
-     generate-records - generate excel records    
-     generate-types --- generate word types    
-     poibrowser  - POIBrowser 0.10 GUI POI Viewer
-     sheetviewer - SheetViewer 0.20 GUI Applet/Application Viewer for XLS files     
-
-    </echo>
-    
-    <input message="Please select a target "
-           addproperty="input.selection"/>
-    
-    <condition property="do.abort">
-      <equals arg1="" arg2="input.selection" />
-    </condition>
-    
-    <fail if="do.abort">Build aborted by user.</fail>
-
-    <antrun target="splash"/>
-    <antrun target="${input.selection}"/>
-    
-  </target>
-
-
-
-  <!-- ================================== -->
-  <!--       Generate records                -->
-  <!-- ================================== -->
-  
-  <target  name="generate-records"
-           description="generate-records">
-
-    <ant antfile="${project.src.dir}/targets/record-generation/xbuild.xml"
-            target="generate-records"/>
-    
-  </target>     
-
-  <!-- ================================== -->
-  <!--       Generate types                -->
-  <!-- ================================== -->
-  
-  <target  name="generate-types"
-           description="generate-types">
-
-    <ant antfile="${project.src.dir}/targets/record-generation/xbuild.xml"
-            target="generate-types"/>
-    
-  </target>     
-
-                
-  <!-- ================================== -->
-  <!--        Target used by Gump         -->
-  <!-- ================================== -->
-  
-  <target  name="gump"   
-           depends="compile, package, test"
-           description="Target used by Gump"/>
-
-  <!-- ================================== -->
-  <!--        Generate all                -->
-  <!-- ================================== -->
-  
-  <target  name="all"   
-           depends="package"
-           description="Generate all"/>
-                      
-   
-      
-</project>
diff --git a/changelog.xsl b/changelog.xsl
new file mode 100644 (file)
index 0000000..07618da
--- /dev/null
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<xsl:stylesheet
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+    version='1.0'>
+
+<!--
+ The Apache Software License, Version 1.1
+
+ Copyright (c) 2002 The Apache Software Foundation.  All rights
+ reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+ 3. The end-user documentation included with the redistribution, if
+    any, must include the following acknowlegement:
+       "This product includes software developed by the
+        Apache Software Foundation (http://www.apache.org/)."
+    Alternately, this acknowlegement may appear in the software itself,
+    if and wherever such third-party acknowlegements normally appear.
+
+ 4. The names "The Jakarta Project", "Ant", and "Apache Software
+    Foundation" must not be used to endorse or promote products derived
+    from this software without prior written permission. For written
+    permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache"
+    nor may "Apache" appear in their names without prior written
+    permission of the Apache Group.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+ ====================================================================
+
+ This software consists of voluntary contributions made by many
+ individuals on behalf of the Apache Software Foundation.  For more
+ information on the Apache Software Foundation, please see
+ <http://www.apache.org/>.
+ -->
+  <xsl:param name="title"/>
+  <xsl:param name="module"/>
+  <xsl:param name="cvsweb"/>
+
+  <xsl:output method="html" indent="yes"  encoding="US-ASCII"/>
+
+  <!-- Copy standard document elements.  Elements that
+       should be ignored must be filtered by apply-templates
+       tags. -->
+  <xsl:template match="*">
+    <xsl:copy>
+      <xsl:copy-of select="attribute::*[. != '']"/>
+      <xsl:apply-templates/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="changelog">
+    <HTML>
+      <HEAD>
+        <TITLE><xsl:value-of select="$title"/></TITLE>
+      </HEAD>
+      <BODY link="#000000" alink="#000000" vlink="#000000" text="#000000">
+        <style type="text/css">
+          body, p {
+          font-family: verdana,arial,helvetica;
+          font-size: 100%;
+          color:#000000;
+          }
+         .dateAndAuthor {
+          font-family: verdana,arial,helvetica;
+          font-size: 100%;
+          font-weight: bold;
+          text-align:left;
+          background:#a6caf0;
+         }
+          tr, td{
+          font-family: verdana,arial,helvetica;
+          font-size: 120%;
+          background:#eeeee0;
+          }      
+         </style>        
+          <h1>
+            <a name="top"><xsl:value-of select="$title"/></a>
+          </h1>
+
+          <hr size="2"/>
+        <TABLE BORDER="0" WIDTH="100%" CELLPADDING="3" CELLSPACING="1">
+          
+          <xsl:apply-templates select=".//entry">
+            <xsl:sort select="date" data-type="text" order="descending"/>
+            <xsl:sort select="time" data-type="text" order="descending"/>
+          </xsl:apply-templates>
+          
+        </TABLE>
+        
+      </BODY>
+    </HTML>
+  </xsl:template>
+  
+  <xsl:template match="entry">
+    <TR>
+      <TD colspan="2" class="dateAndAuthor">
+        <xsl:value-of select="date"/><xsl:text> </xsl:text><xsl:value-of select="time"/><xsl:text> </xsl:text><xsl:value-of select="author"/>
+      </TD>
+    </TR>
+    <TR>
+      <TD width="20">
+        <xsl:text>    </xsl:text>
+      </TD>
+      <TD>
+        <pre>
+<xsl:apply-templates select="msg"/></pre>
+        <ul>
+          <xsl:apply-templates select="file"/>
+        </ul>
+      </TD>
+    </TR>
+  </xsl:template>
+
+  <xsl:template match="date">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="time">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="author">
+    <i>
+      <a>
+        <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
+        <xsl:value-of select="."/>
+      </a>
+    </i>
+  </xsl:template>
+
+  <xsl:template match="file">
+    <li>
+      <a>
+        <xsl:choose>
+          <xsl:when test="string-length(prevrevision) = 0 ">
+            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&amp;content-type=text/x-cvsweb-markup</xsl:attribute>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&amp;r2=<xsl:value-of select="prevrevision"/></xsl:attribute>
+          </xsl:otherwise>
+        </xsl:choose>
+        <xsl:value-of select="name" /> (<xsl:value-of select="revision"/>)
+      </a>
+    </li>
+  </xsl:template>
+
+  <!-- Any elements within a msg are processed,
+       so that we can preserve HTML tags. -->
+  <xsl:template match="msg">
+    <b><xsl:apply-templates/></b>
+  </xsl:template>
+  
+</xsl:stylesheet>
+
diff --git a/forrest.properties b/forrest.properties
new file mode 100644 (file)
index 0000000..98e8f08
--- /dev/null
@@ -0,0 +1,96 @@
+##############
+# Properties used by forrest.build.xml for building the website
+##############
+
+# Prints out a summary of Forrest settings for this project
+#forrest.echo=true 
+
+# Project name (used to name .war file)
+#project.name=my-project
+
+# Specifies name of Forrest skin to use
+#project.skin=forrest-site
+#project.skin=avalon-tigris
+#project.skin=krysalis-site
+
+
+##############
+# layout properties
+
+# Properties that must be set to override the default locations
+#
+# Parent properties must be set. This usually means uncommenting
+# project.content-dir if any other property using it is uncommented
+
+#project.status=status.xml
+#project.content-dir=src/documentation
+#project.conf-dir=${project.content-dir}/conf
+#project.sitemap=${project.content-dir}/sitemap.xmap
+#project.xdocs-dir=${project.content-dir}/content/xdocs
+#project.stylesheets-dir=${project.content-dir}/resources/stylesheets
+#project.images-dir=${project.content-dir}/resources/images
+#project.schema-dir=${project.content-dir}/resources/schema
+#project.skins-dir=${project.content-dir}/skins
+#project.skinconf=${project.content-dir}/skinconf.xml
+#project.lib-dir=${project.content-dir}/lib
+#project.classes-dir=${project.content-dir}/classes
+
+
+##############
+# Cocoon catalog entity resolver properties
+
+# A local catalog to supplement the default Forrest catalog
+#project.catalog=${project.schema-dir}/catalog
+
+# The verbosity level for the entity resolver (1..10)
+#forrest.catalog.verbosity=1
+
+
+##############
+# validation properties
+
+# These props determine if validation is performed at all
+# Values are inherited unless overridden.
+# Eg, if forrest.validate=false, then all others are false unless set to true.
+#forrest.validate=true
+#forrest.validate.xdocs=${forrest.validate}
+#forrest.validate.skinconf=${forrest.validate}
+#forrest.validate.sitemap=${forrest.validate}
+#forrest.validate.stylesheets=${forrest.validate}
+#forrest.validate.skins=${forrest.validate}
+#forrest.validate.skins.stylesheets=${forrest.validate.skins}
+
+
+# Key:
+# *.failonerror=(true|false)    stop when an XML file is invalid
+# *.includes=(pattern)         Comma-separated list of path patterns to validate
+# *.excludes=(pattern)         Comma-separated list of path patterns to not validate
+
+#forrest.validate.failonerror=true
+#forrest.validate.includes=**/*
+#forrest.validate.excludes=
+#
+#forrest.validate.xdocs.failonerror=${forrest.validate.failonerror}
+#
+#forrest.validate.xdocs.includes=**/*.x*
+#forrest.validate.xdocs.excludes=site.xml
+#
+#forrest.validate.skinconf.includes=${skinconf-file}
+#forrest.validate.skinconf.excludes=
+#forrest.validate.skinconf.failonerror=${forrest.validate.failonerror}
+#
+#forrest.validate.sitemap.includes=${sitemap-file}
+#forrest.validate.sitemap.excludes=
+#forrest.validate.sitemap.failonerror=${forrest.validate.failonerror}
+#
+#forrest.validate.stylesheets.includes=**/*.xsl
+#forrest.validate.stylesheets.excludes=
+#forrest.validate.stylesheets.failonerror=${forrest.validate.failonerror}
+#
+#forrest.validate.skins.includes=**/*
+#forrest.validate.skins.excludes=**/*.xsl
+#forrest.validate.skins.failonerror=${forrest.validate.failonerror}
+#
+#forrest.validate.skins.stylesheets.includes=**/*.xsl
+#forrest.validate.skins.stylesheets.excludes=
+#forrest.validate.skins.stylesheets.failonerror=${forrest.validate.skins.failonerror}
diff --git a/gump.xml b/gump.xml
new file mode 100644 (file)
index 0000000..4e11735
--- /dev/null
+++ b/gump.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<module name="jakarta-poi">
+    <description>POI</description>
+    <url href="http://jakarta.apache.org/poi/">
+    </url>
+    <cvs module="jakarta-poi" repository="jakarta">
+    </cvs>
+    <project name="jakarta-poi">
+        <ant buildfile="build.xml" target="dist">
+        </ant>
+        <package>org.apache.poi</package>
+        <depend project="commons-logging"/>
+        <depend project="commons-beanutils"/>
+        <depend project="commons-collections"/>
+        <depend project="commons-lang"/>
+        <depend project="junit"/>
+        <depend project="xml-xerces"/>
+        <work nested="build/classes"/>
+        <work nested="build/contrib-classes"/>
+        <work nested="build/scratchpad-classes"/>
+        <home nested="build/dist"/>
+        <jar name="build/dist/poi-1.10.0-dev-@@DATE@@.jar"/>
+        <jar name="build/dist/poi-contrib-1.10.0-dev-@@DATE@@.jar"/>
+        <jar name="build/dist/poi-scratchpad-1.10.0-dev-@@DATE@@.jar"/>
+        <javadoc module="jakarta-poi" nested="build/tmp/site/build/site/apidocs"/>
+
+        <nag to="poi-dev@jakarta.apache.org"
+            from="&quot;Gump :-(&quot; &lt;gump@jakarta.apache.org&gt;"/>
+    </project>
+</module>
\ No newline at end of file
diff --git a/index.html b/index.html
deleted file mode 100644 (file)
index 39e0a14..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-<html>
-  <head>
-    <title>Apache Jakarta POI</title>
-    <style type="text/css">
-
-body                    { color: #000000;
-                          background-color: #ffffff; }
-
-a:active                { color: #ff0000; }
-a:visited               { color: #551a8b; }
-a:link                  { color: #0000bb; }
-a.title { font-weight: bold; font-size: 110%; }
-
-h1, h2, h3, h4, h5, h6  { font-family: avantgarde, sans-serif;
-                          font-weight: bold }
-h1                      { font-size: 180% }
-h2                      { font-size: 150% }
-h3, h4                  { font-size: 120% }
-
-      ul { margin-left: 1em; padding: 0pt; border: 0pt; }
-    </style>
-  </head>
-  <body>
-       <table align="center" height="40" width="100%" cellpadding="0" cellspacing="2">
-       <tr>
-         <td><img src="src/documentation/images/group-logo.gif"/></td> 
-         <td align="center" width="100%"></td>
-         <td><img src="src/documentation/images/poi-logo.png"/></td>
-       </tr>
-       </table>
-        <hr hr="hr"/>
-    <div align="center" class="titlepage">
-      <h1>Apache Jakarta POI</h1>
-
-      <p>
-       <strong>Version 1.5-dev</strong>
-       <br br="br"/>
-       <strong><script language="JavaScript">
-
-<!-- Begin
-var m = document.lastModified; 
-var p = m.length-8; 
-document.write(m.substring(p, 0)); 
-// End -->
-
-</script></strong>
-      </p>
-    </div>
-
-    <table align="center">
-      <tbody>
-      <tr><td>
-         <ul>
-           <li> <a href="status.xml" class="title">status.xml</a>
-             <br br="br"/>(status of the project and community)</li>
-
-           <li> <a href="module.xml" class="title">module.xml</a>
-             <br br="br"/>(extended Gump descriptor of the software module)</li>
-
-           <li> <a href="build.xml" class="title">build.xml</a>
-             <br br="br"/>(main build file)</li>
-
-           <li> <a href="layout.xml" class="title">layout.xml</a>
-             <br br="br"/>(layout of the project directories)</li>
-
-           <li> <a href="properties.xml" class="title">properties.xml</a>
-             <br br="br"/>(properties used for building the project)</li>
-         </ul>
-         </td>
-         <td>
-         <ul>
-           <li> <a href="build/docs/index.html" class="title">Documentation</a>
-             <br br="br"/>(run "build docs" first)</li>
-
-           <li> <a href="build/docs/javadocs/index.html" class="title">Javadocs</a>
-             <br br="br"/>(run "build javadocs" first)</li>
-
-           <li> <a href="build/docs/tests/junit/index.html" class="title">Unit test results</a>
-             <br br="br"/>(run "build test" first)</li>
-
-           <li> <a href="build/docs/metrics/jdepend/index.html" class="title">Code metrics</a>
-             <br br="br"/>(run "build metrics" first)</li>
-
-           <li> <a href="build.number" class="title">Local build number</a>
-             <br br="br"/>(how many builds have been done locally)</li>
-             
-         </ul>
-         </td>
-       </tr>
-        <tr>
-          <td>
-          <br/>
-          <ul>
-            <li> <a href="http://jakarta.apache.org/poi/" class="title"
-                >Project Site</a>
-              <br br="br"/>(online)</li>
-          </ul>
-          </td>
-          <td>
-          <br/>
-          <ul>
-            <li> <a href="http://www.krysalis.org/centipede/" class="title"
-                >Krysalis Centipede build system site</a>
-              <br br="br"/>(online)</li>
-          </ul>
-          </td>
-        </tr>
-      </tbody>
-    </table>
-    
-    <br/>
-    
-    <address>
-      <hr hr="hr"/>
-       Copyright &#x00A9;2002 Apache Software Foundation. All Rights Reserved.
-    </address>
-
-  </body>
-</html>
diff --git a/jdepend.xsl b/jdepend.xsl
new file mode 100644 (file)
index 0000000..4743465
--- /dev/null
@@ -0,0 +1,312 @@
+<xsl:stylesheet        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!--
+ The Apache Software License, Version 1.1
+
+ Copyright (c) 2002 The Apache Software Foundation.  All rights
+ reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+ 3. The end-user documentation included with the redistribution, if
+    any, must include the following acknowlegement:
+       "This product includes software developed by the
+        Apache Software Foundation (http://www.apache.org/)."
+    Alternately, this acknowlegement may appear in the software itself,
+    if and wherever such third-party acknowlegements normally appear.
+
+ 4. The names "The Jakarta Project", "Ant", and "Apache Software
+    Foundation" must not be used to endorse or promote products derived
+    from this software without prior written permission. For written
+    permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache"
+    nor may "Apache" appear in their names without prior written
+    permission of the Apache Group.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+ ====================================================================
+
+ This software consists of voluntary contributions made by many
+ individuals on behalf of the Apache Software Foundation.  For more
+ information on the Apache Software Foundation, please see
+ <http://www.apache.org/>.
+ -->
+
+<xsl:output method="html" indent="yes"/>
+
+<xsl:template match="JDepend">
+       <html>
+       <head>
+               <title>JDepend Analysis</title>
+               
+       <style type="text/css">
+         body {
+               font:normal 68% verdana,arial,helvetica;
+               color:#000000;
+         }
+         table tr td, tr th {
+                 font-size: 68%;
+         }
+         table.details tr th{
+               font-weight: bold;
+               text-align:left;
+               background:#a6caf0;
+         }
+         table.details tr td{
+               background:#eeeee0;
+         }
+         
+         p {
+               line-height:1.5em;
+               margin-top:0.5em; margin-bottom:1.0em;
+               margin-left:2em;
+               margin-right:2em;
+         }
+         h1 {
+               margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+         }
+         h2 {
+               margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+         }
+         h3 {
+               margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+         }
+         h4 {
+               margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+         }
+         h5 {
+               margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+         }
+         h6 {
+               margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+         }
+         .Error {
+               font-weight:bold; color:red;
+         }
+         .Failure {
+               font-weight:bold; color:purple;
+         }
+         .Properties {
+               text-align:right;
+         }
+         </style>
+               
+               
+       </head>
+       <body>
+       <!--h1>JDepend Report</h1>
+       <ul>
+       <xsl:for-each select="./Packages/Package">
+                               <xsl:sort select="@name"/>
+               <li><xsl:value-of select="@name"/></li>
+       </xsl:for-each>
+       </ul-->
+       
+       <h1><a name="top">JDepend Analysis</a></h1>
+       <p align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</p>
+       <hr size="2" />
+       
+       <table width="100%"><tr><td>
+       <a name="NVsummary"><h2>Summary</h2></a>
+       </td><td align="right">
+       [<a href="#NVsummary">summary</a>]
+       [<a href="#NVpackages">packages</a>]
+       [<a href="#NVcycles">cycles</a>]
+       [<a href="#NVexplanations">explanations</a>]
+       </td></tr></table>
+       
+       <table width="100%" class="details">
+               <tr>
+                       <th>Package</th>
+                       <th>Total Classes</th>
+                       <th><a href="#EXnumber">Abstract Classes</a></th>
+                       <th><a href="#EXnumber">Concrete Classes</a></th>
+                       <th><a href="#EXafferent">Afferent Couplings</a></th>
+                       <th><a href="#EXefferent">Efferent Couplings</a></th>
+                       <th><a href="#EXabstractness">Abstractness</a></th>
+                       <th><a href="#EXinstability">Instability</a></th>
+                       <th><a href="#EXdistance">Distance</a></th>
+                       
+               </tr>
+       <xsl:for-each select="./Packages/Package">
+               <xsl:if test="count(error) = 0">
+                       <tr>
+                               <td align="left">
+                                       <a>
+                                       <xsl:attribute name="href">#PK<xsl:value-of select="@name"/>
+                                       </xsl:attribute>
+                                       <xsl:value-of select="@name"/>
+                                       </a>
+                               </td>
+                               <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
+                               <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
+                               <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
+                               <td align="right"><xsl:value-of select="Stats/Ca"/></td>
+                               <td align="right"><xsl:value-of select="Stats/Ce"/></td>
+                               <td align="right"><xsl:value-of select="Stats/A"/></td>
+                               <td align="right"><xsl:value-of select="Stats/I"/></td>
+                               <td align="right"><xsl:value-of select="Stats/D"/></td>
+                               
+
+                       </tr>
+               </xsl:if>
+       </xsl:for-each>
+       <xsl:for-each select="./Packages/Package">
+               <xsl:if test="count(error) &gt; 0">
+                       <tr>
+                               <td align="left">
+                                       <xsl:value-of select="@name"/>
+                               </td>
+                               <td align="left" colspan="8"><xsl:value-of select="error"/></td>
+                       </tr>
+               </xsl:if>
+       </xsl:for-each>
+       </table>
+       
+       <table width="100%"><tr><td>
+       <a name="NVpackages"><h2>Packages</h2></a>
+       </td><td align="right">
+       [<a href="#NVsummary">summary</a>]
+       [<a href="#NVpackages">packages</a>]
+       [<a href="#NVcycles">cycles</a>]
+       [<a href="#NVexplanations">explanations</a>]
+       </td></tr></table>
+       
+       <xsl:for-each select="./Packages/Package">
+               <xsl:if test="count(error) = 0">
+                       <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
+                       <xsl:value-of select="@name"/></a></h3>
+                       
+                       <table width="100%"><tr>
+                               <td><a href="#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
+                               <td><a href="#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
+                               <td><a href="#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
+                               <td><a href="#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
+                               <td><a href="#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
+                       </tr></table>
+                       
+                       <table width="100%" class="details">
+                               <tr>
+                                       <th>Abstract Classes</th>
+                                       <th>Concrete Classes</th>
+                                       <th>Used by Packages</th>
+                                       <th>Uses Packages</th>
+                               </tr>
+                               <tr>
+                                       <td valign="top" width="25%">
+                                       <xsl:if test="count(AbstractClasses/Class)=0">
+                                                       <i>None</i>
+                                               </xsl:if>
+                                               <xsl:for-each select="AbstractClasses/Class">
+                                                       <xsl:value-of select="node()"/><br/>
+                                               </xsl:for-each>
+                                       </td>
+                                       <td valign="top" width="25%">
+                                               <xsl:if test="count(ConcreteClasses/Class)=0">
+                                                       <i>None</i>
+                                               </xsl:if>
+                                               <xsl:for-each select="ConcreteClasses/Class">
+                                                       <xsl:value-of select="node()"/><br/>
+                                               </xsl:for-each>
+                                       </td>
+                                       <td valign="top" width="25%">
+                                               <xsl:if test="count(UsedBy/Package)=0">
+                                                       <i>None</i>
+                                               </xsl:if>
+                                               <xsl:for-each select="UsedBy/Package">
+                                                       <a>
+                                                               <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
+                                                               <xsl:value-of select="node()"/>
+                                                       </a><br/>
+                                               </xsl:for-each>
+                                       </td>
+                                       <td valign="top" width="25%">
+                                               <xsl:if test="count(DependsUpon/Package)=0">
+                                                       <i>None</i>
+                                               </xsl:if>
+                                               <xsl:for-each select="DependsUpon/Package">
+                                                       <a>
+                                                               <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
+                                                               <xsl:value-of select="node()"/>
+                                                       </a><br/>
+                                               </xsl:for-each>
+                                       </td>
+                               </tr>
+                       </table>
+               </xsl:if>
+       </xsl:for-each>
+       
+       <table width="100%"><tr><td>
+       <a name="NVcycles"><h2>Cycles</h2></a>
+       </td><td align="right">
+       [<a href="#NVsummary">summary</a>]
+       [<a href="#NVpackages">packages</a>]
+       [<a href="#NVcycles">cycles</a>]
+       [<a href="#NVexplanations">explanations</a>]
+       </td></tr></table>
+       
+       <xsl:if test="count(Cycles/Package) = 0">
+               <p>There are no cyclic dependancies.</p>
+       </xsl:if>
+       <xsl:for-each select="Cycles/Package">
+               <h3><xsl:value-of select="@Name"/></h3><p>
+               <xsl:for-each select="Package">
+                       <xsl:value-of select="."/><br/>
+               </xsl:for-each></p>
+       </xsl:for-each>
+       
+       <table width="100%"><tr><td>
+       <a name="NVexplanations"><h2>Explanations</h2></a>
+       </td><td align="right">
+       [<a href="#NVsummary">summary</a>]
+       [<a href="#NVpackages">packages</a>]
+       [<a href="#NVcycles">cycles</a>]
+       [<a href="#NVexplanations">explanations</a>]
+       </td></tr></table>
+       
+       <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
+       
+       <h3><a name="EXnumber">Number of Classes</a></h3>
+               <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
+       <h3><a name="EXafferent">Afferent Couplings</a></h3>
+               <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
+       <h3><a name="EXefferent">Efferent Couplings</a></h3>
+               <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
+       <h3><a name="EXabstractness">Abstractness</a></h3> 
+               <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
+               <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
+       <h3><a name="EXinstability">Instability</a></h3>
+               <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
+               <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
+       <h3><a name="EXdistance">Distance</a></h3>
+               <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
+               <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
+               <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
+       
+       </body>
+       </html>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/layout.xml b/layout.xml
deleted file mode 100644 (file)
index 71e5f57..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="tools/antipede/resources/stylesheets/layout.xsl"?>
-<layout dir=".">
-  <legal dir="./legal"/>     
-  <library dir="./lib">
-   <endorsed dir="./lib/endorsed"/>
-   <core dir="./lib/core"/>
-   <optional dir="./lib/optional"/>
-  </library>
-  <source dir="./src">
-   <targets dir="./src/targets"/>
-   <java dir="./src/java"/>
-   <test dir="./src/testcases"/>
-   <documentation dir="./src/documentation">
-     <content dir="./src/documentation/xdocs">
-      <xdocs dir="./src/documentation/xdocs"/>
-     </content>  
-     <resources dir="./src/documentation/images">
-      <images dir="./src/documentation/images"/>
-     </resources>  
-   </documentation>
-   <scratchpad dir="./src/scratchpad">
-     <targets dir="./src/scratchpad/targets"/>   
-     <java dir="./src/scratchpad/src"/>
-     <library dir="./src/scratchpad/lib"/>
-   </scratchpad>  
-   <contributions dir="./src/contrib">
-     <targets dir="./src/contrib/targets"/>   
-     <java dir="./src/contrib/src"/>
-     <library dir="./src/contrib/lib"/>
-   </contributions>      
-   <examples dir="./src/examples">
-     <targets dir="./src/examples/targets"/>
-     <java dir="./src/examples/src"/>
-     <library dir="./src/examples/lib"/>
-   </examples>           
-  </source>   
-  <build dir="./build">
-   <java dir="./build/java"/>
-   <classes dir="./build/classes"/>
-   <test dir="./build/testcases"/>
-   <work dir="./build/work"/>
-   <documentation dir="./build/docs">
-     <javadocs dir="./build/docs/javadocs"/>
-     <test dir="./build/docs/tests"/>
-     <metrics dir="./build/docs/metrics"/>
-   </documentation>
-   <scratchpad dir="./build/scratchpad">
-     <java dir="./build/scratchpad/java"/>
-     <classes dir="./build/scratchpad/classes"/>          
-     <library dir="./build/scratchpad/lib"/>     
-   </scratchpad>  
-   <contributions dir="./build/contrib">
-     <java dir="./build/contrib/java"/>
-     <classes dir="./build/contrib/classes"/>
-     <library dir="./build/contrib/lib"/>
-   </contributions>      
-   <examples dir="./build/examples">
-     <java dir="./build/examples/java"/>
-     <classes dir="./build/examples/classes"/>
-     <library dir="./build/examples/lib"/>
-   </examples>           
-  </build>   
-  <distributions dir="./dist">
-   <source dir="./dist/src"/>
-   <bin dir="./dist/bin">
-     <library dir="./dist/bin/lib">
-       <core dir="./dist/bin/lib"/>
-       <optional dir="./dist/bin/lib/optional"/>     
-     </library>
-     <documentation dir="./dist/bin/build/docs"/>
-     <info dir="./dist/bin"/>
-     <build dir="./dist/bin/build"/>
-     <legal dir="./dist/bin/legal"/>     
-   </bin>
-  </distributions>   
-</layout>
\ No newline at end of file
diff --git a/lib/.cvsignore b/lib/.cvsignore
new file mode 100644 (file)
index 0000000..d392f0e
--- /dev/null
@@ -0,0 +1 @@
+*.jar
diff --git a/lib/core/commons-logging-1.0.jar b/lib/core/commons-logging-1.0.jar
deleted file mode 100644 (file)
index b69fffb..0000000
Binary files a/lib/core/commons-logging-1.0.jar and /dev/null differ
diff --git a/lib/endorsed/xalan-2.2.0.jar b/lib/endorsed/xalan-2.2.0.jar
deleted file mode 100644 (file)
index 8dd6dca..0000000
Binary files a/lib/endorsed/xalan-2.2.0.jar and /dev/null differ
diff --git a/lib/endorsed/xerces-2.0.0.jar b/lib/endorsed/xerces-2.0.0.jar
deleted file mode 100644 (file)
index 28d3642..0000000
Binary files a/lib/endorsed/xerces-2.0.0.jar and /dev/null differ
diff --git a/lib/endorsed/xml-apis.jar b/lib/endorsed/xml-apis.jar
deleted file mode 100644 (file)
index 2c42757..0000000
Binary files a/lib/endorsed/xml-apis.jar and /dev/null differ
diff --git a/lib/optional/log4j-core.jar b/lib/optional/log4j-core.jar
deleted file mode 100644 (file)
index da6d8c2..0000000
Binary files a/lib/optional/log4j-core.jar and /dev/null differ
diff --git a/module.xml b/module.xml
deleted file mode 100644 (file)
index dd59ead..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="tools/antipede/resources/stylesheets/module.xsl"?>
-<?xml-stylesheet type="text/css" href="tools/antipede/resources/stylesheets/module.css"?>
-<module name="jakarta-poi">
-
-  <url href="http://jakarta.apache.org/poi/"/>
-  
-  <cvs repository="jakarta"/> 
-
-  <mailing-lists> 
-    <mailing-list user="developer" 
-                  mail="poi-dev@jakarta.apache.org" 
-                  subscribe="poi-dev-subscribe@jakarta.apache.org" 
-                  unsubscribe="poi-dev-unsubscribe@jakarta.apache.org"/>    
-  </mailing-lists>    
-   
-  <description>
-     The POI project consists of APIs for manipulating various file formats 
-     based upon Microsoft's OLE 2 Compound Document format using pure Java.
-  </description>
-
-  <detailed>
-     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.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. HSSF is our port of the 
-     Microsoft Excel 97(-2002) file format (BIFF8) to pure Java. 
-     It supports read and write capability. HDF is our port of the 
-     Microsoft Word 97 file format to pure Java. 
-     It supports read and write capability. This component is in the early 
-     stages of design. Jump in! 
-  </detailed>
-
-  <what>
-    <goal>just do it</goal>
-  </what>
-    
-  <why>
-    Why not?
-  </why>
-  
-  <vendor>Apache Software Foundation</vendor>
-
-  <licence>This software is released under the Apache Software License 1.1. 
-           For detailed legal and licensing issues, please read the LICENSE.* files
-           in the /legal directory.
-  </licence>
-  
-  <credits>
-    <credit>This software includes software developed by the Krysalis Project 
-            (http://www.krysalis.org/).
-    </credit>
-  </credits>
-
-  <project name="jakarta-poi">
-  
-     <version major="1"
-             minor="11"
-             fix  ="0"   
-             tag="dev"/> 
-
-    <package>org.apache.poi</package>
-    
-    <ant buildfile="centibuild.xml" basedir="." target="gump" vm="1.2">
-      <property name="ant.home" reference="home" project="krysalis-centipede"/>
-    </ant>
-        
-    <!-- Project jars POI *build* strictly depends on -->
-    <!-- needed for build -->
-
-    <depend project="xml-xerces"/>
-    <depend project="xml-xalan2"/>   
-    <depend project="jakarta-ant"/>
-    <depend project="jakarta-ant-embed-optional"/>  
-    <depend property="jxpath.jar" project="commons-jxpath"/>     
-
-    <depend project="ant-contrib"/>
-    <depend project="krysalis-ant-tasks"/>
-    
-    <depend project="krysalis-ruper"/>
-    <depend project="commons-vfs"/>
-    <depend project="commons-cli"/>
-    <depend project="jakarta-regexp"/>
-        
-    
-    <depend project="commons-jjar"/>
-
-    <depend project="junit"/>
-           
-    <!-- needed for POI -->
-    <depend project="commons-logging"/>
-            
-    <!-- Project jars POI build can use  -->    
-    <option project="jakarta-log4j"/>
-     
-    <!-- Work dirs to be included in classpath  -->          
-    <work nested="build/jakarta-poi/classes"/>
-    <work nested="build/jakarta-poi/junit/classes"/>
-    
-    <!-- Build home  -->        
-    <home nested="build/jakarta-poi"/>
-    
-    <!-- Source dirs with type  -->        
-    <code type="java/plain" dir="src/java"/>
-    <test type="test/junit" dir="src/testcases"/>
-    <documentation type="xml/forrest" dir="src/documentation"/>
-        
-    <!-- POI jars - the result of the build  -->        
-    <jar name="jakarta-poi.jar"            id="poi"/>
-    
-    <!-- POI Javadocs - location in the build dirs  -->         
-    <javadoc parent="build/jakarta-poi/docs/apidocs"/>
-    
-    <!-- Getting ready for automatic site updates
-    <deliver fromdir="build/jakarta-poi/docs" 
-             tosite="jakarta-apache-org"
-             todir="poi/" />    
-    -->         
-            
-    <nag to="poi-dev@jakarta.apache.org"
-         from="Gump :-( &lt;gump@jakarta.apache.org&gt;"/>
-         
-  </project>
-  
-
-</module>
diff --git a/properties.xml b/properties.xml
deleted file mode 100644 (file)
index 445dba9..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="tools/antipede/resources/stylesheets/properties.xsl"?>
-<!-- Build properties - these override any property specified in the build -->
-<properties>
-
-   <!-- Properties of the build -->
-   <build>
-      <!-- What to tell the compiler -->
-      <compiler
-       emacs="on"
-       warnings="true"
-       pedantic="false"
-       depend="true"
-       fulldepend="true"
-       debug="on"
-       optimize="off"
-       deprecation="on"
-       nowarn="off"
-       type="classic"
-       vm="1.2" />
-   </build>
-
-       <forrest>
-               <cent>
-                       <project skin="forrest-site"/>
-                       <project content-dir="src/documentation"/>
-                       <project xdocs-dir="src/documentation/xdocs"/>
-                       <project images-dir="src/documentation/images"/>                        
-               </cent>
-       </forrest>
-       <java>
-               <cent>
-                       <javadoc overview="src/java/overview.html" />
-   <!--    <javadocs group="POIFS org.apache.poi.poifs*,HSSF org.apache.poi.hssf*,HPSF org.apache.poi.hpsf*,">
-                <altenative views="uml">
-                  <uml prefix="uml-" suffix="" extension="html"/>
-                </altenative>
-              </javadocs>
-              -->
-               </cent>
-       </java>
-       <junit>
-          <cent>
-             <extra>
-              <sysproperty key="UTIL.testdata.path"
-                              value="./src/testcases/org/apache/poi/util/data"/>
-              <sysproperty key="HSSF.testdata.path"
-                           value="./src/testcases/org/apache/poi/hssf/data"/>
-              <sysproperty key="HPSF.testdata.path"
-                           value="./src/testcases/org/apache/poi/hpsf/data"/>
-             </extra>                       
-               </cent>                   
-       </junit>
-       
-   <!-- deprecated properties -->       
-   <centipede>
-      <tools>
-         <cents repository="http://krysalis.org/jars/">
-            <!-- not currently used by POI
-                 <antidote/>   
-                 <xmldoclet/>    -->      
-            <centipede>
-              <javadocs group="POIFS org.apache.poi.poifs*,HSSF org.apache.poi.hssf*,HPSF org.apache.poi.hpsf*,">
-                <altenative views="uml">
-                  <uml prefix="uml-" suffix="" extension="html"/>
-                </altenative>
-              </javadocs>
-            </centipede>
-            <junit/>
-            <jdepend/>
-            <checkstyle/>
-            <javasrc/>
-            <umldoclet/>
-            <forrest>
-              <!-- available skins:
-
-                   basic
-                   jakarta-site
-                   avalon-site
-                   scarab-site
-                   xml-apache-site
-                   forrest-site  (Work In Progress)
-               -->
-               <skin
-                name="avalon-site">
-                  <navlinks>
-                     <link1
-                      href="http://www.apache.org/">apache</link1>
-
-                     <link2
-                      href="http://jakarta.apache.org/">jakarta</link2>
-
-                     <link3
-                      href="http://jakarta.apache.org/poi/">POI</link3>
-                  </navlinks>
-
-                  <logo>
-                     <group
-                      src="images/group-logo.gif"
-                      href="http://jakarta.apache.org" />
-
-                     <project
-                      src="images/poi-logo.png"
-                      href="http://jakarta.apache.org/poi/" />
-                  </logo>
-               </skin>
-            </forrest>
-         </cents>
-      </tools>
-   </centipede>
-</properties>
-
diff --git a/src/contrib/lib/.cvsignore b/src/contrib/lib/.cvsignore
new file mode 100644 (file)
index 0000000..d392f0e
--- /dev/null
@@ -0,0 +1 @@
+*.jar
diff --git a/src/contrib/lib/commons-beanutils.jar b/src/contrib/lib/commons-beanutils.jar
deleted file mode 100644 (file)
index 15e40d9..0000000
Binary files a/src/contrib/lib/commons-beanutils.jar and /dev/null differ
diff --git a/src/contrib/lib/commons-collections.jar b/src/contrib/lib/commons-collections.jar
deleted file mode 100644 (file)
index 6f2c191..0000000
Binary files a/src/contrib/lib/commons-collections.jar and /dev/null differ
diff --git a/src/contrib/lib/commons-lang-1.0-b1.jar b/src/contrib/lib/commons-lang-1.0-b1.jar
deleted file mode 100644 (file)
index 069d3c2..0000000
Binary files a/src/contrib/lib/commons-lang-1.0-b1.jar and /dev/null differ
diff --git a/src/contrib/lib/placeholder b/src/contrib/lib/placeholder
deleted file mode 100644 (file)
index 3c05700..0000000
+++ /dev/null
@@ -1 +0,0 @@
-CVS happy
diff --git a/src/contrib/targets/poibrowser/xbuild.xml b/src/contrib/targets/poibrowser/xbuild.xml
deleted file mode 100644 (file)
index 1654daf..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<project default="poibrowser" basedir="../../" name="POIBrowser build">
-
-  <property name="build.root" value="build"/>
-
-  <!-- =================================================================== -->
-  <!-- GUI Run Target                                                      -->
-  <!-- =================================================================== -->
-  <target name="poibrowser">
-
-    <property name="contrib.input.selection" value=""/>
-    <centipede-user-input name="contrib.input.selection">Please select a file to view </centipede-user-input>
-
-    <java classname="org.apache.poi.contrib.poibrowser.POIBrowser" fork="true">
-         <arg value="${contrib.input.selection}"/>
-     <classpath>
-       <pathelement path="${xlayout.build.contributions.classes.dir}"/>
-       <pathelement path="${xlayout.build.classes.dir}"/>
-       <path>
-          <fileset dir="${xlayout.library.dir}" casesensitive="yes"> 
-           <patternset>
-             <include name="*/*.jar"/>
-             <include name="*/*.zip"/>
-           </patternset>
-         </fileset>  
-          <fileset dir="${xlayout.source.contributions.library.dir}" casesensitive="yes"> 
-           <patternset>
-             <include name="*.jar"/>
-             <include name="*.zip"/>
-           </patternset>
-         </fileset>                
-       </path> 
-     </classpath>
-    </java>       
-  </target>
-
-
-</project>
diff --git a/src/contrib/targets/sheetviewer/xbuild.xml b/src/contrib/targets/sheetviewer/xbuild.xml
deleted file mode 100644 (file)
index 32edc03..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<project default="sheetviewer" basedir="../../" name="Sheet Viewer build">
-
-  <property name="build.root" value="build"/>
-
-  <!-- =================================================================== -->
-  <!-- GUI Run Target                                                      -->
-  <!-- =================================================================== -->
-  <target name="sheetviewer">
-
-    <property name="contrib.input.selection" value=""/>
-    <centipede-user-input name="contrib.input.selection">Please select a file/url to view </centipede-user-input>
-
-    <java classname="org.apache.poi.hssf.contrib.view.SViewer" fork="true">
-         <arg value="${contrib.input.selection}"/>
-     <classpath>
-       <pathelement path="${xlayout.build.contributions.classes.dir}"/>
-       <pathelement path="${xlayout.build.classes.dir}"/>
-       <path>
-          <fileset dir="${xlayout.library.dir}" casesensitive="yes"> 
-           <patternset>
-             <include name="*/*.jar"/>
-             <include name="*/*.zip"/>
-           </patternset>
-         </fileset>  
-          <fileset dir="${xlayout.source.contributions.library.dir}" casesensitive="yes"> 
-           <patternset>
-             <include name="*.jar"/>
-             <include name="*.zip"/>
-           </patternset>
-         </fileset>                
-       </path> 
-     </classpath>
-    </java>       
-  </target>
-
-
-</project>
diff --git a/src/contrib/testcases/dummy.txt b/src/contrib/testcases/dummy.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/documentation/README.txt b/src/documentation/README.txt
new file mode 100644 (file)
index 0000000..4545b58
--- /dev/null
@@ -0,0 +1,10 @@
+This is the base documentation directory. It usually contains two files:
+
+skinconf.xml     # This file customizes Forrest for your project. In it, you
+                 # tell forrest the project name, logo, copyright info, etc
+
+sitemap.xmap     # Optional. This sitemap overrides the default one bundled
+                 # with Forrest. Typically, one would copy a sitemap from
+                 # xml-forrest/src/resources/conf/sitemap.xmap, and customize
+                 # it.
+
diff --git a/src/documentation/content/xdocs/3rdparty.xml b/src/documentation/content/xdocs/3rdparty.xml
new file mode 100644 (file)
index 0000000..e0183b8
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
+
+<document>
+ <header>
+  <title>Third Party Contributions</title>
+  <authors>
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+  </authors>
+ </header>
+
+ <body>
+
+ <section><title>How to Contribute</title>
+  <p>
+   See <link href="contrib.xml">How to contribute to Poi</link>.
+  </p>
+
+ </section>
+
+ <section><title>Contributed Components</title>
+  <p>
+   These are not necessarily deemed to be high enough quality to be included in the
+   core distribution, but they have been tested under <link href="contrib.xml">
+   several key environments</link>, they are provided under the same license
+   as Poi, and they are included in the POI distribution under the
+   <code>contrib/</code> directory.
+  </p>
+
+  <p>
+   <strong>None as yet!</strong> - although you can expect that some of the links
+   listed below will eventually migrate to the "contributed components" level, and
+   then maybe even into the main distribution.
+  </p>
+ </section>
+
+ <section><title>Patch Queue</title>
+  <p><link href="patches.html">Submissions of modifications</link>
+   to Poi which are awaiting review. Anyone can
+   comment on them on the dev mailing list - code reviewers are needed!
+   <strong>Use these at your own risk</strong> - although Poi has no guarantee
+   either, these patches have not been reviewed, let alone accepted.
+  </p>
+ </section>
+
+ <section><title>Other Extensions</title>
+  <p>The other extensions listed here are <strong>not endorsed</strong> by the Poi
+   project either - they are provided as a convenience only. They may or may not work,
+   they may or may not be open source, etc.
+  </p>
+
+  <p>To have a link added to this table, see <link href="contrib.xml">How to contribute
+   to POI</link>.</p>
+
+  <table>
+   <tr>
+    <th>Name and Link</th>
+    <th>Type</th>
+    <th>Description</th>
+    <th>Status</th>
+    <th>Licensing</th>
+    <th>Contact</th>
+   </tr>
+  </table>
+
+ </section>
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/book.xml b/src/documentation/content/xdocs/book.xml
new file mode 100644 (file)
index 0000000..ed032c9
--- /dev/null
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "./dtd/book-cocoon-v10.dtd">
+
+<book software="Poi"
+    title="Poi Project Documentation"
+    copyright="@year@ Poi Project"
+    xmlns:xlink="http://www.w3.org/1999/xlink">
+
+    <menu label="Community">
+        <menu-item label="News" href="news.html"/>
+        <menu-item label="Mirrors" href="mirrors.html"/>
+        <menu-item label="Changes" href="changes.html"/>
+        <menu-item label="To Do" href="todo.html"/>
+        <menu-item label="Get Involved" href="getinvolved/index.html"/>
+        <menu-item label="Mailing Lists" href="http://jakarta.apache.org/site/mail.html"/>
+        <menu-item label="Vision" href="plan/POI20Vision.html"/>
+        <menu-item label="History and Future" href="historyandfuture.html"/>
+        <menu-item label="Who We Are" href="who.html"/>
+        <menu-item label="Resolutions" href="resolutions/index.html"/>
+    </menu>
+
+    <menu label="Marketing">
+        <menu-item label="Case Studies" href="casestudies.html"/>
+    </menu>
+
+    <menu label="Project">
+        <menu-item label="Overview" href="overview.html"/>
+        <menu-item label="POIFS" href="poifs/index.html"/>
+        <menu-item label="HSSF" href="hssf/index.html"/>
+        <menu-item label="HDF" href="hdf/index.html"/>
+        <menu-item label="HPSF" href="hpsf/index.html"/>
+        <menu-item label="POI-Utils" href="utils/index.html"/>
+        <menu-item label="Download" href="http://jakarta.apache.org/builds/jakarta-poi/"/>
+    </menu>
+
+    <menu label="Docs">
+        <menu-item label="Javadocs" href="ext:javadoc"/>
+        <menu-item label="FAQ" href="faq.html"/>
+        <menu-item label="References" href="references/index.html"/>
+    </menu>
+
+    <menu label="Translations">
+        <menu-item label="Index" href="trans/index.html"/>
+        <menu-item label="Guidelines" href="trans/guidelines.html"/>
+        <menu-item label="German" href="trans/de/index.html"/>
+        <menu-item label="Spanish" href="trans/es/index.html"/>
+        <menu-item label="Japanese" href="http://www.terra-intl.com/jakarta/poi/"/>
+    </menu>
+
+    <menu label="Code">
+        <!--    <menu-item label="Source Code" href="http://jakarta.apache.org/poi/javadocs/javasrc/"/>       -->
+        <menu-item label="CVS" href="http://jakarta.apache.org/site/cvsindex.html"/>
+        <menu-item label="CVS Changelog" href="changelog.html"/>
+        <menu-item label="Top Voted Bugs" href="http://nagoya.apache.org/bugzilla/buglist.cgi?votes=1&amp;product=POI&amp;order=bugs.votes"/>
+        <menu-item label="Bug Database" href="http://nagoya.apache.org/bugzilla/buglist.cgi?product=POI"/>
+        <menu-item label="Patches" href="http://nagoya.apache.org/bugzilla/buglist.cgi?product=POI&amp;short_desc=%5BPATCH%5D&amp;short_desc_type=allwordssubstr"/>
+
+        <menu-item label="Junit Test Results" href="ext:junit"/>
+        <menu-item label="Dependency Metrics" href="ext:jdepend"/>
+        <!--    <menu-item label="Checkstyle Metrics" href="http://jakarta.apache.org/poi/metrics/checkstyle/"/> -->
+    </menu>
+
+</book>
diff --git a/src/documentation/content/xdocs/casestudies.xml b/src/documentation/content/xdocs/casestudies.xml
new file mode 100644 (file)
index 0000000..f03d701
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title>Jakarta POI - Case Studies</title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+      <person id="CR" name="Cameron Riley" email="crileyNO@SPAMekmail.com"/>
+    </authors>
+  </header>
+
+  <body>
+    <section><title>Introduction</title>
+       <p>
+          A number of people are using POI for a variety of purposes.  As with
+          any new API or technology, the first question people generally ask
+          is not "how can I" but rather "Who else is doing what I'm about to
+          do?"  This is understandable with the abysmal success rate in the
+          software business.  These case statements are meant to help create
+          confidence and understanding.
+       </p>
+    </section>
+    <section><title>Submitting a Case Study</title>
+       <p>
+          We are actively seeking case studies for this page (after all it
+          just started).  Andy Oliver (acoliver at apache dot org) has
+          agreed to have a few T-Shirts printed with the POI logo (once its
+          chosen) for the first
+          few best submissions.  To submit a case study, either
+          <link href="http://jakarta.apache.org/poi/getinvolved/index.html">
+          submit a patch for this page</link> (preferred) or email it to the
+          <link href="http://jakarta.apache.org/site/mail.html">mailing list
+          </link>.
+       </p>
+    </section>
+    <section><title>Case Studies</title>
+      <section><title>Bank of Lithuania</title>
+        <p>
+          The <link href="http://www.lbank.lt">Bank of Lithuania</link>
+          reports financial statistical data to Excel format using the
+          <link href="http://jakarta.apache.org/poi">Jakarta POI</link>
+          project's <link href="http://jakarta.apache.org/poi/hssf">
+          HSSF</link> API.  The system is based on Oracle JServer and
+          utilizes a Java stored procedure that outputs to XLS format
+          using the HSSF API.  - Arian Lashkov (alaskov at lbank.lt)
+        </p>
+      </section>
+      <section><title>Bit Tracker by Tracker Inc., and ThinkVirtual</title>
+        <p>
+Bit Tracker (http://www.bittracker.com) is the world's first and only web-based drill bit tracking system to manage your company's critical bit information and use that data to its full potential. It manages all bit related data, including their usage, locations, how they were used, and results such as rate of penetration and dull grade after use.  This data needs to be available in Excel format for backwards compatibility and other uses in the industry.  After using CSV and HTML formats, we needed something better for creating the spreadsheets and POI is the answer.  It works great and was easy to implement.  Kudos to the POI team.
+        </p>
+        <p>
+           Travis Reeder (travis at thinkvirtual dot com)
+        </p>
+      </section>
+      <section><title>Edwards And Kelcey Technology</title>
+      <p>
+      Edwards and Kelcey Technology (http://www.ekcorp.com/) developed a
+      Facility
+      Managament and Maintenance System for the Telecommunications industry
+      based
+      on Turbine and Velocity. Originally the invoicing was done with a simple
+      CVS
+      sheet which was then marked up by accounts and customized for each client.
+      As growth has been consistent with the application, the requirement for
+      invoices that need not be touched by hand increased. POI provided the
+      solution to this issue, integrating easily and transparently into the
+      system. POI HSSF was used to create the invoices directly from the server
+      in
+      Excel 97 format and now services over 150 unique invoices per month.
+      </p>
+      <p>
+      Cameron Riley (crileyNO@ SPAMekmail.com)
+      </p>
+     </section>
+     <section><title>ClickFind</title>
+        <p>
+          <link href="http://www.clickfind.com">ClickFind Inc.</link> used the POI
+          projects HSSF API to provide their medical
+          research clients with an Excel export from their electronic data
+          collection web service Data Collector 3.0.  The POI team's assistance
+          allowed ClickFind to give their clients a data format that requires less
+          technical expertise than the XML format used by the Data Collector
+          application.  This was important to ClickFind as many of their current
+          and potential clients are already using Excel in their day-to-day
+          operations and in established procedures for handling their generated
+          clinical data.  - Jared Walker (jared.walker at clickfind.com)
+        </p>
+      </section>
+    </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml
new file mode 100644 (file)
index 0000000..4e4c9f4
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version="1.0"?>
+<!DOCTYPE changes PUBLIC "-//APACHE//DTD Changes V1.1//EN" "./dtd/changes-v11.dtd">
+
+<changes>
+
+    <title>History of Changes</title>
+
+    <devs>
+        <!-- in strict alphabetical order -->
+        <person id="AO" name="Andrew C. Oliver" email="acoliver2@users.sourceforge.net"/>
+        <person id="GJS" name="Glen Stampoultzis" email="glens@apache.org"/>
+        <person id="MJ" name="Marc Johnson" email="mjohnson@apache.org"/>
+        <person id="NKB" name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+        <person id="POI-DEVELOPERS" name="Poi Developers" email="poi-dev@jakarta.apache.org"/>
+    </devs>
+    <release version="1.10-dev" date="19 Feb 2003">
+        <action dev="POI-DEVELOPERS" type="add">Support for zoom level</action>
+        <action dev="POI-DEVELOPERS" type="add">Freeze and split pane support</action>
+        <action dev="POI-DEVELOPERS" type="add">Row and column headers on printouts</action>
+    </release>
+    <release version="1.8-dev" date="20 Sep 2002">
+        <action dev="POI-DEVELOPERS" type="add">Custom Data Format Support</action>
+        <action dev="POI-DEVELOPERS" type="add">Enhanced Unicode Support for Russian and Japanese</action>
+        <action dev="POI-DEVELOPERS" type="add">Enhanced formula support including read-only for
+            "optimized if" statements.</action>
+        <action dev="POI-DEVELOPERS" type="add">Support for cloning objects</action>
+        <action dev="POI-DEVELOPERS" type="add">Fixes for header/footer</action>
+        <action dev="POI-DEVELOPERS" type="add">Spanish Documentation translations</action>
+        <action dev="POI-DEVELOPERS" type="add">Support for preserving VBA macros</action>
+    </release>
+    <release version="1.7-dev" date="???">
+        <action dev="NKB" type="update">Removed runtime dependency on commons logging.</action>
+        <action dev="POI-DEVELOPERS" type="update">Formula support</action>
+    </release>
+    <release version="1.5.1" date="16 June 2002">
+        <action dev="GJS" type="update">Removed depedency on commons logging.  Now define poi.logging system property to enable logging to standard out.</action>
+        <action dev="GJS" type="fix">Fixed SST string handling so that spreadsheets with rich text or extended text will be read correctly.</action>
+    </release>
+    <release version="1.5" date="06 May 2002">
+        <action dev="NKB" type="update">New project build.</action>
+        <action dev="NKB" type="update">New project documentation system based on Cocoon.</action>
+        <action dev="POI-DEVELOPERS" type="update">Package rename</action>
+        <action dev="POI-DEVELOPERS" type="fix">Various bug fixes</action>
+        <action dev="POI-DEVELOPERS" type="add">Early stages of HSF development (not ready for development)</action>
+        <action dev="POI-DEVELOPERS" type="add">Initial low level record support for charting (not complete)</action>
+    </release>
+    <release version="1.1.0" date="Release date not recorded">
+        <action dev="POI-DEVELOPERS">Created new event model</action>
+        <action dev="POI-DEVELOPERS">Optimizations made to HSSF including aggregate records for
+        values, rows, etc.</action>
+        <action dev="POI-DEVELOPERS">predictive sizing, offset based writing (instead of lots of
+        array copies)</action>
+        <action dev="POI-DEVELOPERS">minor re-factoring and bug fixes.</action>
+    </release>
+    <release version="1.0.0" date="Release date not recorded">
+        <action dev="POI-DEVELOPERS">Minor documentation updates.</action>
+    </release>
+    <release version="0.14.0" date="Release date not recorded">
+        <action dev="POI-DEVELOPERS">Added DataFormat helper class and exposed set and get format
+        on HSSFCellStyle</action>
+        <action dev="POI-DEVELOPERS">Fixed column width apis (unit wise) and various javadoc on
+        the subject</action>
+        <action dev="POI-DEVELOPERS">Fix for Dimensions record (again)... (one of these days I'll
+        write a unit test for this ;-p).</action>
+        <action dev="POI-DEVELOPERS">Some optimization on sheet creation.</action>
+    </release>
+    <release version="0.13.0" date="Release date not recorded">
+        <action dev="POI-DEVELOPERS">Changes not recorded.</action>
+    </release>
+    <release version="0.12.0" date="Release date not recorded">
+        <action dev="POI-DEVELOPERS">Added MulBlank, Blank, ColInfo</action>
+        <action dev="POI-DEVELOPERS">Added log4j facility and removed all sys.out type logging</action>
+        <action dev="POI-DEVELOPERS">Added support for adding font's, styles and corresponding
+        high level api for styling cells</action>
+        <action dev="POI-DEVELOPERS">added support for changing row height, cell width and default
+        row height/cell width.</action>
+        <action dev="POI-DEVELOPERS">Added fixes for internationalization (UTF-16 should work now
+        from HSSFCell.setStringValue, etc when the encoding is set)</action>
+        <action dev="POI-DEVELOPERS">added support for adding/removing and naming sheets.</action>
+    </release>
+    <release version="0.11.0" date="Release date not recorded">
+        <action dev="POI-DEVELOPERS">Bugfix release. We were throwing an exception when reading
+        RKRecord objects.</action>
+    </release>
+    <release version="0.10.0" date="Release date not recorded">
+        <action dev="POI-DEVELOPERS">Got continuation records to work (read/write)</action>
+        <action dev="POI-DEVELOPERS">Added various pre-support for formulas</action>
+        <action dev="POI-DEVELOPERS">Massive API reorganization, repackaging.</action>
+        <action dev="POI-DEVELOPERS">BiffViewer class added for validating HSSF &amp; POI and/or
+        HSSF Output.</action>
+        <action dev="POI-DEVELOPERS">Better API support for modification.</action>
+    </release>
+    <release version="0.7 (and interim releases)" date="Release date not recorded">
+        <action dev="POI-DEVELOPERS">Added encoding flag to high and low level api to use utf-16
+        when needed (HSSFCell.setEncoding())</action>
+        <action dev="POI-DEVELOPERS">added read only support for Label records (which are
+        reinterpreted as LabelSST when written)</action>
+        <action dev="POI-DEVELOPERS">Broken continuation record implementation (oops)</action>
+        <action dev="POI-DEVELOPERS">BiffViewer class added for validating HSSF &amp; POI and/or
+        HSSF Output.</action>
+    </release>
+    <release version="0.6 (release)" date="Release date not recorded">
+        <action dev="POI-DEVELOPERS">Support for read/write and modify.</action>
+        <action dev="POI-DEVELOPERS">Read only support for MulRK records (converted to Number when
+        writing)
+        </action>
+    </release>
+
+</changes>
diff --git a/src/documentation/content/xdocs/faq.xml b/src/documentation/content/xdocs/faq.xml
new file mode 100644 (file)
index 0000000..363d85e
--- /dev/null
@@ -0,0 +1,286 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE faqs PUBLIC "-//APACHE//DTD FAQ V1.1//EN" "./dtd/faq-v11.dtd">
+
+<faqs title="Frequently Asked Questions">
+    <faq>
+        <question>
+          Why is reading a simple sheet taking so long?
+        </question>
+        <answer>
+          <p>You've probably enabled logging.  Logging is intended only for
+          autopsie style debugging.  Having it enabled will reduce performance
+          by a factor of at least 100.  Logging is helpful for understanding
+          why POI can't read some file or developing POI itself.  Important
+          errors are thrown as exceptions, which means you probably don't need
+          logging.</p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+          What is the HSSF "eventmodel"?
+        </question>
+        <answer>
+              <p>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.</p>
+        </answer>
+
+    </faq>
+    <faq>
+        <question>
+          Why can't read the document I created using Star Office 5.1?
+        </question>
+        <answer>
+              <p>Star Office 5.1 writes some records using the older BIFF standard.  This causes some problems
+              with POI which supports only BIFF8.</p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            Why am I getting an exception each time I attempt to read my spreadsheet?
+        </question>
+        <answer>
+            <p>It's possible your spreadsheet contains a feature that is not currently supported by HSSF.
+            For example - spreadsheets containing cells with rich text are not currently supported.</p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            Does HSSF support protected spreadsheets?
+        </question>
+        <answer>
+            <p>Protecting a spreadsheet encrypts it.  We wont touch encryption because we're not legally educated
+            and don't understand the full implications of trying to implement this.  If you wish to have a go
+            at this feel free to add it as a plugin module.  We wont be hosting it here however.</p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            How do you tell if a field contains a date with HSSF?
+        </question>
+        <answer>
+            <p>Excel stores dates as numbers therefore the only way to determine if a cell is
+            actually stored as a date is to look at the formatting. There is a helper method
+            in HSSFDateUtil (since the 1.7.0-dev release) that checks for this.
+            Thanks to Jason Hoffman for providing the solution.</p>
+            <source>
+   case HSSFCell.CELL_TYPE_NUMERIC:
+         double d = cell.getNumericCellValue();
+         // test if a date!
+         if (HSSFDateUtil.isCellDateFormatted(cell)) {
+           // format in form of M/D/YY
+           cal.setTime(HSSFDateUtil.getJavaDate(d));
+           cellText =
+             (String.valueOf(cal.get(Calendar.YEAR))).substring(2);
+           cellText = cal.get(Calendar.MONTH)+1 + "/" +
+                      cal.get(Calendar.DAY_OF_MONTH) + "/" +
+                      cellText;
+         } </source>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            I'm trying to stream an XLS file from a servlet and I'm having some trouble.  What's the problem?
+        </question>
+        <answer>
+            <p>
+            The problem usually manifests itself as the junk characters being shown on
+            screen. The problem persists even though you have set the correct mime type.
+            </p>
+            <p>
+            The short answer is, don't depend on IE to display a binary file type properly if you stream it via a
+            servlet. Every minor version of IE has different bugs on this issue.
+            </p>
+            <p>
+            The problem in most versions of IE is that it does not use the mime type on
+            the HTTP response to determine the file type; rather it uses the file extension
+            on the request. Thus you might want to add a
+                <strong>.xls</strong> to your request
+            string. For example
+                <em>http://yourserver.com/myServelet.xls?param1=xx</em>. This is
+            easily accomplished through URL mapping in any servlet container. Sometimes
+            a request like
+                <em>http://yourserver.com/myServelet?param1=xx&amp;dummy=file.xls</em> is also
+            known to work.
+
+            </p>
+            <p>
+            To guarantee opening the file properly in Excel from IE, write out your file to a
+            temporary file under your web root from your servelet. Then send an http response
+            to the browser to do a client side redirection to your temp file. (Note that using a 
+            server side redirect using RequestDispatcher will not be effective in this case)
+            </p>
+            <p>
+            Note also that when you request a document that is opened with an
+            external handler, IE sometimes makes two requests to the webserver. So if your
+            generating process is heavy, it makes sense to write out to a temporary file, so that multiple
+            requests happen for a static file.
+            </p>
+            <p>
+            None of this is particular to Excel. The same problem arises when you try to
+            generate any binary file dynamically to an IE client. For example, if you generate
+            pdf files using
+                <link href="http://xml.apache.org/fop">FOP</link>, you will come across many of the same issues.
+
+            </p>
+            <!-- Thanks to Avik for the answer -->
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            I want to set a cell format (Data format of a cell) of a excel sheet as ###,###,###.#### or ###,###,###.0000.    Is it possible using POI ?
+        </question>
+        <answer>
+            <p>
+          Yes.  You first need to get a HSSFDataFormat object from the workbook and call getFormat with the desired format.  Some examples are <link href="hssf/quick-guide.html#DataFormats">here</link>.
+            </p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            I want to set a cell format (Data format of a cell) of a excel sheet as text.    Is it possible using POI ?
+        </question>
+        <answer>
+            <p>
+          Yes.  This is a built-in format for excel that you can get from HSSFDataFormat object using the format string "@".  Also, the string "text" will alias this format.
+            </p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            How do I add a border around a merged cell?
+        </question>
+        <answer>
+            <p>Add blank cells around where the cells normally would have been and set the borders individually for each cell.
+            We will probably enhance HSSF in the future to make this process easier.</p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            I tried to set cell values and Excel sheet name on my native language,
+            but I failed to do it. :(
+        </question>
+        <answer>
+            <p>By default HSSF uses cell values and sheet names as compressed unicode,
+            so to support localization you should use Unicode.
+            To do it you should set it manually:</p>
+            <source>
+                // for sheet name
+                HSSFWorkbook wb = new HSSFWorkbook();
+                HSSFSheet s = wb.createSheet();
+                wb.setSheetName( 0, "SomeUnicodeName", HSSFWorkbook.ENCODING_UTF_16 );
+
+                // for cell value
+                HSSFRow r = s.createRow( 0 );
+                HSSFCell c = r.createCell( (short)0 );
+                c.setCellType( HSSFCell.CELL_TYPE_STRING );
+                c.setEncoding( HSSFCell.ENCODING_UTF_16 );
+                c.setCellValue( "\u0422\u0435\u0441\u0442\u043E\u0432\u0430\u044F" ); </source>
+            <p>
+                Make sure you make the call to setEncoding() before calling setCellValue(), otherwise what you pass in won't be interpreted properly.
+            </p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            I'm having trouble creating a spreadsheet using POI using
+            websphere 3.5.
+        </question>
+        <answer>
+            <p>Make sure you have fix pack 4 installed.</p>
+        </answer>
+    </faq>
+    <faq>
+       <question>
+        I am using styles when creating a workbook in POI, but Excel refuses to open the file, complaining about "Too Many Styles".
+       </question>
+       <answer>
+       <p>You just create the styles OUTSIDE of the loop in which you create cells.</p>
+       <p>GOOD:</p>
+       <source>
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet("new sheet");
+ HSSFRow row = null;
+
+ // Aqua background
+ HSSFCellStyle style = wb.createCellStyle();
+ style.setFillBackgroundColor(HSSFColor.AQUA.index);
+ 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(HSSFColor.ORANGE.index);
+ style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+
+ for (int x = 0; x &lt; 1000; x++) {
+
+ // Create a row and put some cells in it. Rows are 0 based.
+        row = sheet.createRow((short) k);
+
+        for (int y = 0; y &lt; 100; y++) {
+               cell = row.createCell((short) k);
+               cell.setCellValue("X");
+               cell.setCellStyle(style);
+        }
+ }
+
+ // Write the output to a file
+ FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+ wb.write(fileOut);
+ fileOut.close(); </source>
+
+       <p>BAD:</p>
+       <source>
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet("new sheet");
+ HSSFRow row = null;
+
+ for (int x = 0; x &lt; 1000; x++) {
+        // Aqua background
+        HSSFCellStyle style = wb.createCellStyle();
+        style.setFillBackgroundColor(HSSFColor.AQUA.index);
+        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(HSSFColor.ORANGE.index);
+        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+
+        // Create a row and put some cells in it. Rows are 0 based.
+        row = sheet.createRow((short) k);
+
+        for (int y = 0; y &lt; 100; y++) {
+                cell = row.createCell((short) k);
+                cell.setCellValue("X");
+                cell.setCellStyle(style);
+        }
+ }
+
+ // Write the output to a file
+ FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+ wb.write(fileOut);
+ fileOut.close(); </source>
+       </answer>
+    </faq>
+    <faq>
+        <question>
+            Will Poi read any spreadsheet and rewrite it with modifications.
+        </question>
+        <answer>
+            <p>Poi is not guanteed to read the contents of any spreadsheet.
+                Certain features may cause spreadsheets to fail to read.  More
+                problematic is rewriting spreadsheets.  Poi tried hard to
+                preserve the records of the original spreadsheet but some
+                features may cause problems.  We advise that you limit the
+                formatting of spreadsheets you process so as to not be
+                unpleasantly suprised at a later stage.</p>
+        </answer>
+    </faq>
+</faqs>
diff --git a/src/documentation/content/xdocs/getinvolved/book.xml b/src/documentation/content/xdocs/getinvolved/book.xml
new file mode 100644 (file)
index 0000000..97cc623
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "./dtd/book-cocoon-v10.dtd">
+
+<book software="Poi" 
+      title="Poi Project Documentation" 
+      copyright="@year@ Poi Project"
+      xmlns:xlink="http://www.w3.org/1999/xlink">
+
+  <menu label="Get Involved">
+    <menu-item label="Contributing" href="index.html"/>
+    <menu-item label="Branching" href="branching.html"/>
+    <menu-item label="Mail Lists" href="http://jakarta.apache.org/site/mail.html"/>
+  </menu>
+
+</book>
diff --git a/src/documentation/content/xdocs/getinvolved/branching.xml b/src/documentation/content/xdocs/getinvolved/branching.xml
new file mode 100644 (file)
index 0000000..101744a
--- /dev/null
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+
+    <header>
+        <title>Branching</title>
+        <authors>
+            <person id="GJS" name="Glen Stampoultzis" email="glens@apache.org"/>
+        </authors>
+    </header>
+
+    <body>
+        <section><title>Branching Conventions</title>
+            <p>
+                Branches are tagged in the following way:
+            </p>
+            <ul>
+                <li>REL_1_5_BRANCH</li>
+                <li>REL_2_0_BRANCH</li>
+            </ul>
+            <p>
+                Merge points should be tagged as follows:
+            </p>
+            <ul>
+                <li>REL_1_5_BRANCH_MERGE1</li>
+                <li>REL_1_5_BRANCH_MERGE2</li>
+                <li>etc...</li>
+            </ul>
+            <p>
+                Releases should be tagged as:
+            </p>
+            <ul>
+                <li>REL_1_5</li>
+                <li>REL_1_5_1</li>
+                <li>REL_1_5_2</li>
+                <li>etc...</li>
+            </ul>
+
+        </section>
+        <section><title>Branching Advise</title>
+            <p>
+              Don't forget which branch you are currently on.  This is critically
+              important.  Committing stuff to the wrong branch causes all sorts of
+              headaches.  Best to name your checkout after the branch you are on.
+            </p>
+        </section>
+        <section><title>Who Manages Branching?</title>
+            <p>
+                All branching is currently managed by Glen Stampoultzis.  If you wish
+                to create your own branch please let him know.  Merging is also
+                handled by Glen.  Just pop him a mail if you feel it's necessary to
+                create a branch or perform a merge.
+            </p>
+            <p>
+                The reason to go through a single point for branching is that it can be
+                an easy thing to get wrong.  Having a single person managing branches
+                means there is less chance of getting getting our wires crossed with this
+                difficult area of CVS.
+            </p>
+        </section>
+        <section><title>Currently Active Branches</title>
+            <p>
+                The following branches are currently active:
+            </p>
+            <table>
+                <tr>
+                    <th>
+                        Branch
+                    </th>
+                    <th>
+                        Description
+                    </th>
+                </tr>
+                <tr>
+                    <td>
+                        HEAD
+                    </td>
+                    <td>
+                    This is the trunk and is always active.  Currently it is being used to continue development
+                    of the 2.0 release.
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        REL_1_5_BRANCH
+                    </td>
+                    <td>
+                        All bug fixes not specifically relevant to the 2.0 work should be placed in this branch.
+                        From here they will merged back to the trunk and the merge point marked.
+                    </td>
+                </tr>
+            </table>
+        </section>
+    </body>
+
+</document>
\ No newline at end of file
diff --git a/src/documentation/content/xdocs/getinvolved/index.xml b/src/documentation/content/xdocs/getinvolved/index.xml
new file mode 100644 (file)
index 0000000..85845b3
--- /dev/null
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>Contribution to POI</title>
+  <authors>
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/> 
+   <person name="Marc Johnson" email="mjohnson@apache.org"/>
+   <person name="Andrew C. Oliver" email="acoliver@apache.org"/>
+   <person name="Tetsuya Kitahata" email="tetsuya.kitahata@nifty.com"/>
+   </authors>
+ </header>
+
+ <body>
+
+ <section><title>Introduction</title>
+  <section><title>Disclaimer</title>
+   <p>
+     Any information in here that might be perceived as legal information is 
+     informational only.  We're not lawyers, so consult a legal professional
+     if needed. 
+   </p>
+  </section>
+  <section><title>The Licensing</title>
+   <p>
+     The POI project is <link href="http://www.opensource.org">OpenSource</link>
+     and developed/distributed under the <link 
+     href="http://www.apache.org/foundation/licence-FAQ.html">
+     Apache Software License</link>.  Unlike other licenses this license allows
+     free open source development; however, it does not require you to release
+     your source or use any particular license for your source.  If you wish
+     to contribute to POI (which you're very welcome and encouraged to do so)
+     then you must agree to release the rights of your source to us under this
+     license.
+   </p>
+  </section>
+  <section><title>I just signed an NDA to get a spec from Microsoft and I'd like to contribute</title>
+   <p>
+     In short, stay away, stay far far away.  Implementing these file formats
+     in POI is done strictly by using public information.  Public information
+     includes sources from other open source projects, books that state the 
+     purpose intended is for allowing implementation of the file format and 
+     do not require any non-disclosure agreement and just hard work. 
+     We are intent on keeping it
+     legal, by contributing patches you agree to do the same.
+   </p>
+   <p> 
+     If you've ever received information regarding the OLE 2 Compound Document
+     Format under any type of exclusionary agreement from Microsoft, or  
+     (probably illegally) received such information from a person bound by
+     such an agreement, you cannot participate in this project.  (Sorry)
+   </p>
+   <p>
+     Those submitting patches that show insight into the file format may be 
+     asked to state explicitly that they are eligible or possibly sign an 
+     agreement.
+   </p>
+  </section>
+ </section>
+  <section><title>I just want to get involved but don't know where to start</title>
+   <ul>
+     <li>Read the rest of the website, understand what POI is and what it does,
+         the project vision, etc.</li>
+     <li>Use POI a bit, look for gaps in the documentation and examples.</li>
+     <li>Join the mail lists and share your knowledge with others.</li>
+     <li>Get <link href="http://jakarta.apache.org/site/cvsindex.html">CVS</link> and check out the POI source tree</li>
+     <li>Documentation is always the best place to start contributing, maybe you found that if the documentation just told you how to do X then it would make more sense, modify the documentation.</li>
+     <li>Get used to building POI, you'll be doing it a lot, be one with the build, know its targets, etc.</li>
+     <li>Write Unit Tests.  Great way to understand POI.  Look for classes that aren't tested, or aren't tested on a public/protected method level, start there.</li>
+     <li>(HSSF)Get the Excel 97 Developer's Kit - its out of print but its dirt cheap (seen copies for under $15 (US)) used on <link href="http://www.amazon.com">amazon</link>.  It explains the Excel file format.</li>
+     <li>Submit patches (see below) of your contributions, modifications.</li>
+     <li>Fill out new features, see <link href="http://jakarta.apache.org/site/bugs.html">Bug database</link> for suggestions.</li>
+   </ul>
+  </section>
+  <section><title>Submitting Patches</title>
+   <p>
+     Create patches by getting the latest sources from CVS (the HEAD).
+     Alter or add files as appropriate.  Then, from the jakarta-poi directiory,
+     type cvs diff -u > mypatch.patch.  This will capture all of your changes
+     in a patch file of the appropriate format.  Next, if you've added any 
+     files, create an archive (tar.bz2 preferred as its the smallest) in a 
+     path-preserving archive format, relative to your jakarta-poi directory. 
+     (Note: If you use <link href="http://www.wincvs.org/">WinCVS</link>, move to
+     [Admin] -&gt; [Command Line] Menu and type "cvs diff -u" at 
+     [Enter a cvs line command] input field ([Commandline Settings] Tab), 
+     while selecting the target directories or files, in order to create 
+     unified diffs. 
+     In other words, [Alt+A]+[Alt+C]+[Alt+C] and type "cvs diff -u".) 
+     You'll attach both files in the next step.
+   </p>
+   <p> 
+     Patches are submitted via the <link href="http://jakarta.apache.org/site/bugs.html">Bug Database</link>.  
+     Create a new bug, set the subject to [PATCH] followed by a brief description.  Explain you patch and any special instructions and submit/save it.  
+     Next, go back to the bug, and create attachements for the patch files you
+     created.  Be sure to describe not only the files purpose, but its format. 
+     (Is that ZIP or a tgz or a bz2 or what?).
+   </p>
+   <p>
+     Make sure your patches include the @author tag on any files you've altered
+     or created.  Make sure you've documented your changes and altered the 
+     examples/etc to reflect them.  Any new additions should have unit tests.
+     Lastly, ensure that you've provided approriate javadoc.  (see 
+     <link href="http://jakarta.apache.org/poi/resolutions/res001.html">Coding
+     Standards</link>).  Patches that are of low quality may be rejected or 
+     the contributer may be asked to bring them up to spec.
+   </p>
+  </section>
+
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/hdf/book.xml b/src/documentation/content/xdocs/hdf/book.xml
new file mode 100644 (file)
index 0000000..6dfc054
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../dtd/book-cocoon-v10.dtd">
+
+<book software="Poi Project"
+      title="HDF"
+      copyright="@year@ Poi Project">
+
+  <menu label="Navigation">
+    <menu-item label="Main" href="../index.html"/>
+    <menu-item label="HDF Format" href="docoverview.html"/>
+  </menu>
+
+</book>
+
+
diff --git a/src/documentation/content/xdocs/hdf/docoverview.xml b/src/documentation/content/xdocs/hdf/docoverview.xml
new file mode 100644 (file)
index 0000000..dd177d6
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>HDF</title>
+  <subtitle>Word file format</subtitle>
+  <authors>
+   <person name="S. Ryan Ackley" email="sackley@cfl.rr.com"/>
+  </authors>
+ </header>
+
+ <body>
+  <section><title>The Word 97 File Format in semi-plain English</title>
+
+   <p>The purpose of this document is to give a brief high level overview of the
+      HDF document format. This document does not go into in-depth technical
+      detail and is only meant as a supplement to the Microsoft Word 97 Binary
+      File Format freely available at <link href="http://wotsit.org">Wotsit.org</link>.</p>
+   <p>The OLE file format is not discussed in this document. It is assumed that
+      the reader has a working knowledge of the POIFS API. </p>
+
+   <section><title>Word file structure</title>
+    <p>A Word file is made up of the document text and data structures
+       containing formatting information about the text. Of course, this is a
+       very simplified illustration. There are fields and macros and other
+       things that have not been considered. At this stage, HDF is mainly
+       concerned with formatted text.</p>
+   </section>
+   <section><title>Reading Word files</title>
+    <p>The entry point for HDF's reading of a Word file is the File Information
+       Block (FIB). This structure is the entry point for the locations and size
+       of a document's text and data structures. The FIB is located at the
+       beginning of the main stream.</p>
+    <section><title>Text</title>
+     <p>The document's text is also located in the main stream. Its starting
+        location is given as FIB.fcMin and its length is given in bytes by
+        FIB.ccpText. These two values are not very useful in getting the text
+        because of unicode. There may be unicode text intermingled with ASCII
+        text. That brings us to the piece table.</p>
+     <p>The piece table is used to divide the text into non-unicode and unicode
+        pieces. The size and offset are given in FIB.fcClx and FIB.lcbClx
+        respectively. The piece table may contain Property Modifiers (prm).
+        These are for complex(fast-saved) files and are skipped. Each text piece
+        contains offsets in the main stream that contain text for that piece.
+        If the piece uses unicode, the file offset is masked with a certain bit.
+        Then you have to unmask the bit and divide by 2 to get the real file
+        offset. </p>
+    </section>
+    <section><title>Text Formatting</title>
+     <section><title>Stylesheet</title>
+      <p>All text formatting is based on styles contained in the StyleSheet.
+         The StyleSheet is a data structure containing among other things, style
+         descriptions. Each style description can contain a paragraph style and
+         a character style or simply a character style. Each style description
+         is stored in a compressed version on file. Basically these are deltas
+         from another style.</p>
+      <p>Eventually, you have to chain back to the nil style which is an
+         imaginary style with certain implied values.</p>
+     </section>
+     <section><title>Paragraph and Character styles</title>
+      <p>Paragraph and Character formatting properties for a document's text are
+         stored on file as deltas from some base style in the Stylesheet. The
+         deltas are used to create a complete uncompressed style in memory.</p>
+      <p>Uncompressed paragraph styles are represented by the Pargraph
+         Properties(PAP) data structure. Uncompressed character styles are
+         represented by the Character Properties(CHP) data structure. The styles
+         for the document text are stored in compressed format in the
+         corresponding Formatted Disk Pages (FKP). A compressed PAP is referred
+         to as a PAPX and a compressed CHP is a CHPX. The FKP locations are
+         stored in the bin table. There are seperate bin tables for CHPXs and
+         PAPXs. The bin tables' locations and sizes are stored in the FIB.</p>
+      <p>A FKP is a 512 byte OLE page. It contains the offsets of the beginning
+         and end of each paragraph/character run in the main stream and the
+         compressed properties for that interval. The compessed PAPX is based on
+         its base style in the StyleSheet. The compressed CHPX is based on the
+         enclosing paragraph's base style in the Stylesheet.</p>
+     </section>
+     <section><title>Uncompressing styles and other data structures</title>
+      <p>All compressed properties(CHPX, PAPX, SEPX) contain a grpprl. A grpprl
+         is an array of sprms. A sprm defines a delta from some base property.
+         There is a table of possible sprms in the Word 97 spec. Each sprm is a
+         two byte operand followed by a parameter. The parameter size depends on
+         the sprm. Each sprm describes an operation that should be performed on
+         the base style. After every sprm in the grpprl is performed on the base
+         style you will have the style for the paragraph, character run,
+         section, etc.</p>
+     </section>
+    </section>
+   </section>
+  </section>
+ </body>
+</document>
+
diff --git a/src/documentation/content/xdocs/hdf/index.xml b/src/documentation/content/xdocs/hdf/index.xml
new file mode 100644 (file)
index 0000000..ca574b9
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>HDF</title>
+  <subtitle>Overview</subtitle>
+  <authors>
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+   <person name="Andrew C. Oliver" email="acoliver@apache.org"/>
+   <person name="Ryan Ackley" email="sackley@apache.org"/>
+  </authors>
+ </header>
+
+ <body>
+ <section><title>Overview</title>
+
+  <p>HDF is the name of OUR port of the Microsoft Word 97(-2002) file format to
+     pure Java.</p>
+  <p>HDF is still in early development. It is in the
+     <link href="http://cvs.apache.org/viewcvs/jakarta-poi/src/scratchpad/">scratchpad section of the
+     CVS.</link> Source code in the <em>org.apache.poi.hdf.extractor</em> tree is
+     legacy code. Source in the <em>org.apache.poi.hdf.model</em>
+     tree is the old legacy code refactored into an object model. Check the How-To
+     page for detailed examples on using HDF.
+  </p>
+  <p>
+     We are looking for developers!!! If you are interested in helping with HDF
+     familiarize yourself with the source code and just start coding. Make sure
+     you read the guidelines for <link href="http://jakarta.apache.org/poi/getinvolved/index.html">
+     getting involved</link></p>
+  </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/historyandfuture.xml b/src/documentation/content/xdocs/historyandfuture.xml
new file mode 100644 (file)
index 0000000..958e02f
--- /dev/null
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title>Project History</title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+    </authors>
+  </header>
+  
+  <body>
+
+
+    <section><title>Brief Project History</title>
+
+        <p>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.
+        </p>
+
+        <p>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.
+        </p>
+
+        <p>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
+        </p>
+
+        <p> 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.
+        </p>
+
+        <p> 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.
+        </p>
+
+        <p>Somewhere in there we decided to finally submit the project
+         to <link href="http://xml.apache.org/cocoon">The Apache
+         Cocoon Project</link>, 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!
+        </p>
+
+    </section>
+
+    <section><title>What's next for POI</title>
+        <p>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.
+        </p>
+        <p>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.
+        </p>
+        <p>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.
+        </p>
+        <p>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.
+        </p>
+        <p>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!  </p>
+      </section>
+
+    </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+
+
+</document>
diff --git a/src/documentation/content/xdocs/hpsf/book.xml b/src/documentation/content/xdocs/hpsf/book.xml
new file mode 100644 (file)
index 0000000..529baed
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../dtd/book-cocoon-v10.dtd">
+<!-- $Id$ -->
+<book software="POI Project" 
+      title="HPSF" 
+      copyright="@year@ POI Project">
+
+  <menu label="Navigation">
+    <menu-item label="Main" href="../index.html"/>
+  </menu>
+  <menu label="HPSF">
+    <menu-item label="Overview" href="index.html"/>
+    <menu-item label="How To" href="how-to.html"/>
+    <menu-item label="Thumbnails" href="thumbnails.html"/>
+    <menu-item label="Internals" href="internals.html"/>
+    <menu-item label="To Do" href="todo.html"/>
+  </menu>
+
+</book>
+
+
diff --git a/src/documentation/content/xdocs/hpsf/how-to.xml b/src/documentation/content/xdocs/hpsf/how-to.xml
new file mode 100644 (file)
index 0000000..57f8807
--- /dev/null
@@ -0,0 +1,868 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN"
+"../dtd/document-v11.dtd">
+<!-- $Id$ -->
+
+<document>
+ <header>
+  <title>HPSF HOW-TO</title>
+  <authors>
+   <person name="Rainer Klute" email="klute@apache.org"/>
+  </authors>
+ </header>
+ <body>
+  <section><title>How To Use the HPSF APIs</title>
+
+   <p>This HOW-TO is organized in three sections. You should read them
+    sequentially because the later sections build upon the earlier ones.</p>
+
+   <ol>
+    <li>
+     The <link href="#sec1">first section</link> 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.
+    </li>
+
+    <li>
+     The <link href="#sec2">second section</link> 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.
+     </li>
+
+    <li>
+     The <link href="#sec3">third section</link> tells how to read
+      non-standard properties. Non-standard properties are application-specific
+      triples consisting of an ID, a type, and a value.
+     </li>
+   </ol>
+
+
+
+   <anchor id="sec1"/>
+   <section><title>Reading Standard Properties</title>
+
+    <note>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.</note>
+
+    <p>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 the <link href="../poifs/index.html">POIFS
+      documentation</link>.)  A document in a POI filesystem is also called a
+     <strong>stream</strong>.</p>
+
+    <p>The following example shows how to read a POI filesystem's
+     "title" property. Reading other properties is similar. Consider the API
+     documentation of <code>org.apache.poi.hpsf.SummaryInformation</code> to
+     learn which methods are available!</p>
+
+    <p>The standard properties this section focusses on can be found in a
+     document called <em>\005SummaryInformation</em> located in the root of the
+     POI filesystem. The notation <em>\005</em> 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:</p>
+
+    <ol>
+     <li>
+      Open the document <em>\005SummaryInformation</em> located in the root
+       of the POI filesystem.
+     </li>
+     <li>
+      Create an instance of the class <code>SummaryInformation</code> from
+       that document.
+     </li>
+     <li>
+      Call the <code>SummaryInformation</code> instance's
+       <code>getTitle()</code> method.
+     </li>
+    </ol>
+
+    <p>Sounds easy, doesn't it? Here are the steps in detail.</p>
+
+
+    <section><title>Open the document \005SummaryInformation in the root of the
+       POI filesystem</title>
+
+     <p>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
+      <em>examples</em> section of the POI source tree as
+      <em>ReadTitle.java</em>.</p>
+
+     <source>
+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));
+}</source>
+
+     <p>The first interesting statement is</p>
+
+     <source>POIFSReader r = new POIFSReader();</source>
+
+     <p>It creates a
+      <code>org.apache.poi.poifs.eventfilesystem.POIFSReader</code> instance
+      which we shall need to read the POI filesystem. Before the application
+      actually opens the POI filesystem we have to tell the
+      <code>POIFSReader</code> which documents we are interested in. In this
+      case the application should do something with the document
+      <em>\005SummaryInformation</em>.</p>
+
+     <source>
+r.registerListener(new MyPOIFSReaderListener(),
+                   "\005SummaryInformation");</source>
+
+     <p>This method call registers a
+      <code>org.apache.poi.poifs.eventfilesystem.POIFSReaderListener</code>
+      with the <code>POIFSReader</code>. The <code>POIFSReaderListener</code>
+      interface specifies the method <code>processPOIFSReaderEvent</code>
+      which processes a document. The class
+      <code>MyPOIFSReaderListener</code> implements the
+      <code>POIFSReaderListener</code> and thus the
+      <code>processPOIFSReaderEvent</code> method. The eventing POI filesystem
+      calls this method when it finds the <em>\005SummaryInformation</em>
+      document. In the sample application <code>MyPOIFSReaderListener</code> is
+      a static class in the <em>ReadTitle.java</em> source file.</p>
+
+     <p>Now everything is prepared and reading the POI filesystem can
+      start:</p>
+
+     <source>r.read(new FileInputStream(filename));</source>
+
+     <p>The following source code fragment shows the
+      <code>MyPOIFSReaderListener</code> class and how it retrieves the
+      title.</p>
+
+     <source>
+static class MyPOIFSReaderListener implements POIFSReaderListener
+{
+    public void processPOIFSReaderEvent(POIFSReaderEvent event)
+    {
+        SummaryInformation si = null;
+        try
+        {
+            si = (SummaryInformation)
+                 PropertySetFactory.create(event.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.");
+    }
+}
+</source>
+
+     <p>The line</p>
+
+     <source>SummaryInformation si = null;</source>
+
+     <p>declares a <code>SummaryInformation</code> variable and initializes it
+      with <code>null</code>. We need an instance of this class to access the
+      title. The instance is created in a <code>try</code> block:</p>
+
+     <source>si = (SummaryInformation)
+                 PropertySetFactory.create(event.getStream());</source>
+
+     <p>The expression <code>event.getStream()</code> returns the input stream
+      containing the bytes of the property set stream named
+      <em>\005SummaryInformation</em>. This stream is passed into the
+      <code>create</code> method of the factory class
+      <code>org.apache.poi.hpsf.PropertySetFactory</code> which returns
+      a <code>org.apache.poi.hpsf.PropertySet</code> instance. It is more or
+      less safe to cast this result to <code>SummaryInformation</code>, a
+      convenience class with methods like <code>getTitle()</code>,
+      <code>getAuthor()</code> etc.</p>
+
+     <p>The <code>PropertySetFactory.create</code> 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 <code>RuntimeException</code>
+      containing the message text of the origin exception.</p>
+
+     <p>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.</p>
+
+     <source>final String title = si.getTitle();
+if (title != null)
+    System.out.println("Title: \"" + title + "\"");
+else
+    System.out.println("Document has no title.");</source>
+
+     <p>Please note that a Microsoft Office document does not necessarily
+      contain the <em>\005SummaryInformation</em> 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
+      <em>\005SummaryInformation</em> stream. In this case the applications
+      won't throw an exception but simply does not call the
+      <code>processPOIFSReaderEvent</code> method. You have been warned!</p>
+    </section>
+   </section>
+
+   <anchor id="sec2"/>
+   <section><title>Additional Standard Properties, Exceptions And Embedded Objects</title>
+
+    <note>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.</note>
+
+    <p>A couple of <strong>additional standard properties</strong> are not
+     contained in the <em>\005SummaryInformation</em> 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
+     <em>\005DocumentSummaryInformation</em> to hold these properties. With two
+     minor exceptions you can proceed exactly as described above to read the
+     properties stored in <em>\005DocumentSummaryInformation</em>:</p>
+
+    <ul>
+     <li>Instead of <em>\005SummaryInformation</em> use
+       <em>\005DocumentSummaryInformation</em> as the stream's name.</li>
+     <li>Replace all occurrences of the class
+       <code>SummaryInformation</code> by
+       <code>DocumentSummaryInformation</code>.</li>
+    </ul>
+
+    <p>And of course you cannot call <code>getTitle()</code> because
+     <code>DocumentSummaryInformation</code> has different query methods. See
+     the Javadoc API documentation for the details!</p>
+
+    <p>In the previous section the application simply caught all
+     <strong>exceptions</strong> 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:</p>
+
+    <dl>
+     <dt><code>NoPropertySetStreamException</code>:</dt>
+     <dd>
+      This exception is thrown if the application tries to create a
+       <code>PropertySet</code> instance from a stream that is not a
+       property set stream. (<code>SummaryInformation</code> and
+       <code>DocumentSummaryInformation</code> are subclasses of
+       <code>PropertySet</code>.) 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 it opens streams named
+       <em>\005SummaryInformation</em> or
+       <em>\005DocumentSummaryInformation</em> 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.
+     </dd>
+
+     <dt><code>UnexpectedPropertySetTypeException</code></dt>
+     <dd>This exception is thrown if a certain type of property set is
+       expected somewhere (e.g. a <code>SummaryInformation</code> or
+       <code>DocumentSummaryInformation</code>) but the provided property
+       set is not of that type.</dd>
+
+     <dt><code>MarkUnsupportedException</code></dt>
+     <dd>This exception is thrown if an input stream that is to be parsed
+       into a property set does not support the
+       <code>InputStream.mark(int)</code> operation. The POI filesystem uses
+       the <code>DocumentInputStream</code> 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.</dd>
+    </dl>
+
+    <p>Many Microsoft Office documents contain <strong>embedded
+      objects</strong>, 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 <strong>nested directory</strong> instead. Just register a
+     <code>POIFSReaderListener</code> for the property set streams you are
+     interested in. For example, the <em>POIBrowser</em> 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.</p>
+   </section>
+
+   <anchor id="sec3"/>
+   <section><title>Reading Non-Standard Properties</title>
+
+    <note>This section tells how to read non-standard properties. Non-standard
+     properties are application-specific ID/type/value triples.</note>
+
+    <section><title>Overview</title>
+     <p>Now comes the real hardcode stuff. As mentioned above,
+      <code>SummaryInformation</code> and
+      <code>DocumentSummaryInformation</code> are just special cases of the
+      general concept of a property set. This concept says that a
+      <strong>property set</strong> consists of properties and that each
+      <strong>property</strong> is an entity with an <strong>ID</strong>, a
+      <strong>type</strong>, and a <strong>value</strong>.</p>
+
+     <p>Okay, that was still rather easy. However, to make things more
+      complicated, Microsoft in its infinite wisdom decided that a property set
+      shalt be broken into one or more <strong>sections</strong>. Each section
+      holds a bunch of properties. But since that's still not complicated
+      enough, a section may have an optional <strong>dictionary</strong> that
+      maps property IDs to <strong>property names</strong> - we'll explain
+      later what that means.</p>
+
+     <p>The procedure to get to the properties is the following:</p>
+
+     <ol>
+      <li>Use the <strong><code>PropertySetFactory</code></strong> class to
+       create a <code>PropertySet</code> object from a property set stream. If
+       you don't know whether an input stream is a property set stream, just
+       try to call <code>PropertySetFactory.create(java.io.InputStream)</code>:
+       You'll either get a <code>PropertySet</code> instance returned or an
+       exception is thrown.</li>
+
+      <li>Call the <code>PropertySet</code>'s method <code>getSections()</code>
+       to get the sections contained in the property set. Each section is
+       an instance of the <code>Section</code> class.</li>
+
+      <li>Each section has a format ID. The format ID of the first section in a
+       property set determines the property set's type. For example, the first
+       (and only) section of the SummaryInformation property set has a format
+       ID of <code>F29F85E0-4FF9-1068-AB-91-08-00-2B-27-B3-D9</code>. You can
+       get the format ID with <code>Section.getFormatID()</code>.</li>
+
+      <li>The properties contained in a <code>Section</code> can be retrieved
+       with <code>Section.getProperties()</code>. The result is an array of
+       <code>Property</code> instances.</li>
+
+      <li>A property has a name, a type, and a value. The <code>Property</code>
+       class has methods to retrieve them.</li>
+     </ol>
+    </section>
+
+    <section><title>A Sample Application</title>
+     <p>Let's have a look at a sample Java application that dumps all property
+      set streams contained in a POI file system. The full source code of this
+      program can be found as <em>ReadCustomPropertySets.java</em> in the
+      <em>examples</em> area of the POI source code tree. Here are the key
+      sections:</p>
+
+    <source>import java.io.*;
+import java.util.*;
+import org.apache.poi.hpsf.*;
+import org.apache.poi.poifs.eventfilesystem.*;
+import org.apache.poi.util.HexDump;</source>
+
+    <p>The most important package the application needs is
+     <code>org.apache.poi.hpsf.*</code>. This package contains the HPSF
+     classes. Most classes named below are from the HPSF package. Of course we
+     also need the POIFS event file system's classes and <code>java.io.*</code>
+     since we are dealing with POI I/O. From the <code>java.util</code> package
+     we use the <code>List</code> and <code>Iterator</code> class. The class
+     <code>org.apache.poi.util.HexDump</code> provides a methods to dump byte
+     arrays as nicely formatted strings.</p>
+
+    <source>public static void main(String[] args)
+    throws IOException
+{
+    final String filename = args[0];
+    POIFSReader r = new POIFSReader();
+
+    /* Register a listener for *all* documents. */
+    r.registerListener(new MyPOIFSReaderListener());
+    r.read(new FileInputStream(filename));
+}</source>
+
+    <p>The <code>POIFSReader</code> is set up in a way that the listener
+     <code>MyPOIFSReaderListener</code> is called on every file in the POI file
+    system.</p>
+    </section>
+
+    <section><title>The Property Set</title>
+     <p>The listener class tries to create a <code>PropertySet</code> from each
+     stream using the <code>PropertySetFactory.create()</code> method:</p>
+
+    <source>static class MyPOIFSReaderListener implements POIFSReaderListener
+{
+    public void processPOIFSReaderEvent(POIFSReaderEvent event)
+    {
+        PropertySet ps = null;
+        try
+        {
+            ps = PropertySetFactory.create(event.getStream());
+        }
+        catch (NoPropertySetStreamException ex)
+        {
+            out("No property set stream: \"" + event.getPath() +
+                event.getName() + "\"");
+            return;
+        }
+        catch (Exception ex)
+        {
+            throw new RuntimeException
+                ("Property set stream \"" +
+                 event.getPath() + event.getName() + "\": " + ex);
+        }
+
+        /* Print the name of the property set stream: */
+        out("Property set stream \"" + event.getPath() +
+            event.getName() + "\":");</source>
+
+    <p>Creating the <code>PropertySet</code> is done in a <code>try</code>
+     block, because not each stream in the POI file system contains a property
+     set. If it is some other file, the
+     <code>PropertySetFactory.create()</code> throws a
+     <code>NoPropertySetStreamException</code>, which is caught and
+     logged. Then the program continues with the next stream. However, all
+     other types of exceptions cause the program to terminate by throwing a
+     runtime exception. If all went well, we can print the name of the property
+     set stream.</p>
+    </section>
+
+    <section><title>The Sections</title>
+     <p>The next step is to print the number of sections followed by the
+     sections themselves:</p>
+
+    <source>/* Print the number of sections: */
+final long sectionCount = ps.getSectionCount();
+out("   No. of sections: " + sectionCount);
+
+/* Print the list of sections: */
+List sections = ps.getSections();
+int nr = 0;
+for (Iterator i = sections.iterator(); i.hasNext();)
+{
+    /* Print a single section: */
+    Section sec = (Section) i.next();
+
+    // See below for the complete loop body.
+}</source>
+
+     <p>The <code>PropertySet</code>'s method <code>getSectionCount()</code>
+      returns the number of sections.</p>
+
+     <p>To retrieve the sections, use the <code>getSections()</code>
+      method. This method returns a <code>java.util.List</code> containing
+      instances of the <code>Section</code> class in their proper order.</p>
+
+     <p>The sample code shows a loop that retrieves the <code>Section</code>
+      objects one by one and prints some information about each one. Here is
+      the complete body of the loop:</p>
+
+     <source>/* Print a single section: */
+Section sec = (Section) i.next();
+out("   Section " + nr++ + ":");
+String s = hex(sec.getFormatID().getBytes());
+s = s.substring(0, s.length() - 1);
+out("      Format ID: " + s);
+
+/* Print the number of properties in this section. */
+int propertyCount = sec.getPropertyCount();
+out("      No. of properties: " + propertyCount);
+
+/* Print the properties: */
+Property[] properties = sec.getProperties();
+for (int i2 = 0; i2 &lt; properties.length; i2++)
+{
+    /* Print a single property: */
+    Property p = properties[i2];
+    int id = p.getID();
+    long type = p.getType();
+    Object value = p.getValue();
+    out("      Property ID: " + id + ", type: " + type +
+        ", value: " + value);
+}</source>
+    </section>
+
+    <section><title>The Section's Format ID</title>
+     <p>The first method called on the <code>Section</code> instance is
+      <code>getFormatID()</code>. As explained above, the format ID of the
+      first section in a property set determines the type of the property
+      set. Its type is <code>ClassID</code> which is essentially a sequence of
+      16 bytes. A real application using its own type of a custom property set
+      should have defined a unique format ID and, when reading a property set
+      stream, should check the format ID is equal to that unique format ID. The
+      sample program just prints the format ID it finds in a section:</p>
+
+     <source>String s = hex(sec.getFormatID().getBytes());
+s = s.substring(0, s.length() - 1);
+out("      Format ID: " + s);</source>
+
+     <p>As you can see, the <code>getFormatID()</code> method returns a
+      <code>ClassID</code> object. An array containing the bytes can be
+      retrieved with <code>ClassID.getBytes()</code>. In order to get a nicely
+      formatted printout, the sample program uses the <code>hex()</code> helper
+      method which in turn uses the POI utility class <code>HexDump</code> in
+      the <code>org.apache.poi.util</code> package. Another helper method is
+      <code>out()</code> which just saves typing
+      <code>System.out.println()</code>.</p>
+    </section>
+
+    <section><title>The Properties</title>
+     <p>Before getting the properties, it is possible to find out how many
+      properties are available in the section via the
+      <code>Section.getPropertyCount()</code>. The sample application uses this
+      method to print the number of properties to the standard output:</p>
+
+     <source>int propertyCount = sec.getPropertyCount();
+out("      No. of properties: " + propertyCount);</source>
+
+     <p>Now its time to get to the properties themselves. You can retrieve a
+      section's properties with the method
+      <code>Section.getProperties()</code>:</p>
+
+     <source>Property[] properties = sec.getProperties();</source>
+
+     <p>As you can see the result is an array of <code>Property</code>
+      objects. This class has three methods to retrieve a property's ID, its
+      type, and its value. The following code snippet shows how to call
+      them:</p>
+
+     <source>for (int i2 = 0; i2 &lt; properties.length; i2++)
+{
+    /* Print a single property: */
+    Property p = properties[i2];
+    int id = p.getID();
+    long type = p.getType();
+    Object value = p.getValue();
+    out("      Property ID: " + id + ", type: " + type +
+        ", value: " + value);
+}</source>
+    </section>
+
+    <section><title>Sample Output</title>
+     <p>The output of the sample program might look like the following. It
+      shows the summary information and the document summary information
+      property sets of a Microsoft Word document. However, unlike the first and
+      second section of this HOW-TO the application does not have any code
+      which is specific to the <code>SummaryInformation</code> and
+      <code>DocumentSummaryInformation</code> classes.</p>
+
+     <source>Property set stream "/SummaryInformation":
+   No. of sections: 1
+   Section 0:
+      Format ID: 00000000 F2 9F 85 E0 4F F9 10 68 AB 91 08 00 2B 27 B3 D9 ....O..h....+'..
+      No. of properties: 17
+      Property ID: 1, type: 2, value: 1252
+      Property ID: 2, type: 30, value: Titel
+      Property ID: 3, type: 30, value: Thema
+      Property ID: 4, type: 30, value: Rainer Klute (Autor)
+      Property ID: 5, type: 30, value: Test (Stichwörter)
+      Property ID: 6, type: 30, value: This is a document for testing HPSF
+      Property ID: 7, type: 30, value: Normal.dot
+      Property ID: 8, type: 30, value: Unknown User
+      Property ID: 9, type: 30, value: 3
+      Property ID: 18, type: 30, value: Microsoft Word 9.0
+      Property ID: 12, type: 64, value: Mon Jan 01 00:59:25 CET 1601
+      Property ID: 13, type: 64, value: Thu Jul 18 16:22:00 CEST 2002
+      Property ID: 14, type: 3, value: 1
+      Property ID: 15, type: 3, value: 20
+      Property ID: 16, type: 3, value: 93
+      Property ID: 19, type: 3, value: 0
+      Property ID: 17, type: 71, value: [B@13582d
+Property set stream "/DocumentSummaryInformation":
+   No. of sections: 2
+   Section 0:
+      Format ID: 00000000 D5 CD D5 02 2E 9C 10 1B 93 97 08 00 2B 2C F9 AE ............+,..
+      No. of properties: 14
+      Property ID: 1, type: 2, value: 1252
+      Property ID: 2, type: 30, value: Test
+      Property ID: 14, type: 30, value: Rainer Klute (Manager)
+      Property ID: 15, type: 30, value: Rainer Klute IT-Consulting GmbH
+      Property ID: 5, type: 3, value: 3
+      Property ID: 6, type: 3, value: 2
+      Property ID: 17, type: 3, value: 111
+      Property ID: 23, type: 3, value: 592636
+      Property ID: 11, type: 11, value: false
+      Property ID: 16, type: 11, value: false
+      Property ID: 19, type: 11, value: false
+      Property ID: 22, type: 11, value: false
+      Property ID: 13, type: 4126, value: [B@56a499
+      Property ID: 12, type: 4108, value: [B@506411
+   Section 1:
+      Format ID: 00000000 D5 CD D5 05 2E 9C 10 1B 93 97 08 00 2B 2C F9 AE ............+,..
+      No. of properties: 7
+      Property ID: 0, type: 0, value: {6=Test-JaNein, 5=Test-Zahl, 4=Test-Datum, 3=Test-Text, 2=_PID_LINKBASE}
+      Property ID: 1, type: 2, value: 1252
+      Property ID: 2, type: 65, value: [B@c9ba38
+      Property ID: 3, type: 30, value: This is some text.
+      Property ID: 4, type: 64, value: Wed Jul 17 00:00:00 CEST 2002
+      Property ID: 5, type: 3, value: 27
+      Property ID: 6, type: 11, value: true
+No property set stream: "/WordDocument"
+No property set stream: "/CompObj"
+No property set stream: "/1Table"</source>
+
+     <p>There are some interesting items to note:</p>
+
+     <ul>
+      <li>The first property set (summary information) consists of a single
+       section, the second property set (document summary information) consists
+       of two sections.</li>
+
+      <li>Each section type (identified by its format ID) has its own domain of
+       property ID. For example, in the second property set the properties with
+       ID 2 have different meanings in the two section. By the way, the format
+       IDs of these sections are <strong>not</strong> equal, but you have to
+       look hard to find the difference.</li>
+
+      <li>The properties are not in any particular order in the section,
+       although they slightly tend to be sorted by their IDs.</li>
+     </ul>
+    </section>
+
+    <section><title>Property IDs</title>
+     <p>Properties in the same section are distinguished by their IDs. This is
+      similar to variables in a programming language like Java, which are
+      distinguished by their names. But unlike variable names, property IDs are
+      simple integral numbers. There is another similarity, however. Just like
+      a Java variable has a certain scope (e.g. a member variables in a class),
+      a property ID also has its scope of validity: the section.</p>
+
+     <p>Two property IDs in sections with different section format IDs
+      don't have the same meaning even though their IDs might be equal. For
+      example, ID 4 in the first (and only) section of a summary
+      information property set denotes the document's author, while ID 4 in the
+      first section of the document summary information property set means the
+      document's byte count. The sample output above does not show a property
+      with an ID of 4 in the first section of the document summary information
+      property set. That means that the document does not have a byte
+      count. However, there is a property with an ID of 4 in the
+      <em>second</em> section: This is a user-defined property ID - we'll get
+      to that topic in a minute.</p>
+
+     <p>So, how can you find out what the meaning of a certain property ID in
+      the summary information and the document summary information property set
+      is? The standard property sets as such don't have any hints about the
+      <strong>meanings of their property IDs</strong>. For example, the summary
+      information property set does not tell you that the property ID 4 stands
+      for the document's author. This is external knowledge. Microsoft defined
+      standard meanings for some of the property IDs in the summary information
+      and the document summary information property sets. As a help to the Java
+      and POI programmer, the class <code>PropertyIDMap</code> in the
+      <code>org.apache.poi.hpsf.wellknown</code> package defines constants
+      for the "well-known" property IDs. For example, there is the
+      definition</p>
+
+     <source>public final static int PID_AUTHOR = 4;</source>
+
+     <p>These definitions allow you to use symbolic names instead of
+      numbers.</p>
+
+     <p>In order to provide support for the other way, too, - i.e. to map
+      property IDs to property names - the class <code>PropertyIDMap</code>
+      defines two static methods:
+      <code>getSummaryInformationProperties()</code> and
+      <code>getDocumentSummaryInformationProperties()</code>. Both return
+      <code>java.util.Map</code> objects which map property IDs to
+      strings. Such a string gives a hint about the property's meaning. For
+      example,
+      <code>PropertyIDMap.getSummaryInformationProperties().get(4)</code>
+      returns the string "PID_AUTHOR". An application could use this string as
+      a key to a localized string which is displayed to the user, e.g. "Author"
+      in English or "Verfasser" in German. HPSF might provide such
+      language-dependend ("localized") mappings in a later release.</p>
+
+     <p>Usually you won't have to deal with those two maps. Instead you should
+      call the <code>Section.getPIDString(int)</code> method. It returns the
+      string associated with the specified property ID in the context of the
+      <code>Section</code> object.</p>
+
+     <p>Above you learned that property IDs have a meaning in the scope of a
+      section only. However, there are two exceptions to the rule: The property
+      IDs 0 and 1 have a fixed meaning in <strong>all</strong> sections:</p>
+
+     <table>
+      <tr>
+       <th>Property ID</th>
+       <th>Meaning</th>
+      </tr>
+
+      <tr>
+       <td>0</td>
+       <td>The property's value is a <strong>dictionary</strong>, i.e. a
+       mapping from property IDs to strings.</td>
+      </tr>
+
+      <tr>
+       <td>1</td>
+       <td>The property's value is the number of a <strong>codepage</strong>,
+       i.e. a mapping from character codes to characters. All strings in the
+       section containing this property must be interpreted using this
+       codepage. Typical property values are 1252 (8-bit "western" characters)
+       or 1200 (16-bit Unicode characters).</td>
+      </tr>
+     </table>
+    </section>
+
+    <section><title>Property types</title>
+     <p>A property is nothing without its value. It is stored in a property set
+      stream as a sequence of bytes. You must know the property's
+      <strong>type</strong> in order to properly interpret those bytes and
+      reasonably handle the value. A property's type is one of the so-called
+      Microsoft-defined <strong>"variant types"</strong>. When you call
+      <code>Property.getType()</code> you'll get a <code>long</code> value
+      which denoting the property's variant type. The class
+      <code>Variant</code> in the <code>org.apache.poi.hpsf</code> package
+      holds most of those <code>long</code> values as named constants. For
+      example, the constant <code>VT_I4 = 3</code> means a signed integer value
+      of four bytes. Examples of other types are <code>VT_LPSTR = 30</code>
+      meaning a null-terminated string of 8-bit characters, <code>VT_LPWSTR =
+       31</code> which means a null-terminated Unicode string, or <code>VT_BOOL
+       = 11</code> denoting a boolean value.</p>
+
+     <p>In most cases you won't need a property's type because HPSF does all
+      the work for you.</p>
+    </section>
+
+    <section><title>Property values</title>
+     <p>When an application wants to retrieve a property's value and calls
+      <code>Property.getValue()</code>, HPSF has to interpret the bytes making
+      out the value according to the property's type. The type determines how
+      many bytes the value consists of and what
+      to do with them. For example, if the type is <code>VT_I4</code>, HPSF
+      knows that the value is four bytes long and that these bytes
+      comprise a signed integer value in the little-endian format. This is
+      quite different from e.g. a type of <code>VT_LPWSTR</code>. In this case
+      HPSF has to scan the value bytes for a Unicode null character and collect
+      everything from the beginning to that null character as a Unicode
+      string.</p>
+
+     <p>The good new is that HPSF does another job for you, too: It maps the
+      variant type to an adequate Java type.</p>
+
+     <table>
+      <tr>
+       <th>Variant type:</th>
+       <th>Java type:</th>
+      </tr>
+
+      <tr>
+       <td>VT_I2</td>
+       <td>java.lang.Integer</td>
+      </tr>
+
+      <tr>
+       <td>VT_I4</td>
+       <td>java.lang.Long</td>
+      </tr>
+
+      <tr>
+       <td>VT_FILETIME</td>
+       <td>java.util.Date</td>
+      </tr>
+
+      <tr>
+       <td>VT_LPSTR</td>
+       <td>java.lang.String</td>
+      </tr>
+
+      <tr>
+       <td>VT_LPWSTR</td>
+       <td>java.lang.String</td>
+      </tr>
+
+      <tr>
+       <td>VT_CF</td>
+       <td>byte[]</td>
+      </tr>
+
+      <tr>
+       <td>VT_BOOL</td>
+       <td>java.lang.Boolean</td>
+      </tr>
+
+     </table>
+
+     <p>The bad news is that there are still a couple of variant types HPSF
+      does not yet support. If it encounters one of these types it
+      returns the property's value as a byte array and leaves it to be
+      interpreted by the application.</p>
+
+     <p>An application retrieves a property's value by calling the
+      <code>Property.getValue()</code> method. This method's return type is the
+      abstract <code>Object</code> class. The <code>getValue()</code> method
+      looks up the property's variant type, reads the property's value bytes,
+      creates an instance of an adequate Java type, assigns it the property's
+      value and returns it. Primitive types like <code>int</code> or
+      <code>long</code> will be returned as the corresponding class,
+      e.g. <code>Integer</code> or <code>Long</code>.</p>
+    </section>
+
+
+    <section><title>Dictionaries</title>
+     <p>The property with ID 0 has a very special meaning: It is a
+      <strong>dictionary</strong> mapping property IDs to property names. We
+      have seen already that the meanings of standard properties in the
+      summary information and the document summary information property sets
+      have been defined by Microsoft. The advantage is that the labels of
+      properties like "Author" or "Title" don't have to be stored in the
+      property set. However, a user can define custom fields in, say, Microsoft
+      Word. For each field the user has to specify a name, a type, and a
+      value.</p>
+
+     <p>The names of the custom-defined fields (i.e. the property names) are
+      stored in the document summary information second section's
+      <strong>dictionary</strong>. The dictionary is a map which associates
+      property IDs with property names.</p>
+
+     <p>The method <code>Section.getPIDString(int)</code> not only returns with
+      the well-known property names of the summary information and document
+      summary information property sets, but with self-defined properties,
+      too. It should also work with self-defined properties in self-defined
+      sections.</p>
+    </section>
+
+    <section><title>Codepage support</title>
+     <fixme author="Rainer Klute">Improve codepage support!</fixme>
+
+     <p>The property with ID 1 holds the number of the codepage which was used
+      to encode the strings in this section. The present HPSF codepage support
+      is still very limited: When reading property value strings, HPSF
+      distinguishes between 16-bit characters and 8-bit characters. 16-bit
+      characters should be Unicode characters and thus be okay. 8-bit
+      characters are interpreted according to the platform's default character
+      set. This is fine as long as the document being read has been written on
+      a platform with the same default character set. However, if you receive a
+      document from another region of the world and want to process it with
+      HPSF you are in trouble - unless the creator used Unicode, of course.</p>
+    </section>
+
+    <section><title>Further Reading</title>
+     <p>There are still some aspects of HSPF left which are not covered by this
+      HOW-TO. You should dig into the Javadoc API documentation to learn
+      further details. Since you've struggled through this document up to this
+      point, you are well prepared.</p>
+    </section>
+   </section>
+  </section>
+ </body>
+</document>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: xml
+sgml-omittag:nil
+sgml-shorttag:nil
+sgml-namecase-general:nil
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/src/documentation/content/xdocs/hpsf/index.xml b/src/documentation/content/xdocs/hpsf/index.xml
new file mode 100644 (file)
index 0000000..b0e52c8
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+<!-- $Id$ -->
+
+<document>
+ <header>
+  <title>HPSF (Horrible Property Set Format)</title>
+  <subtitle>Overview</subtitle>
+  <authors>     
+   <person name="Rainer Klute" email="klute@apache.org"/>
+  </authors>
+ </header>
+ <body>
+  <section><title>Overview</title>
+   <p>Microsoft applications like "Word", "Excel" or "Powerpoint" 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 document properties are stored in so-called <strong>property set
+     streams</strong>. A property set stream is a separate document within a
+    <link href="../poifs/index.html">POI filesystem</link>. We'll call property
+    set streams mostly just "property sets". HPSF is POI's pure-Java
+    implementation to read (and in future to write) property sets.</p>
+
+   <p>The <link href="how-to.html">HPSF HOWTO</link> describes what a Java
+    application should do to read a property set using HPSF and to retrieve the
+    information it needs.</p>
+
+   <p>HPSF supports OLE2 property set streams in general, and is not limited to
+    the special case of document properties in the Microsoft Office files
+    mentioned above. The <link href="internals.html">HPSF description</link>
+    describes the internal structure of property set streams. A separate
+    document explains the internal of <link href="thumbnails.html">thumbnail
+     images</link>.</p>
+  </section>
+ </body>
+</document>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: xml
+sgml-omittag:nil
+sgml-shorttag:nil
+sgml-namecase-general:nil
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/src/documentation/content/xdocs/hpsf/internals.xml b/src/documentation/content/xdocs/hpsf/internals.xml
new file mode 100644 (file)
index 0000000..b4792dc
--- /dev/null
@@ -0,0 +1,1010 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+<!-- $Id$ -->
+
+<document>
+  <header>
+    <title>HPSF Internals: The Horrible Property Set Format</title>
+    <authors>
+      <person name="Rainer Klute" email="klute@rainer-klute.de"/>
+    </authors>
+  </header>
+  <body>
+    <section><title>HPSF Internals</title>
+
+    <section><title>Introduction</title>
+
+    <p>A Microsoft Office document is internally organized like a filesystem
+     with directory and files. Microsoft calls these files
+     <strong>streams</strong>. 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
+     <code>\005SummaryInformation</code>, where <code>\005</code> represents
+     the character with a decimal value of 5.</p>
+
+    <p>A single piece of information in the stream is called a
+     <strong>property</strong>, for example the document title. Each property
+     has an integral <strong>ID</strong> (e.g. 2 for title), a
+     <strong>type</strong> (telling that the title is a string of bytes) and a
+     <strong>value</strong> (what this is should be obvious). A stream
+     containing properties is called a
+     <strong>property set stream</strong>.</p>
+
+    <p>This document describes the internal structure of a property set stream,
+     i.e. the <strong>Horrible Property Set Format (HDF)</strong>.  It does not
+     describe how a Microsoft Office document is organized internally and how
+     to retrieve a stream from it. See the <link
+      href="../poifs/index.html">POIFS documentation</link> for that kind of
+     stuff.</p>
+
+    <p>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
+     <code>\005DocumentSummaryInformation</code> 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.</p>
+   </section>
+
+
+
+    <section><title>Data Types</title>
+
+    <p>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 <strong>little endian</strong> 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 <strong>big endian</strong>
+     format. In the little endian format, however, this order is reversed and
+     the low-value byte comes first: 0x3412.
+    </p>
+
+    <p>The following table gives an overview about some important data
+     types:</p>
+
+    <table>
+
+     <tr>
+      <th>Name</th>
+      <th>Length</th>
+      <th>Example (Little Endian)</th>
+      <th>Example (Big Endian)</th>
+     </tr>
+
+     <tr>
+      <td><strong>Bytes</strong></td>
+      <td>1 byte</td>
+      <td><code>0x12</code></td>
+      <td><code>0x12</code></td>
+     </tr>
+
+     <tr>
+      <td><strong>Word</strong></td>
+      <td>2 bytes</td>
+      <td><code>0x1234</code></td>
+      <td><code>0x3412</code></td>
+     </tr>
+
+     <tr>
+      <td><strong>DWord</strong></td>
+      <td>4 bytes</td>
+      <td><code>0x12345678</code></td>
+      <td><code>0x78563412</code></td>
+     </tr>
+
+     <tr>
+      <td><strong>ClassID</strong><br/>
+       A sequence of one DWord, two Words and eight Bytes</td>
+
+      <td>16 bytes</td>
+
+      <td><code>0xE0859FF2F94F6810AB9108002B27B3D9</code> resp.
+       <code>E0859FF2-F94F-6810-AB-91-08-00-2B-27-B3-D9</code></td>
+
+      <td><code>0xF29F85E04FF91068AB9108002B27B3D9</code> resp.
+       <code>F29F85E0-4FF9-1068-AB-91-08-00-2B-27-B3-D9</code></td>
+     </tr>
+
+     <tr>
+      <td></td>
+      <td></td>
+      <td>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.</td>
+      <td><em>Watch out:</em> Microsoft documentation and tools show class IDs
+       a little bit differently like
+       <code>F29F85E0-4FF9-1068-AB91-08002B27B3D9</code>.
+       However, that representation is (intentionally?) misleading with
+       respect to endianess.</td>
+     </tr>
+    </table>
+   </section>
+
+
+
+   <section><title>HPSF Overview</title>
+
+    <p>A property set stream consists of three main parts:</p>
+
+    <ol>
+     <li>The <strong>header</strong> and</li>
+     <li>the <strong>section(s)</strong> containing the properties.</li>
+    </ol>
+   </section>
+
+
+
+   <section><title>The Header</title>
+
+    <p>The first bytes in a property set stream is the <strong>header</strong>.
+     It has a fixed length and looks like this:</p>
+
+    <table>
+      <tr>
+       <th>Offset</th>
+       <th>Type</th>
+       <th>Contents</th>
+       <th>Remarks</th>
+      </tr>
+
+      <tr>
+       <td>0</td>
+       <td>Word</td>
+       <td><code>0xFFFE</code></td>
+       <td>If the first four bytes of a stream do not contain these values, the
+        stream is not a property set stream.</td>
+      </tr>
+
+      <tr>
+       <td>2</td>
+       <td>Word</td>
+       <td><code>0x0000</code></td>
+      <td></td>
+      </tr>
+
+      <tr>
+       <td>4</td>
+       <td>DWord</td>
+       <td>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): <code>0x0000</code> for Win16,
+        <code>0x0001</code> for Macintosh and <code>0x0002</code> 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.</td>
+      <td></td>
+      </tr>
+
+      <tr>
+       <td>8</td>
+       <td>ClassID</td>
+       <td><code>0x00000000000000000000000000000000</code></td>
+       <td>Most property set streams have this value but this is not
+        required.</td>
+      </tr>
+
+      <tr>
+       <td>24</td>
+       <td>DWord</td>
+       <td><code>0x01000000</code> or greater</td>
+       <td>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.</td>
+     </tr>
+    </table>
+   </section>
+
+
+
+   <section><title>Section List</title>
+
+    <p>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.</p>
+
+    <table>
+      <tr>
+       <th>Type</th>
+       <th>Contents</th>
+       <th>Remarks</th>
+      </tr>
+
+      <tr>
+       <td>ClassID</td>
+       <td>Section format ID</td>
+       <td><code>0xF29F85E04FF91068AB9108002B27B3D9</code> for the single section
+        in the Summary Information stream.<br/><br/>
+
+       <code>0xD5CDD5022E9C101B939708002B2CF9AE</code> for the first
+        section in the Document Summary Information stream.</td>
+      </tr>
+
+      <tr>
+       <td>DWord</td>
+       <td>Offset</td>
+       <td>The number of bytes between the beginning of the stream and the
+        beginning of the section within the stream.</td>
+      </tr>
+
+      <tr>
+       <td>ClassID</td>
+       <td>Section format ID</td>
+       <td>...</td>
+      </tr>
+
+      <tr>
+       <td>DWord</td>
+       <td>Offset</td>
+       <td>...</td>
+      </tr>
+
+      <tr>
+       <td>...</td>
+       <td>...</td>
+       <td>...</td>
+      </tr>
+    </table>
+   </section>
+
+
+
+   <section><title>Section</title>
+
+    <p>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:</p>
+
+    <table>
+      <tr>
+       <th>&nbsp;</th>
+       <th>Type</th>
+       <th>Contents</th>
+       <th>Remarks</th>
+      </tr>
+
+      <tr>
+       <td>Section header</td>
+
+       <td>DWord</td>
+       <td>Length</td>
+       <td>The length of the section in bytes.</td>
+      </tr>
+
+     <tr>
+      <td></td>
+      <td>DWord</td>
+       <td>Property count</td>
+       <td>The number of properties in the section.</td>
+      </tr>
+
+      <tr>
+
+       <td>Properties list</td>
+
+       <td>DWord</td>
+       <td>Property ID</td>
+       <td>The property ID tells what the property means. For example, an ID of
+        <code>0x0002</code> in the Summary Information stands for the document's
+       title. See the <link href="#property_ids">Property IDs</link>
+        chapter below for more details.</td>
+      </tr>
+
+      <tr>
+      <td></td>
+       <td>DWord</td>
+       <td>Offset</td>
+       <td>The number of bytes between the beginning of the section and the
+        property.</td>
+      </tr>
+
+      <tr>
+      <td></td>
+       <td>...</td>
+       <td>...</td>
+       <td>...</td>
+      </tr>
+
+      <tr>
+       <td>Properties</td>
+
+       <td>DWord</td>
+       <td>Property type ("variant")</td>
+       <td>This is the property's data type, e.g. an integer value,  a byte
+        string or a Unicode string. See the
+        <link href="#property_types"><em>Property Types</em></link> chapter for
+        details!</td>
+      </tr>
+
+      <tr>
+      <td></td>
+       <td><em>Field length depends on the property type
+         ("variant")</em></td>
+       <td>Property value</td>
+       <td>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.<br/><br/>
+
+           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 <code>0x00</code>
+        bytes.</td>
+      </tr>
+
+      <tr>
+      <td></td>
+       <td>...</td>
+       <td>...</td>
+       <td>...</td>
+      </tr>
+    </table>
+   </section>
+
+
+
+   <section><title>Property IDs</title>
+    <anchor id="property_ids"/>
+
+    <p>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.</p>
+
+    <p>If you want to know a property ID's meaning, it is not sufficient to
+     know the ID itself. You must also know the
+     <strong>section format ID</strong>.  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.</p>
+
+    <p>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.</p>
+
+    <section><title>Property IDs in The Summary Information Stream</title>
+
+     <p>The Summary Information stream has a single section with a section
+      format ID of <code>0xF29F85E04FF91068AB9108002B27B3D9</code>. The following
+      table defines the meaning of its property IDs. Each row associates a
+      property ID with a <em>name</em> and an <em>ID string</em>. (The property
+      <em>type</em> is just for informational purposes given here. As we have
+      seen above, the type is always given along with the value.)</p>
+
+     <p>The property <em>name</em> 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.</p>
+
+     <p>The property <em>ID string</em> 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.</p>
+
+     <table>
+      <tr>
+       <th>Property ID</th>
+       <th>Property Name</th>
+       <th>Property ID String</th>
+       <th>Property Type</th>
+      </tr>
+      <tr>
+       <td>2</td>
+       <td>Title</td>
+       <td>PID_TITLE</td>
+       <td>VT_LPSTR</td>
+      </tr>
+       <tr>
+       <td>3</td>
+       <td>Subject</td>
+       <td>PID_SUBJECT</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>4</td>
+       <td>Author</td>
+       <td>PID_AUTHOR</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>5</td>
+       <td>Keywords</td>
+       <td>PID_KEYWORDS</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>6</td>
+       <td>Comments</td>
+       <td>PID_COMMENTS</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>7</td>
+       <td>Template</td>
+       <td>PID_TEMPLATE</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>8</td>
+       <td>Last Saved By</td>
+       <td>PID_LASTAUTHOR</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>9</td>
+       <td>Revision Number</td>
+       <td>PID_REVNUMBER</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>10</td>
+       <td>Total Editing Time</td>
+       <td>PID_EDITTIME</td>
+       <td>VT_FILETIME</td>
+       </tr>
+       <tr>
+       <td>11</td>
+       <td>Last Printed</td>
+       <td>PID_LASTPRINTED</td>
+       <td>VT_FILETIME</td>
+       </tr>
+       <tr>
+       <td>12</td>
+       <td>Create Time/Date</td>
+       <td>PID_CREATE_DTM</td>
+       <td>VT_FILETIME</td>
+       </tr>
+       <tr>
+       <td>13</td>
+       <td>Last Saved Time/Date</td>
+       <td>PID_LASTSAVE_DTM</td>
+       <td>VT_FILETIME</td>
+       </tr>
+       <tr>
+       <td>14</td>
+       <td>Number of Pages</td>
+       <td>PID_PAGECOUNT</td>
+       <td>VT_I4</td>
+       </tr>
+       <tr>
+       <td>15</td>
+       <td>Number of Words</td>
+       <td>PID_WORDCOUNT</td>
+       <td>VT_I4</td>
+       </tr>
+       <tr>
+       <td>16</td>
+       <td>Number of Characters</td>
+       <td>PID_CHARCOUNT</td>
+       <td>VT_I4</td>
+       </tr>
+       <tr>
+       <td>17</td>
+       <td>Thumbnail</td>
+       <td>PID_THUMBNAIL</td>
+       <td>VT_CF</td>
+       </tr>
+       <tr>
+       <td>18</td>
+       <td>Name of Creating Application</td>
+       <td>PID_APPNAME</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>19</td>
+       <td>Security</td>
+       <td>PID_SECURITY</td>
+       <td>VT_I4</td>
+      </tr>
+     </table>
+    </section>
+
+
+
+    <section><title>Property IDs in The Document Summary Information Stream</title>
+
+     <p>The Document Summary Information stream has two sections with a section
+      format ID of <code>0xD5CDD5022E9C101B939708002B2CF9AE</code> 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.</p>
+
+     <table>
+       <tr>
+       <th>Property ID</th>
+       <th>Property name</th>
+       <th>Property ID string</th>
+       <th>VT type</th>
+       </tr>
+
+       <tr>
+       <td>0</td>
+       <td>Dictionary</td>
+       <td>PID_DICTIONARY</td>
+       <td>[Special format]</td>
+       </tr>
+       <tr>
+       <td>1</td>
+       <td>Code page</td>
+       <td>PID_CODEPAGE</td>
+       <td>VT_I2</td>
+       </tr>
+       <tr>
+       <td>2</td>
+       <td>Category</td>
+       <td>PID_CATEGORY</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>3</td>
+       <td>PresentationTarget</td>
+       <td>PID_PRESFORMAT</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>4</td>
+       <td>Bytes</td>
+       <td>PID_BYTECOUNT</td>
+       <td>VT_I4</td>
+       </tr>
+       <tr>
+       <td>5</td>
+       <td>Lines</td>
+       <td>PID_LINECOUNT</td>
+       <td>VT_I4</td>
+       </tr>
+       <tr>
+       <td>6</td>
+       <td>Paragraphs</td>
+       <td>PID_PARCOUNT</td>
+       <td>VT_I4</td>
+       </tr>
+       <tr>
+       <td>7</td>
+       <td>Slides</td>
+       <td>PID_SLIDECOUNT</td>
+       <td>VT_I4</td>
+       </tr>
+       <tr>
+       <td>8</td>
+       <td>Notes</td>
+       <td>PID_NOTECOUNT</td>
+       <td>VT_I4</td>
+       </tr>
+       <tr>
+       <td>9</td>
+       <td>HiddenSlides</td>
+       <td>PID_HIDDENCOUNT</td>
+       <td>VT_I4</td>
+       </tr>
+       <tr>
+       <td>10</td>
+       <td>MMClips</td>
+       <td>PID_MMCLIPCOUNT</td>
+       <td>VT_I4</td>
+       </tr>
+       <tr>
+       <td>11</td>
+       <td>ScaleCrop</td>
+       <td>PID_SCALE</td>
+       <td>VT_BOOL</td>
+       </tr>
+       <tr>
+       <td>12</td>
+       <td>HeadingPairs</td>
+       <td>PID_HEADINGPAIR</td>
+       <td>VT_VARIANT | VT_VECTOR</td>
+       </tr>
+       <tr>
+       <td>13</td>
+       <td>TitlesofParts</td>
+       <td>PID_DOCPARTS</td>
+       <td>VT_LPSTR | VT_VECTOR</td>
+       </tr>
+       <tr>
+       <td>14</td>
+       <td>Manager</td>
+       <td>PID_MANAGER</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>15</td>
+       <td>Company</td>
+       <td>PID_COMPANY</td>
+       <td>VT_LPSTR</td>
+       </tr>
+       <tr>
+       <td>16</td>
+       <td>LinksUpTo Date</td>
+       <td>PID_LINKSDIRTY</td>
+       <td>VT_BOOL</td>
+       </tr>
+     </table>
+    </section>
+   </section>
+
+
+
+   <section><title>Property Types</title>
+    <anchor id="property_types"/>
+
+    <p>A property consists of a DWord <em>type field</em> 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 <em>variant</em>.</p>
+
+    <p>The <em>Usage</em> 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].
+     <strong>[V]</strong> - may appear in a VARIANT, <strong>[T]</strong> - may
+     appear in a TYPEDESC, <strong>[P]</strong> - may appear in an OLE property
+     set, <strong>[S]</strong> - may appear in a Safe Array.</p>
+
+    <table>
+      <tr>
+       <th>Variant ID</th>
+       <th>Variant Type</th>
+       <th>Usage</th>
+       <th>Description</th>
+      </tr>
+      <tr>
+       <td>0</td>
+       <td>VT_EMPTY</td>
+       <td>[V] [P]</td>
+       <td>nothing</td>
+      </tr>
+      <tr>
+       <td>1</td>
+       <td>VT_NULL</td>
+       <td>[V] [P]</td>
+       <td>SQL style Null</td>
+      </tr>
+      <tr>
+       <td>2</td>
+       <td>VT_I2</td>
+       <td>[V] [T] [P] [S]</td>
+       <td>2 byte signed int</td>
+      </tr>
+      <tr>
+       <td>3</td>
+       <td>VT_I4</td>
+       <td>[V] [T] [P] [S]</td>
+       <td>4 byte signed int</td>
+      </tr>
+      <tr>
+       <td>4</td>
+       <td>VT_R4</td>
+       <td>[V] [T] [P] [S]</td>
+       <td>4 byte real</td>
+      </tr>
+      <tr>
+       <td>5</td>
+       <td>VT_R8</td>
+       <td>[V] [T] [P] [S]</td>
+       <td>8 byte real</td>
+      </tr>
+      <tr>
+       <td>6</td>
+       <td>VT_CY</td>
+       <td>[V] [T] [P] [S]</td>
+       <td>currency</td>
+      </tr>
+      <tr>
+       <td>7</td>
+       <td>VT_DATE</td>
+       <td>[V] [T] [P] [S]</td>
+       <td>date</td>
+      </tr>
+      <tr>
+       <td>8</td>
+       <td>VT_BSTR</td>
+       <td>[V] [T] [P] [S]</td>
+       <td>OLE Automation string</td>
+      </tr>
+      <tr>
+       <td>9</td>
+       <td>VT_DISPATCH</td>
+       <td>[V] [T] [P] [S]</td>
+       <td>IDispatch *</td>
+      </tr>
+      <tr>
+       <td>10</td>
+       <td>VT_ERROR</td>
+       <td>[V] [T] [S]</td>
+       <td>SCODE</td>
+      </tr>
+      <tr>
+       <td>11</td>
+       <td>VT_BOOL</td>
+       <td>[V] [T] [P] [S]</td>
+       <td>True=-1, False=0</td>
+      </tr>
+      <tr>
+       <td>12</td>
+       <td>VT_VARIANT</td>
+       <td>[V] [T] [P] [S]</td>
+       <td>VARIANT *</td>
+      </tr>
+      <tr>
+       <td>13</td>
+       <td>VT_UNKNOWN</td>
+       <td>[V] [T] [S]</td>
+       <td>IUnknown *</td>
+      </tr>
+      <tr>
+       <td>14</td>
+       <td>VT_DECIMAL</td>
+       <td>[V] [T] [S]</td>
+       <td>16 byte fixed point</td>
+      </tr>
+      <tr>
+       <td>16</td>
+       <td>VT_I1</td>
+       <td>[T]</td>
+       <td>signed char</td>
+      </tr>
+      <tr>
+       <td>17</td>
+       <td>VT_UI1</td>
+       <td>[V] [T] [P] [S]</td>
+       <td>unsigned char</td>
+      </tr>
+      <tr>
+       <td>18</td>
+       <td>VT_UI2</td>
+       <td>[T] [P]</td>
+       <td>unsigned short</td>
+      </tr>
+      <tr>
+       <td>19</td>
+       <td>VT_UI4</td>
+       <td>[T] [P]</td>
+       <td>unsigned short</td>
+      </tr>
+      <tr>
+       <td>20</td>
+       <td>VT_I8</td>
+       <td>[T] [P]</td>
+       <td>signed 64-bit int</td>
+      </tr>
+      <tr>
+       <td>21</td>
+       <td>VT_UI8</td>
+       <td>[T] [P]</td>
+       <td>unsigned 64-bit int</td>
+      </tr>
+      <tr>
+       <td>22</td>
+       <td>VT_INT</td>
+       <td>[T]</td>
+       <td>signed machine int</td>
+      </tr>
+      <tr>
+       <td>23</td>
+       <td>VT_UINT</td>
+       <td>[T]</td>
+       <td>unsigned machine int</td>
+      </tr>
+      <tr>
+       <td>24</td>
+       <td>VT_VOID</td>
+       <td>[T]</td>
+       <td>C style void</td>
+      </tr>
+      <tr>
+       <td>25</td>
+       <td>VT_HRESULT</td>
+       <td>[T]</td>
+       <td>Standard return type</td>
+      </tr>
+      <tr>
+       <td>26</td>
+       <td>VT_PTR</td>
+       <td>[T]</td>
+       <td>pointer type</td>
+      </tr>
+      <tr>
+       <td>27</td>
+       <td>VT_SAFEARRAY</td>
+       <td>[T]</td>
+       <td>(use VT_ARRAY in VARIANT)</td>
+      </tr>
+      <tr>
+       <td>28</td>
+       <td>VT_CARRAY</td>
+       <td>[T]</td>
+       <td>C style array</td>
+      </tr>
+      <tr>
+       <td>29</td>
+       <td>VT_USERDEFINED</td>
+       <td>[T]</td>
+       <td>user defined type</td>
+      </tr>
+      <tr>
+       <td>30</td>
+       <td>VT_LPSTR</td>
+       <td>[T] [P]</td>
+       <td>null terminated string</td>
+      </tr>
+      <tr>
+       <td>31</td>
+       <td>VT_LPWSTR</td>
+       <td>[T] [P]</td>
+       <td>wide null terminated string</td>
+      </tr>
+      <tr>
+       <td>64</td>
+       <td>VT_FILETIME</td>
+       <td>[P]</td>
+       <td>FILETIME</td>
+      </tr>
+      <tr>
+       <td>65</td>
+       <td>VT_BLOB</td>
+       <td>[P]</td>
+       <td>Length prefixed bytes</td>
+      </tr>
+      <tr>
+       <td>66</td>
+       <td>VT_STREAM</td>
+       <td>[P]</td>
+       <td>Name of the stream follows</td>
+      </tr>
+      <tr>
+       <td>67</td>
+       <td>VT_STORAGE</td>
+       <td>[P]</td>
+       <td>Name of the storage follows</td>
+      </tr>
+      <tr>
+       <td>68</td>
+       <td>VT_STREAMED_OBJECT</td>
+       <td>[P]</td>
+       <td>Stream contains an object</td>
+      </tr>
+      <tr>
+       <td>69</td>
+       <td>VT_STORED_OBJECT</td>
+       <td>[P]</td>
+       <td>Storage contains an object</td>
+      </tr>
+      <tr>
+       <td>70</td>
+       <td>VT_BLOB_OBJECT</td>
+       <td>[P]</td>
+       <td>Blob contains an object</td>
+      </tr>
+      <tr>
+       <td>71</td>
+       <td>VT_CF</td>
+       <td>[P]</td>
+       <td>Clipboard format</td>
+      </tr>
+      <tr>
+       <td>72</td>
+       <td>VT_CLSID</td>
+       <td>[P]</td>
+       <td>A Class ID</td>
+      </tr>
+      <tr>
+       <td>0x1000</td>
+       <td>VT_VECTOR</td>
+       <td>[P]</td>
+       <td>simple counted array</td>
+      </tr>
+      <tr>
+       <td>0x2000</td>
+       <td>VT_ARRAY</td>
+       <td>[V]</td>
+       <td>SAFEARRAY*</td>
+      </tr>
+      <tr>
+       <td>0x4000</td>
+       <td>VT_BYREF</td>
+       <td>[V]</td>
+       <td>void* for local use</td>
+      </tr>
+      <tr>
+       <td>0x8000</td>
+       <td>VT_RESERVED</td>
+       <td><br/></td>
+       <td><br/></td>
+      </tr>
+      <tr>
+       <td>0xFFFF</td>
+       <td>VT_ILLEGAL</td>
+       <td><br/></td>
+       <td><br/></td>
+      </tr>
+      <tr>
+       <td>0xFFF</td>
+       <td>VT_ILLEGALMASKED</td>
+       <td><br/></td>
+       <td><br/></td>
+      </tr>
+      <tr>
+       <td>0xFFF</td>
+       <td>VT_TYPEMASK</td>
+       <td><br/></td>
+       <td><br/></td>
+      </tr>
+    </table>
+   </section>
+
+
+
+   <section><title>References</title>
+
+    <p>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!</p>
+
+   <ol>
+
+    <li>In
+      <link href="http://www.kyler.com/pubs/ddj9894.html"><em>Understanding OLE
+        documents</em></link>, 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.</li>
+
+    <li>The
+      <link href="http://www.dwam.net/docs/oleref/"><em>ActiveX Programmer's
+       Reference</em></link> at
+      <link href="http://www.dwam.net/docs/oleref/">http://www.dwam.net/docs/oleref/</link>
+      seems a little outdated, but that's what I have found.</li>
+
+    <li>An overview of the <code>VT_</code> types is in
+      <link href="http://www.marin.clara.net/COM/variant_type_definitions.htm"><em>Variant
+       Type Definitions</em></link>.</li>
+
+    <li>What is a <code>FILETIME</code>? The answer can be found
+     under <link
+      href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/filetime_str.asp"></link>, <link href="http://www.vbapi.com/ref/f/filetime.html">http://www.vbapi.com/ref/f/filetime.html</link> or
+      <link href="http://www.cs.rpi.edu/courses/fall01/os/FILETIME.html">http://www.cs.rpi.edu/courses/fall01/os/FILETIME.html</link>.
+      In short: <em>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.</em></li>
+
+    <li>Information about the code page property in the
+     DocumentSummaryInformation stream is available at <link
+      href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/stg/stg/property_id_1.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/stg/stg/property_id_1.asp</link>.</li>
+
+    <li>This documentation origins from the <link href="http://www.rainer-klute.de/~klute/Software/poibrowser/doc/HPSF-Description.html">HPSF description</link> available at <link href="http://www.rainer-klute.de/~klute/Software/poibrowser/doc/HPSF-Description.html">http://www.rainer-klute.de/~klute/Software/poibrowser/doc/HPSF-Description.html</link>.</li>
+    </ol>
+   </section>
+  </section>
+ </body>
+</document>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: xml
+sgml-omittag:nil
+sgml-shorttag:nil
+sgml-namecase-general:nil
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/src/documentation/content/xdocs/hpsf/thumbnails.xml b/src/documentation/content/xdocs/hpsf/thumbnails.xml
new file mode 100644 (file)
index 0000000..c6d4bb1
--- /dev/null
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN"
+"../dtd/document-v11.dtd">
+<!-- $Id$ -->
+
+<document>
+ <header>
+  <title>HPSF THUMBNAIL HOW-TO</title>
+  <authors>
+   <person name="Drew Varner" email="Drew.Varner@-deleteThis-sc.edu" />
+  </authors>
+ </header>
+ <body>
+  <section><title>The VT_CF Format</title>
+
+   <p>Thumbnail information is stored as a VT_CF, or Thumbnail Variant. The
+    Thumbnail Variant is used to store various types of information in a
+    clipboard. The VT_CF can store information in formats for the Macintosh or
+    Windows clipboard.</p>
+
+   <p>There are many types of data that can be copied to the clipboard, but the
+    only types of information needed for thumbnail manipulation are the image
+    formats.</p>
+
+   <p>The <code>VT_CF</code> structure looks like this:</p>
+
+   <table>
+    <tr>
+     <th>Element:</th>
+     <td>Clipboard Size</td>
+     <td>Clipboard Format Tag</td>
+     <td>Clipboard Data</td>
+    </tr>
+    <tr>
+     <th>Size:</th>
+     <td>32 bit unsigned integer (DWord)</td>
+     <td>32 bit signed integer (DWord)</td>
+     <td>variable length (byte array)</td>
+    </tr>
+   </table>
+
+   <p>The Clipboard Size refers to the size (in bytes) of Clipboard Data
+    (variable size) plus the Clipboard Format (four bytes).</p>
+
+   <p>Clipboard Format Tag has four possible values:</p>
+
+   <table>
+    <tr>
+     <th>Value</th>
+     <th>Identifier</th>
+     <th>Description</th>
+    </tr>
+    <tr>
+     <td><code>-1L</code></td>
+     <td><code>CFTAG_WINDOWS</code></td>
+     <td>a built-in Windows&copy; clipboard format value</td>
+    </tr>
+    <tr>
+     <td><code>-2L</code></td>
+     <td><code>CFTAG_MACINTOSH</code></td>
+     <td>a Macintosh clipboard format value</td>
+    </tr>
+    <tr>
+     <td><code>-3L</code></td>
+     <td><code>CFTAG_FMTID</code></td>
+     <td>a format identifier (FMTID) This is rarely used.</td>
+    </tr>
+    <tr>
+     <td><code>0L</code></td>
+     <td><code>CFTAG_NODATA</code></td>
+     <td>No data This is rarely used.</td>
+    </tr>
+   </table>
+  </section>
+
+
+
+  <section><title>Windows Clipboard Data</title>
+
+   <p>Windows clipboard data has four image formats for thumbnails:</p>
+
+   <table>
+    <tr>
+     <th>Value</th>
+     <th>Identifier</th>
+     <th>Description</th>
+    </tr>
+    <tr>
+     <td>3</td>
+     <td><code>CF_METAFILEPICT</code></td>
+     <td>Windows metafile format - recommended</td>
+    </tr>
+    <tr>
+     <td>8</td>
+     <td><code>CF_DIB</code></td>
+     <td>Device Independent Bitmap</td>
+    </tr>
+    <tr>
+     <td>14</td>
+     <td><code>CF_ENHMETAFILE</code></td>
+     <td>Enhanced Windows metafile format</td>
+    </tr>
+    <tr>
+     <td>2</td>
+     <td><code>CF_BITMAP</code></td>
+     <td>Bitmap - Obsolete - Use <code>CF_DIB</code> instead</td>
+    </tr>
+   </table>
+  </section>
+
+  <section><title>Windows Metafile Format</title>
+
+   <p>The most common format for thumbnails on the Windows platform is the
+    Windows metafile format. The Clipboard places and extra header in front of
+    a the standard Windows Metafile Format data.</p>
+
+   <p>The Clipboard Data byte array looks like this when an image is stored in
+    Windows' Clipboard WMF format.</p>
+
+   <table>
+    <tr>
+     <th>Identifier</th>
+     <td>CF_METAFILEPICT</td>
+     <td>mm</td>
+     <td>width</td>
+     <td>height</td>
+     <td>handle</td>
+     <td>WMF data</td>
+    </tr>
+    <tr>
+     <th>Size</th>
+     <td>32 bit unsigned int</td>
+     <td>16 bit unsigned(?) int</td>
+     <td>16 bit unsigned(?) int</td>
+     <td>16 bit unsigned(?) int</td>
+     <td>16 bit unsigned(?) int</td>
+     <td>byte array - variable length</td>
+    </tr>
+    <tr>
+     <th>Description</th>
+     <td>Clipboard WMF</td>
+     <td>Mapping Mode</td>
+     <td>Image Width</td>
+     <td>Image Height</td>
+     <td>handle to the WMF data array in memory, or 0</td>
+     <td>standard WMF byte stream</td>
+    </tr>
+   </table>
+  </section>
+
+
+  <section><title>Device Independent Bitmap</title>
+   <p><strong>FIXME:</strong> Describe the Device Independent Bitmap
+    format!</p>
+  </section>
+
+
+
+  <section><title>Macintosh Clipboard Data</title>
+   <p><strong>FIXME:</strong> Describe the Macintosh clipboard formats!</p>
+  </section>
+
+ </body>
+</document>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: xml
+sgml-omittag:nil
+sgml-shorttag:nil
+sgml-namecase-general:nil
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/src/documentation/content/xdocs/hpsf/todo.xml b/src/documentation/content/xdocs/hpsf/todo.xml
new file mode 100644 (file)
index 0000000..3c3ca4e
--- /dev/null
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+<!-- $Id$ -->
+
+<document>
+ <header>
+  <title>To Do</title>
+  <authors>
+   <person name="Rainer Klute" email="klute@rainer-klute.de"/>
+  </authors>
+ </header>
+ <body>
+  <section><title>To Do</title>
+
+   <p>The following functionalities should be added to HPFS:</p>
+
+   <ol>
+    <li>
+     Add writing capability for property sets. Presently property sets can
+      be read only.
+    </li>
+    <li>
+     Add codepage support: Presently the bytes making out the string in a
+      property's value are interpreted using the platform's default character
+      set.
+    </li>
+    <li>
+      Add resource bundles to
+      <code>org.apache.poi.hpsf.wellknown</code> to ease
+      localizations. This would be useful for mapping standard property IDs to
+      localized strings. Example: The property ID 4 could be mapped to "Author"
+      in English or "Verfasser" in German.
+    </li>
+    <li>
+     Implement reading functionality for those property types that are not
+      yet supported. HPSF should return proper Java types instead of just byte
+      arrays.
+    </li>
+    <li>
+     Add WMF to <code>java.awt.Image</code> example code in <link
+     href="thumbnails.html">Thumbnail
+     HOW TO</link>.
+    </li>
+   </ol>
+  </section>
+ </body>
+</document>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: xml
+sgml-omittag:nil
+sgml-shorttag:nil
+sgml-namecase-general:nil
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/src/documentation/content/xdocs/hssf/alternatives.xml b/src/documentation/content/xdocs/hssf/alternatives.xml
new file mode 100644 (file)
index 0000000..c76124d
--- /dev/null
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>HSSF</title>
+        <subtitle>Alternatives to HSSF</subtitle>
+        <authors>
+            <person name="Andrew Oliver" email="acoliver at apache.org"/>
+            <person name="Glen Stampoultzis" email="glens at apache.org"/>
+        </authors>
+    </header>
+
+    <body>
+        <section><title>Alternatives</title>
+            <p>
+                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.
+            </p>
+            <table>
+                <tr>
+                    <th>Product</th>
+                    <th>URL</th>
+                    <th>Description</th>
+                </tr>
+                <tr>
+                    <td>JSC</td>
+                    <td>
+                        <link href="http://jsc.tomschuetz.com">jsc.tomschuetz.com</link>
+                    </td>
+                    <td>Reading, calculating standard and VBA functions with 
+                        Java at runtime.  
+                    </td>
+                </tr>
+                <tr>
+                    <td>Formula One</td>
+                    <td>
+                        <link href="http://www.tidestone.com/">ReportingEngines (division of Actuate Corporation)</link>
+                    </td>
+                    <td>An alternative to this project is to
+                        buy the $5000 per server installation.</td>
+                </tr>
+                <tr>
+                    <td>Visual Basic</td>
+                    <td>
+                        <link href="http://www.microsoft.com/">www.microsoft.com</link>
+                    </td>
+                    <td>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.</td>
+                </tr>
+                <tr>
+                    <td>JExcel</td>
+                    <td>http://stareyes.homeip.net:8888</td>
+                    <td>Frequently unavailable.  Little currently known about it's capabilities.</td>
+                </tr>
+                <tr>
+                    <td>JWorkbook</td>
+                    <td>http://www.object-refinery.com/jworkbook/index.html</td>
+                    <td>This effort supports Gnumeric and Excel, however the Excel part is done using POI anyway.</td>
+                </tr>
+                <tr>
+                    <td>xlReader</td>
+                    <td><link href="http://www.sourceforge.net/projects/xlrd">http://www.sourceforge.net/projects/xlrd</link></td>
+                    <td>Provides decent support for reading Excel.</td>
+                </tr>
+                <tr>
+                    <td>Excel ODBC Driver</td>
+                    <td><link href="http://www.nwlink.com/~leewal/content/exceljavasample.htm">http://www.nwlink.com/~leewal/content/exceljavasample.htm</link></td>
+                    <td>ODBC offers a somewhat wierd method for using Excel.</td>
+                </tr>
+                <tr>
+                    <td>ExtenXLS</td>
+                    <td><link href="http://www.extentech.com/products/ExtenXLS/docs/intro3.jsp">http://www.extentech.com/products/ExtenXLS/docs/intro3.jsp</link></td>
+                    <td>Commercial 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.</td>
+                </tr>
+                <tr>
+                    <td>J-Integra Java-Excel Bridge</td>
+                    <td><link href="http://www.intrinsyc.com/products/bridging/jintegra.asp">http://www.intrinsyc.com/products/bridging/jintegra.asp</link></td>
+                    <td>Uses DCOM to an Excel instance on a windows machine.</td>
+                </tr>
+                <tr>
+                    <td>Perl &amp; C</td>
+                    <td>-</td>
+                    <td>There are a number of perl and C libraries, however none of them are consistent.</td>
+                </tr>
+                <tr>
+                    <td>VistaJDBC</td>
+                    <td><link href="http://www.vistaportal.com/products/vistajdbc.htm">http://www.vistaportal.com/products/vistajdbc.htm</link></td>
+                    <td>VistaJDBC driver works with both StarOffice and Excel spreadsheets and
+                        can access data using standard SQL statements without any API programming.
+                        VistaJDBC also implemented ability to choose by not just rows and columns but by
+                        specific cells, ranges of cells, etc.
+                    </td>
+                </tr>
+                <tr>
+                    <td>Coldtags Excel Tag Library</td>
+                    <td><link href="http://www.servletsuite.com/servlets/exceltag.htm">http://www.servletsuite.com/servlets/exceltag.htm</link></td>
+                    <td>
+                        This library outputs a simple CSV file, in which cells can
+                        contain numbers or text.  You could output a CSV file without its
+                        help, but it gives a little more readability/structure to the code, and
+                        could be extended to handle more complexity.  When
+                        you invoke one of these JSP pages from your browser, you open up an Excel
+                        spreadsheet.  There's no formatting, worksheets, or anything fancy like that.
+                        So it's not strictly a competitor but it does the job.
+                    </td>
+                </tr>
+            </table>
+        </section>
+    </body>
+</document>
diff --git a/src/documentation/content/xdocs/hssf/book.xml b/src/documentation/content/xdocs/hssf/book.xml
new file mode 100644 (file)
index 0000000..a36db15
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../dtd/book-cocoon-v10.dtd">
+
+<book software="Poi Project"
+    title="HSSF"
+    copyright="@year@ Poi Project">
+
+    <menu label="Navigation">
+        <menu-item label="Main" href="../index.html"/>
+    </menu>
+
+    <menu label="HSSF">
+        <menu-item label="Quick Guide" href="quick-guide.html"/>
+        <menu-item label="HOWTO" href="how-to.html"/>
+        <menu-item label="Formula Support" href="formula.html" />
+        <menu-item label="Use Case" href="use-case.html"/>
+        <menu-item label="Pictorial Docs" href="diagrams.html"/>
+        <menu-item label="Alternatives" href="alternatives.html"/>
+        <menu-item label="Limitations" href="limitations.html"/>
+    </menu>
+
+    <menu label="Contributer's Guide">
+        <menu-item label="Hacking HSSF" href="hacking-hssf.html"/>
+        <menu-item label="Record Generator" href="record-generator.html"/>
+        <menu-item label="Charts" href="chart.html"/>
+    </menu>
+
+
+</book>
diff --git a/src/documentation/content/xdocs/hssf/chart.xml b/src/documentation/content/xdocs/hssf/chart.xml
new file mode 100644 (file)
index 0000000..55d2c83
--- /dev/null
@@ -0,0 +1,1508 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>Chart record information</title>
+        <authors>
+            <person email="glens@apache.org" name="Glen Stampoultzis" id="GS"/>
+        </authors>
+    </header>
+    <body>
+        <section><title>Introduction</title>
+            <p>
+                This document is intended as a work in progress for describing
+                our current understanding of how the chart records are are
+                written to produce a valid chart.
+            </p>
+        </section>
+        <section><title>Bar chart</title>
+            <p>
+                The following records detail the records written for a
+                'simple' bar chart.
+            </p>
+            <source>
+
+    ============================================
+    rectype = 0xec, recsize = 0xc8
+    -BEGIN DUMP---------------------------------
+    00000000 0F 00 02 F0 C0 00 00 00 10 00 08 F0 08 00 00 00 ................
+    00000010 02 00 00 00 02 04 00 00 0F 00 03 F0 A8 00 00 00 ................
+    00000020 0F 00 04 F0 28 00 00 00 01 00 09 F0 10 00 00 00 ....(...........
+    00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+    00000040 02 00 0A F0 08 00 00 00 00 04 00 00 05 00 00 00 ................
+    00000050 0F 00 04 F0 70 00 00 00 92 0C 0A F0 08 00 00 00 ....p...........
+    00000060 02 04 00 00 00 0A 00 00 93 00 0B F0 36 00 00 00 ............6...
+    00000070 7F 00 04 01 04 01 BF 00 08 00 08 00 81 01 4E 00 ..............N.
+    00000080 00 08 83 01 4D 00 00 08 BF 01 10 00 11 00 C0 01 ....M...........
+    00000090 4D 00 00 08 FF 01 08 00 08 00 3F 02 00 00 02 00 M.........?.....
+    000000A0 BF 03 00 00 08 00 00 00 10 F0 12 00 00 00 00 00 ................
+    000000B0 04 00 C0 02 0A 00 F4 00 0E 00 66 01 20 00 E9 00 ..........f. ...
+    000000C0 00 00 11 F0 00 00 00 00                         ........
+    -END DUMP-----------------------------------
+    recordid = 0xec, size =200
+    [UNKNOWN RECORD:ec]
+        .id        = ec
+    [/UNKNOWN RECORD]
+
+    ============================================
+    rectype = 0x5d, recsize = 0x1a
+    -BEGIN DUMP---------------------------------
+    00000000 15 00 12 00 05 00 02 00 11 60 00 00 00 00 B8 03 .........`......
+    00000010 87 03 00 00 00 00 00 00 00 00                   ..........
+    -END DUMP-----------------------------------
+    recordid = 0x5d, size =26
+    [UNKNOWN RECORD:5d]
+        .id        = 5d
+    [/UNKNOWN RECORD]
+
+    ============================================
+    rectype = 0x809, recsize = 0x10
+    -BEGIN DUMP---------------------------------
+    00000000 00 06 20 00 FE 1C CD 07 C9 40 00 00 06 01 00 00 .. ......@......
+    -END DUMP-----------------------------------
+    recordid = 0x809, size =16
+    [BOF RECORD]
+        .version         = 600
+        .type            = 20
+        .build           = 1cfe
+        .buildyear       = 1997
+        .history         = 40c9
+        .requiredversion = 106
+    [/BOF RECORD]
+
+    ============================================
+    rectype = 0x14, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x14, size =0
+    [HEADER]
+        .length         = 0
+        .header         = null
+    [/HEADER]
+
+    ============================================
+    rectype = 0x15, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x15, size =0
+    [FOOTER]
+        .footerlen      = 0
+        .footer         = null
+    [/FOOTER]
+
+    ============================================
+    rectype = 0x83, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 00 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x83, size =2
+    [HCENTER]
+        .hcenter        = false
+    [/HCENTER]
+
+    ============================================
+    rectype = 0x84, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 00 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x84, size =2
+    [VCENTER]
+        .vcenter        = false
+    [/VCENTER]
+
+    ============================================
+    rectype = 0xa1, recsize = 0x22
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 12 00 01 00 01 00 01 00 04 00 00 00 B8 03 ................
+    00000010 00 00 00 00 00 00 E0 3F 00 00 00 00 00 00 E0 3F .......?.......?
+    00000020 0F 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0xa1, size =34
+    [PRINTSETUP]
+        .papersize      = 0
+        .scale          = 18
+        .pagestart      = 1
+        .fitwidth       = 1
+        .fitheight      = 1
+        .options        = 4
+            .ltor       = false
+            .landscape  = false
+            .valid      = true
+            .mono       = false
+            .draft      = false
+            .notes      = false
+            .noOrientat = false
+            .usepage    = false
+        .hresolution    = 0
+        .vresolution    = 952
+        .headermargin   = 0.5
+        .footermargin   = 0.5
+        .copies         = 15
+    [/PRINTSETUP]
+
+    ============================================
+    rectype = 0x33, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 03 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x33, size =2
+    [UNKNOWN RECORD:33]
+        .id        = 33
+    [/UNKNOWN RECORD]
+
+    ============================================
+    rectype = 0x1060, recsize = 0xa
+    -BEGIN DUMP---------------------------------
+    00000000 A0 23 08 16 C8 00 00 00 05 00                   .#........
+    -END DUMP-----------------------------------
+    recordid = 0x1060, size =10
+    [FBI]
+        .xBasis               = 0x23A0 (9120 )
+        .yBasis               = 0x1608 (5640 )
+        .heightBasis          = 0x00C8 (200 )
+        .scale                = 0x0000 (0 )
+        .indexToFontTable     = 0x0005 (5 )
+    [/FBI]
+
+    ============================================
+    rectype = 0x1060, recsize = 0xa
+    -BEGIN DUMP---------------------------------
+    00000000 A0 23 08 16 C8 00 01 00 06 00                   .#........
+    -END DUMP-----------------------------------
+    recordid = 0x1060, size =10
+    [FBI]
+        .xBasis               = 0x23A0 (9120 )
+        .yBasis               = 0x1608 (5640 )
+        .heightBasis          = 0x00C8 (200 )
+        .scale                = 0x0001 (1 )
+        .indexToFontTable     = 0x0006 (6 )
+    [/FBI]
+
+    ============================================
+    rectype = 0x12, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 00 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x12, size =2
+    [PROTECT]
+        .rowheight      = 0
+    [/PROTECT]
+
+    ============================================
+    Offset 0xf22 (3874)
+    rectype = 0x1001, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 00 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1001, size =2
+    [UNITS]
+        .units                = 0x0000 (0 )
+    [/UNITS]
+
+    ============================================
+    Offset 0xf28 (3880)
+    rectype = 0x1002, recsize = 0x10
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 00 00 00 00 00 00 58 66 D0 01 40 66 22 01 ........Xf..@f".
+    -END DUMP-----------------------------------
+    recordid = 0x1002, size =16
+    [CHART]
+        .x                    = 0x00000000 (0 )
+        .y                    = 0x00000000 (0 )
+        .width                = 0x01D06658 (30434904 )
+        .height               = 0x01226640 (19031616 )
+    [/CHART]
+
+    ============================================
+    Offset 0xf3c (3900)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0xf40 (3904)
+    rectype = 0xa0, recsize = 0x4
+    -BEGIN DUMP---------------------------------
+    00000000 01 00 01 00                                     ....
+    -END DUMP-----------------------------------
+    recordid = 0xa0, size =4
+    [SCL]
+        .numerator            = 0x0001 (1 )
+        .denominator          = 0x0001 (1 )
+    [/SCL]
+
+    ============================================
+    Offset 0xf48 (3912)
+    rectype = 0x1064, recsize = 0x8
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 01 00 00 00 01 00                         ........
+    -END DUMP-----------------------------------
+    recordid = 0x1064, size =8
+    [PLOTGROWTH]
+        .horizontalScale      = 0x00010000 (65536 )
+        .verticalScale        = 0x00010000 (65536 )
+    [/PLOTGROWTH]
+
+    ============================================
+    Offset 0xf54 (3924)
+    rectype = 0x1032, recsize = 0x4
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 02 00                                     ....
+    -END DUMP-----------------------------------
+    recordid = 0x1032, size =4
+    [FRAME]
+        .borderType           = 0x0000 (0 )
+        .options              = 0x0002 (2 )
+             .autoSize                 = false
+             .autoPosition             = true
+    [/FRAME]
+
+    ============================================
+    Offset 0xf5c (3932)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0xf60 (3936)
+    rectype = 0x1007, recsize = 0xc
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 00 00 00 00 FF FF 09 00 4D 00             ..........M.
+    -END DUMP-----------------------------------
+    recordid = 0x1007, size =12
+    [LINEFORMAT]
+        .lineColor            = 0x00000000 (0 )
+        .linePattern          = 0x0000 (0 )
+        .weight               = 0xFFFF (-1 )
+        .format               = 0x0009 (9 )
+             .auto                     = true
+             .drawTicks                = false
+             .unknown                  = false
+        .colourPaletteIndex   = 0x004D (77 )
+    [/LINEFORMAT]
+
+    ============================================
+    Offset 0xf70 (3952)
+    rectype = 0x100a, recsize = 0x10
+    -BEGIN DUMP---------------------------------
+    00000000 FF FF FF 00 00 00 00 00 01 00 01 00 4E 00 4D 00 ............N.M.
+    -END DUMP-----------------------------------
+    recordid = 0x100a, size =16
+    [AREAFORMAT]
+        .foregroundColor      = 0x00FFFFFF (16777215 )
+        .backgroundColor      = 0x00000000 (0 )
+        .pattern              = 0x0001 (1 )
+        .formatFlags          = 0x0001 (1 )
+             .automatic                = true
+             .invert                   = false
+        .forecolorIndex       = 0x004E (78 )
+        .backcolorIndex       = 0x004D (77 )
+    [/AREAFORMAT]
+
+    ============================================
+    Offset 0xf84 (3972)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0xf88 (3976)
+    rectype = 0x1003, recsize = 0xc
+    -BEGIN DUMP---------------------------------
+    00000000 01 00 01 00 20 00 1F 00 01 00 00 00             .... .......
+    -END DUMP-----------------------------------
+    recordid = 0x1003, size =12
+    [SERIES]
+        .categoryDataType     = 0x0001 (1 )
+        .valuesDataType       = 0x0001 (1 )
+        .numCategories        = 0x0020 (32 )
+        .numValues            = 0x001F (31 )
+        .bubbleSeriesType     = 0x0001 (1 )
+        .numBubbleValues      = 0x0000 (0 )
+    [/SERIES]
+
+    ============================================
+    Offset 0xf98 (3992)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0xf9c (3996)
+    rectype = 0x1051, recsize = 0x8
+    -BEGIN DUMP---------------------------------
+    00000000 00 01 00 00 00 00 00 00                         ........
+    -END DUMP-----------------------------------
+    recordid = 0x1051, size =8
+    [AI]
+        .linkType             = 0x00 (0 )
+        .referenceType        = 0x01 (1 )
+        .options              = 0x0000 (0 )
+             .customNumberFormat       = false
+        .indexNumberFmtRecord = 0x0000 (0 )
+        .formulaOfLink        =  (org.apache.poi.hssf.record.LinkedDataFormulaField@1ee3914 )
+    [/AI]
+
+    ============================================
+    Offset 0xfa8 (4008)
+    rectype = 0x1051, recsize = 0x13
+    -BEGIN DUMP---------------------------------
+    00000000 01 02 00 00 00 00 0B 00 3B 00 00 00 00 1E 00 01 ........;.......
+    00000010 00 01 00                                        ...
+    -END DUMP-----------------------------------
+    recordid = 0x1051, size =19
+    [AI]
+        .linkType             = 0x01 (1 )
+        .referenceType        = 0x02 (2 )
+        .options              = 0x0000 (0 )
+             .customNumberFormat       = false
+        .indexNumberFmtRecord = 0x0000 (0 )
+        .formulaOfLink        =  (org.apache.poi.hssf.record.LinkedDataFormulaField@e5855a )
+    [/AI]
+
+    ============================================
+    Offset 0xfbf (4031)
+    rectype = 0x1051, recsize = 0x13
+    -BEGIN DUMP---------------------------------
+    00000000 02 02 00 00 69 01 0B 00 3B 00 00 00 00 1F 00 00 ....i...;.......
+    00000010 00 00 00                                        ...
+    -END DUMP-----------------------------------
+    recordid = 0x1051, size =19
+    [AI]
+        .linkType             = 0x02 (2 )
+        .referenceType        = 0x02 (2 )
+        .options              = 0x0000 (0 )
+             .customNumberFormat       = false
+        .indexNumberFmtRecord = 0x0169 (361 )
+        .formulaOfLink        =  (org.apache.poi.hssf.record.LinkedDataFormulaField@95fd19 )
+    [/AI]
+
+    ============================================
+    Offset 0xfd6 (4054)
+    rectype = 0x1051, recsize = 0x8
+    -BEGIN DUMP---------------------------------
+    00000000 03 01 00 00 00 00 00 00                         ........
+    -END DUMP-----------------------------------
+    recordid = 0x1051, size =8
+    [AI]
+        .linkType             = 0x03 (3 )
+        .referenceType        = 0x01 (1 )
+        .options              = 0x0000 (0 )
+             .customNumberFormat       = false
+        .indexNumberFmtRecord = 0x0000 (0 )
+        .formulaOfLink        =  (org.apache.poi.hssf.record.LinkedDataFormulaField@11b9fb1 )
+    [/AI]
+
+    ============================================
+    Offset 0xfe2 (4066)
+    rectype = 0x1006, recsize = 0x8
+    -BEGIN DUMP---------------------------------
+    00000000 FF FF 00 00 00 00 00 00                         ........
+    -END DUMP-----------------------------------
+    recordid = 0x1006, size =8
+    [DATAFORMAT]
+        .pointNumber          = 0xFFFF (-1 )
+        .seriesIndex          = 0x0000 (0 )
+        .seriesNumber         = 0x0000 (0 )
+        .formatFlags          = 0x0000 (0 )
+             .useExcel4Colors          = false
+    [/DATAFORMAT]
+
+    ============================================
+    Offset 0xfee (4078)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0xff2 (4082)
+    rectype = 0x105f, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 00 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x105f, size =2
+    [UNKNOWN RECORD]
+        .id        = 105f
+    [/UNKNOWN RECORD]
+
+    ============================================
+    Offset 0xff8 (4088)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0xffc (4092)
+    rectype = 0x1045, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 00 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1045, size =2
+    [SeriesToChartGroup]
+        .chartGroupIndex      = 0x0000 (0 )
+    [/SeriesToChartGroup]
+
+    ============================================
+    Offset 0x1002 (4098)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0x1006 (4102)
+    rectype = 0x1044, recsize = 0x4
+    -BEGIN DUMP---------------------------------
+    00000000 0A 00 00 00                                     ....
+    -END DUMP-----------------------------------
+    recordid = 0x1044, size =4
+    [SHTPROPS]
+        .flags                = 0x000A (10 )
+             .chartTypeManuallyFormatted     = false
+             .plotVisibleOnly          = true
+             .doNotSizeWithWindow      = false
+             .defaultPlotDimensions     = true
+             .autoPlotArea             = false
+        .empty                = 0x00 (0 )
+    [/SHTPROPS]
+
+    ============================================
+    Offset 0x100e (4110)
+    rectype = 0x1024, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 02 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1024, size =2
+    [DEFAULTTEXT]
+        .categoryDataType     = 0x0002 (2 )
+    [/DEFAULTTEXT]
+
+    ============================================
+    Offset 0x1014 (4116)
+    rectype = 0x1025, recsize = 0x20
+    -BEGIN DUMP---------------------------------
+    00000000 02 02 01 00 00 00 00 00 DB FF FF FF C4 FF FF FF ................
+    00000010 00 00 00 00 00 00 00 00 B1 00 4D 00 50 2B 00 00 ..........M.P+..
+    -END DUMP-----------------------------------
+    recordid = 0x1025, size =32
+    [TEXT]
+        .horizontalAlignment  = 0x02 (2 )
+        .verticalAlignment    = 0x02 (2 )
+        .displayMode          = 0x0001 (1 )
+        .rgbColor             = 0x00000000 (0 )
+        .x                    = 0xFFFFFFDB (-37 )
+        .y                    = 0xFFFFFFC4 (-60 )
+        .width                = 0x00000000 (0 )
+        .height               = 0x00000000 (0 )
+        .options1             = 0x00B1 (177 )
+             .autoColor                = true
+             .showKey                  = false
+             .showValue                = false
+             .vertical                 = false
+             .autoGeneratedText        = true
+             .generated                = true
+             .autoLabelDeleted         = false
+             .autoBackground           = true
+             .rotation                 = 0
+             .showCategoryLabelAsPercentage     = false
+             .showValueAsPercentage     = false
+             .showBubbleSizes          = false
+             .showLabel                = false
+        .indexOfColorValue    = 0x004D (77 )
+        .options2             = 0x2B50 (11088 )
+             .dataLabelPlacement       = 0
+        .textRotation         = 0x0000 (0 )
+    [/TEXT]
+
+    ============================================
+    Offset 0x1038 (4152)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0x103c (4156)
+    rectype = 0x104f, recsize = 0x14
+    -BEGIN DUMP---------------------------------
+    00000000 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+    00000010 00 00 00 00                                     ....
+    -END DUMP-----------------------------------
+    recordid = 0x104f, size =20
+    [UNKNOWN RECORD]
+        .id        = 104f
+    [/UNKNOWN RECORD]
+
+    ============================================
+    Offset 0x1054 (4180)
+    rectype = 0x1026, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 05 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1026, size =2
+    [FONTX]
+        .fontIndex            = 0x0005 (5 )
+    [/FONTX]
+
+    ============================================
+    Offset 0x105a (4186)
+    rectype = 0x1051, recsize = 0x8
+    -BEGIN DUMP---------------------------------
+    00000000 00 01 00 00 00 00 00 00                         ........
+    -END DUMP-----------------------------------
+    recordid = 0x1051, size =8
+    [AI]
+        .linkType             = 0x00 (0 )
+        .referenceType        = 0x01 (1 )
+        .options              = 0x0000 (0 )
+             .customNumberFormat       = false
+        .indexNumberFmtRecord = 0x0000 (0 )
+        .formulaOfLink        =  (org.apache.poi.hssf.record.LinkedDataFormulaField@913fe2 )
+    [/AI]
+
+    ============================================
+    Offset 0x1066 (4198)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0x106a (4202)
+    rectype = 0x1024, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 03 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1024, size =2
+    [DEFAULTTEXT]
+        .categoryDataType     = 0x0003 (3 )
+    [/DEFAULTTEXT]
+
+    ============================================
+    Offset 0x1070 (4208)
+    rectype = 0x1025, recsize = 0x20
+    -BEGIN DUMP---------------------------------
+    00000000 02 02 01 00 00 00 00 00 DB FF FF FF C4 FF FF FF ................
+    00000010 00 00 00 00 00 00 00 00 B1 00 4D 00 50 2B 00 00 ..........M.P+..
+    -END DUMP-----------------------------------
+    recordid = 0x1025, size =32
+    [TEXT]
+        .horizontalAlignment  = 0x02 (2 )
+        .verticalAlignment    = 0x02 (2 )
+        .displayMode          = 0x0001 (1 )
+        .rgbColor             = 0x00000000 (0 )
+        .x                    = 0xFFFFFFDB (-37 )
+        .y                    = 0xFFFFFFC4 (-60 )
+        .width                = 0x00000000 (0 )
+        .height               = 0x00000000 (0 )
+        .options1             = 0x00B1 (177 )
+             .autoColor                = true
+             .showKey                  = false
+             .showValue                = false
+             .vertical                 = false
+             .autoGeneratedText        = true
+             .generated                = true
+             .autoLabelDeleted         = false
+             .autoBackground           = true
+             .rotation                 = 0
+             .showCategoryLabelAsPercentage     = false
+             .showValueAsPercentage     = false
+             .showBubbleSizes          = false
+             .showLabel                = false
+        .indexOfColorValue    = 0x004D (77 )
+        .options2             = 0x2B50 (11088 )
+             .dataLabelPlacement       = 0
+        .textRotation         = 0x0000 (0 )
+    [/TEXT]
+
+    ============================================
+    Offset 0x1094 (4244)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0x1098 (4248)
+    rectype = 0x104f, recsize = 0x14
+    -BEGIN DUMP---------------------------------
+    00000000 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+    00000010 00 00 00 00                                     ....
+    -END DUMP-----------------------------------
+    recordid = 0x104f, size =20
+    [UNKNOWN RECORD]
+        .id        = 104f
+    [/UNKNOWN RECORD]
+
+    ============================================
+    Offset 0x10b0 (4272)
+    rectype = 0x1026, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 06 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1026, size =2
+    [FONTX]
+        .fontIndex            = 0x0006 (6 )
+    [/FONTX]
+
+    ============================================
+    Offset 0x10b6 (4278)
+    rectype = 0x1051, recsize = 0x8
+    -BEGIN DUMP---------------------------------
+    00000000 00 01 00 00 00 00 00 00                         ........
+    -END DUMP-----------------------------------
+    recordid = 0x1051, size =8
+    [AI]
+        .linkType             = 0x00 (0 )
+        .referenceType        = 0x01 (1 )
+        .options              = 0x0000 (0 )
+             .customNumberFormat       = false
+        .indexNumberFmtRecord = 0x0000 (0 )
+        .formulaOfLink        =  (org.apache.poi.hssf.record.LinkedDataFormulaField@1f934ad )
+    [/AI]
+
+    ============================================
+    Offset 0x10c2 (4290)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0x10c6 (4294)
+    rectype = 0x1046, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 01 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1046, size =2
+    [AXISUSED]
+        .numAxis              = 0x0001 (1 )
+    [/AXISUSED]
+
+    ============================================
+    Offset 0x10cc (4300)
+    rectype = 0x1041, recsize = 0x12
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 DF 01 00 00 DD 00 00 00 B3 0B 00 00 56 0B ..............V.
+    00000010 00 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1041, size =18
+    [AXISPARENT]
+        .axisType             = 0x0000 (0 )
+        .x                    = 0x000001DF (479 )
+        .y                    = 0x000000DD (221 )
+        .width                = 0x00000BB3 (2995 )
+        .height               = 0x00000B56 (2902 )
+    [/AXISPARENT]
+
+    ============================================
+    Offset 0x10e2 (4322)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0x10e6 (4326)
+    rectype = 0x104f, recsize = 0x14
+    -BEGIN DUMP---------------------------------
+    00000000 02 00 02 00 3A 00 00 00 5E 00 00 00 58 0D 00 00 ....:...^...X...
+    00000010 E5 0E 00 00                                     ....
+    -END DUMP-----------------------------------
+    recordid = 0x104f, size =20
+    [UNKNOWN RECORD]
+        .id        = 104f
+    [/UNKNOWN RECORD]
+
+    ============================================
+    Offset 0x10fe (4350)
+    rectype = 0x101d, recsize = 0x12
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+    00000010 00 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x101d, size =18
+    [AXIS]
+        .axisType             = 0x0000 (0 )
+        .reserved1            = 0x00000000 (0 )
+        .reserved2            = 0x00000000 (0 )
+        .reserved3            = 0x00000000 (0 )
+        .reserved4            = 0x00000000 (0 )
+    [/AXIS]
+
+    ============================================
+    Offset 0x1114 (4372)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0x1118 (4376)
+    rectype = 0x1020, recsize = 0x8
+    -BEGIN DUMP---------------------------------
+    00000000 01 00 01 00 01 00 01 00                         ........
+    -END DUMP-----------------------------------
+    recordid = 0x1020, size =8
+    [CATSERRANGE]
+        .crossingPoint        = 0x0001 (1 )
+        .labelFrequency       = 0x0001 (1 )
+        .tickMarkFrequency    = 0x0001 (1 )
+        .options              = 0x0001 (1 )
+             .valueAxisCrossing        = true
+             .crossesFarRight          = false
+             .reversed                 = false
+    [/CATSERRANGE]
+
+    ============================================
+    Offset 0x1124 (4388)
+    rectype = 0x1062, recsize = 0x12
+    -BEGIN DUMP---------------------------------
+    00000000 1C 90 39 90 02 00 00 00 01 00 00 00 00 00 1C 90 ..9.............
+    00000010 FF 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1062, size =18
+    [AXCEXT]
+        .minimumCategory      = 0x901C (-28644 )
+        .maximumCategory      = 0x9039 (-28615 )
+        .majorUnitValue       = 0x0002 (2 )
+        .majorUnit            = 0x0000 (0 )
+        .minorUnitValue       = 0x0001 (1 )
+        .minorUnit            = 0x0000 (0 )
+        .baseUnit             = 0x0000 (0 )
+        .crossingPoint        = 0x901C (-28644 )
+        .options              = 0x00FF (255 )
+             .defaultMinimum           = true
+             .defaultMaximum           = true
+             .defaultMajor             = true
+             .defaultMinorUnit         = true
+             .isDate                   = true
+             .defaultBase              = true
+             .defaultCross             = true
+             .defaultDateSettings      = true
+    [/AXCEXT]
+
+    ============================================
+    Offset 0x113a (4410)
+    rectype = 0x101e, recsize = 0x1e
+    -BEGIN DUMP---------------------------------
+    00000000 02 00 03 01 00 00 00 00 00 00 00 00 00 00 00 00 ................
+    00000010 00 00 00 00 00 00 00 00 23 00 4D 00 2D 00       ........#.M.-.
+    -END DUMP-----------------------------------
+    recordid = 0x101e, size =30
+    [TICK]
+        .majorTickType        = 0x02 (2 )
+        .minorTickType        = 0x00 (0 )
+        .labelPosition        = 0x03 (3 )
+        .background           = 0x01 (1 )
+        .labelColorRgb        = 0x00000000 (0 )
+        .zero1                = 0x0000 (0 )
+        .zero2                = 0x0000 (0 )
+        .options              = 0x0023 (35 )
+             .autoTextColor            = true
+             .autoTextBackground       = true
+             .rotation                 = 0
+             .autorotate               = true
+        .tickColor            = 0x004D (77 )
+        .zero3                = 0x002D (45 )
+    [/TICK]
+
+    ============================================
+    Offset 0x115c (4444)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0x1160 (4448)
+    rectype = 0x101d, recsize = 0x12
+    -BEGIN DUMP---------------------------------
+    00000000 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+    00000010 00 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x101d, size =18
+    [AXIS]
+        .axisType             = 0x0001 (1 )
+        .reserved1            = 0x00000000 (0 )
+        .reserved2            = 0x00000000 (0 )
+        .reserved3            = 0x00000000 (0 )
+        .reserved4            = 0x00000000 (0 )
+    [/AXIS]
+
+    ============================================
+    Offset 0x1176 (4470)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0x117a (4474)
+    rectype = 0x101f, recsize = 0x2a
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+    00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+    00000020 00 00 00 00 00 00 00 00 1F 01                   ..........
+    -END DUMP-----------------------------------
+    recordid = 0x101f, size =42
+    [VALUERANGE]
+        .minimumAxisValue     =  (0.0 )
+        .maximumAxisValue     =  (0.0 )
+        .majorIncrement       =  (0.0 )
+        .minorIncrement       =  (0.0 )
+        .categoryAxisCross    =  (0.0 )
+        .options              = 0x011F (287 )
+             .automaticMinimum         = true
+             .automaticMaximum         = true
+             .automaticMajor           = true
+             .automaticMinor           = true
+             .automaticCategoryCrossing     = true
+             .logarithmicScale         = false
+             .valuesInReverse          = false
+             .crossCategoryAxisAtMaximum     = false
+             .reserved                 = true
+    [/VALUERANGE]
+
+    ============================================
+    Offset 0x11a8 (4520)
+    rectype = 0x101e, recsize = 0x1e
+    -BEGIN DUMP---------------------------------
+    00000000 02 00 03 01 00 00 00 00 00 00 00 00 00 00 00 00 ................
+    00000010 00 00 00 00 00 00 00 00 23 00 4D 00 00 00       ........#.M...
+    -END DUMP-----------------------------------
+    recordid = 0x101e, size =30
+    [TICK]
+        .majorTickType        = 0x02 (2 )
+        .minorTickType        = 0x00 (0 )
+        .labelPosition        = 0x03 (3 )
+        .background           = 0x01 (1 )
+        .labelColorRgb        = 0x00000000 (0 )
+        .zero1                = 0x0000 (0 )
+        .zero2                = 0x0000 (0 )
+        .options              = 0x0023 (35 )
+             .autoTextColor            = true
+             .autoTextBackground       = true
+             .rotation                 = 0
+             .autorotate               = true
+        .tickColor            = 0x004D (77 )
+        .zero3                = 0x0000 (0 )
+    [/TICK]
+
+    ============================================
+    Offset 0x11ca (4554)
+    rectype = 0x1021, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 01 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1021, size =2
+    [AXISLINEFORMAT]
+        .axisType             = 0x0001 (1 )
+    [/AXISLINEFORMAT]
+
+    ============================================
+    Offset 0x11d0 (4560)
+    rectype = 0x1007, recsize = 0xc
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 00 00 00 00 FF FF 09 00 4D 00             ..........M.
+    -END DUMP-----------------------------------
+    recordid = 0x1007, size =12
+    [LINEFORMAT]
+        .lineColor            = 0x00000000 (0 )
+        .linePattern          = 0x0000 (0 )
+        .weight               = 0xFFFF (-1 )
+        .format               = 0x0009 (9 )
+             .auto                     = true
+             .drawTicks                = false
+             .unknown                  = false
+        .colourPaletteIndex   = 0x004D (77 )
+    [/LINEFORMAT]
+
+    ============================================
+    Offset 0x11e0 (4576)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0x11e4 (4580)
+    rectype = 0x1035, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1035, size =0
+    [PLOTAREA]
+    [/PLOTAREA]
+
+    ============================================
+    Offset 0x11e8 (4584)
+    rectype = 0x1032, recsize = 0x4
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 03 00                                     ....
+    -END DUMP-----------------------------------
+    recordid = 0x1032, size =4
+    [FRAME]
+        .borderType           = 0x0000 (0 )
+        .options              = 0x0003 (3 )
+             .autoSize                 = true
+             .autoPosition             = true
+    [/FRAME]
+
+    ============================================
+    Offset 0x11f0 (4592)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0x11f4 (4596)
+    rectype = 0x1007, recsize = 0xc
+    -BEGIN DUMP---------------------------------
+    00000000 80 80 80 00 00 00 00 00 00 00 17 00             ............
+    -END DUMP-----------------------------------
+    recordid = 0x1007, size =12
+    [LINEFORMAT]
+        .lineColor            = 0x00808080 (8421504 )
+        .linePattern          = 0x0000 (0 )
+        .weight               = 0x0000 (0 )
+        .format               = 0x0000 (0 )
+             .auto                     = false
+             .drawTicks                = false
+             .unknown                  = false
+        .colourPaletteIndex   = 0x0017 (23 )
+    [/LINEFORMAT]
+
+    ============================================
+    Offset 0x1204 (4612)
+    rectype = 0x100a, recsize = 0x10
+    -BEGIN DUMP---------------------------------
+    00000000 C0 C0 C0 00 00 00 00 00 01 00 00 00 16 00 4F 00 ..............O.
+    -END DUMP-----------------------------------
+    recordid = 0x100a, size =16
+    [AREAFORMAT]
+        .foregroundColor      = 0x00C0C0C0 (12632256 )
+        .backgroundColor      = 0x00000000 (0 )
+        .pattern              = 0x0001 (1 )
+        .formatFlags          = 0x0000 (0 )
+             .automatic                = false
+             .invert                   = false
+        .forecolorIndex       = 0x0016 (22 )
+        .backcolorIndex       = 0x004F (79 )
+    [/AREAFORMAT]
+
+    ============================================
+    Offset 0x1218 (4632)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0x121c (4636)
+    rectype = 0x1014, recsize = 0x14
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+    00000010 00 00 00 00                                     ....
+    -END DUMP-----------------------------------
+    recordid = 0x1014, size =20
+    [CHARTFORMAT]
+        .xPosition       = 0
+        .yPosition       = 0
+        .width           = 0
+        .height          = 0
+        .grBit           = 0
+    [/CHARTFORMAT]
+
+    ============================================
+    Offset 0x1234 (4660)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0x1238 (4664)
+    rectype = 0x1017, recsize = 0x6
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 96 00 00 00                               ......
+    -END DUMP-----------------------------------
+    recordid = 0x1017, size =6
+    [BAR]
+        .barSpace             = 0x0000 (0 )
+        .categorySpace        = 0x0096 (150 )
+        .formatFlags          = 0x0000 (0 )
+             .horizontal               = false
+             .stacked                  = false
+             .displayAsPercentage      = false
+             .shadow                   = false
+    [/BAR]
+
+    ============================================
+    Offset 0x1242 (4674)
+    rectype = 0x1022, recsize = 0xa
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 00 00 00 00 00 00 0F 00                   ..........
+    -END DUMP-----------------------------------
+    recordid = 0x1022, size =10
+    [UNKNOWN RECORD]
+        .id        = 1022
+    [/UNKNOWN RECORD]
+
+    ============================================
+    Offset 0x1250 (4688)
+    rectype = 0x1015, recsize = 0x14
+    -BEGIN DUMP---------------------------------
+    00000000 D6 0D 00 00 1E 06 00 00 B5 01 00 00 D5 00 00 00 ................
+    00000010 03 01 1F 00                                     ....
+    -END DUMP-----------------------------------
+    recordid = 0x1015, size =20
+    [LEGEND]
+        .xAxisUpperLeft       = 0x00000DD6 (3542 )
+        .yAxisUpperLeft       = 0x0000061E (1566 )
+        .xSize                = 0x000001B5 (437 )
+        .ySize                = 0x000000D5 (213 )
+        .type                 = 0x03 (3 )
+        .spacing              = 0x01 (1 )
+        .options              = 0x001F (31 )
+             .autoPosition             = true
+             .autoSeries               = true
+             .autoXPositioning         = true
+             .autoYPositioning         = true
+             .vertical                 = true
+             .dataTable                = false
+    [/LEGEND]
+
+    ============================================
+    Offset 0x1268 (4712)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0x126c (4716)
+    rectype = 0x104f, recsize = 0x14
+    -BEGIN DUMP---------------------------------
+    00000000 05 00 02 00 D6 0D 00 00 1E 06 00 00 00 00 00 00 ................
+    00000010 00 00 00 00                                     ....
+    -END DUMP-----------------------------------
+    recordid = 0x104f, size =20
+    [UNKNOWN RECORD]
+        .id        = 104f
+    [/UNKNOWN RECORD]
+
+    ============================================
+    Offset 0x1284 (4740)
+    rectype = 0x1025, recsize = 0x20
+    -BEGIN DUMP---------------------------------
+    00000000 02 02 01 00 00 00 00 00 DB FF FF FF C4 FF FF FF ................
+    00000010 00 00 00 00 00 00 00 00 B1 00 4D 00 70 37 00 00 ..........M.p7..
+    -END DUMP-----------------------------------
+    recordid = 0x1025, size =32
+    [TEXT]
+        .horizontalAlignment  = 0x02 (2 )
+        .verticalAlignment    = 0x02 (2 )
+        .displayMode          = 0x0001 (1 )
+        .rgbColor             = 0x00000000 (0 )
+        .x                    = 0xFFFFFFDB (-37 )
+        .y                    = 0xFFFFFFC4 (-60 )
+        .width                = 0x00000000 (0 )
+        .height               = 0x00000000 (0 )
+        .options1             = 0x00B1 (177 )
+             .autoColor                = true
+             .showKey                  = false
+             .showValue                = false
+             .vertical                 = false
+             .autoGeneratedText        = true
+             .generated                = true
+             .autoLabelDeleted         = false
+             .autoBackground           = true
+             .rotation                 = 0
+             .showCategoryLabelAsPercentage     = false
+             .showValueAsPercentage     = false
+             .showBubbleSizes          = false
+             .showLabel                = false
+        .indexOfColorValue    = 0x004D (77 )
+        .options2             = 0x3770 (14192 )
+             .dataLabelPlacement       = 0
+        .textRotation         = 0x0000 (0 )
+    [/TEXT]
+
+    ============================================
+    Offset 0x12a8 (4776)
+    rectype = 0x1033, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1033, size =0
+    [BEGIN]
+    [/BEGIN]
+
+    ============================================
+    Offset 0x12ac (4780)
+    rectype = 0x104f, recsize = 0x14
+    -BEGIN DUMP---------------------------------
+    00000000 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+    00000010 00 00 00 00                                     ....
+    -END DUMP-----------------------------------
+    recordid = 0x104f, size =20
+    [UNKNOWN RECORD]
+        .id        = 104f
+    [/UNKNOWN RECORD]
+
+    ============================================
+    Offset 0x12c4 (4804)
+    rectype = 0x1051, recsize = 0x8
+    -BEGIN DUMP---------------------------------
+    00000000 00 01 00 00 00 00 00 00                         ........
+    -END DUMP-----------------------------------
+    recordid = 0x1051, size =8
+    [AI]
+        .linkType             = 0x00 (0 )
+        .referenceType        = 0x01 (1 )
+        .options              = 0x0000 (0 )
+             .customNumberFormat       = false
+        .indexNumberFmtRecord = 0x0000 (0 )
+        .formulaOfLink        =  (org.apache.poi.hssf.record.LinkedDataFormulaField@1d05c81 )
+    [/AI]
+
+    ============================================
+    Offset 0x12d0 (4816)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0x12d4 (4820)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0x12d8 (4824)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0x12dc (4828)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    Offset 0x12e0 (4832)
+    rectype = 0x1034, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0x1034, size =0
+    [END]
+    [/END]
+
+    ============================================
+    rectype = 0x200, recsize = 0xe
+    -BEGIN DUMP---------------------------------
+    00000000 00 00 00 00 1F 00 00 00 00 00 01 00 00 00       ..............
+    -END DUMP-----------------------------------
+    recordid = 0x200, size =14
+    [DIMENSIONS]
+        .firstrow       = 0
+        .lastrow        = 1f
+        .firstcol       = 0
+        .lastcol        = 1
+        .zero           = 0
+    [/DIMENSIONS]
+
+    ============================================
+    rectype = 0x1065, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 02 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1065, size =2
+    [SINDEX]
+        .index                = 0x0002 (2 )
+    [/SINDEX]
+
+    ============================================
+    rectype = 0x1065, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 01 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1065, size =2
+    [SINDEX]
+        .index                = 0x0001 (1 )
+    [/SINDEX]
+
+    ============================================
+    rectype = 0x1065, recsize = 0x2
+    -BEGIN DUMP---------------------------------
+    00000000 03 00                                           ..
+    -END DUMP-----------------------------------
+    recordid = 0x1065, size =2
+    [SINDEX]
+        .index                = 0x0003 (3 )
+    [/SINDEX]
+
+    ============================================
+    rectype = 0xa, recsize = 0x0
+    -BEGIN DUMP---------------------------------
+    **NO RECORD DATA**
+    -END DUMP-----------------------------------
+    recordid = 0xa, size =0
+    [EOF]
+    [/EOF]
+
+
+            </source>
+            <p>
+                The next section breaks those records down into an easier
+                to read format:
+            </p>
+            <source>
+[UNKNOWN RECORD:ec]
+[UNKNOWN RECORD:5d]
+[BOF RECORD]
+    [HEADER]
+    [FOOTER]
+    [HCENTER]
+    [VCENTER]
+    [PRINTSETUP]
+    [UNKNOWN RECORD:33]
+    [FBI]
+    [FBI]
+    [PROTECT]
+    [UNITS]
+    [CHART]
+    [BEGIN]
+        [SCL]                 // zoom magnification
+        [PLOTGROWTH]          // font scaling
+        [FRAME]               // border around text
+        [BEGIN]               // default line and area format
+            [LINEFORMAT]
+            [AREAFORMAT]
+        [END]
+        [SERIES]              // start of series
+        [BEGIN]
+            [AI]              // LINK_TYPE_TITLE_OR_TEXT
+            [AI]              // LINK_TYPE_VALUES
+            [AI]              // LINK_TYPE_CATEGORIES
+            [AI]              // ??
+            [DATAFORMAT]      // Formatting applies to series?
+            [BEGIN]           // ??
+                [UNKNOWN RECORD]
+            [END]
+            [SeriesToChartGroup] // Used to support > 1 chart?
+        [END]
+        [SHTPROPS]            // Some defaults for how chart is displayed.
+        [DEFAULTTEXT]         // Describes the characteristics of the next
+                              // record
+        [TEXT]                // Details of the text that follows in the
+                              // next section
+        [BEGIN]
+            [UNKNOWN RECORD]  // POS record... looks like I missed this one.
+                              // docs seem to indicate it's better to use
+                              // defaults...
+            [FONTX]           // index to font record.
+            [AI]              // link to text?  seems to be linking to nothing
+        [END]
+        [DEFAULTTEXT]         // contains a category type of 3 which is not
+                              // documented (sigh).
+        [TEXT]                // defines position, color etc for text on chart.
+        [BEGIN]
+            [UNKNOWN RECORD]  // Another pos record
+            [FONTX]           // font
+            [AI]              // reference type is DIRECT (not sure what this
+                              // means)
+        [END]
+        [AXISUSED]            // number of axis on the chart.
+        [AXISPARENT]          // axis size and location
+        [BEGIN]               // beginning of axis details
+            [UNKNOWN RECORD]        // Another pos record.
+            [AXIS]                  // Category axis
+            [BEGIN]
+                [CATSERRANGE]       // defines tick marks and other stuff
+                [AXCEXT]            // unit information
+                [TICK]              // tick formating characteristics
+            [END]
+            [AXIS]                  // Value axis
+            [BEGIN]
+                [VALUERANGE]        // defines tick marks and other stuff
+                [TICK]              // tick formating characteristics
+                [AXISLINEFORMAT]    // major grid line axis format
+                [LINEFORMAT]        // what do the lines look like?
+            [END]
+            [PLOTAREA]              // marks that the frame following belongs
+                                    // to the frame.
+            [FRAME]                 // border
+            [BEGIN]
+                [LINEFORMAT]        // border line
+                [AREAFORMAT]        // border area
+            [END]
+            [CHARTFORMAT]           // marks a chart group
+            [BEGIN]
+                [BAR]               // indicates a bar chart
+                [UNKNOWN RECORD]    // apparently this record is ignoreable
+                [LEGEND]            // positioning for the legend
+                [BEGIN]
+                    [UNKNOWN RECORD]    // another position record.
+                    [TEXT]              // details of the text that follows
+                                        // in the next section
+                    [BEGIN]
+                        [UNKNOWN RECORD]  // yet another pos record
+                        [AI]              // another link (of type direct)
+                    [END]
+                [END]
+            [END]
+        [END]
+    [END]
+    [DIMENSIONS]
+    [SINDEX]
+    [SINDEX]
+    [SINDEX]
+[EOF]
+            </source>
+            <p>
+                Just a quick note on some of the unknown records:
+            </p>
+            <ul>
+                <li>EC: MSODRAWING - A Microsoft drawing record. (Need to
+                track down where this is documented).</li>
+                <li>5D: OBJ: Description of a drawing object. (This is going to
+                be a PITA to implement).</li>
+                <li>33: Not documented. :-(</li>
+                <li>105f: Not documented.  :-(</li>
+                <li>104f: POS: Position record (should be able to safely leave this out).</li>
+                <li>1022: CHARTFORMATLINK: Can be left out.</li>
+            </ul>
+            <p>
+                It is currently suspected that many of those records could be
+                left out when generating a bar chart from scratch.  The way
+                we will be proceeding with this is to write code that generates
+                most of these records and then start removing them to see
+                how this effects the chart in excel.
+            </p>
+        </section>
+        <section><title>Inserting the Chart into the Workbook</title>
+            <ul>
+                <li>
+                    Unknown record (sid=00eb) is inserted before the SST
+                    record.
+                </li>
+            </ul>
+                <source>
+    ============================================
+    rectype = 0xeb, recsize = 0x5a
+    -BEGIN DUMP---------------------------------
+    00000000 0F 00 00 F0 52 00 00 00 00 00 06 F0 18 00 00 00 ....R...........
+    00000010 01 08 00 00 02 00 00 00 02 00 00 00 01 00 00 00 ................
+    00000020 01 00 00 00 03 00 00 00 33 00 0B F0 12 00 00 00 ........3.......
+    00000030 BF 00 08 00 08 00 81 01 09 00 00 08 C0 01 40 00 ..............@.
+    00000040 00 08 40 00 1E F1 10 00 00 00 0D 00 00 08 0C 00 ..@.............
+    00000050 00 08 17 00 00 08 F7 00 00 10                   ..........
+    -END DUMP-----------------------------------
+    recordid = 0xeb, size =90
+    [UNKNOWN RECORD:eb]
+        .id        = eb
+    [/UNKNOWN RECORD]
+
+    ============================================
+                </source>
+            <ul>
+                <li>
+                    Any extra font records are inserted as needed
+                </li>
+                <li>
+                    Chart records inserted after DBCell records.
+                </li>
+            </ul>
+        </section>
+    </body>
+</document>
\ No newline at end of file
diff --git a/src/documentation/content/xdocs/hssf/diagram1.xml b/src/documentation/content/xdocs/hssf/diagram1.xml
new file mode 100644 (file)
index 0000000..1dcb935
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>HSSF</title>
+        <subtitle>Overview</subtitle>
+        <authors>
+            <person name="Andrew C. Oliver" email="acoliver@apache.org"/>
+            <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+        </authors>
+    </header>
+
+    <body>
+        <section>
+            <title>Usermodel Class Diagram by Matthew Young</title>
+            <p>
+            <img src="images/usermodel.gif" alt="Usermodel"/>
+            </p>
+        </section>
+    </body>
+</document>
diff --git a/src/documentation/content/xdocs/hssf/diagrams.xml b/src/documentation/content/xdocs/hssf/diagrams.xml
new file mode 100644 (file)
index 0000000..9192381
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>HSSF</title>
+  <subtitle>Overview</subtitle>
+  <authors>
+   <person name="Andrew C. Oliver" email="acoliver@apache.org"/>     
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>     
+  </authors>
+ </header>
+
+ <body>
+ <section><title>Overview</title>
+        <p>
+                This section is intended for diagrams (UML/etc) that help
+                explain HSSF. 
+        </p>
+        <ul>
+               <li>
+                      <link href="diagram1.html">HSSF usermodel class diagram</link> -                
+                      by Matthew Young (myoung at westernasset dot com)
+               </li>
+        </ul>
+        <p>
+                Have more?  Add a new &quot;bug&quot; 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 &lt; 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.
+        </p>
+  </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/hssf/formula.xml b/src/documentation/content/xdocs/hssf/formula.xml
new file mode 100644 (file)
index 0000000..d128995
--- /dev/null
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>Formula Support</title>
+        <authors>
+            <person email="avik@apache.org" name="Avik Sengupta" id="AS"/>
+        </authors>
+    </header>
+    <body>
+        <section><title>Introduction</title>
+            <p>
+                This document describes the current state of formula support in POI. 
+                The information in this document applies to the 2.0-dev version of POI (i.e. CVS HEAD). 
+                Since this area is a work in progress, this document will be updated with new features as and 
+                when they are added. 
+            </p>
+           
+        </section>
+        <section><title>The basics</title>
+              <p>
+                In org.apache.poi.hssf.usermodel.HSSFCell
+                    <strong> setCellFormula(&quot;formulaString&quot;) </strong> is used to add a formula to sheet and 
+                    <strong> getCellFormula() </strong> is used to retrieve the string representation of a formula. 
+                </p>
+            <p>
+                We aim to support the complete excel grammer for formulas. Thus, the string that you pass in 
+                to the <em> setCellFormula </em> call should be what you expect to type into excel. Also, note
+                that you should NOT add a "=" to the front of the string.  
+            </p>
+        </section>
+        <section><title>Supported Features</title>
+        <ul>
+             <li>Cell References</li>
+             <li>String, integer and floating point literals</li>
+              <li>Area references</li>
+              <li>Relative or absolute references</li>
+              <li>Arithmetic Operators</li>
+              <li>Sheet Functions</li>
+        </ul>
+        </section>
+        <section><title>Partially supported</title>
+            <ul>
+                <li>
+                   The formula parser now has the ability to parse formulas containing strings. However
+                   formulas that return a string value are not yet supported. 
+                   </li>
+                <li>Formula tokens in Excel are stored in one of three possible <em> classes </em>:
+                    Reference, Value and Array. Based on the location of a token, its class can change
+                    in complicated and undocumented ways. While we have support for most cases, we
+                    are not sure if we have covered all bases (since there is no documentation for this area.)
+                    We would therefore like you to report any
+                    occurence of #VALUE! in a cell upon opening a POI generated workbook in excel. (Check that
+                    typing the formula into Excel directly gives a valid result.)
+            </li>
+                    
+            </ul>
+        </section>
+        <section><title>Not yet supported</title>
+            <ul>
+                <li>Array formulas</li>
+                <li>Formulas with logical operations (IF) </li>
+                    <li>Sheet References in formulas</li>
+                    <li>Everything else :) </li>
+            </ul>
+        </section>
+
+        <section><title>Internals</title>
+            <p>
+                Formulas in Excel are stored as  sequences of tokens in Reverse Polish Notation order. The 
+                <link href="http://sc.openoffice.org/excelfileformat.pdf">open office XLS spec</link> is the best
+                documentation you will find for the format.
+            </p>
+
+            <p>
+                The tokens used by excel are modelled as individual *Ptg classes in the <strong>
+                org.apache.poi.hssf.record.formula</strong> package. 
+            </p>
+            <p>
+                The task of parsing a formula string into an array of RPN ordered tokens is done by the <strong>
+                org.apache.poi.hssf.record.formula.FormulaParser</strong> class. This class implements a hand 
+                written recursive descent parser. 
+            </p>
+            <p>Check out the <link href="http://jakarta.apache.org/poi/javadocs/">javadocs </link> for details. 
+            </p>
+        </section>
+       
+    </body>
+</document>
\ No newline at end of file
diff --git a/src/documentation/content/xdocs/hssf/hacking-hssf.xml b/src/documentation/content/xdocs/hssf/hacking-hssf.xml
new file mode 100644 (file)
index 0000000..81879d0
--- /dev/null
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>Hacking HSSF</title>
+        <authors>
+            <person email="glens@apache.org" name="Glen Stampoultzis" id="GJS"/>
+            <person email="acoliver@apache.org" name="Andrew Oliver" id="AO"/>
+        </authors>
+    </header>
+    <body>
+        <section><title>Where Can I Find Documentation on Feature X</title>
+            <p>
+                You might find the
+                'Excel 97 Developer's Kit' (out of print, Microsoft Press, no
+                restrictive covenants, available on Amazon.com) helpful for
+                understanding the file format.
+            </p>
+            <p>
+                Also useful is the <link href="http://sc.openoffice.org/excelfileformat.pdf">open office XLS spec</link>.  We
+                are collaborating with the maintainer of the spec so if you think you can add something to their
+                document just send through your changes.
+            </p>
+        </section>
+        <section><title>Help, I Can't Find Feature X Documented Anywhere</title>
+            <ol>
+                <li>
+                Look at OpenOffice.org or Gnumeric sources if its implemented there.
+                </li>
+                <li>
+                Use org.apache.poi.hssf.dev.BiffViewer to view the structure of the
+                file.  Experiment by adding one criteria entry at a time.  See what it
+                does to the structure, infer behavior and structure from it.  Using the
+                unix diff command (or get cygwin from www.cygwin.com for windows) you
+                can figure out a lot very quickly. Unimplemented records show up as
+                'UNKNOWN' and prints a hex dump.
+                </li>
+            </ol>
+        </section>
+        <section><title>Low-level Record Generation</title>
+            <p>
+                Low level records can be time consuming to created.  We created a record
+                generator to help generate some of the simpler tasks.
+            </p>
+            <p>
+                We use XML
+                descriptors to generate the Java code (which sure beats the heck out of
+                the PERL scripts originally used ;-) for low level records.  The
+                generator is kinda alpha-ish right now and could use some enhancement,
+                so you may find that to be about 1/2 of the work.  Notice this is in
+                org.apache.poi.hssf.record.definitions.
+            </p>
+        </section>
+        <section><title>Important Notice</title>
+            <p>One thing to note:  If you are making a large code contribution we need to ensure
+            any participants in this process have never
+            signed a "Non Disclosure Agreement" with Microsoft, and have not
+            received any information covered by such an agreement.  If they have
+            they'll not be able to participate in the POI project.  For large contributions we
+            may ask you to sign an agreement.</p>
+        </section>
+        <section><title>What Can I Work On?</title>
+            <p>Check our <link href="../todo.html">todo list</link> or simply look for missing functionality.  Start small
+            and work your way up.</p>
+        </section>
+        <section><title>What Else Should I Know?</title>
+            <p>Make sure you <link href="http://jakarta.apache.org/poi/contrib.html">read the contributing section</link>
+            as it contains more generation information about contributing to Poi in general.</p>
+        </section>
+    </body>
+</document>
\ No newline at end of file
diff --git a/src/documentation/content/xdocs/hssf/how-to.xml b/src/documentation/content/xdocs/hssf/how-to.xml
new file mode 100644 (file)
index 0000000..52d64b3
--- /dev/null
@@ -0,0 +1,502 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>The New Halloween Document</title>
+        <authors>
+            <person email="acoliver2@users.sourceforge.net" name="Andrew C. Oliver" id="AO"/>
+            <person email="glens@apache.org" name="Glen Stampoultzis" id="GJS"/>
+            <person email="sergeikozello@mail.ru" name="Sergei Kozello" id="SK"/>
+        </authors>
+    </header>
+  <body>
+    <section><title>How to use the HSSF prototype API</title>
+
+        <section><title>Capabilities</title>
+            <p>This release of the how-to outlines functionality for the CVS HEAD.
+            Those looking for information on previous releases should
+            look in the documentation distributed with that release.</p>
+            <p>
+              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 both built-in and user 
+             defined 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.</p>
+        </section>
+    <section><title>General Use</title>
+        <section><title>User API</title>
+                <section><title>Writing a new one</title>
+
+                    <p>The high level API (package: org.apache.poi.hssf.usermodel)
+                    is what most people should use. Usage is very simple.
+                    </p>
+                    <p>Workbooks are created by creating an instance of
+                    org.apache.poi.hssf.usermodel.HSSFWorkbook.
+                    </p>
+                    <p>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,&quot;SheetName&quot;,encoding).
+                    The name may be in 8bit format (HSSFWorkbook.ENCODING_COMPRESSED_UNICODE)
+                    or Unicode (HSSFWorkbook.ENCODING_UTF_16). Default encoding is 8bit per char.
+                    </p>
+                    <p>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.
+                    </p>
+                    <p>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).</p>
+                    <p>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).
+                    </p>
+                    <p>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.
+                    </p>
+                    <p>Here is some example code (excerpted and adapted from
+                    org.apache.poi.hssf.dev.HSSF test class):</p>
+<source><![CDATA[
+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();
+HSSFDataFormat df = wb.createDataFormat();
+// 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 blue
+f.setColor( (short)0xc );
+// make it bold
+//arial is the default font
+f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+
+//set font 2 to 10 point type
+f2.setFontHeightInPoints((short) 10);
+//make it red
+f2.setColor( (short)HSSFFont.COLOR_RED );
+//make it bold
+f2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+
+f2.setStrikeout( true );
+
+//set cell stlye
+cs.setFont(f);
+//set the cell format 
+cs.setDataFormat(df.getFormat("#,##0.0"));
+
+//set a thin border
+cs2.setBorderBottom(cs2.BORDER_THIN);
+//fill w fg fill color
+cs2.setFillPattern((short) HSSFCellStyle.SOLID_FOREGROUND);
+//set the cell format to text see HSSFDataFormat for a full list
+cs2.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));
+
+// set the font
+cs2.setFont(f2);
+
+// set the sheet name in Unicode
+wb.setSheetName(0, "\u0422\u0435\u0441\u0442\u043E\u0432\u0430\u044F " + 
+                   "\u0421\u0442\u0440\u0430\u043D\u0438\u0447\u043A\u0430", 
+                HSSFWorkbook.ENCODING_UTF_16 );
+// in case of compressed Unicode
+// wb.setSheetName(0, "HSSF Test", HSSFWorkbook.ENCODING_COMPRESSED_UNICODE );
+// create a sheet with 30 rows (0-29)
+for (rownum = (short) 0; rownum < 30; 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 10 cells (0-9) (the += 2 becomes apparent later
+    for (short cellnum = (short) 0; cellnum < 10; 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)));
+
+        String cellValue;
+
+        // create a string cell (see why += 2 in the
+        c = r.createCell((short) (cellnum + 1));
+        
+        // on every other row
+        if ((rownum % 2) == 0)
+        {
+            // set this cell to the first cell style we defined
+            c.setCellStyle(cs);
+            // set the cell's string value to "Test"
+            c.setEncoding( HSSFCell.ENCODING_COMPRESSED_UNICODE );
+            c.setCellValue( "Test" );
+        }
+        else
+        {
+            c.setCellStyle(cs2);
+            // set the cell's string value to "\u0422\u0435\u0441\u0442"
+            c.setEncoding( HSSFCell.ENCODING_UTF_16 );
+            c.setCellValue( "\u0422\u0435\u0441\u0442" );
+        }
+
+
+        // make this column a bit wider
+        s.setColumnWidth((short) (cellnum + 1), (short) ((50 * 8) / ((double) 1 / 20)));
+    }
+}
+
+//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();
+        ]]></source>
+        </section>
+                <section><title>Reading or modifying an existing file</title>
+
+<p>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).
+</p>
+<p>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.</p>
+<p>An example of this can be seen in
+<link href="http://cvs.apache.org/viewcvs/~checkout~/jakarta-poi/src/java/org/apache/poi/hssf/dev/HSSF.java?rev=1.1">org.apache.poi.hssf.dev.HSSF</link>.</p>
+         </section>
+        </section>
+                <section><title>Event API</title>
+
+                    <p>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.
+                    </p>
+                    <p>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.</p>
+                    <p>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(&quot;Workbook&quot;) 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.
+                    </p>
+                    <p>A code excerpt from org.apache.poi.hssf.dev.EFHSSF (which is
+                    in CVS or the source distribution) is reprinted below with excessive
+                    comments:</p>
+<source><![CDATA[
+/**
+ * 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.");
+    }
+}
+]]></source>
+     </section>
+                <section><title>Low Level APIs</title>
+
+<p>The low level API is not much to look at. It consists of lots of
+&quot;Records&quot; 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: &quot;Microsoft Excel 97 Developer's Kit&quot;
+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.</p>
+     </section>
+                <section><title>HSSF Class/Test Application</title>
+
+<p>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:
+</p>
+<ul>
+    <li>download the poi-alpha build and untar it (tar xvzf
+    tarball.tar.gz)
+    </li>
+    <li>set up your classpath as follows:
+    <code>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</code>
+    </li><li>type:
+    <code>java org.apache.poi.hssf.dev.HSSF ~/myxls.xls write</code></li>
+</ul>
+<p></p>
+<p>This should generate a test sheet in your home directory called <code>&quot;myxls.xls&quot;</code>.  </p>
+<ul>
+    <li>Type:
+    <code>java org.apache.poi.hssf.dev.HSSF ~/input.xls output.xls</code>
+    <br/>
+    <br/>
+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.  </li>
+</ul>
+     </section>
+    <section><title>Logging facility</title>
+        <p>Poi can dynamically select it's logging implementation. Poi trys to
+        create a logger using the System property named "org.apache.poi.util.POILogger".
+        Out of the box this can be set to one of three values:
+        </p>
+        <ul>
+           <li>org.apache.poi.util.CommonsLogger</li>
+           <li>org.apache.poi.util.NullLogger</li>
+           <li>org.apache.poi.util.SystemOutLogger</li>
+        </ul>
+        <p>
+        If the property is not defined or points to an invalid classthen the NullLogger is used.
+        </p>
+        <p>
+        Refer to the commons logging package level javadoc for more information concerning how to
+        <link href="http://jakarta.apache.org/commons/logging/api/index.html">configure commons logging.</link>
+        </p>
+     </section>
+    <section><title>HSSF Developer's Tools</title>
+
+<p>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.
+</p>
+<p>The first is &quot;biffview&quot;. 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.
+</p>
+<p>The second function is &quot;big freakin dump&quot;, just pass a
+file and a second argument matching &quot;bfd&quot; exactly. This
+will just make a big hexdump of the file.
+</p>
+<p>Lastly, there is &quot;mixed&quot; 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 &quot;on&quot; exactly.</p>
+<p>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.</p>
+
+     </section>
+                <section><title>What's Next?</title>
+
+<p>This release contains code that supports &quot;internationalization&quot;
+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).</p>
+<p>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?
+</p>
+     </section>
+
+</section>
+
+</section>
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/hssf/index.xml b/src/documentation/content/xdocs/hssf/index.xml
new file mode 100644 (file)
index 0000000..5bc4662
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>HSSF</title>
+  <subtitle>Overview</subtitle>
+  <authors>
+   <person name="Andrew C. Oliver" email="acoliver@apache.org"/>     
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>     
+  </authors>
+ </header>
+
+ <body>
+ <section><title>Overview</title>
+
+  <p>HSSF is the POI Project's pure Java implementation of the Excel '97(-2002) file format.</p>
+  <p>HSSF provides a way to read spreadsheets create, modify, read and write XLS spreadsheets
+     It provides: 
+  </p>
+  <ul>
+        <li>low level structures for those with special needs</li>
+        <li>an eventmodel api for efficient read-only access</li>
+        <li>a full usermodel api for creating, reading and modifying XLS files</li>
+  </ul>
+  <p>
+        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 <link href="http://xml.apache.org/cocoon">Apache Cocoon
+        Project</link>.  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.
+  </p>
+  <p>
+        If you're merely reading spreadsheet data, then use the eventmodel api
+        in the org.apache.poi.hssf.eventmodel package.
+  </p>
+  <p>
+        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.
+  </p>
+
+  </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/hssf/limitations.xml b/src/documentation/content/xdocs/hssf/limitations.xml
new file mode 100644 (file)
index 0000000..c4b8bb9
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>Limitations</title>
+        <authors>
+            <person email="glens@apache.org" name="Glen Stampoultzis" id="GJS"/>
+        </authors>
+    </header>
+    <body>
+        <section><title>Version 1.5 limitations</title>
+            <p>
+                The intent of this document is to outline some of the known limitations of the
+                POI HSSF API's.  It is not intended to be complete list of every bug or missing
+                feature of HSSF, rather it's purpose is to provide a broad feel for some of the
+                functionality that is missing or broken.
+            </p>
+            <ul>
+                <li>
+                    Charts<br/><br/>
+                    You can not currently create charts.  This is planned for the 2.0 release.  You can
+                    however create a chart in Excel, modify the chart data values using HSSF and write
+                    a new spreadsheet out.  This is possible because POI attempts to keep existing records
+                    intact as far as possible.<br/><br/>
+                </li>
+                <li>
+                    Rich Text<br/><br/>
+                    HSSF does not support rich text cells.  Rich text cells are
+                    cells that have multiple fonts and styles in the once cell.  Any attempt to read
+                    a spreadsheet that has rich text cells will throw an exception.  This feature may
+                    be supported in the future but it is not currently planned.  Patches are welcome.<br/><br/>
+                </li>
+                <li>
+                    Outlines<br/><br/>
+                    It is not yet possible to create outlines.  Reading a spreadsheet with outlines
+                    may work correctly but has not been tested.  Write support for outlines may
+                    be added in the future but it is not currently planned.  Patches are welcome.<br/><br/>
+                </li>
+                <li>
+                    Macros<br/><br/>
+                    Macros can not be created.  The are currently no plans to support macros.  Reading
+                    workbooks containing macros is supported but attempting to write those workbooks
+                    will fail.  This is because macros are stored as extra file sytems within the
+                    compound document, and these are not currently kept when the file is rewritten.<br/><br/>
+                </li>
+                <li>
+                    Pivot Tables<br/><br/>
+                    Generating pivot tables is not supported.  Reading spreadsheets containing pivot tables
+                    has not been tested.
+                </li>
+            </ul>
+        </section>
+    </body>
+</document>
diff --git a/src/documentation/content/xdocs/hssf/quick-guide.xml b/src/documentation/content/xdocs/hssf/quick-guide.xml
new file mode 100644 (file)
index 0000000..b193a99
--- /dev/null
@@ -0,0 +1,698 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>Busy Developers' Guide to HSSF Features</title>
+        <authors>
+            <person email="glens@apache.org" name="Glen Stampoultzis" id="CO"/>
+        </authors>
+    </header>
+    <body>
+        <section><title>Busy Developers' Guide to Features</title>
+            <p>
+                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 <link href="how-to.html">HOWTO</link>
+                guide as it contains actual descriptions of how to use this stuff.
+            </p>
+            <section><title>Index of Features</title>
+                <ul>
+                    <li><link href="#NewWorkbook">How to create a new workbook</link></li>
+                    <li><link href="#NewSheet">How to create a sheet</link></li>
+                    <li><link href="#CreateCells">How to create cells</link></li>
+                    <li><link href="#CreateDateCells">How to create date cells</link></li>
+                    <li><link href="#CellTypes">Working with different types of cells</link></li>
+                    <li><link href="#Alignment">Aligning cells</link></li>
+                    <li><link href="#Borders">Working with borders</link></li>
+                    <li><link href="#FrillsAndFills">Fills and color</link></li>
+                    <li><link href="#MergedCells">Merging cells</link></li>
+                    <li><link href="#WorkingWithFonts">Working with fonts</link></li>
+                    <li><link href="#CustomColors">Custom colors</link></li>
+                    <li><link href="#ReadWriteWorkbook">Reading and writing</link></li>
+                    <li><link href="#NewLinesInCells">Use newlines in cells.</link></li>
+                    <li><link href="#DataFormats">Create user defined data formats.</link></li>
+                    <li><link href="#PrintArea">Fit sheet to one page</link></li>
+                    <li><link href="#PrintArea2">Set print area for a sheet.</link></li>                   
+                    <li><link href="#FooterPageNumbers">Set page numbers on the footer of a sheet.</link></li>
+                    <li><link href="#ShiftRows">Shift rows.</link></li>
+                    <li><link href="#SelectSheet">Set a sheet as selected.</link></li>
+                    <li><link href="#Zoom">Set the zoom magnification for a sheet.</link></li>
+                    <li><link href="#Splits">Create split and freeze panes.</link></li>
+                    <li><link href="#Repeating">Repeating rows and columns.</link></li>
+                    <li><link href="#HeaderFooter">Headers and Footers.</link></li>
+                </ul>
+            </section>
+            <section><title>Features</title>
+                <anchor id="NewWorkbook"/>
+                <section><title>New Workbook</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+                <anchor id="NewSheet"/>
+                <section><title>New Sheet</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="CreateCells"/>
+                <section><title>Creating Cells</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="CreateDateCells"/>
+                <section><title>Creating Date Cells</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="CellTypes"/>
+                <section><title>Working with different types of cells</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="Alignment"/>
+                <section><title>Demonstrates various alignment options</title>
+                    <source>
+    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);
+    }
+                    </source>
+                </section>
+                <anchor id="Borders"/>
+                <section><title>Working with borders</title>
+                    <source>
+    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(HSSFColor.BLACK.index);
+    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+    style.setLeftBorderColor(HSSFColor.GREEN.index);
+    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
+    style.setRightBorderColor(HSSFColor.BLUE.index);
+    style.setBorderTop(HSSFCellStyle.BORDER_MEDIUM_DASHED);
+    style.setTopBorderColor(HSSFColor.BLACK.index);
+    cell.setCellStyle(style);
+
+    // Write the output to a file
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+                <anchor id="FillsAndFrills"/>
+                <section><title>Fills and colors</title>
+                    <source>
+    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(HSSFColor.AQUA.index);
+    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(HSSFColor.ORANGE.index);
+    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();
+                    </source>
+                </section>
+                <anchor id="MergedCells"/>
+                <section><title>Merging cells</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="WorkingWithFonts"/>
+                <section><title>Working with fonts</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="CustomColors"/>
+                <section><title>Custom colors</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet = wb.createSheet();
+    HSSFRow row = sheet.createRow((short) 0);
+    HSSFCell cell = row.createCell((short) 0);
+    cell.setCellValue("Default Palette");
+
+    //apply some colors from the standard palette,
+    // as in the previous examples.
+    //we'll use red text on a lime background
+
+    HSSFCellStyle style = wb.createCellStyle();
+    style.setFillForegroundColor(HSSFColor.LIME.index);
+    style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+
+    HSSFFont font = wb.createFont();
+    font.setColor(HSSFColor.RED.index);
+    style.setFont(font);
+
+    cell.setCellStyle(style);
+
+    //save with the default palette
+    FileOutputStream out = new FileOutputStream("default_palette.xls");
+    wb.write(out);
+    out.close();
+
+    //now, let's replace RED and LIME in the palette
+    // with a more attractive combination
+    // (lovingly borrowed from freebsd.org)
+
+    cell.setCellValue("Modified Palette");
+
+    //creating a custom palette for the workbook
+    HSSFPalette palette = wb.getCustomPalette();
+
+    //replacing the standard red with freebsd.org red
+    palette.setColorAtIndex(HSSFColor.RED.index,
+            (byte) 153,  //RGB red (0-255)
+            (byte) 0,    //RGB green
+            (byte) 0     //RGB blue
+    );
+    //replacing lime with freebsd.org gold
+    palette.setColorAtIndex(HSSFColor.LIME.index, (byte) 255, (byte) 204, (byte) 102);
+
+    //save with the modified palette
+    // note that wherever we have previously used RED or LIME, the
+    // new colors magically appear
+    out = new FileOutputStream("modified_palette.xls");
+    wb.write(out);
+    out.close();
+                    </source>
+                </section>
+                <anchor id="ReadWriteWorkbook"/>
+                <section><title>Reading and Rewriting Workbooks</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="NewLinesInCells"/>
+                <section><title>Using newlines in cells</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet s = wb.createSheet();
+    HSSFRow r = null;
+    HSSFCell c = null;
+    HSSFCellStyle cs = wb.createCellStyle();
+    HSSFFont f = wb.createFont();
+    HSSFFont f2 = wb.createFont();
+
+    cs = wb.createCellStyle();
+
+    cs.setFont( f2 );
+    //Word Wrap MUST be turned on
+    cs.setWrapText( true );
+
+    r = s.createRow( (short) 2 );
+    r.setHeight( (short) 0x349 );
+    c = r.createCell( (short) 2 );
+    c.setCellType( HSSFCell.CELL_TYPE_STRING );
+    c.setCellValue( "Use \n with word wrap on to create a new line" );
+    c.setCellStyle( cs );
+    s.setColumnWidth( (short) 2, (short) ( ( 50 * 8 ) / ( (double) 1 / 20 ) ) );
+
+    FileOutputStream fileOut = new FileOutputStream( "workbook.xls" );
+    wb.write( fileOut );
+    fileOut.close();</source>
+                </section>
+                <anchor id="DataFormats"/>
+                <section><title>Data Formats</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet = wb.createSheet("format sheet");
+    HSSFCellStyle style;
+    HSSFDataFormat format = wb.createDataFormat();
+    HSSFRow row;
+    HSSFCell cell;
+    short rowNum = 0;
+    short colNum = 0;
+
+    row = sheet.createRow(rowNum++);
+    cell = row.createCell(colNum);
+    cell.setCellValue(11111.25);
+    style = wb.createCellStyle();
+    style.setDataFormat(format.getFormat("0.0"));
+    cell.setCellStyle(style);
+
+    row = sheet.createRow(rowNum++);
+    cell = row.createCell(colNum);
+    cell.setCellValue(11111.25);
+    style = wb.createCellStyle();
+    style.setDataFormat(format.getFormat("#,##0.0000"));
+    cell.setCellStyle(style);
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+                <anchor id="PrintArea"/>
+                <section><title>Set Print Area to One Page</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet = wb.createSheet("format sheet");
+    HSSFPrintSetup ps = sheet.getPrintSetup()
+    
+    sheet.setAutobreaks(true)
+    
+    ps.setFitHeight((short)1);
+    ps.setFitWidth((short)1);
+
+
+    // Create various cells and rows for spreadsheet.
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+                <anchor id="PrintArea2"/>
+                <section><title>Set Print Area</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet = wb.createSheet("Sheet1");
+    wb.setPrintArea(0, "$A$1:$C$2");
+    //sets the print area for the first sheet
+    //Alternatively:
+    //wb.setPrintArea(0, 0, 1, 0, 0) is equivalent to using the name reference (See the JavaDocs for more details)  
+
+    // Create various cells and rows for spreadsheet.
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+    
+    
+                    </source>
+                </section>
+
+                <anchor id="FooterPageNumbers"/>
+                <section><title>Set Page Numbers on Footer</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet = wb.createSheet("format sheet");
+    HSSFFooter footer = sheet.getFooter()
+    
+    footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );
+    
+
+
+    // Create various cells and rows for spreadsheet.
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>                
+                
+                <anchor id="ConvenienceFunctions"/>
+                <section><title>Using the Convenience Functions</title>
+                    <p>
+                        The convenience functions live in contrib and provide
+                        utility features such as setting borders around merged
+                        regions and changing style attributes without explicitly
+                        creating new styles.
+                    </p>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet1 = wb.createSheet( "new sheet" );
+
+    // Create a merged region
+    HSSFRow row = sheet1.createRow( (short) 1 );
+    HSSFRow row2 = sheet1.createRow( (short) 2 );
+    HSSFCell cell = row.createCell( (short) 1 );
+    cell.setCellValue( "This is a test of merging" );
+    Region region = new Region( 1, (short) 1, 4, (short) 4 );
+    sheet1.addMergedRegion( region );
+
+    // Set the border and border colors.
+    final short borderMediumDashed = HSSFCellStyle.BORDER_MEDIUM_DASHED;
+    HSSFRegionUtil.setBorderBottom( borderMediumDashed,
+        region, sheet1, wb );
+    HSSFRegionUtil.setBorderTop( borderMediumDashed,
+        region, sheet1, wb );
+    HSSFRegionUtil.setBorderLeft( borderMediumDashed,
+        region, sheet1, wb );
+    HSSFRegionUtil.setBorderRight( borderMediumDashed,
+        region, sheet1, wb );
+    HSSFRegionUtil.setBottomBorderColor(HSSFColor.AQUA.index, region, sheet1, wb);
+    HSSFRegionUtil.setTopBorderColor(HSSFColor.AQUA.index, region, sheet1, wb);
+    HSSFRegionUtil.setLeftBorderColor(HSSFColor.AQUA.index, region, sheet1, wb);
+    HSSFRegionUtil.setRightBorderColor(HSSFColor.AQUA.index, region, sheet1, wb);
+
+    // Shows some usages of HSSFCellUtil
+    HSSFCellStyle style = wb.createCellStyle();
+    style.setIndention((short)4);
+    HSSFCellUtil.createCell(row, 8, "This is the value of the cell", style);
+    HSSFCell cell2 = HSSFCellUtil.createCell( row2, 8, "This is the value of the cell");
+    HSSFCellUtil.setAlignment(cell2, wb, HSSFCellStyle.ALIGN_CENTER);
+
+    // Write out the workbook
+    FileOutputStream fileOut = new FileOutputStream( "workbook.xls" );
+    wb.write( fileOut );
+    fileOut.close();
+                    </source>
+                </section>
+
+                <anchor id="ShiftRows"/>
+                <section><title>Shift rows up or down on a sheet</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet = wb.createSheet("row sheet");
+
+    // Create various cells and rows for spreadsheet.
+
+    // Shift rows 6 - 11 on the spreadsheet to the top (rows 0 - 5)
+    sheet.shiftRows(5, 10, -5);
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>                
+
+                <anchor id="SelectSheet"/>
+                <section><title>Set a sheet as selected</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet = wb.createSheet("row sheet");
+    sheet.setSelected(true);
+
+    // Create various cells and rows for spreadsheet.
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>                
+
+                <anchor id="Zoom"/>
+                <section><title>Set the zoom magnification</title>
+                    <p>
+                        The zoom is expressed as a fraction.  For example to
+                        express a zoom of 75% use 3 for the numerator and
+                        4 for the denominator.
+                    </p>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet1 = wb.createSheet("new sheet");
+    sheet1.setZoom(3,4);   // 75 percent magnification
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+
+                <anchor id="Splits"/>
+                <section><title>Splits and freeze panes</title>
+                    <p>
+                        There are two types of panes you can create; freeze panes and split panes.
+                    </p>
+                    <p>
+                        A freeze pane is split by columns and rows.  You create
+                        a freeze pane using the following mechanism:
+                    </p>
+                    <p>
+                            sheet1.createFreezePane( 3, 2, 3, 2 );
+                    </p>
+                    <p>
+                        The first two parameters are the columns and rows you
+                        wish to split by.  The second two parameters indicate
+                        the cells that are visible in the bottom right quadrant.
+                    </p>
+                    <p>
+
+                        Split pains appear differently.  The split area is
+                        divided into four separate work area's.  The split
+                        occurs at the pixel level and the user is able to
+                        adjust the split by dragging it to a new position.
+                    </p>
+                    <p>
+
+                        Split panes are created with the following call:
+                    </p>
+                    <p>
+                            sheet2.createSplitPane( 2000, 2000, 0, 0, HSSFSheet.PANE_LOWER_LEFT );
+                    </p>
+                    <p>
+
+                        The first parameter is the x position of the split.
+                        This is in 1/20th of a point.  A point in this case
+                        seems to equate to a pixel.  The second parameter is
+                        the y position of the split.  Again in 1/20th of a point.
+                    </p>
+                    <p>
+                        The last parameter indicates which pane currently has
+                        the focus.  This will be one of HSSFSheet.PANE_LOWER_LEFT,
+                        PANE_LOWER_RIGHT, PANE_UPPER_RIGHT or PANE_UPPER_LEFT.
+                    </p>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet1 = wb.createSheet("new sheet");
+    HSSFSheet sheet2 = wb.createSheet("second sheet");
+    HSSFSheet sheet3 = wb.createSheet("third sheet");
+    HSSFSheet sheet4 = wb.createSheet("fourth sheet");
+
+    // Freeze just one row
+    sheet1.createFreezePane( 0, 1, 0, 1 );
+    // Freeze just one column
+    sheet2.createFreezePane( 1, 0, 1, 0 );
+    // Freeze the columns and rows (forget about scrolling position of the lower right quadrant).
+    sheet3.createFreezePane( 2, 2 );
+    // Create a split with the lower left side being the active quadrant
+    sheet4.createSplitPane( 2000, 2000, 0, 0, HSSFSheet.PANE_LOWER_LEFT );
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+
+                <anchor id="Repeating"/>
+                <section><title>Repeating rows and columns</title>
+                    <p>
+                        It's possible to set up repeating rows and columns in
+                        your printouts by using the setRepeatingRowsAndColumns()
+                        function in the HSSFWorkbook class.
+                    </p>
+                    <p>
+                        This function Contains 5 parameters.
+                        The first parameter is the index to the sheet (0 = first sheet).
+                        The second and third parameters specify the range for the columns to repreat.
+                        To stop the columns from repeating pass in -1 as the start and end column.
+                        The fourth and fifth parameters specify the range for the rows to repeat.
+                        To stop the columns from repeating pass in -1 as the start and end rows.
+                    </p>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet1 = wb.createSheet("new sheet");
+    HSSFSheet sheet2 = wb.createSheet("second sheet");
+
+    // Set the columns to repeat from column 0 to 2 on the first sheet
+    wb.setRepeatingRowsAndColumns(0,0,2,-1,-1);
+    // Set the the repeating rows and columns on the second sheet.
+    wb.setRepeatingRowsAndColumns(1,4,5,1,2);
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+                <anchor id="HeaderFooter"/>
+                <section><title>Headers and Footers</title>
+                    <p>
+                        Example is for headers but applies directly to footers.
+                    </p>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet = wb.createSheet("new sheet");
+
+    HSSFHeader header = sheet.getHeader();
+    header.setCenter("Center Header");
+    header.setLeft("Left Header");
+    header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") + 
+                    HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+            </section>
+        </section>
+    </body>
+</document>
diff --git a/src/documentation/content/xdocs/hssf/record-generator.xml b/src/documentation/content/xdocs/hssf/record-generator.xml
new file mode 100644 (file)
index 0000000..0c5b4dd
--- /dev/null
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+  <header>
+   <title>Record Generator HOWTO</title>
+   <authors>
+    <person email="glens@apache.org" name="Glen Stampoultzis" id="glens"/>
+    <person email="acoliver@apache.org" name="Andrew C. Oliver" id="acoliver"/>
+   </authors>
+  </header>
+  <body>
+    <section><title>How to Use the Record Generator</title>
+
+    <section><title>History</title>
+        <p>
+        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.
+        </p>
+        <p>
+        A utility was needed to take the defintition of what a
+        record looked like and do all the boring and repetitive work.
+        </p>
+    </section>
+
+    <section><title>Capabilities</title>
+    <p>
+        The record generator takes XML as input and produces the following
+        output:
+    </p>
+    <ul>
+        <li>A Java file capabile of decoding and encoding the record.</li>
+        <li>A test class that provides a fill-in-the-blanks implementation
+            of a test case for ensuring the record operates as
+            designed.</li>
+    </ul>
+    </section>
+    <section><title>Usage</title>
+        <p>
+            The record generator is invoked as an Ant target
+            (generate-records).  It goes through looking for all files in
+            <code>src/records/defintitions</code> ending with _record.xml.
+            It then creates two files; the Java record definition and the
+            Java test case template.
+        </p>
+        <p>
+            The records themselves have the following general layout:
+        </p>
+        <source><![CDATA[
+<record id="0x1032" name="Frame" package="org.apache.poi.hssf.record"
+        excel-record-id="FRAME">
+    <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>
+        ]]></source>
+        <p>
+            The following table details the allowable types and sizes for
+            the fields.
+        </p>
+        <table>
+            <tr>
+                <th>Type</th>
+                <th>Size</th>
+                <th>Java Type</th>
+            </tr>
+            <tr>
+                <td>int</td>
+                <td>1</td>
+                <td>byte</td>
+            </tr>
+            <tr>
+                <td>int</td>
+                <td>2</td>
+                <td>short</td>
+            </tr>
+            <tr>
+                <td>int</td>
+                <td>4</td>
+                <td>int</td>
+            </tr>
+            <tr>
+                <td>int</td>
+                <td>8</td>
+                <td>long</td>
+            </tr>
+            <tr>
+                <td>int</td>
+                <td>varword</td>
+                <td>array of shorts</td>
+            </tr>
+            <tr>
+                <td>bits</td>
+                <td>1</td>
+                <td>A byte comprising of a bits (defined by the bit element)
+                    </td>
+            </tr>
+            <tr>
+                <td>bits</td>
+                <td>2</td>
+                <td>An short comprising of a bits</td>
+            </tr>
+            <tr>
+                <td>bits</td>
+                <td>4</td>
+                <td>A int comprising of a bits</td>
+            </tr>
+            <tr>
+                <td>float</td>
+                <td>8</td>
+                <td>double</td>
+            </tr>
+            <tr>
+                <td>hbstring</td>
+                <td>java expression</td>
+                <td>String</td>
+            </tr>
+        </table>
+        <p>
+            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.
+        </p>
+    </section>
+    <section><title>Custom Field Types</title>
+        <p>
+            Occationally the builtin types are not enough.  More control
+            over the encoding and decoding of the streams is required.  This
+            can be achieved using a custom type.
+        </p>
+        <p>
+            A custom type lets you escape to java to define the way in which
+            the field encodes and decodes.  To code a custom type you
+            declare your field like this:
+        </p>
+        <source><![CDATA[
+    <field type="custom:org.apache.poi.hssf.record.LinkedDataFormulaField"
+        size="var" name="formula of link" description="formula"/>
+        ]]></source>
+        <p>
+            Where the class name specified after <code>custom:</code> is a
+            class implementing the interface <code>CustomField</code>.
+        </p>
+        <p>
+            You can then implement the encoding yourself.
+        </p>
+    </section>
+    <section><title>How it Works</title>
+        <p>
+            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.   
+        </p>
+        <p>
+            See record.xsl, record_test.xsl, FieldIterator.java, 
+            RecordUtil.java, RecordGenerator.java
+        </p>
+        <p>
+            There is a corresponding &quot;type&quot; generator for HDF.
+            See the HDF documentation for details.
+        </p>
+    </section>
+    <section><title>Limitations</title>
+        <p>
+            The record generator does not handle all possible record types and
+            goes not intend to perform this function.  When dealing with a
+            non-standard record sometimes the cost-benifit of coding the
+            record by hand will be greater than attempting modify the
+            generator.  The main point of the record generator is to save
+            time, so keep that in mind.
+        </p>
+        <p>
+            Currently the the XSL file that generates the record calls out to 
+            Java objects.  The Java code for the record generation is
+            currently quite messy with minimal comments.  
+        </p>
+    </section>
+</section>
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/hssf/use-case.xml b/src/documentation/content/xdocs/hssf/use-case.xml
new file mode 100644 (file)
index 0000000..0da732f
--- /dev/null
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd"> 
+     
+<document>
+  <header>
+   <title>HSSF Use Cases</title>
+   <authors>
+    <person email="marc.johnson@yahoo.com" name="Marc Johnson" id="MJ"/>
+   </authors>
+  </header>
+  <body>
+    <section><title>HSSF Use Cases</title>
+    <section><title>Use Case 1: Read existing HSSF</title>
+
+<p><strong>Primary Actor:</strong> HSSF client</p>
+<p><strong>Scope:</strong> HSSF</p>
+<p><strong>Level:</strong> Summary</p>
+<p><strong>Stakeholders and Interests:</strong></p>
+<ul>
+       <li>HSSF client- wants to read content
+       of HSSF file</li>
+       <li>HSSF - understands HSSF file</li>
+       <li>POIFS - understands underlying POI
+       file system</li>
+</ul>
+<p><strong>Precondition:</strong> None</p>
+<p><strong>Minimal Guarantee:</strong> None</p>
+<p><strong>Main Success Guarantee:</strong></p>
+<ol>
+       <li>HSSF client requests HSSF to read
+       a HSSF file, providing an InputStream
+       containing HSSF file in question.</li>
+       <li>HSSF requests POIFS to read the HSSF
+       file, passing the InputStream
+       object to POIFS (POIFS use case 1, read existing file system)</li>
+       <li>HSSF reads the &quot;Workbook&quot;
+       file (use case 4, read workbook entry)</li>
+</ol>
+<p><strong>Extensions:</strong></p>
+<p>2a. Exceptions
+thrown by POIFS will be passed on to the HSSF client.</p>
+</section>
+    <section><title>Use Case 2: Write HSSF file</title>
+
+<p><strong>Primary Actor:</strong> HSSF client</p>
+<p><strong>Scope:</strong> HSSF</p>
+<p><strong>Level:</strong> Summary</p>
+<p><strong>Stakeholders and Interests:</strong></p>
+<ul>
+       <li>HSSF client- wants to write file
+       out.</li>
+       <li>HSSF - knows how to write file
+       out.</li>
+       <li>POIFS - knows how to write file
+       system out.</li>
+</ul>
+<p><strong>Precondition:</strong></p>
+<ul>
+       <li>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)</li>
+</ul>
+<p><strong>Minimal Guarantee:</strong> None</p>
+<p><strong>Main Success Guarantee:</strong></p>
+<ol>
+       <li>HSSF client
+       provides an OutputStream to
+       write the file to.</li>
+       <li>HSSF writes
+       the &quot;Workbook&quot; to its associated POIFS file system (use case
+       5, write workbook entry)</li>
+       <li>HSSF
+       requests POIFS to write its file system out, using the OutputStream
+       obtained from the HSSF client (POIFS use case 2, write file system).</li>
+</ol>
+<p><strong>Extensions:</strong></p>
+<p>3a. Exceptions
+from POIFS are passed to the HSSF client.</p>
+
+</section>
+    <section><title>Use Case 3:Create HSSF file</title>
+
+<p><strong>Primary Actor:</strong> HSSF client</p>
+<p><strong>Scope:</strong> HSSF</p>
+<p>
+<strong>Level:</strong> Summary</p>
+<p><strong>Stakeholders and Interests:</strong></p>
+<ul>
+       <li>HSSF client- wants to create a new
+       file.</li>
+       <li>HSSF - knows how to create a new
+       file.</li>
+       <li>POIFS - knows how to creat a new
+       file system.</li>
+</ul>
+<p><strong>Precondition:</strong></p>
+<p><strong>Minimal Guarantee:</strong> None</p>
+<p><strong>Main Success Guarantee:</strong></p>
+<ol>
+       <li>HSSF requests
+       POIFS to create a new file system (POIFS use case 3, create new file
+       system)</li>
+</ol>
+<p><strong>Extensions:</strong>
+None</p>
+
+</section>
+    <section><title>Use Case 4: Read workbook entry</title>
+<p><strong>Primary Actor:</strong> HSSF</p>
+<p><strong>Scope:</strong> HSSF</p>
+<p>
+<strong>Level:</strong> Summary</p>
+<p><strong>Stakeholders and Interests:</strong></p>
+<ul>
+       <li>HSSF - knows how to read the
+       workbook entry</li>
+       <li>POIFS - knows how to manage the file
+       system.</li>
+</ul>
+<p><strong>Precondition:</strong></p>
+<ul>
+       <li>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).</li>
+</ul>
+<p><strong>Minimal
+Guarantee:</strong> None</p>
+<p><strong>Main Success Guarantee:</strong></p>
+<ol>
+       <li>
+       HSSF requests POIFS for the &quot;Workbook&quot; file</li>
+       <li>POIFS returns
+       an InputStream for the file.</li>
+       <li>HSSF reads
+       from the InputStream provided by POIFS</li>
+       <li>HSSF closes
+       the InputStream provided by POIFS</li>
+</ol>
+<p><strong>Extensions:</strong></p>
+<p>3a. Exceptions
+thrown by POIFS will be passed on</p>
+</section>
+    <section><title>Use Case 5: Write workbook entry</title>
+
+
+<p><strong>Primary Actor:</strong> HSSF</p>
+<p><strong>Scope:</strong> HSSF</p>
+<p>
+<strong>Level:</strong> Summary</p>
+<p><strong>Stakeholders and Interests:</strong></p>
+<ul>
+       <li>HSSF - knows how to manage the
+       write the workbook entry.</li>
+       <li>POIFS - knows how to manage the file
+       system.</li>
+</ul>
+<p><strong>Precondition:</strong> 
+</p>
+<ul>
+       <li>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).</li>
+</ul>
+<p><strong>Minimal Guarantee:</strong> None</p>
+<p><strong>Main Success Guarantee:</strong></p>
+<ol>
+       <li>HSSF
+       checks the POIFS file system directory for the &quot;Workbook&quot;
+       file (POIFS use case  8, read file system directory)</li>
+       <li>If &quot;Workbook&quot; 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 &quot;Workbook&quot; (POIFS use case 6,
+       write new file to file system)</li>
+</ol>
+<p><strong>Extensions:</strong>None</p>
+</section>
+
+</section>
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/index.xml b/src/documentation/content/xdocs/index.xml
new file mode 100644 (file)
index 0000000..d7ad45e
--- /dev/null
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title>Welcome to POI</title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+      <person id="GJS" name="Glen Stampoultzis" email="glens@apache.org"/>
+    </authors>
+  </header>
+
+  <body>
+   <section><title>News</title>
+       <section><title>Latest Development Release</title>
+        <p>
+            The latest development release of POI is version 1.10. 
+            Binary distributions are available <link href="http://jakarta.apache.org/builds/jakarta-poi/dev/bin/">here</link> 
+            and source distributions are <link href="http://jakarta.apache.org/builds/jakarta-poi/dev/src/">here</link>.
+        </p>
+<!--        <p>-->
+<!--            <link href="http://vote.sparklit.com/poll.spark/640946">Click here</link> to see the current results.-->
+<!--        </p>-->
+     </section>
+    <section><title>Translations</title>
+        <p> 
+            The POI documentation translation project has begun.  The first ones 
+            to start are the <link href="trans/es/index.html">Spanish 
+            (espaniol)</link> and <link href="http://www.terra-intl.com/jakarta/poi/">Japanese</link>, and 
+            <link href="trans/de/index.html">German</link>
+            translations.  Others are welcome.  Please feel 
+            free to participate!
+        </p>
+    </section>
+    <section><title>Logo Contest</title>
+        <p>
+            Voting for the POI logo contest is now complete.  Thank you for your votes.
+        </p>
+<!--        <p>-->
+<!--            <link href="http://vote.sparklit.com/poll.spark/640946">Click here</link> to see the current results.-->
+<!--        </p>-->
+     </section>
+    </section>
+    <section><title>Purpose</title>
+      <p>
+      The POI project consists of APIs for manipulating various file formats
+      based upon Microsoft's OLE 2 Compound Document format using pure Java.
+      </p>
+      <p>
+      OLE 2 Compound Document Format based files include most Microsoft Office
+      files such as XLS and DOC.
+      </p>
+      <p>
+         As a general policy we try to collaborate as much as possible with other projects to
+         provide this functionality.  Examples include: <link href="http://xml.apache.org/cocoon">Cocoon</link> for
+         which you'll soon find generators and serializers for our projects;
+         <link href="http://www.openoffice.org">Open Office.org</link> with whom we collaborate in documenting the
+         XLS format; and <link href="http://jakarta.apache.org/lucene">Lucene</link> for which we'll soon have file
+         format interpretors.  When practical, we donate components directly to those projects for POI-enabling them.
+      </p>
+      <section><title>Why/when would I use POI?</title>
+        <p>
+               We'll tackle this on a component level. POI refers to the whole project.
+        </p>
+        <p>
+               So why should you use POIFS or HSSF?
+        </p>
+        <p>
+               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!
+        </p>
+        <p>
+               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.
+        </p>
+      </section>
+
+      <section><title>What does POI stand for?</title>
+        <p>
+               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.
+        </p>
+      <p>
+               Poi is also a Hawaiian delicacy that <link href="http://www.m-w.com">Merriam Webster's dictionary</link> 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.
+        </p>
+      <p>
+               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.
+      </p>
+      </section>
+
+    </section>
+
+
+    <section><title>Components To Date</title>
+        <section><title>Overview</title>
+            <p>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.</p>
+        </section>
+        <section><title>POIFS (POI Filesystem)</title>
+             <p>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 <link href="./poifs/index.html">the POIFS project page</link> for more information.</p>
+        </section>
+        <section><title>HSSF (Horrible Spreadsheet Format)</title>
+             <p>HSSF is our port of the Microsoft Excel 97(-2002) file format (BIFF8) to pure Java.  It supports read and write
+             capability.  Please see <link href="./hssf/index.html">the HSSF project page</link> for more information.</p>
+        </section>
+        <section><title>HDF (Horrible Document Format)</title>
+             <p>HDF is our port of the Microsoft Word 97 file format to pure Java.  It supports read and write capability.
+             Please see <link href="./hdf/index.html">the HDF project page for more information</link>.  This component is
+             in the early stages of design.  Jump in!</p>
+        </section>
+        <section><title>HPSF (Horrible Property Set Format)</title>
+       <p>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 <link
+           href="./hpsf/index.html">the HPSF project page</link> for more
+         information.</p>
+        </section>
+
+     </section>
+
+    <section><title>What happened to the HSSF Serializer?</title>
+       <p>The HSSF Serializer, which was part of our 1.0 release and last builds on
+        <link href="http://www.sourceforge.net/projects/poi">Sourceforge</link>, has been donated to the
+        <link href="http://xml.apache.org/cocoon/">Cocoon</link> project, and is available starting from version
+        2.0.2.</p>
+    </section>
+
+    <section><title>Contributing </title>
+        <p>
+               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!
+        </p>
+        <p>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!
+        </p>
+
+
+    </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
diff --git a/src/documentation/content/xdocs/mirrors.xml b/src/documentation/content/xdocs/mirrors.xml
new file mode 100644 (file)
index 0000000..455b14a
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title></title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+    </authors>
+  </header>
+  
+  <body>
+    <section><title>Mirrors</title>
+        <p>
+           These are mirrors of the 
+           <link href="http://jakarta.apache.org/poi">POI</link> website.
+           If you know of others...report them! :-)
+        </p>                        
+    </section>
+    <section><title>Austria</title>
+      <ul> 
+       <li><link href="http://gd.tuwien.ac.at/infosys/servers/http/apache-jakarta-site/poi/index.html">Austrian Mirror of Jakarta POI</link></li>
+      </ul>
+    </section>
+    <section><title>Korea</title>
+      <ul>
+      <li><link href="http://jakarta.ktech21.co.kr/">Jakarta site partially translated into Korean and Mirrored</link></li>
+      </ul>
+    </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
diff --git a/src/documentation/content/xdocs/news.xml b/src/documentation/content/xdocs/news.xml
new file mode 100644 (file)
index 0000000..26b97f1
--- /dev/null
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title></title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+    </authors>
+  </header>
+  
+  <body>
+    <section><title>POI in the news</title>
+        <p>
+                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).
+        </p>                        
+    </section>
+    <section><title>English</title>
+        <ul>
+                <li> 
+                      <link href="http://archive.midrange.com/web400/200204/msg00023.html">Discussion about using POI on AS/400s</link>
+                </li>
+                <li>
+                      <link href="http://www.somelist.com/mails/23819.html">Discussion from back when we almost had POI as the filter for KOffice if politics and licenses hadn't killed iit</link> 
+                </li>
+                <li>
+                       <link href="http://www.oreillynet.com/pub/wlg/1552?page=last&amp;x-showcontent=text">Java discussion on O'Reilly Network including discussion about POI</link> - O'Reilly.net
+                </li>
+                <li>
+                       <link href="http://www.rollerweblogger.org/page/roller/20020715">Poor Obfuscation Implementation.</link> - Blog of David M. Johnson
+                </li>
+                <li>   
+                       <link href="http://www.jsurfer.org/article.php?sid=322">
+                        POI 1.5-dev-rc2 released </link> - JSurfer
+                </li>
+
+                <li>
+                       <link href="http://directory.google.com/Top/Computers/Programming/Languages/Java/Class_Libraries/Data_Formats/Microsoft_Formats/"> Google says we're the most important in our category </link>
+                </li>
+                <li>
+                       <link href="http://www.javaworld.com/javaworld/javaqa/2002-05/01-qa-0503-excel3.html">It's POI-fect</link> - Tony Sintes, Javaworld
+                </li>
+                <li>
+                       <link href="http://www.need-a-cake.com/categories/cocoonWeblog/2002/03/07.html">
+                       Nicola announces POI serialization code
+                       </link> - Matthew Langham's Radio Weblog
+                </li>
+                <li>
+                        <link href="http://javalobby.org/discussionContext/showThreaded/frm/javalobby?folderId=20&amp;discussionContextId=11523">
+                        Jakarta POI 1.4583 Released</link> - JavaLobby
+                </li>        
+                <li>
+                        <link href="http://javalobby.org/discussionContext/showThreaded/frm/javalobby?discussionContextId=11442&amp;folderId=20">
+                        POI project moves to Jakarta (OLE 2 CDF/Excel/Word in 
+                        pure java)</link> - JavaLobby
+                </li>
+                <li>
+                        <link
+                        href="http://www.geocities.com/marcoschmidt.geo/java-image-coding.html">
+                        List of Java libraries to read and write image and document files
+                        </link> Marco Schmidt's homepage (normally we wouldn't
+                        feature someone's homepage but its an extensive list of
+                        information including "alternatives to POI" (for those
+                        of you who are very wealthy).  But heck I think I'll
+                        bookmark his page for myself since he's like got every
+                        piece of info known to man linked or featured on it!
+                </li>
+                <li>
+                        <link href="http://radio.weblogs.com/0101350/">
+                        The Experiences of an Operator (Måns af Klercker)
+                        </link> - radio.weblogs.com
+                </li>
+                <li>
+                        <link href="http://dataconv.org/apps_office.html">
+                        DATACONV - Data Conversion Tools: Office
+                        </link> DATACONV
+                </li>
+                <li>
+                        <link href="http://chicago.sourceforge.net/devel/">
+                        Chicago Developer Page
+                        </link>                        
+                </li>
+                <li>
+                        <link href="http://www.onjava.com/pub/d/1157">
+                        POI/POI Serialization Project
+                        </link> - Man you know you've hit the bigtime when
+                        O'Reilly Likes you..  ;-)
+                </li>
+                <li>
+                        <link
+                        href="http://www.javaworld.com/netnews/index.shtml">
+                        News Around the Net
+                        </link> - Java World
+                </li>
+                
+        </ul>
+    </section>
+    <section><title>Nederlandstalige (Dutch)</title>
+        <ul>
+                <li>
+                        <link 
+                        href="http://www.ster.be/java/java9.html">
+                        Een Excel-werkboek maken vanuit Java - Lieven Smits 
+                        </link>
+                </li>
+        </ul>
+    </section>
+    <section><title>Deutsch (German)</title>
+        <ul>
+                <li> <link 
+                      href="http://www.entwickler.com/itr/news/show.php3?id=6132&amp;nodeid=82 ">Apache POI verffentlicht</link> - entwicker.com 
+                </li>
+                <li>
+                       <link 
+                       href="http://www.jsp-develop.de/newsletter/10/">
+                       Apache Jakarta-Projekt bringt Word und Excel in die Java-Welt </link> - jsp-develop.de  (for the misguided who use JSP ;-) )
+                </li>
+                <li>
+                        <link
+                        href="http://www.entwickler.com/news/2002/02/5718/news.shtml">
+                        Neues Apache-Projekt bringt Word- und Excel nach Java
+                        </link> - entwickler.com
+                </li>
+        </ul>
+    </section>
+    <section><title>Español (Spanish)</title>
+        <ul>
+                <li>
+                        <link href="http://www.javahispano.com/noticias/todas.jsp">
+                        OLE2 desde Java nativo
+                        </link> - javaHispano
+                </li>
+                <li>
+                      <link href="http://p2p.wrox.com/archive/java_espanol/2002-08/3.asp">Spanish discussion about Excel and Java including POI from Wrox forums</link>
+                </li> 
+        </ul>
+    </section>
+    <section><title>Francais (French)</title>
+        <ul>
+               <li>
+                       <link href="http://linuxfr.org/section/D%E9veloppeur,0,1,8,0.html">
+                       Excel/OLE accessibles   
+                        </link> - Da Linux French Page
+                </li>
+                <li>
+                        <link href="http://www.sogid.com/javalist/f2002/traiter_word_java.html">Discussion on POI in French</link>
+                </li>
+        </ul>
+    </section>
+    <section><title>Nihongo (Japanese)</title>
+        <ul>
+                <li>
+                        <link href="http://drpanda.freezope.org/Memo/docs/jakarta/poi/poi_sample">100% PureJava...</link> - Dr. Panda Portal
+                </li>
+                <li>
+                        <link
+                        href="http://www.gimlay.org/~andoh/java/javanew.html">
+                        What's new with java?
+                        </link> - gimlay.org
+                </li>
+                <li><link href="http://taka-2.com/jclass/POI/">Java?Excel?????</link> - appears to show how to use Japanese with POI</li>
+                <li><link href="http://www.tech-arts.co.jp/macosx/webobjects-jp/htdocs/3200/3218.html">Various discussion in Japanese including on POI</link></li>
+                <li><link href="http://muimi.com/j/jakarta/">Japanese resources on Jakarta projects including POI</link></li>
+                <li><link href="http://www.fk.urban.ne.jp/home/kishida/">Kishida's site</link> various information, includes a snip about POI and Japanese.</li>
+               
+        </ul>
+    </section>
+    <section><title>Dunno how to say Russian in Russian (Russian)</title>
+        <ul>
+          <li>
+             <link href="http://www.nestor.minsk.by/kg/kg02/21/kg22108.html">
+             Probably a translation of the Javalobby announcement of 1.5-final
+             </link> Java-???????
+          </li>
+        </ul>
+    </section>
+    <section><title>Dunno how to say Korean in Korean (Korean)</title>
+        <ul>
+           <li>
+             <link href="http://www.javabrain.co.kr/AnswerView?questionId=1189&amp;categoryId=8">Various discussion in Korean about Excel output/APIs including POI</link>
+           </li>
+        </ul>
+    </section>
+    <section><title>No freaking idea</title>
+        <p>
+                If you can read one of these languages, send mail to the list
+                telling us what language it is and we'll categorize it!
+        </p>
+        <ul>
+                <li> 
+                       <link 
+                       href="http://www.javacentrix.com/index.htm">
+                       If I had to guess, I'd say this is Thai, but
+                       maybe you actually know</link> - javacentrix.com
+                </li>
+        </ul>
+    </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
diff --git a/src/documentation/content/xdocs/news/book.xml b/src/documentation/content/xdocs/news/book.xml
new file mode 100644 (file)
index 0000000..d934b6a
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../dtd/book-cocoon-v10.dtd">
+
+<book software="Poi Project" 
+      title="Poi Project News Pages" 
+      copyright="@year@ Poi Project">
+
+  <menu label="Navigation">
+    <menu-item label="Main" href="../index.html"/>
+  </menu>
+
+  <menu label="News">
+    <menu-item label="Logo Submissions" href="logocontest.html"/>
+  </menu>
+
+
+</book>
+
+
diff --git a/src/documentation/content/xdocs/news/logocontest.xml b/src/documentation/content/xdocs/news/logocontest.xml
new file mode 100644 (file)
index 0000000..5f6f417
--- /dev/null
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
+
+<document>
+    <header>
+        <title></title>
+        <authors>
+            <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+            <person id="GS" name="Glen Stampoultzis" email="glens@apache.org"/>
+        </authors>
+    </header>
+
+    <body>
+        <section><title>POI logos</title>
+            <p>
+                    Here are the current logo submissions.  Thanks to the artists!
+            </p>
+            <section><title>Michael Mosmann</title>
+                <p>
+                    <img alt="logo" src="images/logoMichaelMosmann.png"/>
+                </p>
+            </section>
+            <section><title>Loïc Lefèvre</title>
+                <p>
+                    <img alt="logo" src="images/logoLoicLefevre.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoLoicLefevre2.png"/>
+                </p>
+            </section>
+            <section><title>Glen Stampoultzis</title>
+                <p>
+                    <img alt="logo" src="images/logoGlenStampoutlzis.png"/>
+                </p>
+            </section>
+            <section><title>Marcus Gustafsson</title>
+                <p>
+                    <img alt="logo" src="images/logoGustafsson1.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoGustafsson2.png"/>
+                </p>
+            </section>
+            <section><title>Adrianus Handoyo</title>
+                <p>
+                    <img alt="logo" src="images/logoAdria1.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoAdria2.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoAdria3.png"/>
+                </p>
+            </section>
+            <section><title>RussellBeattie</title>
+                <p>
+                    <img alt="logo" src="images/logoRussellBeattie1.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoRussellBeattie2.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoRussellBeattie3.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRussellBeattie4.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoRussellBeattie5.png"/>
+                </p>
+            </section>
+            <section><title>Daniel Fernandez</title>
+                <p>
+                    <img alt="logo" src="images/logoDanielFernandez.png"/>
+                </p>
+            </section>
+            <section><title>Andrew Clements</title>
+                <p>
+                    <img alt="logo" src="images/logoAndrewClements.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoAndrewClements2.png"/>
+                </p>
+            </section>
+            <section><title>Wendy Wise</title>
+                <p>
+                    <img alt="logo" src="images/logoWendyWise.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoWendyWise2.png"/>
+                </p>
+            </section>
+            <section><title>Nikhil Karmokar</title>
+                <p>
+                    <img alt="logo" src="images/logoKarmokar1.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoKarmokar1s.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoKarmokar2.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoKarmokar2s.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoKarmokar3.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoKarmokar3s.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoKarmokar4.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoKarmokar4s.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoKarmokar5.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoKarmokar5s.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoKarmokar6.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoKarmokar6s.png"/>
+                </p>
+            </section>
+            <section><title>Lieven Janssen</title>
+                <p>
+                    <img alt="logo" src="images/logoJanssen1.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoJanssen2.png"/>
+                </p>
+            </section>
+            <section><title>RaPi GmbH</title>
+                <p>
+                    Contact Person: Fancy at: fancy at my-feiqi.com
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRaPiGmbH1.png"/>&nbsp;&nbsp;&nbsp;
+                    <img alt="logo" src="images/logoRaPiGmbH2.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRaPiGmbH5.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRaPiGmbH6.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRaPiGmbH7.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRaPiGmbH8.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRaPiGmbH9.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRaPiGmbH10.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRaPiGmbH11.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRaPiGmbH12.png"/>
+                </p>
+            </section>
+            <section><title>Randy Stanard</title>
+                <p>
+                    <img alt="logo" src="images/logoRandyStanard01.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRandyStanard02.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRandyStanard03.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRandyStanard04.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRandyStanard05.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRandyStanard06.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRandyStanard07.png"/>
+                </p>
+                <p>
+                    <img alt="logo" src="images/logoRandyStanard08.png"/>
+                </p>
+            </section>
+        </section>
+    </body>
+    <footer>
+        <legal>
+          Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+          $Revision$ $Date$
+        </legal>
+    </footer>
+</document>
diff --git a/src/documentation/content/xdocs/overview.xml b/src/documentation/content/xdocs/overview.xml
new file mode 100644 (file)
index 0000000..ff65c67
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title>Overview</title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver2@users.sourceforge.net"/>
+    </authors>
+  </header>
+  
+  <body>
+    <section><title>What is it?</title>
+      <p>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.
+      </p>
+    </section>
+    <section><title>Sub-Projects</title>
+      <p>
+        There following are ports, packages or components contained in the POI project.
+      </p>
+      <section><title>POIFS</title>
+        <p>
+          <link href="poifs/index.html">POIFS</link> is the set of APIs 
+          for reading and writing OLE 2 Compound Document Formats using (only) Java.
+        </p> 
+      </section>
+      
+      <section><title>HSSF</title>
+        <p>
+          <link href="hssf/index.html">HSSF</link> is the set of APIs 
+         for reading and writing Microsoft Excel 97(-XP) spreadsheet using (only) Java.
+        </p>
+      </section>
+
+      <section><title>HDF</title>
+        <p>
+          <link href="hdf/index.html">HDF</link>  is the set of APIs                   
+          for reading and writing Microsoft Word 97(-XP) spreadsheet using (only) Java.
+        </p>
+      </section>
+
+      <section><title>HPSF</title>
+        <p>
+          <link href="hpsf/index.html">HPSF</link> is the set of APIs 
+          for reading property sets using (only) Java.
+        </p> 
+      </section>
+
+      <section><title>POI-Utils</title>
+        <p>
+          <link href="utils/index.html">POI-Utils</link> 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.  
+        </p>
+      </section>
+    </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Poi Project All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
diff --git a/src/documentation/content/xdocs/patches.xml b/src/documentation/content/xdocs/patches.xml
new file mode 100644 (file)
index 0000000..a3696e1
--- /dev/null
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+<!-- Is this being used? -->
+
+<document>
+    <header>
+        <title>Patch Queue</title>
+        <authors>
+            <person email="greenrd@hotmail.com" name="Robin Green"/>
+            <person email="barozzi@nicolaken.com" name="Nicola Ken Barozzi"/>
+        </authors>
+    </header>
+    <body>
+        <section>
+            <title>Introduction</title>
+            <p>
+                This is an
+                <strong>informal</strong> list - in chronological order -
+                of some of the noteworthy patches that have been posted
+                to the
+                <code>developers</code> mailing list.
+                These patches are not (yet) part of the Poi project, but need reviewing for possible
+                inclusion. This system was instituted because, due to the large volume of mail and
+                the lack of time of the committers, some patches tended to get forgotten about. This
+                queue does not guarantee that any patch will be reviewed within a reasonable time frame,
+                but it does at least make them easier to find!
+            </p>
+            <p>
+                <strong>Reviewers wanted!</strong> - If you have time to review and/or test these patches,
+                we would be grateful for your time. Please post comments to the dev mailing lists.
+            </p>
+            <p>
+                Before submitting a patch, please read the page on
+                <link href="contrib.xml">Third-Party
+                    Contributions</link>. The preferred submission method for patches is:
+            </p>
+            <ul>
+                <li>Post to Poi developers list</li>
+                <li>Describe the patch, the reason for it and (if necessary) why this is important.</li>
+                <li>Generate the patch in
+                    <code>diff -u</code> format from CVS
+                </li>
+                <li>Also generate a documentation patch or new file, if this is something that should be documented.
+                </li>
+                <li>Post as an attachment rather than inline (unless it is trivially small).</li>
+            </ul>
+            <p>Following the above guidelines will facilitate your patch being reviewed
+                and applied efficiently.</p>
+        </section>
+        <section>
+            <title>Patch Queue</title>
+            <p>
+                <strong> [Under Construction] </strong> Archive links will be added later.
+                <strong>Please do not bother the patch submitters/authors</strong> without first reading the
+                relevant post(s) in the
+                <link href="mail-archives.xml">mailing list archives.</link>
+            </p>
+            <p>Vapourware will not be listed.</p>
+            <table>
+                <tr>
+                    <th>id</th>
+                    <th>Summary</th>
+                    <th>Reviewer</th>
+                    <th>Resolution</th>
+                    <th>Status</th>
+                </tr>
+            </table>
+            <p>See also additional list of patches to be added in
+                <link href="todo.xml">To Do</link>.
+            </p>
+        </section>
+    </body>
+</document>
diff --git a/src/documentation/content/xdocs/plan/POI10Vision.xml b/src/documentation/content/xdocs/plan/POI10Vision.xml
new file mode 100644 (file)
index 0000000..ca2b483
--- /dev/null
@@ -0,0 +1,509 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
+
+<document>
+ <header>
+  <title>POI 1.0 Vision Document</title>
+  <authors>
+   <person name="Andrew C. Oliver" email="acoliver@apache.org"/>
+   <person name="Marcus W. Johnson" email="mjohnson@apache.org"/>   
+   </authors>
+ </header>
+
+ <body>
+
+ <section><title>Preface</title>
+        <p> 
+               (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.
+       </p>
+       <p>
+               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.  
+       </p>
+       <p>
+               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.
+       </p>
+       <p>
+               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?)
+       </p>
+ </section>
+
+ <section><title>1. Introduction</title>
+  <section><title>1.1 Purpose of this document</title>
+       <p>
+               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.
+       </p>
+  </section>
+  
+
+  <section><title>1.2 Project Overview</title>
+       <p>
+               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:         
+       </p>
+       
+               <ul>
+                       <li>
+                               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;
+                       </li>
+                       <li>
+                               providing a library (HSSF) for
+                               manipulating spreadsheet data and outputting it in a compatible
+                               format to Microsoft Excel XLS format;
+                       </li>
+                       <li>
+                               and providing a Cocoon 2
+                               Serializer (HSSFSerializer) for serializing XML documents as
+                               Excel-compatible spreadsheets.
+                       </li>
+               </ul>
+       
+  </section>
+ </section>
+ <section><title>2. User Description</title>
+   <section><title>2.1 User/Market Demographics</title>
+       <p>
+               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.
+       </p>
+       <ol>
+               <li>
+               Our intended audience for the HSSF
+               Serializer portion of this project are developers writing reports or
+               data extracts in XML format. 
+               </li>
+               <li>
+               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.
+               </li>
+               <li>
+               Our intended audience for the
+               &quot;POIFS&quot; 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.
+               </li>
+       </ol>
+   </section>
+   <section><title>2.2. User environment</title>
+       <p>
+               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.            
+       </p>
+   </section>
+   <section><title>2.3. Key User Needs</title>
+       <p>
+               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.                
+       </p>
+       <p>
+               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.
+       </p>
+       <p>
+               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.
+       </p>
+       
+
+   </section>
+   <section><title>2.4. Alternatives and Competition</title>
+       <p>
+        Originally there weren't any decent <link href="../hssf/alternatives.html">alternatives</link> for reading or writing
+        to Excel.  This has changed somewhat.
+       </p>
+   </section>
+ </section>
+ <section><title>3. Project Overview</title>
+   <section><title>3.1. Project Perspective</title>
+       <p>
+               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).  
+       </p>
+   </section>
+   <section><title>3.2. Project Position Statement</title>
+       <p>
+               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.
+       </p>
+   </section>
+   <section><title>3.3. Summary of Capabilities</title>
+       <p>
+               HSSF Serializer for Apache Cocoon 2
+       </p>
+       <table>
+               <tr>
+                       <td>
+                               Benefit
+                       </td>
+                       <td>
+                               Supporting Features
+                       </td>
+               </tr>
+               <tr>
+                       <td>
+                               Standard XML tag language for sheet data
+                       </td>
+                       <td>
+                               Serializer will transform documents utilizing a defined tag
+                               language
+                       </td>
+               </tr>
+               <tr>
+                       <td>
+                               Utilize XML to output in Excel
+                       </td>
+                       <td>
+                               Serializer will output in Excel
+                       </td>
+               </tr>
+               <tr>
+                       <td>
+                               Java API to output in Excel on any platform
+                       </td>
+                       <td>
+                               The project will develop an API that outputs in Excel using
+                               pure Java.
+                       </td>
+               </tr>
+               <tr>
+                       <td>
+                               Make it easy for developers to port other OLE 2 Compound
+                               Document-based formats to Java.
+                       </td>
+                       <td>
+                               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.
+                       </td>
+               </tr>
+       </table>   
+   </section>
+   <section><title>3.4. Assumptions and Dependencies</title>
+       <ul>
+               <li>
+                       The HSSF Serializer will run on
+                       any Java 2 supporting platform with Apache Cocoon 2 installed along
+                       with the HSSF and POIFS APIs.
+               </li>
+               <li>
+                       The HSSF API requires a Java 2
+                       implementation and the POI API.
+               </li>
+               <li>
+                       The POIFS API requires a Java 2
+                       implementation.
+               </li>
+       </ul>   
+   </section>
+ </section>
+ <section><title>4. Project Features</title>
+       <p> 
+               The POIFS API will include:
+       </p>
+       <ul>
+               <li>
+                       Low level structures representing
+                       the structures in a POI filesystems.
+               </li>
+               <li>
+                       A low-level API for
+                       creating/manipulating POI filesystems.
+               </li>
+               <li>
+                       A set of high level interfaces
+                       abstracting the user from the POI filesystem constructs and
+                       representing it as a standard filesystem (Files, directories, etc)
+               </li>
+       </ul>   
+       <p>
+               The HSSF API will include:
+       </p>
+       <ul>
+               <li>
+                       Low level structures representing
+                       the structures in an Excel file.
+               </li>
+               <li>
+                       A low-level API for creating and
+                       manipulating Excel files and writing them into POI filesystems.
+               </li>
+               <li>
+                       A high level model and style
+                       interface for manipulating spreadsheet data without knowing anything
+                       about the Excel format itself.
+               </li>
+       </ul>   
+   <section><title>4.1 POI Filesystem API</title>
+       <p>
+               The POI Filesystem API includes:
+       </p>
+       <ul>
+               <li>An implementation of Big Blocks</li>
+               <li>An implementation of Small Blocks</li>
+               <li>An implementation of Header Blocks</li>
+               <li>An implementation of Block Allocation Tables</li>
+               <li>An implementation of Property Sets</li>
+               <li>An implementation of the POI 
+               filesystem including functions to get and set the above constructs;
+               compound functions for reading/writing files/directories.
+               </li>
+               <li>An abstraction of the POI
+               filesystem providing interfaces representing Files, Directories,
+               FileSystems in normal terminology and encapulating the above
+               constructs.
+               </li>
+               <li>Full documentation of the POI file
+               format.
+               </li>
+               <li>Full documentation of the APIs and
+               interfaces provided through Javadoc, user documentation (aimed at
+               developers using the APIs)
+               </li>
+               <li>Examples aimed at teaching the
+               user to write code using POI. (titled: recipes for POI)
+               </li>
+               <li>Performance specifications.
+               (Example POI filesystems rated by some measure of complexity along
+               with system specifications and execution times for given operations)
+               </li>
+       </ul>
+   </section>
+   <section><title>4.2 HSSF API</title>
+       <p>
+               The HSSF API includes:
+       </p>
+       <ul>
+               <li>An implementation of Record
+               (binary 2 byte type followed by 2 byte size (n) followed by n bytes)</li>
+               <li>Implementations of many standard
+               record types mapping the data bytes to fields along with methods to
+               reserialize those fields</li>
+               <li>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.</li>
+               <li>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.</li>
+               <li>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.</li>
+               <li>Full documentation of the APIs and
+               interfaces provided through Javadoc, user documentation (aimed at
+               developers using the apis).</li>
+               <li>Examples aimed at teaching
+               developers to use the APIs. 
+               </li>
+               <li>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)</li>
+       </ul>
+   </section>
+   <section><title>4.3 HSSF Serializer</title>
+       <p>
+               The HSSF Serializer subproject:
+       </p>
+       <ul>
+               <li>A class supporting the Cocoon 2
+               Serializer Interface.</li>
+               <li>An interface between the SAX
+               events and the HSSF APIs.</li>
+               <li>A specified tag language for using
+               with the Serializer.</li>
+               <li>Documentation on the tag language
+               for the HSSF Serializer</li>
+               <li>Normal javadocs.</li>
+               <li>Example XML files</li>
+               <li>Performance specifications.
+               (Example XML docs and stylesheets rated by some measure of
+               complexity along with system specifications and execution times)</li>
+       </ul>   
+   </section>
+ </section>
+ <section><title>5. Other Product Requirements</title>
+   <section><title>5.1. Applicable Standards</title>
+       <p>
+               All Java code will be 100% pure Java.
+       </p>
+   </section>
+   <section><title>5.2. System Requirements</title>
+       <p>
+               The minimum system requirements for POIFS are:
+       </p>
+       <ul>
+               <li>64 Mbytes memory</li>
+               <li>Java 2 environment</li>
+               <li>Pentium or better processor (or equivalent on other platforms)</li>
+       </ul>   
+       <p>
+               The minimum system requirements for HSSF are:
+       </p>
+       <ul>
+               <li>64 Mbytes memory</li>
+               <li>Java 2 environment</li>
+               <li>Pentium or better processor (or equivalent on other platforms)</li>
+               <li>POIFS API</li>
+       </ul>   
+       <p>
+               The minimum system requirements for the HSSF Serializer are:
+       </p>
+       <ul>
+               <li>64 Mbytes memory</li>
+               <li>Java 2 environment</li>
+               <li>Pentium or better processor (or equivalent on other platforms)</li>
+               <li>Cocoon 2</li>
+               <li>HSSF API</li>
+               <li>POI API</li>
+       </ul>   
+   </section>
+   <section><title>5.3. Performance Requirements</title>
+       <p>
+               All components must perform well enough
+               to be practical for use in a webserver environment (especially
+               Cocoon2/Tomcat/Apache combo)
+       </p>
+   </section>
+   <section><title>5.4. Environmental Requirements</title>
+       <p>
+               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.
+       </p>
+   </section>
+ </section>
+ <section><title>6. Documentation Requirements</title>
+   <section><title>6.1 POI Filesystem</title>
+       <p>
+               The filesystem as read and written by
+               POI shall be fully documented and explained so that the average Java
+               developer can understand it.
+       </p>
+   </section>
+   <section><title>6.2. POI API</title>
+       <p>
+               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.    
+       </p>
+   </section>
+   <section><title>6.3. HSSF File Format</title>
+       <p>
+               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 &quot;legal stuff&quot;.        
+       </p>
+   </section>
+   <section><title>6.4. HSSF API</title>
+       <p>
+               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.    
+       </p>
+   </section>
+
+   <section><title>6.5. HSSF Serializer</title>
+       <p>
+               The HSSF Serializer will be documented
+               by javadoc.     
+       </p>
+   </section>
+
+   <section><title>6.6 HSSF Serializer Tag language</title>
+       <p>
+               The XML tag language along with
+               function and usage shall be fully documented. Examples will be
+               provided as well.
+       </p>
+   </section>
+ </section>
+ <section><title>7. Terminology</title>
+   <section><title>7.1 Filesystem</title>
+       <p>
+               filesystem shall refer only to the POI formatted archive.
+       </p>
+   </section>
+   <section><title>7.2 File</title>
+       <p>
+               file shall refer to the embedded data stream within a 
+               POI filesystem. This will be the actual embedded document. 
+       </p>
+   </section>
+ </section>
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/plan/POI20Vision.xml b/src/documentation/content/xdocs/plan/POI20Vision.xml
new file mode 100644 (file)
index 0000000..1cfb783
--- /dev/null
@@ -0,0 +1,582 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
+
+<document>
+ <header>
+  <title>POI 2.0 Vision Document</title>
+  <authors>
+   <person name="Andrew C. Oliver" email="acoliver2@users.sourceforge.net"/>
+   <person name="Marcus W. Johnson" email="mjohnson@apache.org"/>
+   <person name="Glen Stampoultzis" email="gstamp@iprimus.com.au"/>
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>      
+   </authors>
+ </header>
+
+ <body>
+ <section><title>Preface</title>
+        <p>
+                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.
+        </p>
+        <p>
+                This document was created before the POI components for 
+                <link href="http://xml.apache.org/cocoon">Apache Cocoon</link> 
+                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.
+        </p>
+ </section>
+
+ <section><title>1. Introduction</title>
+  <section><title>1.1 Purpose of this document</title>
+       <p>
+                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.
+       </p>
+        <ul>
+               <li>
+                        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.
+                </li>
+               <li>
+                        The HSSF library is a set of classes for reading and 
+                        writing Microsoft Excel 97 file format using pure Java.
+                </li>
+               <li>
+                        The POIFS library is a set of classes for reading and 
+                        writing Microsoft's OLE 2 Compound Document format using 
+                        pure Java.
+                </li>
+        </ul>  
+        <p>By the completion of this release cycle the POI project will also
+        include the HSSF Generator and the HDF library.
+        </p>
+        <ul>
+               <li>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.
+                </li>
+               <li>The HDF library will provide a set of high level interfaces
+               for reading and writing Microsoft Word 97 file format using pure
+               Java.</li>
+        </ul>
+        
+  </section>
+  
+
+  <section><title>1.2 Project Overview</title>
+        <p>
+                The first release of the POI project
+                was an astounding success. This release seeks to build on that
+                success by:
+        </p>
+        <ul>
+                <li>
+                        Refactoring POIFS into imput and
+                        output classes as well as an event-driven API for reading.
+                </li>
+                <li>
+                        Refactor HSSF for greater
+                       performance as well as an event-driven API for reading
+                </li>
+                <li>
+                        Extend HSSF by adding the ability to read and write formulas.
+                </li>
+               <li>
+                        Extend HSSF by adding the ability to read and write 
+                        user-defined styles.
+                </li>
+               <li>
+                        Create a Cocoon 2 Generator for HSSF using the same tags 
+                        as the HSSF Serializer.
+                </li>
+               <li>
+                        Create a new library (HDF) for reading and writing 
+                        Microsoft Word DOC format.
+                </li>
+               <li>
+                        Refactor the HSSFSerializer into a separate extensible 
+                        POIFSSerializer and HSSFSerializer
+                </li>
+                <li>
+                        Providing the create excel charts. (write only)
+                </li>
+        </ul>
+  </section>
+ </section>
+ <section><title>2. User Description</title>
+   <section><title>2.1 User/Market Demographics</title>
+       <p>
+                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.        
+        </p>
+        <ol>
+                <li>
+                        Our intended audience for the HSSF
+                        Serializer portion of this project are developers writing reports or
+                        data extracts in XML format.
+                </li>
+                <li>
+                        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
+                </li>
+                <li>
+                        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.
+                </li>
+                <li>
+                        Our intended audience for the HSSF
+                        generator are developers who need to export Excel spreadsheets to
+                        XML in a non-proprietary environment.
+                </li>
+                <li>
+                        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.
+                </li>
+        </ol>        
+   </section>
+   <section><title>2.2. User environment</title>
+        <p>
+                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.
+        </p>
+   </section>
+   <section><title>2.3. Key User Needs</title>
+       <p>
+                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.        
+        </p>
+       <p>
+                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.     
+        </p>
+        <p>
+                The HSSF library currently ignores
+                formula cells and identifies them as &quot;UnknownRecord&quot; at the
+                lower level of the API. We must provide a way to read and write
+                formulas. This is now the top requested feature.
+        </p>
+        <p>
+                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.
+        </p>
+        <p>
+                The HSSF Serializer currently does not
+                provide serialization for cell styling. User's will want stylish
+                spreadsheets to result from their XML.
+        </p>
+        <p>
+                There is currently no way to generate
+                the XML from an XLS that is consistent with the format used by the
+                HSSF Serializer.
+        </p>
+        <p>
+                There should be a way to read and write
+                the DOC file format using pure Java.
+        </p>   
+
+   </section>
+   <section><title>2.4. Alternatives and Competition</title>
+               <p>
+            Originally there weren't any decent <link href="../hssf/alternatives.html">alternatives</link> for reading or writing
+            to Excel.  This has changed somewhat.
+            </p>
+   </section>
+ </section>
+ <section><title>3. Project Overview</title>
+   <section><title>3.1. Project Perspective</title>
+       <p>
+                The produced code shall be licensed by
+                the Apache License as used by the Cocoon 2 project (APL 1.1) and
+                maintained on at <link href="http://poi.sourceforge.net/">http://poi.sourceforge.net</link>
+                and <link href="http://sourcefoge.net/projects/poi">http://sourcefoge.net/projects/poi</link>.
+                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.
+       </p>
+   </section>
+   <section><title>3.2. Project Position Statement</title>
+       <p>
+                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.
+       </p>
+   </section>
+   <section><title>3.3. Summary of Capabilities</title>
+       <p>
+               HSSF Serializer for Apache Cocoon 2
+       </p>
+       <table>
+               <tr>
+                       <th>
+                               Benefit
+                       </th>
+                       <th>
+                               Supporting Features
+                       </th>
+               </tr>
+               <tr>
+                       <td>
+                               Ability to serialize styles from XML spreadsheets.
+                       </td>
+                       <td>
+                               HSSFSerialzier will support styles.
+                       </td>
+               </tr>
+               <tr>
+                       <td>
+                               Ability to read and write formulas in XLS files.
+                       </td>
+                       <td>
+                               HSSF will support reading/writing formulas.
+                       </td>
+               </tr>
+               <tr>
+                       <td>
+                               Ability to output in MS Word on any platform using Java.
+                       </td>
+                       <td>
+                               The project will develop an API that outputs in Word format
+                               using pure Java.
+                       </td>
+               </tr>
+               <tr>
+                       <td>
+                               Enhance performance for reading and writing XLS files.
+                       </td>
+                       <td>
+                               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.
+                       </td>
+               </tr>
+               <tr>
+                       <td>
+                               Ability to generate XML from XLS files
+                       </td>
+                       <td>
+                               The project will develop an HSSF Generator.
+                       </td>
+               </tr>
+               <tr>
+                       <td>
+                               The ability to generate charts
+                       </td>
+                       <td>
+                                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.
+                        </td>
+               </tr>
+                
+       </table>   
+   </section>
+   <section><title>3.4. Assumptions and Dependencies</title>
+       <ul>
+               <li>
+                        The HSSF Serializer and Generator
+                       will support the Gnumeric 1.0 XML tag language.
+                </li>
+               <li>
+                        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).
+               </li>
+               <li>
+                        The HSSF Generator will run on any
+                       Java 2 supporting platform with Apache Cocoon 2 installed along with
+                       the HSSF and POIFS APIs.
+                </li>
+               <li>
+                        The HSSF Serializer will run on
+                        any Java 2 supporting platform with Apache Cocoon 2 installed along
+                        with the HSSF and POIFS APIs.
+                </li>
+               <li>
+                        The HDF API requires a Java 2
+                        implementation and the POIFS API.
+                </li>
+               <li>
+                        The HSSF API requires a Java 2
+                        implementation and the POIFS API.
+                </li>
+               <li>
+                        The POIFS API requires a Java 2
+                        implementation.
+                </li>
+                
+       </ul>   
+   </section>
+ </section>
+ <section><title>4. Project Features</title>
+       <p> 
+                Enhancements to the POIFS API will
+                include:
+       </p>
+       <ul>
+               <li>
+                        An event driven API for reading
+                        POIFS Filesystems.
+               </li>
+               <li>
+                       A low-level API for
+                       creating/manipulating POI filesystems.
+               </li>
+               <li>
+                        Code improvements supporting
+                       greater separation between read and write structures.
+               </li>
+       </ul>   
+       <p>
+                        Enhancements to the HSSF API will
+                        include:
+       </p>
+       <ul>
+               <li>
+                        An event driven API for reading
+                        XLS files.
+               </li>
+               <li>
+                        Performance improvements.
+               </li>
+               <li>
+                        Formula support (read/write)
+               </li>
+               <li>
+                        Support for user-defined data
+                        formats
+               </li>
+               <li>
+                        Better documentation of the file
+                        format and structure.
+               </li>
+               <li>
+                        An API for creation of charts.
+               </li>                                
+       </ul>
+       <p>
+                The HSSF Generator will include:
+       </p>
+       <ul>
+               <li>
+                        A set of classes supporting the
+                       Cocoon 2 Generator interfaces providing a method for reading XLS
+                       files and outputting SAX events.
+               </li>
+               <li>
+                        The same tag format used by the
+                        HSSFSerializer in any given release.
+               </li>
+       </ul>
+       <p>
+                The HDF API will include:
+       </p>
+       <ul>
+               <li>
+                        An event driven API for reading
+                       DOC files.
+                </li>
+               <li>
+                        A set of high and low level APIs
+                        for reading and writing DOC files.
+                </li>
+               <li>
+                        Documentation of the DOC file
+                        format or enhancements to existing documentation.
+                </li>                
+       </ul>   
+ </section>            
+ <section><title>5. Other Product Requirements</title>
+   <section><title>5.1. Applicable Standards</title>
+       <p>
+               All Java code will be 100% pure Java.
+       </p>
+   </section>
+   <section><title>5.2. System Requirements</title>
+       <p>
+               The minimum system requirements for the POIFS API are:
+       </p>
+       <ul>
+               <li>64 Mbytes memory</li>
+               <li>Java 2 environment</li>
+               <li>Pentium or better processor (or equivalent on other platforms)</li>
+       </ul>   
+       <p>
+               The minimum system requirements for the the HSSF API are:
+       </p>
+       <ul>
+               <li>64 Mbytes memory</li>
+               <li>Java 2 environment</li>
+               <li>Pentium or better processor (or equivalent on other platforms)</li>
+               <li>POIFS API</li>
+       </ul>
+       <p>
+               The minimum system requirements for the the HDF API are:
+       </p>
+       <ul>
+               <li>64 Mbytes memory</li>
+               <li>Java 2 environment</li>
+               <li>Pentium or better processor (or equivalent on other platforms)</li>
+               <li>POIFS API</li>
+       </ul>   
+       
+       <p>
+               The minimum system requirements for the HSSF Serializer are:
+       </p>
+       <ul>
+               <li>64 Mbytes memory</li>
+               <li>Java 2 environment</li>
+               <li>Pentium or better processor (or equivalent on other platforms)</li>
+               <li>Cocoon 2</li>
+               <li>HSSF API</li>
+               <li>POI API</li>
+       </ul>   
+   </section>
+   <section><title>5.3. Performance Requirements</title>
+       <p>
+               All components must perform well enough
+               to be practical for use in a webserver environment (especially
+               the "killer trio": Cocoon2/Tomcat/Apache combo)
+       </p>
+   </section>
+   <section><title>5.4. Environmental Requirements</title>
+       <p>
+               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.
+       </p>
+   </section>
+ </section>
+ <section><title>6. Documentation Requirements</title>
+   <section><title>6.1 POI Filesystem</title>
+       <p>
+               The filesystem as read and written by
+               POI shall be fully documented and explained so that the average Java
+               developer can understand it.
+       </p>
+   </section>
+   <section><title>6.2. POI API</title>
+       <p>
+               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.    
+       </p>
+   </section>
+   <section><title>6.3. HSSF File Format</title>
+       <p>
+               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 &quot;legal stuff&quot;.  Additionally, we are 
+                collaborating with the fine folks at OpenOffice.org on
+                *free* documentation of the format.
+       </p>
+   </section>
+   <section><title>6.4. HSSF API</title>
+       <p>
+               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.    
+       </p>
+   </section>
+   <section><title>6.5 HDF API</title>
+       <p>
+                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.        
+       </p>
+   </section>   
+   <section><title>6.6 HSSF Serializer</title>
+       <p>
+               The HSSF Serializer will be documented
+               by javadoc.     
+       </p>
+   </section>
+   <section><title>6.7 HSSF Generator</title>
+       <p>
+               The HSSF Generator will be documented
+               by javadoc.     
+       </p>
+   </section>      
+   <section><title>6.8 HSSF Serializer Tag language</title>
+       <p>
+               The XML tag language along with
+               function and usage shall be fully documented. Examples will be
+               provided as well.
+       </p>
+   </section>
+ </section>
+ <section><title>7. Terminology</title>
+   <section><title>7.1 Filesystem</title>
+       <p>
+               filesystem shall refer only to the POI formatted archive.
+       </p>
+   </section>
+   <section><title>7.2 File</title>
+       <p>
+               file shall refer to the embedded data stream within a 
+               POI filesystem. This will be the actual embedded document. 
+       </p>
+   </section>
+ </section>
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/plan/book.xml b/src/documentation/content/xdocs/plan/book.xml
new file mode 100644 (file)
index 0000000..12857f7
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../dtd/book-cocoon-v10.dtd">
+
+<book software="Poi Project" 
+      title="Poi Project planning" 
+      copyright="@year@ Poi Project">
+
+  <menu label="Navigation">
+    <menu-item label="Main" href="../index.html"/>
+  </menu>
+
+  <menu label="Planning Documents">
+    <menu-item label="1.0 Vision" href="POI10Vision.html"/>
+    <menu-item label="2.0 Vision" href="POI20Vision.html"/>
+  </menu>
+
+
+</book>
+
+
diff --git a/src/documentation/content/xdocs/plan/index.xml b/src/documentation/content/xdocs/plan/index.xml
new file mode 100644 (file)
index 0000000..1126770
--- /dev/null
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>Planning Documentation</title>
+  <subtitle>Overview</subtitle>
+  <authors>
+   <person name="David Crossley" email="crossley@apache.org"/>
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>     
+  </authors>
+ </header>
+
+ <body>
+ <section><title>Overview</title>
+
+  <p>This is a collection of notes to assist with long-term planning and
+   development.
+  </p>
+
+  <p>There is much discussion of issues and research topics (RT) threads on
+   the <code>dev</code> mailing list (and elsewhere). However, details
+   get lost in the sheer volume. This is the place to document the summary of
+   discussions on some key topics. Some new and complex capabilities will take
+   lots of design and specification before they can be implemented.
+  </p>
+
+  <p>Another use for this collection of notes is as a place to quickly store
+   a snippet from an email discussion or even a link to a discussion thread.
+   The concepts can then be fleshed-out over time.
+  </p>
+
+  <p>Anyone can participate in this process. Please get involved in discussion
+   on <code>dev</code> and contribute patches for these summary planning
+   documents via the normal <link href="../contrib.html">contribution</link>
+   process.
+  </p>
+
+  <p>These planning documents are intended to be concise notes only. They are
+   also ever-evolving, because as issues are addressed these notes will be
+   revised.
+  </p>
+ </section>
+
+ <section><title>Topics and Issues</title>
+
+  <ul>
+   <li><link href="release.html">Release Plan</link>
+    - major things to do before the 2.0 release</li>
+   <li><link href="doc.html">Documentation</link>
+    - revisions and additions are required</li>
+   <li>See the general <link href="../todo.html">To Do</link> list 
+    and the <code>dev</code> email archives for other issues</li>
+  </ul>
+ </section>
+
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/plan/release.xml b/src/documentation/content/xdocs/plan/release.xml
new file mode 100644 (file)
index 0000000..8012744
--- /dev/null
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>Release Plan 2.0</title>
+  <subtitle>Planning Documentation</subtitle>
+  <authors>
+   <person name="David Crossley" email="crossley@apache.org"/>
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>   
+  </authors>
+ </header>
+
+ <body>
+ <section><title>Preparation for release of Poi</title>
+   <p>Todo</p>
+<!-- NKB todo
+  <p>The 2.0 final release is scheduled for the end of November 2001.
+  </p>
+
+  <p>
+   The following is extracted from the thread
+   [C2]: Release Candidate 2 ... 2001-10-29
+  </p>
+
+<source><![CDATA[
+> The question is now, what has to be done until then?
+>
+> 1) We have many open bugs in bugzilla. These must be reviewed
+>    and then solved (or declared invalid etc).
+>
+> 2) Documentation updates (this area lacks most)
+>    We could move this to the final release.
+Documentation must be happening all the time, and not left
+until last.
+
+> 3) Decide what to backport from the 2.1 head.
+>    I'm +1 on removing the CodeFactories completly in 2.0, too.
+>    This would avoid any backcompatibility problems.
+>
+> 4) Layout the distribution
+>    This is a point we haven't discussed yet. Currently our
+>    distribution is a mixture of a source and a binary one.
+>    We deliver the source and a compiled version, but in order
+>    to run Cocoon, the user has to build a war file.
+>    I propose to split this: one source distribution which is
+>    similar to the current one but without the precompiled
+>    cocoon jar and a binary distribution containing only the
+>    war file. This war file should work in most servlet engines,
+>    perhaps not in all.
+>
+> So anything missing here?
+
+5) Ensure that licensing requirements have been met.
+  update jars.xml, ensure proper banner in *.java header,
+  verify the current LICENSE* files, ensure that external
+  components have suitable licensing requirements.
+]]></source>
+-->
+ </section>
+
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/poifs/book.xml b/src/documentation/content/xdocs/poifs/book.xml
new file mode 100644 (file)
index 0000000..9ee98e5
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../dtd/book-cocoon-v10.dtd">
+
+<book software="Poi Project" 
+      title="PoiFS" 
+      copyright="@year@ Poi Project">
+
+  <menu label="Navigation">
+    <menu-item label="Main" href="../index.html"/>
+    <menu-item label="How To" href="how-to.html"/>
+    <menu-item label="File System Documentation" href="fileformat.html"/>
+    <menu-item label="Use Cases" href="usecases.html"/>
+  </menu>
+
+</book>
+
+
diff --git a/src/documentation/content/xdocs/poifs/fileformat.xml b/src/documentation/content/xdocs/poifs/fileformat.xml
new file mode 100644 (file)
index 0000000..315ca2c
--- /dev/null
@@ -0,0 +1,676 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+<document>
+  <header>
+    <title>POIFS File System Internals</title>
+    <authors>
+      <person email="mjohnson@apache.org" name="Marc Johnson" id="MJ"/>
+    </authors>
+  </header>
+  <body>
+    <section><title>POIFS File System Internals</title>
+      <section><title>Introduction</title>
+        <p>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 &quot;.xls&quot; would likely
+           contain spreadsheet data, and a file ending in
+           &quot;.doc&quot; would probably contain a word processing
+           document. POIFS file systems are called &quot;file
+           system&quot;, 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 &quot;files&quot; it contains.</p>
+        <p>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.</p>
+        <p>The POIFS file system does not encode the documents
+           themselves. For example, if you had a word processor file
+           with the extension &quot;.doc&quot;, you would actually
+           have a POIFS file system with a document file archived
+           inside of that file system.</p>
+      </section>
+      <section><title>Document Conventions</title>
+        <p>This document utilizes the numeric types as described by
+           the Java Language Specification, which can be found at
+           <link href="http://java.sun.com">http://java.sun.com</link>. In
+           short:</p>
+        <ul>
+          <li>A <em>byte</em> is an 8 bit signed integer ranging from
+              -128 to 127.</li>
+          <li>A <em>short</em> is a 16 bit signed integer ranging from
+              -32768 to 32767</li>
+          <li>An <em>int</em> is a 32 bit signed integer ranging from
+              -2147483648 to 2147483647</li>
+          <li>A <em>long</em> is a 64 bit signed integer ranging from
+              -9.22E18 to 9.22E18.</li>
+        </ul>
+        <p>The Java Language Specification spells out a number of
+           other types that are not referred to by this document.</p>
+        <p>Where this document makes references to &quot;endian
+           conversion&quot; it is referring to the byte order of
+           stored numbers. Numbers in &quot;little-endian order&quot;
+           are stored with the <em>least</em> 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 <code>or</code> operation to it
+           against the first byte. The following code illustrates this
+           method:</p>
+       <source>
+public int getShort (byte[] rec)
+{
+    return ((rec[1] &lt;&lt; 8) | (rec[0] &amp; 0x00ff));
+}</source>
+      </section>
+      <section><title>File System Walkthrough</title>
+        <p>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 &quot;big picture&quot; of the
+           general structure and how it's interpreted.</p>
+        <p>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.</p>
+        <p>The first 64 bits of the header compose a <em>magic number
+           identifier.</em> 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 &quot;sanity check&quot; to
+           make sure this is a POIFS file system and not some other
+           format. The header also contains an <em>array of block
+           numbers</em>. These block numbers refer to blocks in the
+           file. When these blocks are read together they form the
+           <em>Block Allocation Table</em>. The header also contains a
+           pointer to the first element in the <em>property table</em>,
+           also known as the <em>root element</em>, and a pointer to the
+           <em>small Block Allocation Table (SBAT)</em>.</p>
+        <p>The <em>block allocation table</em> or <em>BAT</em>, along with
+           the <em>property table</em>, 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 &quot;end of file&quot;.</p>
+        <p>The <em>property table</em> is essentially the directory
+           storage for the file system. It consists of the name of the
+           file or directory, its <em>start block</em> in both the file
+           system and <em>BAT</em>, and its actual size. The first
+           property in the property table is the <em>root
+           element</em>. 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 <em>small block data</em>.</p>
+       <p>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.</p>
+      </section>
+       <section><title>Header Block</title>
+          <p>The POIFS file system begins with a <em>header
+             block</em>. The first 64 bits of the header form a long
+             <em>file type id</em> or <em>magic number identifier</em> of
+             <code>0xE11AB1A1E011CFD0L</code>. 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.</p>
+          <p>It's important to know the most important parts of the
+             header. These are discussed in the rest of this
+             section.</p>
+         <section><title>BATs</title>
+            <p>At offset <em>0x2C</em> is an int specifying the number
+               of elements in the <em>BAT array</em>. The array at
+               <em>0x4C</em> an array of ints. This array contains the
+               indices of every block in the Block Allocation
+               Table.</p>
+         </section>
+         <section><title>XBATs</title>
+           <p>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 <em>0x44</em> of the header is the index of the
+               first <em>extended BAT (XBAT) block</em>. At offset
+               <em>0x48</em> 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.</p>
+            <p>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.</p>
+           <p>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.</p>
+         </section>
+         <section><title>SBATs</title>
+            <p>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 <em>small
+               block allocation table</em> is used to navigate the
+               array of small blocks. The SBAT's start block index is
+               found at offset <em>0x3C</em> 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).</p>
+         </section>
+         <section><title>Property Table Start Index</title>
+            <p>An integer at address <em>0x30</em> specifies the start
+               index of the property table. This integer is specified
+               as a <em>&quot;block index&quot;</em>. 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.</p>
+         </section>
+       </section>
+       <section><title>Property Table</title>
+          <p>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:</p>
+         <ul>
+           <li>At offset <em>0x00</em> in the property is the
+                &quot;<em>name</em>&quot;. This is stored as an
+                uncompressed 16 bit unicode string. In short every
+                other byte corresponds to an &quot;ASCII&quot;
+                character. The size of this string is stored at offset
+                <em>0x40</em> (<em>string size</em>) as a short.</li>
+            <li>At offset <em>0x42</em> is the <em>property type</em>
+                (byte). The type is 1 for directory, 2 for file or 5
+                for the Root Entry.</li>
+           <li>At offset <em>0x43</em> is the <em>node color</em>
+                (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:
+             <ol>
+               <li>The root of the tree is always black</li>
+               <li>Two consecutive nodes cannot both be red</li>
+               <li>A property is less than another property if its
+                   name length is less than the other property's name
+                   length</li>
+               <li>If two properties have the same name length, the
+                   sort order is determined by the sort order of the
+                   properties' names.</li>
+             </ol></li>
+           <li>At offset <em>0x44</em> is the index (int) of the
+               <em>previous property</em>.</li>
+           <li>At offset <em>0x48</em> is the index (int) of the
+                <em>next property</em>.</li>
+            <li>At offset <em>0x4C</em> is the index (int) of the
+                <em>first directory entry</em>. This is used by
+                directory entries.</li>
+           <li>At offset <em>0x74</em> is an integer giving the
+                <em>start block</em> 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.</li>
+           <li>At offset <em>0x78</em> is an integer giving the total
+                <em>actual size</em> 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 <em>Root
+                Entry</em>, which, regardless of its size, is
+                <em>always</em> stored in big blocks and the main BAT is
+                used to walk the big blocks making up this special
+                file.</li>
+         </ul>
+       </section>
+       <section><title>Root Entry</title>
+          <p>The <em>Root Entry</em> in the <em>Property Table</em>
+             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 <em>Small Block Array</em>, 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 <em>Block
+             Allocation Table</em>. 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).</p>
+       </section>
+       <section><title>Walking the Nodes of the Property Table</title>
+          <p>The individual properties form a directory tree, with the
+             <em>Root Entry</em> 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 <em>NEXT_PROP</em>,
+             <em>PREVIOUS_PROP</em>, and <em>CHILD_PROP</em> fields hold
+             these indices, and are used to navigate the tree.</p>
+          <p><img alt="property set" src="images/PropertySet.jpg" /></p>
+         <p>Each directory entry (i.e., a property whose type is
+             <em>directory</em> or <em>root entry</em>) uses its
+             <em>CHILD_PROP</em> 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.</p>
+          <p>The children of a given directory property point to each
+             other in a similar fashion by using their
+             <em>NEXT_PROP</em> and <em>PREVIOUS_PROP</em> fields.</p>
+         <p>Unused <em>NEXT_PROP</em>, <em>PREVIOUS_PROP</em>, and
+             <em>CHILD_PROP</em> fields contain the marker value of
+             -1. All file properties have a value of -1 for their
+             CHILD_PROP fields for example.</p>
+       </section>
+       <section><title>Block Allocation Table</title>
+         <p>The <em>BAT blocks</em> are pointed at by the bat array
+             contained in the header and supplemented, if necessary,
+             by the <em>XBAT blocks</em>. These blocks form a large
+             table of integers. These integers are block numbers. The
+             <em>Block Allocation Table</em> 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 <em>property</em> for a given file. The
+             elements in this BAT are both the block number (within
+             the file minus the header) <em>and</em> 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.</p>
+          <p>Here's an example: Let's assume that the BAT begins as
+             follows:</p>
+         <p><code>BAT[ 0 ] = 2</code></p>
+         <p><code>BAT[ 1 ] = 5</code></p>
+         <p><code>BAT[ 2 ] = 3</code></p>
+         <p><code>BAT[ 3 ] = 4</code></p>
+         <p><code>BAT[ 4 ] = 6</code></p>
+         <p><code>BAT[ 5 ] = -2</code></p>
+         <p><code>BAT[ 6 ] = 7</code></p>
+         <p><code>BAT[ 7 ] = -2</code></p>
+         <p><code>...</code></p>
+         <p>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.</p>
+          <p>Similarly, a file beginning at index 1 consists of
+             blocks 1 and 5.</p>
+         <p>Other special numbers in a BAT array are:</p>
+          <ul>
+            <li>-1, which indicates an unused block</li>
+            <li>-3, which indicates a &quot;special&quot; block, such
+                as a block used to make up the Small Block Array, the
+                Property Table, the main BAT, or the SBAT</li>
+          </ul>
+       </section>
+      <section><title>File System Structures</title>
+        <p>The following outlines the basic file system structures.</p>
+       <section><title>Header (block 1) -- 512 (0x200) bytes</title>
+          <table>
+           <tr>
+             <td><em>Field</em></td>
+             <td><em>Description</em></td>
+             <td><em>Offset</em></td>
+             <td><em>Length</em></td>
+             <td><em>Default value or const</em></td>
+           </tr>
+            <tr>
+             <td>FILETYPE</td>
+             <td>Magic number identifying this as a POIFS file
+                 system.</td>
+             <td>0x0000</td>
+             <td>Long</td>
+             <td>0xE11AB1A1E011CFD0</td>
+           </tr>
+            <tr>
+             <td>UK1</td>
+             <td>Unknown constant</td>
+             <td>0x0008</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+            <tr>
+             <td>UK2</td>
+             <td>Unknown Constant</td>
+             <td>0x000C</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+            <tr>
+             <td>UK3</td>
+             <td>Unknown Constant</td>
+             <td>0x0014</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+            <tr>
+             <td>UK4</td>
+             <td>Unknown Constant (revision?)</td>
+             <td>0x0018</td>
+             <td>Short</td>
+             <td>0x003B</td>
+           </tr>
+            <tr>
+             <td>UK5</td>
+             <td>Unknown Constant (version?)</td>
+             <td>0x001A</td>
+             <td>Short</td>
+             <td>0x0003</td>
+           </tr>
+            <tr>
+             <td>UK6</td>
+             <td>Unknown Constant</td>
+             <td>0x001C</td>
+             <td>Short</td>
+             <td>-2</td>
+           </tr>
+            <tr>
+             <td>LOG_2_BIG_BLOCK_SIZE</td>
+             <td>Log, base 2, of the big block size</td>
+             <td>0x001E</td>
+             <td>Short</td>
+             <td>9 (2 ^ 9 = 512 bytes)</td>
+           </tr>
+            <tr>
+             <td>LOG_2_SMALL_BLOCK_SIZE</td>
+             <td>Log, base 2, of the small block size</td>
+             <td>0x0020</td>
+             <td>Integer</td>
+             <td>6 (2 ^ 6 = 64 bytes)</td>
+           </tr>
+            <tr>
+             <td>UK7</td>
+             <td>Unknown Constant</td>
+             <td>0x0024</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+            <tr>
+             <td>UK8</td>
+             <td>Unknown Constant</td>
+             <td>0x0028</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+            <tr>
+             <td>BAT_COUNT</td>
+             <td>Number of elements in the BAT array</td>
+             <td>0x002C</td>
+             <td>Integer</td>
+             <td>required</td>
+           </tr>
+           <tr>
+             <td>PROPERTIES_START</td>
+             <td>Block index of the first block of the property
+                 table</td>
+             <td>0x0030</td>
+             <td>Integer</td>
+             <td>required</td>
+           </tr>
+            <tr>
+             <td>UK9</td>
+             <td>Unknown Constant</td>
+             <td>0x0034</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+            <tr>
+             <td>UK10</td>
+             <td>Unknown Constant</td>
+             <td>0x0038</td>
+             <td>Integer</td>
+             <td>0x00001000</td>
+           </tr>
+           <tr>
+             <td>SBAT_START</td>
+             <td>Block index of first big block containing the small
+                 block allocation table (SBAT)</td>
+             <td>0x003C</td>
+             <td>Integer</td>
+             <td>-2</td>
+           </tr>
+            <tr>
+             <td>SBAT_Block_Count</td>
+             <td>Number of big blocks holding the SBAT</td>
+             <td>0x0040</td>
+             <td>Integer</td>
+             <td>1</td>
+           </tr>
+            <tr>
+             <td>XBAT_START</td>
+             <td>Block index of the first block in the Extended Block
+                 Allocation Table (XBAT)</td>
+             <td>0x0044</td>
+             <td>Integer</td>
+             <td>-2</td>
+           </tr>
+            <tr>
+             <td>XBAT_COUNT</td>
+             <td>Number of elements in the Extended Block Allocation
+                 Table (to be added to the BAT)</td>
+             <td>0x0048</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+            <tr>
+             <td>BAT_ARRAY</td>
+             <td>Array of block indices constituting the Block
+                 Allocation Table (BAT)</td>
+             <td>0x004C, 0x0050, 0x0054 ... 0x01FC</td>
+             <td>Integer[]</td>
+             <td>-1 for unused elements, at least first element must
+                 be filled.</td>
+           </tr>
+            <tr>
+             <td>N/A</td>
+             <td>Header block data not otherwise described in this
+                 table</td>
+             <td>N/A</td>
+             <td>N/A</td>
+             <td>-1</td>
+           </tr>
+          </table>
+       </section>
+          <section>
+              <title>Block Allocation Table Block -- 512 (0x200) bytes</title>
+              <table>
+                  <tr>
+                      <td>
+                          <em>Field</em>
+                      </td>
+                      <td>
+                          <em>Description</em>
+                      </td>
+                      <td>
+                          <em>Offset</em>
+                      </td>
+                      <td>
+                          <em>Length</em>
+                      </td>
+                      <td>
+                          <em>Default value or const</em>
+                      </td>
+                  </tr>
+                  <tr>
+                      <td>BAT_ELEMENT</td>
+                      <td>Any given element in the BAT block</td>
+                      <td>0x0000, 0x0004, 0x0008, ... 0x01FC</td>
+                      <td>Integer</td>
+                      <td>
+                          -1 = unused<br/>
+                          -2 = end of chain<br/>
+                          -3 = special (e.g., BAT block)<br/>
+                          All other values point to the next element in the
+                          chain and the next index of a block composing the
+                          file.
+                      </td>
+                  </tr>
+              </table>
+          </section>
+       <section><title>Property Block -- 512 (0x200) byte block</title>
+          <table>
+           <tr>
+             <td><em>Field</em></td>
+             <td><em>Description</em></td>
+             <td><em>Offset</em></td>
+             <td><em>Length</em></td>
+             <td><em>Default value or const</em></td>
+           </tr>
+            <tr>
+             <td>Properties[]</td>
+             <td>This block contains the properties.</td>
+             <td>0x0000, 0x0080, 0x0100, 0x0180</td>
+             <td>128 bytes</td>
+             <td>All unused space is set to -1.</td>
+           </tr>
+          </table>
+       </section>
+       <section><title>Property -- 128 (0x80) byte block</title>
+          <table>
+           <tr>
+             <td><em>Field</em></td>
+             <td><em>Description</em></td>
+             <td><em>Offset</em></td>
+             <td><em>Length</em></td>
+             <td><em>Default value or const</em></td>
+           </tr>
+            <tr>
+             <td>NAME</td>
+             <td>A unicode null-terminated uncompressed 16bit string
+                 (lose the high bytes) containing the name of the
+                 property.</td>
+             <td>0x00, 0x02, 0x04, ... 0x3E</td>
+             <td>Short[]</td>
+             <td>0x0000 for unused elements, field required, 32
+                 (0x40) element max</td>
+           </tr>
+            <tr>
+             <td>NAME_SIZE</td>
+             <td>Number of characters in the NAME field</td>
+             <td>0x40</td>
+             <td>Short</td>
+             <td>Required</td>
+           </tr>
+           <tr>
+             <td>PROPERTY_TYPE</td>
+             <td>Property type (directory, file, or root)</td>
+             <td>0x42</td>
+             <td>Byte</td>
+             <td>1 (directory), 2 (file), or 5 (root entry)</td>
+           </tr>
+            <tr>
+             <td>NODE_COLOR</td>
+             <td>Node color</td>
+             <td>0x43</td>
+             <td>Byte</td>
+             <td>0 (red) or 1 (black)</td>
+           </tr>
+            <tr>
+             <td>PREVIOUS_PROP</td>
+             <td>Previous property index</td>
+             <td>0x44</td>
+             <td>Integer</td>
+             <td>-1</td>
+           </tr>
+            <tr>
+             <td>NEXT_PROP</td>
+             <td>Next property index</td>
+             <td>0x48</td>
+             <td>Integer</td>
+             <td>-1</td>
+           </tr>
+            <tr>
+             <td>CHILD_PROP</td>
+             <td>First child property index</td>
+             <td>0x4c</td>
+             <td>Integer</td>
+             <td>-1</td>
+           </tr>
+            <tr>
+             <td>SECONDS_1</td>
+             <td>Seconds component of the created timestamp?</td>
+             <td>0x64</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+            <tr>
+             <td>DAYS_1</td>
+             <td>Days component of the created timestamp?</td>
+             <td>0x68</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+            <tr>
+             <td>SECONDS_2</td>
+             <td>Seconds component of the modified timestamp?</td>
+             <td>0x6C</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+            <tr>
+             <td>DAYS_2</td>
+             <td>Days component of the modified timestamp?</td>
+             <td>0x70</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+            <tr>
+             <td>START_BLOCK</td>
+             <td>Starting block of the file, used as the first block
+                 in the file and the pointer to the next block from
+                 the BAT</td>
+             <td>0x74</td>
+             <td>Integer</td>
+             <td>Required</td>
+           </tr>
+            <tr>
+             <td>SIZE</td>
+             <td>Actual size of the file this property points
+                 to. (used to truncate the blocks to the real
+                 size).</td>
+             <td>0x78</td>
+             <td>Integer</td>
+             <td>0</td>
+           </tr>
+          </table>
+       </section>
+      </section>
+    </section>
+  </body>
+</document>
diff --git a/src/documentation/content/xdocs/poifs/how-to.xml b/src/documentation/content/xdocs/poifs/how-to.xml
new file mode 100644 (file)
index 0000000..ee525b5
--- /dev/null
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+<document>
+  <header>
+    <title>How To Use the POIFS APIs</title>
+    <authors>
+      <person email="mjohnson@apache.org" name="Marc Johnson" id="MJ"/>
+    </authors>
+  </header>
+  <body>
+    <section><title>How To Use the POIFS APIs</title>
+      <p>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.</p>
+      <section><title>Revision History</title>
+        <ul>
+          <li>02.10.2002 - completely rewritten from original documents on <link href="https://sourceforge.net/cvs/?group_id=32701">sourceforge</link></li>
+        </ul>
+      </section>
+      <section><title>Target Audience</title>
+        <p>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.</p>
+      </section>
+      <section><title>Glossary</title>
+        <p>This document attempts to be consistent in its terminology, which is defined here:</p>
+        <table>
+          <tr>
+            <td><em>Term</em></td>
+            <td><em>Definition</em></td>
+          </tr>
+          <tr>
+            <td>Directory</td>
+            <td>A special file that may contain other directories and documents.</td>
+          </tr>
+         <tr>
+           <td>DirectoryEntry</td>
+           <td>Representation of a directory within another directory.</td>
+         </tr>
+          <tr>
+            <td>Document</td>
+            <td>A file containing data, such as word processing data or a spreadsheet workbook.</td>
+          </tr>
+         <tr>
+           <td>DocumentEntry</td>
+           <td>Representation of a document within a directory.</td>
+         </tr>
+         <tr>
+           <td>Entry</td>
+           <td>Representation of a file in a directory.</td>
+         </tr>
+          <tr>
+            <td>File</td>
+            <td>A named entity, managed and contained by the file system.</td>
+          </tr>
+          <tr>
+            <td>File System</td>
+            <td>The POIFS data structures, plus the contained directories and documents, which are maintained in a hierarchical directory structure.</td>
+          </tr>
+          <tr>
+            <td>Root Directory</td>
+            <td>The 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.</td>
+          </tr>
+        </table>
+      </section>
+    </section>
+    <section><title>Reading a File System</title>
+      <p>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.</p>
+      <table>
+        <tr>
+         <td><em>Technique</em></td>
+         <td><em>Advantages</em></td>
+         <td><em>Disadvantages</em></td>
+       </tr>
+       <tr>
+         <td>Conventional Reading</td>
+         <td>
+             Simpler API similar to reading a conventional file system.<br/>
+             Can read documents in any order.
+         </td>
+         <td>
+             All files are resident in memory, whether your application needs them or not.
+         </td>
+       </tr>
+        <tr>
+         <td>Event-Driven Reading</td>
+         <td>
+             Reduced footprint -- only the documents you care about are processed.<br/>
+             Improved performance -- no time is wasted reading the documents you're not interested in.
+         </td>
+         <td>
+             More complicated API.<br/>
+             Need to know in advance which documents you want to read.<br/>
+             No control over the order in which the documents are read.<br/>
+             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.
+         </td>
+       </tr>
+      </table>
+      <section><title>Conventional Reading</title>
+        <p>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.</p>
+       <section><title>Preparation</title>
+         <p>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 <code>org.apache.poi.poifs.filesystem.POIFSFileSystem</code> 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:</p>
+         <source>
+// 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();</source>
+         <p>Assuming no exception was thrown, the file system can then be read.</p>
+         <p>Note: loading the file system can take noticeable time, particularly for large file systems.</p>
+       </section>
+       <section><title>Reading the Directory Tree</title>
+         <p>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 <code>org.apache.poi.poifs.filesystem.DirectoryEntry</code> instance:</p>
+         <source>
+// 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.
+    }
+}</source>
+       </section>
+       <section><title>Reading a Specific Document</title>
+         <p>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 <code>org.apache.poi.poifs.filesystem.DocumentInputStream</code> instance.</p>
+         <section><title>DocumentInputStream</title>
+           <p>The DocumentInputStream class is a simple implementation of InputStream that makes a few guarantees worth noting:</p>
+           <ul>
+             <li><code>available()</code> always returns the number of bytes in the document from your current position in the document.</li>
+             <li><code>markSupported()</code> returns <code>true</code>.</li>
+             <li><code>mark(int limit)</code> ignores the limit parameter; basically the method marks the current position in the document.</li>
+             <li><code>reset()</code> takes you back to the position when <code>mark()</code> was last called, or to the beginning of the document if <code>mark()</code> has not been called.</li>
+             <li><code>skip(long n)</code> will take you to your current position + n (but not past the end of the document).</li>
+           </ul>
+           <p>The behavior of <code>available</code> means you can read in a document in a single read call like this:</p>
+           <source>
+byte[] content = new byte[ stream.available() ];
+stream.read(content);
+stream.close();</source>
+           <p>The combination of <code>mark</code>, <code>reset</code>, and <code>skip</code> provide the basic mechanisms needed for random access of the document contents.</p>
+         </section>
+         <section><title>Reading a Document From the Root Directory</title>
+           <p>If the document resides in the root directory, you can obtain a <code>DocumentInputStream</code> like this:</p>
+           <source>
+// 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
+}</source>
+          </section>
+         <section><title>Reading a Document From an Arbitrary Directory</title>
+           <p>A more generic technique for reading a document is to obtain an <code>org.apache.poi.poifs.filesystem.DirectoryEntry</code> instance for the directory containing the desired document (recall that you can use <code>getRoot()</code> to obtain the root directory from its file system). From that DirectoryEntry, you can then obtain a <code>DocumentInputStream</code> like this:</p>
+           <source>
+DocumentEntry document = (DocumentEntry)directory.getEntry(documentName);
+DocumentInputStream stream = new DocumentInputStream(document);
+</source>
+         </section>
+       </section>
+      </section>
+      <section><title>Event-Driven Reading</title>
+        <p>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.</p>
+       <section><title>Preparation</title>
+         <p>The preparation phase involves creating an instance of <code>org.apache.poi.poifs.eventfilesystem.POIFSReader</code> and to then register one or more <code>org.apache.poi.poifs.eventfilesystem.POIFSReaderListener</code> instances with the <code>POIFSReader</code>.</p>
+         <source>
+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");</source>
+       </section>
+       <section><title>POIFSReaderListener</title>
+         <p><code>org.apache.poi.poifs.eventfilesystem.POIFSReaderListener</code> is an interface used to register for documents. When a matching document is read by the <code>org.apache.poi.poifs.eventfilesystem.POIFSReader</code>, the <code>POIFSReaderListener</code> instance receives an <code>org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent</code> instance, which contains an open <code>DocumentInputStream</code> and information about the document.</p>
+         <p>A <code>POIFSReaderListener</code> 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 <code>POIFSReaderListener</code>.</p>
+         <p>Thus, it is possible to register a single <code>POIFSReaderListener</code> for multiple documents - one, some, or all documents. It is guaranteed that a single <code>POIFSReaderListener</code> 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 <code>POIFSReader</code> are free to change the algorithm for walking the file system's directory structure.</p>
+         <p>It is also permitted to register more than one <code>POIFSReaderListener</code> for the same document. There is no guarantee of ordering for notification of <code>POIFSReaderListener</code> instances that have registered for the same document when <code>POIFSReader</code> processes that document.</p>
+         <p>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 <code>ThreadedPOIFSReader</code> perhaps.</p>
+         <p>The following table describes the three ways to register a <code>POIFSReaderListener</code> for a document or set of documents:</p>
+         <table>
+           <tr>
+             <td><em>Method Signature</em></td>
+             <td><em>What it does</em></td>
+           </tr>
+           <tr>
+             <td>registerListener(POIFSReaderListener <em>listener</em>)</td>
+             <td>registers <em>listener</em> for all documents.</td>
+           </tr>
+           <tr>
+             <td>registerListener(POIFSReaderListener <em>listener</em>, String <em>name</em>)</td>
+             <td>registers <em>listener</em> for a document with the specified <em>name</em> in the root directory.</td>
+           </tr>
+           <tr>
+             <td>registerListener(POIFSReaderListener <em>listener</em>, POIFSDocumentPath <em>path</em>, String <em>name</em>)</td>
+             <td>registers <em>listener</em> for a document with the specified <em>name</em> in the directory described by <em>path</em></td>
+           </tr>
+         </table>
+       </section>
+       <section><title>POIFSDocumentPath</title>
+         <p>The <code>org.apache.poi.poifs.filesystem.POIFSDocumentPath</code> 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:</p>
+         <table>
+           <tr>
+             <td><em>Constructor example</em></td>
+             <td><em>Directory described</em></td>
+           </tr>
+           <tr>
+             <td>new POIFSDocumentPath()</td>
+             <td>The root directory.</td>
+           </tr>
+           <tr>
+             <td>new POIFSDocumentPath(null)</td>
+             <td>The root directory.</td>
+           </tr>
+           <tr>
+             <td>new POIFSDocumentPath(new String[ 0 ])</td>
+             <td>The root directory.</td>
+           </tr>
+           <tr>
+             <td>new POIFSDocumentPath(new String[ ] { "foo", "bar"} )</td>
+             <td>in Unix terminology, "/foo/bar".</td>
+           </tr>
+           <tr>
+             <td>new POIFSDocumentPath(new POIFSDocumentPath(new String[] { "foo" }), new String[ ] { "fu", "bar"} )</td>
+             <td>in Unix terminology, "/foo/fu/bar".</td>
+           </tr>
+         </table>
+       </section>
+       <section><title>Processing POIFSReaderEvent Events</title>
+         <p>Processing <code>org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent</code> events is relatively easy. After all of the <code>POIFSReaderListener</code> instances have been registered with <code>POIFSReader</code>, the <code>POIFSReader.read(InputStream stream)</code> method is called.</p>
+         <p>Assuming that there are no problems with the data, as the <code>POIFSReader</code> processes the documents in the specified <code>InputStream</code>'s data, it calls registered <code>POIFSReaderListener</code> instances' <code>processPOIFSReaderEvent</code> method with a <code>POIFSReaderEvent</code> instance.</p>
+         <p>The <code>POIFSReaderEvent</code> instance contains information to identify the document (a <code>POIFSDocumentPath</code> object to identify the directory that the document is in, and the document name), and an open <code>DocumentInputStream</code> instance from which to read the document.</p>
+       </section>
+      </section>
+    </section>
+    <section><title>Writing a File System</title>
+      <p>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:</p>
+      <source>
+POIFSFileSystem fs = new POIFSFileSystem();</source>
+      <section><title>The Naming of Names</title>
+        <p>There are two restrictions on the names of files in a file system that must be considered when creating files:</p>
+       <ol>
+         <li>The name of the file must not exceed 31 characters. If it does, the POIFS API will silently truncate the name to fit.</li>
+         <li>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 <em>after</em> the name has been truncated, if the original name was too long to begin with.</li>
+       </ol>
+      </section>
+      <section><title>Creating a Document</title>
+        <p>A document can be created by acquiring a <code>DirectoryEntry</code> and calling one of the two <code>createDocument</code> methods:</p>
+       <table>
+         <tr>
+           <td><em>Method Signature</em></td>
+           <td><em>Advantages</em></td>
+           <td><em>Disadvantages</em></td>
+         </tr>
+         <tr>
+           <td>CreateDocument(String name, InputStream stream)</td>
+           <td>
+               Simple API.
+           </td>
+           <td>
+               Increased memory footprint (document is in memory until file system is written).
+           </td>
+         </tr>
+         <tr>
+           <td>CreateDocument(String name, int size, POIFSWriterListener writer)</td>
+           <td>
+               Decreased memory footprint (only very small documents are held in memory, and then only for a short time).
+           </td>
+           <td>
+               More complex API.<br/>
+            Determining document size in advance may be difficult.<br/>
+            Lose control over when document is to be written.
+           </td>
+         </tr>
+       </table>
+       <p>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.</p>
+       <p>Writing is initiated when the <code>POIFSFileSystem</code> instance's <code>writeFilesystem()</code> method is called with an <code>OutputStream</code> to write to.</p>
+       <p>The event-driven model is quite similar to the event-driven model for reading, in that the file system calls your <code>org.apache.poi.poifs.filesystem.POIFSWriterListener</code> when it's time to write your document, just as the <code>POIFSReader</code> calls your <code>POIFSReaderListener</code> when it's time to read your document. Internally, when <code>writeFilesystem()</code> is called, the final POIFS data structures are created and are written to the specified <code>OutputStream</code>. When the file system needs to write a document out that was created with the event-driven model, it calls the <code>POIFSWriterListener</code> back, calling its <code>processPOIFSWriterEvent()</code> method, passing an <code>org.apache.poi.poifs.filesystem.POIFSWriterEvent</code> instance. This object contains the <code>POIFSDocumentPath</code> and name of the document, its size, and an open <code>org.apache.poi.poifs.filesystem.DocumentOutputStream</code> to which to write. A <code>DocumentOutputStream</code> is a wrapper over the <code>OutputStream</code> that was provided to the <code>POIFSFileSystem</code> to write to, and has the responsibility of making sure that the document your application writes fits within the size you specified for it.</p>
+      </section>
+      <section><title>Creating a Directory</title>
+        <p>Creating a directory is similar to creating a document, except that there's only one way to do so:</p>
+       <source>
+DirectoryEntry createdDir = existingDir.createDirectory(name);</source>
+      </section>
+      <section><title>Using POIFSFileSystem Directly To Create a Document Or Directory</title>
+        <p>As with reading documents, it is possible to create a new document or directory in the root directory by using convenience methods of POIFSFileSystem.</p>
+       <table>
+         <tr>
+           <td>DirectoryEntry Method Signature</td>
+           <td>POIFSFileSystem Method Signature</td>
+         </tr>
+         <tr>
+           <td>createDocument(String name, InputStream stream)</td>
+           <td>createDocument(InputStream stream, String name)</td>
+         </tr>
+         <tr>
+           <td>createDocument(String name, int size, POIFSWriterListener writer)</td>
+           <td>createDocument(String name, int size, POIFSWriterListener writer)</td>
+         </tr>
+         <tr>
+           <td>createDirectory(String name)</td>
+           <td>createDirectory(String name)</td>
+         </tr>
+       </table>
+      </section>
+    </section>
+    <section><title>Modifying a File System</title>
+      <p>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.</p>
+      <section><title>Removing a Document</title>
+        <p>Removing a document is simple: you get the <code>Entry</code> corresponding to the document and call its <code>delete()</code> method. This is a boolean method, but should always return <code>true</code>, indicating that the operation succeeded.</p>
+      </section>
+      <section><title>Removing a Directory</title>
+        <p>Removing a directory is also simple: you get the <code>Entry</code> corresponding to the directory and call its <code>delete()</code> method. This is a boolean method, but, unlike deleting a document, may not always return <code>true</code>, indicating that the operation succeeded. Here are the reasons why the operation may fail:</p>
+       <ul>
+         <li>The directory still has files in it (to check, call <code>isEmpty()</code> on its DirectoryEntry; is the return value <code>false</code>?)</li>
+         <li>The directory is the root directory. You cannot remove the root directory.</li>
+       </ul>
+      </section>
+      <section><title>Renaming a File</title>
+        <p>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 <code>Entry</code> instance and calling its <code>renameTo</code> method, passing in the new name.</p>
+       <p>Like <code>delete</code>, <code>renameTo</code> returns <code>true</code> if the operation succeeded, otherwise <code>false</code>. Reasons for failure include these:</p>
+       <ul>
+         <li>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 <em>will</em> 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.</li>
+         <li>You tried to rename the root directory.</li>
+       </ul>
+      </section>
+    </section>
+  </body>
+</document>
diff --git a/src/documentation/content/xdocs/poifs/html/POIFSDesignDocument.html b/src/documentation/content/xdocs/poifs/html/POIFSDesignDocument.html
new file mode 100644 (file)
index 0000000..0f18722
--- /dev/null
@@ -0,0 +1,1279 @@
+<HTML>
+    <HEAD>
+        <TITLE>POIFS Design Document</TITLE>
+    </HEAD>
+    <BODY>
+        <FONT SIZE="+3"><B>POIFS Design Document</B></FONT>
+        <P>
+            This document describes the design of the POIFS system. It is
+           organized as follows:
+        </P>
+        <UL>
+            <LI>
+                <A HREF="#Scope">Scope</A> A description of the limitations of
+               this document.
+            </LI>
+            <LI>
+                <A HREF="#Assumptions">Assumptions</A> The assumptions on
+               which this design is based.
+            </LI>
+            <LI>
+                <A HREF="#Considerations">Design Considerations</A> The
+               constraints and goals applied to the design.
+            </LI>
+            <LI>
+                <A HREF="#Design">Design</A> The design of the POIFS system.
+            </LI>
+        </UL>
+        <P></P>
+        <OL TYPE="I">
+            <LI>
+                <A NAME="Scope"><FONT
+                SIZE="+2"><B>Scope</B></FONT></A>
+                <P>
+                    This document is written as part of an iterative process.
+                   As that process is not yet complete, neither is this
+                   document.
+                </P>
+            </LI>
+            <LI>
+                <A NAME="Assumptions"><FONT
+                SIZE="+2"><B>Assumptions</B></FONT></A>
+                <P>
+                    The design of POIFS is not dependent on the code written
+                   for the proof-of-concept prototype POIFS package.
+                </P>
+            </LI>
+            <LI>
+                <A NAME="Considerations"><FONT SIZE="+2"><B>Design
+                Considerations</B></FONT></A>
+                <P>
+                    As usual, the primary considerations in the design of the
+                   POIFS assumption involve the classic space-time tradeoff.
+                   In this case, the main consideration has to involve
+                   minimizing the memory footprint of POIFS. POIFS may be
+                   called upon to create relatively large documents, and in
+                   web application server, it may be called upon to create
+                   several documents simultaneously, and it will likely
+                   co-exist with other Serializer systems, competing with
+                   those other systems for space on the server.
+                </P>
+                <P>
+                    We've addressed the risk of being too slow through a
+                   proof-of-concept prototype. This prototype for POIFS
+                   involved reading an existing file, decomposing it into its
+                   constituent documents, composing a new POIFS from the
+                   constituent documents, and writing the POIFS file back to
+                   disk and verifying that the output file, while not
+                   necessarily a byte-for-byte image of the input file, could
+                   be read by the application that generated the input file.
+                   This prototype proved to be quite fast, reading,
+                   decomposing, and re-generating a large (300K) file in 2 to
+                   2.5 seconds.
+                </P>
+                <P>
+                    While the POIFS format allows great flexibility in laying
+                   out the documents and the other internal data structures,
+                   the layout of the filesystem will be kept as simple as
+                   possible.
+                </P>
+            </LI>
+            <LI>
+                <A NAME="Design"><FONT
+                SIZE="+2"><B>Design</B></FONT></A>
+                <P>
+                    The design of the POIFS is broken down into two parts:
+                   <A HREF="#Classes">discussion of the classes and
+                   interfaces</A>, and <A HREF="#Scenarios">discussion of how
+                   these classes and interfaces will be used to convert an
+                    appropriate Java InputStream (such as an XML stream) to a
+                   POIFS output stream containing an HSSF document</A>.
+                </P>
+                <A NAME="Classes"><FONT SIZE="+1"><B>Classes and Interfaces</B></FONT></A>
+                <P>
+                    The classes and interfaces used in the POIFS are broken
+                   down as follows:
+                </P>
+                <TABLE BORDER="1">
+                    <TR>
+                        <TH><B>Package</B></TH>
+                        <TH><B>Contents</B></TH>
+                    </TR>
+                    <TR>
+                        <TD><A
+                        HREF="#BlockClasses">net.sourceforge.poi.poifs.storage</A></TD>
+                        <TD>Block classes and interfaces</TD>
+                    </TR>
+                    <TR>
+                        <TD><A
+                        HREF="#PropertyClasses">net.sourceforge.poi.poifs.property</A></TD>
+                        <TD>Property classes and interfaces</TD>
+                    </TR>
+                    <TR>
+                        <TD><A
+                        HREF="#FilesystemClasses">net.sourceforge.poi.poifs.filesystem</A></TD>
+                        <TD>Filesystem classes and interfaces</TD>
+                    </TR>
+                    <TR>
+                        <TD><A
+                        HREF="#UtilityClasses">net.sourceforge.poi.util</A></TD>
+                        <TD>Utility classes and interfaces</TD>
+                    </TR>
+                </TABLE>
+                <OL>
+                    <LI>
+                        <A NAME="BlockClasses"><B>Block Classes and
+                        Interfaces</B></A>
+                        <P>
+                            The block classes and interfaces are shown
+                            in the following class diagram.
+                        </P>
+                        <P>
+                            <IMG SRC="BlockClassDiagram.gif">
+                        </P>
+                        <TABLE BORDER="1">
+                            <TR>
+                                <TH><B>Class/Interface</B></TH>
+                                <TH><B>Description</B></TH>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="BATBlock"><B>BATBlock</B></A></TD>
+                                <TD>The <B>BATBlock</B> class
+                                represents a single big block
+                                containing 128 <A
+                                HREF="POIFSFormat.html#BAT">BAT
+                                entries</A>.<BR>Its
+                                <CODE><I>_fields</I></CODE> array is
+                                used to read and write the BAT entries
+                                into the <CODE><I>_data</I></CODE>
+                                array.<BR>Its
+                                <CODE><I>createBATBlocks</I></CODE>
+                                method is used to create an array of
+                                BATBlock instances from an array of
+                                int BAT entries.<BR>Its
+                                <CODE><I>calculateStorageRequirements</I></CODE>
+                                method calculates the number of BAT
+                                blocks necessary to hold the specified
+                                number of BAT entries.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="BigBlock"><B>BigBlock</B></A></TD>
+                                <TD>The <B>BigBlock</B> class is an
+                                abstract class representing the common
+                                big block of 512 bytes. It implements
+                                <A
+                                HREF="#BlockWritable">BlockWritable</A>,
+                                trivially delegating the
+                                <CODE><I>writeBlocks</I></CODE> method
+                                of BlockWritable to its own abstract
+                                <CODE><I>writeData</I></CODE>
+                                method.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="BlockWritable"><B>BlockWritable</B></A></TD>
+                                <TD>The <B>BlockWritable</B> interface
+                                defines a single method,
+                                <CODE><I>writeBlocks</I></CODE>, that
+                                is used to write an implementation's
+                                block data to an
+                                <CODE>OutputStream</CODE>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="DocumentBlock"><B>DocumentBlock</B></A></TD>
+                                <TD>The <B>DocumentBlock</B> class is
+                                used by a <A
+                                HREF="#Document">Document</A> to holds
+                                its raw data. It also retains the
+                                number of bytes read, as this is used
+                                by the Document class to determine the
+                                total size of the data, and is also
+                                used internally to determine whether
+                                the block was filled by the
+                                <CODE>InputStream</CODE> or
+                                not.<BR>The
+                                <CODE><I>DocumentBlock</I></CODE>
+                                constructor is passed an
+                                <CODE>InputStream</CODE> from which to
+                                fill its <CODE><I>_data</I></CODE>
+                                array.<BR>The <CODE><I>size</I></CODE>
+                                method returns the number of bytes
+                                read (<CODE><I>_bytes_read</I></CODE>
+                                when the instance was
+                                constructed.<BR>The
+                                <CODE><I>partiallyRead</I></CODE>
+                                method returns true if the
+                                <CODE><I>_data</I></CODE> array was
+                                not completely filled, which may be
+                                interpreted by the Document as having
+                                reached the end of file
+                                point.<BR>Typical use of the
+                                DocumentBlock class is like
+                                this:<BR><CODE>while
+                                (true)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;DocumentBlock
+                                block = new
+                                DocumentBlock(stream);<BR>&nbsp;&nbsp;&nbsp;&nbsp;blocks.add(block);<BR>&nbsp;&nbsp;&nbsp;&nbsp;size
+                                +=
+                                block.size();<BR>&nbsp;&nbsp;&nbsp;&nbsp;if
+                                (block.partiallyRead())<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}</CODE></TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="HeaderBlock"><B>HeaderBlock</B></A></TD>
+                                <TD>The <B>HeaderBlock</B> class is
+                                used to contain the data found in a
+                                POIFS header.<BR>Its <A
+                                HREF="#IntegerField">IntegerField</A>
+                                members are used to read and write the
+                                appropriate entries into the
+                                <CODE><I>_data</I></CODE>
+                                array.<BR>Its
+                                <CODE><I>setBATBlocks</I></CODE>,
+                                <CODE><I>setPropertyStart</I></CODE>,
+                                and <CODE><I>setXBATStart</I></CODE>
+                                methods are used to set the
+                                appropriate fields in the
+                                <CODE><I>_data</I></CODE>
+                                array.<BR>The
+                                <CODE><I>calculateXBATStorageRequirements</I></CODE>
+                                method is used to determine how many
+                                XBAT blocks are necessary to
+                                accommodate the specified number of
+                                BAT blocks.
+                                </TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="PropertyBlock"><B>PropertyBlock</B></A></TD>
+                                <TD>The <B>PropertyBlock</B> class is
+                                used to contain <A
+                                HREF="#Property">Property</A>
+                                instances for the <A
+                                HREF="#PropertyTable">PropertyTable</A>
+                                class.<BR>It contains an array,
+                                <CODE><I>_properties</I></CODE> of 4
+                                Property instances, which together
+                                comprise the 512 bytes of a <A
+                                HREF="#BigBlock">BigBlock</A>.<BR>The
+                                <CODE><I>createPropertyBlockArray</I></CODE>
+                                method is used to convert a
+                                <CODE>List</CODE> of Property
+                                instances into an array of
+                                PropertyBlock instances. The number of
+                                Property instances is rounded up to a
+                                multiple of 4 by creating empty
+                                anonymous inner class extensions of
+                                Property.</TD>
+                            </TR>
+                        </TABLE>
+                    </LI>
+                    <LI>
+                        <A NAME="PropertyClasses"><B>Property Classes
+                        and Interfaces</B></A>
+                        <P>
+                            The property classes and interfaces are
+                            shown in the following class diagram.
+                        </P>
+                        <P>
+                            <IMG SRC="PropertyTableClassDiagram.gif">
+                        </P>
+                        <TABLE BORDER="1">
+                            <TR>
+                                <TH><B>Class/Interface</B></TH>
+                                <TH><B>Description</B></TH>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="Directory"><B>Directory</B></A></TD>
+                                <TD>The <B>Directory</B> interface is
+                                implemented by the <A
+                                HREF="#RootProperty">RootProperty</A>
+                                class. It is not strictly necessary
+                                for the initial POIFS implementation,
+                                but when the POIFS supports <A
+                                HREF="POIFSFormat.html#directoryEntry">directory
+                                elements</A>, this interface will be
+                                more widely implemented, and so is
+                                included in the design at this point
+                                to ease the eventual support of
+                                directory elements.<BR>Its methods are
+                                a getter/setter pair,
+                                <CODE><I>getChildren</I></CODE>,
+                                returning an <CODE>Iterator</CODE> of
+                                <A HREF="#Property">Property</A>
+                                instances; and
+                                <CODE><I>addChild</I></CODE>, which
+                                will allow the caller to add another
+                                Property instance to the Directory's
+                                children.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="DocumentProperty"><B>DocumentProperty</B></A></TD>
+                                <TD>The <B>DocumentProperty</B> class
+                                is a trivial extension of <A
+                                HREF="#Property">Property</A> and is
+                                used by <A
+                                HREF="#Document">Document</A> to keep
+                                track of its associated entry in the
+                                <A
+                                HREF="#PropertyTable">PropertyTable</A>.<BR>Its
+                                constructor takes a name and the
+                                document size, on the assumption that
+                                the Document will not create a
+                                DocumentProperty until after it has
+                                created the storage for the document
+                                data and therefore knows how much data
+                                there is.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="File"><B>File</B></A></TD>
+                                <TD>The <B>File</B> interface
+                                specifies the behavior of reading and
+                                writing the next and previous child
+                                fields of a <A
+                                HREF="#Property">Property</A>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="Property"><B>Property</B></A></TD>
+                                <TD>The <B>Property</B> class is an
+                                abstract class that defines the basic
+                                data structure of an element of the <A
+                                HREF="POIFSFormat.html#PropertyTable">Property
+                                Table</A>.<BR>Its <A
+                                HREF="#ByteField">ByteField</A>, <A
+                                HREF="#ShortField">ShortField</A>, and
+                                <A
+                                HREF="#IntegerField">IntegerField</A>
+                                members are used to read and write
+                                data into the appropriate locations in
+                                the <CODE><I>_raw_data</I></CODE>
+                                array.<BR>The
+                                <CODE><I>_index</I></CODE> member is
+                                used to hold a Propery instance's
+                                index in the <CODE>List</CODE> of
+                                Property instances maintained by <A
+                                HREF="#PropertyTable">PropertyTable</A>,
+                                which is used to populate the child
+                                property of parent <A
+                                HREF="#Directory">Directory</A>
+                                properties and the next property and
+                                previous property of sibling <A
+                                HREF="#File">File</A>
+                                properties.<BR>The
+                                <CODE><I>_name</I></CODE>,
+                                <CODE><I>_next_file</I></CODE>, and
+                                <CODE><I>_previous_file</I></CODE>
+                                members are used to help fill the
+                                appropriate fields of the _raw_data
+                                array.<BR>Setters are provided for
+                                some of the fields (name, property
+                                type, node color, child property,
+                                size, index, start block), as well as
+                                a few getters (index, child
+                                property).<BR>The
+                                <CODE><I>preWrite</I></CODE> method is
+                                abstract and is used by the owning
+                                PropertyTable to iterate through its
+                                Property instances and prepare each
+                                for writing.<BR>The
+                                <CODE><I>shouldUseSmallBlocks</I></CODE>
+                                method returns true if the Property's
+                                size is sufficiently small - how small
+                                is none of the caller's business.
+                                </TD>
+                            </TR>
+                            <TR>
+                                <TD><B>PropertyBlock</B></TD>
+                                <TD>See the description in <A
+                                HREF="#PropertyBlock">PropertyBlock</A>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="PropertyTable"><B>PropertyTable</B></A></TD>
+                                <TD>The <B>PropertyTable</B> class
+                                holds all of the <A
+                                HREF="#DocumentProperty">DocumentProperty</A>
+                                instances and the <A
+                                HREF="#RootProperty">RootProperty</A>
+                                instance for a <A
+                                HREF="#Filesystem">Filesystem</A>
+                                instance.<BR>It maintains a
+                                <CODE>List</CODE> of its <A
+                                HREF="#Property">Property</A>
+                                instances
+                                (<CODE><I>_properties</I></CODE>), and
+                                when prepared to write its data by a
+                                call to <CODE><I>preWrite</I></CODE>,
+                                it gets and holds an array of <A
+                                HREF="#PropertyBlock">PropertyBlock</A>
+                                instances
+                                (<CODE><I>_blocks</I></CODE>.<BR>It
+                                also maintains its start block in its
+                                <CODE><I>_start_block</I></CODE>
+                                member.<BR>It has a method,
+                                <CODE><I>getRoot</I></CODE>, to get
+                                the RootProperty, returning it as an
+                                implementation of <A
+                                HREF="#Directory">Directory</A>, and a
+                                method to add a Property,
+                                <CODE><I>addProperty</I></CODE>, and a
+                                method to get its start block,
+                                <CODE><I>getStartBlock</I></CODE>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="RootProperty"><B>RootProperty</B></A></TD>
+                                <TD>The <B>RootProperty</B> class acts
+                                as the <A
+                                HREF="#Directory">Directory</A> for
+                                all of the <A
+                                HREF="#DocumentProperty">DocumentProperty</A>
+                                instance. As such, it is more of a
+                                pure <A
+                                HREF="POIFSFormat.html#directoryEntry">directory
+                                entry</A> than a proper <A
+                                HREF="POIFSFormat.html#RootEntry">root
+                                entry</A> in the <A
+                                HREF="POIFSFormat.html#PropertyTable">Property
+                                Table</A>, but the initial POIFS
+                                implementation does not warrant the
+                                additional complexity of a full-blown
+                                root entry, and so it is not modeled
+                                in this design.<BR>It maintains a
+                                <CODE>List</CODE> of its children,
+                                <CODE><I>_children</I></CODE>, in
+                                order to perform its
+                                directory-oriented duties.</TD>
+                            </TR>
+                        </TABLE>
+                    </LI>
+                    <LI>
+                        <A NAME="FilesystemClasses"><B>Filesystem
+                        Classes and Interfaces</B></A>
+                        <P>
+                            The property classes and interfaces are
+                            shown in the following class diagram.
+                        </P>
+                        <P>
+                            <IMG SRC="POIFSClassDiagram.gif">
+                        </P>
+                        <TABLE BORDER="1">
+                            <TR>
+                                <TH><B>Class/Interface</B></TH>
+                                <TH><B>Description</B></TH>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="Filesystem"><B>Filesystem</B></A></TD>
+                                <TD>The <B>Filesystem</B> class is the
+                                top-level class that manages the
+                                creation of a POIFS document.<BR>It
+                                maintains a <A
+                                HREF="#PropertyTable">PropertyTable</A>
+                                instance in its
+                                <CODE><I>_property_table</I></CODE>
+                                member, a <A
+                                HREF="#HeaderBlock">HeaderBlock</A>
+                                instance in its
+                                <CODE><I>_header_block</I></CODE>
+                                member, and a <CODE>List</CODE> of its
+                                <A HREF="#Document">Document</A>
+                                instances in its
+                                <CODE><I>_documents</I></CODE>
+                                member.<BR>It provides methods for a
+                                client to create a document
+                                (<CODE><I>createDocument</I></CODE>),
+                                and a method to write the Filesystem
+                                to an <CODE>OutputStream</CODE>
+                                (<CODE><I>writeFilesystem</I></CODE>).</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>BATBlock</B></TD>
+                                <TD>See the description in <A
+                                HREF="#BATBlock">BATBlock</A></TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="BATManaged"><B>BATManaged</B></A></TD>
+                                <TD>The <B>BATManaged</B> interface
+                                defines common behavior for objects
+                                whose location in the written file is
+                                managed by the <A
+                                HREF="POIFSFormat.html#BAT">Block
+                                Allocation Table</A>.<BR>It defines
+                                methods to get a count of the
+                                implementation's <A
+                                HREF="#BigBlock">BigBlock</A>
+                                instances
+                                (<CODE><I>countBlocks</I></CODE>), and
+                                to set an implementation's start block
+                                (<CODE><I>setStartBlock</I></CODE>).</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="BlockAllocationTable"><B>BlockAllocationTable</B></A></TD>
+                                <TD>The <B>BlockAllocationTable</B> is
+                                an implementation of the POIFS <A
+                                HREF="POIFSFormat.html#BAT">Block
+                                Allocation Table</A>. It is only
+                                created when the <A
+                                HREF="#Filesystem">Filesystem</A> is
+                                about to be written to an
+                                <CODE>OutputStream</CODE>.<BR>It
+                                contains an <A
+                                HREF="#IntList">IntList</A> of block
+                                numbers for all of the <A
+                                HREF="#BATManaged">BATManaged</A>
+                                implementations owned by the
+                                Filesystem,
+                                <CODE><I>_entries</I></CODE>, which is
+                                filled by calls to
+                                <CODE><I>allocateSpace</I></CODE>.<BR>It
+                                fills its array,
+                                <CODE><I>_blocks</I></CODE>, of <A
+                                HREF="#BATBlock">BATBlock</A>
+                                instances when its
+                                <CODE><I>createBATBlocks</I></CODE>
+                                method is called. This method has to
+                                take into account its own storage
+                                requirements, as well as those of the
+                                XBAT blocks, and so calls
+                                <CODE><I>BATBlock.calculateStorageRequirements</I></CODE>
+                                and
+                                <CODE><I>HeaderBlock.calculateXBATStorageRequirements</I></CODE>
+                                repeatedly until the counts returned
+                                by those methods stabilize.<BR>The
+                                <CODE><I>countBlocks</I></CODE> method
+                                returns the number of BATBlock
+                                instances created by the preceding
+                                call to createBlocks.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>BlockWritable</B></TD>
+                                <TD>See the description in <A
+                                HREF="#BlockWritable">BlockWritable</A></TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="Document"><B>Document</B></A></TD>
+                                <TD>The <B>Document</B> class is used
+                                to contain a document, such as an HSSF
+                                workbook.<BR>It has its own <A
+                                HREF="#DocumentProperty">DocumentProperty</A>
+                                (<CODE><I>_property</I></CODE>) and
+                                stores its data in a collection of <A
+                                HREF="#DocumentBlock">DocumentBlock</A>
+                                instances
+                                (<CODE><I>_blocks</I></CODE>).<BR>It
+                                has a method,
+                                <CODE><I>getDocumentProperty</I></CODE>,
+                                to get its DocumentProperty.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>DocumentBlock</B></TD>
+                                <TD>See the description in <A
+                                HREF="#DocumentBlock">DocumentBlock</A></TD>
+                            </TR>
+                            <TR>
+                                <TD><B>DocumentProperty</B></TD>
+                                <TD>See the description in <A
+                                HREF="#DocumentProperty">DocumentProperty</A></TD>
+                            </TR>
+                            <TR>
+                                <TD><B>HeaderBlock</B></TD>
+                                <TD>See the description in <A
+                                HREF="#HeaderBlock">HeaderBlock</A></TD>
+                            </TR>
+                            <TR>
+                                <TD><B>PropertyTable</B></TD>
+                                <TD>See the description in <A
+                                HREF="#PropertyTable">PropertyTable</A></TD>
+                            </TR>
+                        </TABLE>
+                    </LI>
+                    <LI>
+                        <A NAME="UtilityClasses"><B>Utility Classes
+                        and Interfaces</B></A>
+                        <P>
+                            The utility classes and interfaces are
+                            shown in the following class diagram.
+                        </P>
+                        <P>
+                            <IMG SRC="utilClasses.gif">
+                        </P>
+                        <TABLE BORDER="1">
+                            <TR>
+                                <TH><B>Class/Interface</B></TH>
+                                <TH><B>Description</B></TH>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="BitField"><B>BitField</B></A></TD>
+                                <TD>The <B>BitField</B> class is used
+                                primarily by HSSF code to manage
+                                bit-mapped fields of HSSF records. It
+                                is not likely to be used in the POIFS
+                                code itself and is only included here
+                                for the sake of complete documentation
+                                of the POI utility classes.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="ByteField"><B>ByteField</B></A></TD>
+                                <TD>The <B>ByteField</B> class is an
+                                implementation of <A
+                                HREF="#FixedField">FixedField</A> for
+                                the purpose of managing reading and
+                                writing to a byte-wide field in an
+                                array of <CODE>bytes</CODE>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="FixedField"><B>FixedField</B></A></TD>
+                                <TD>The <B>FixedField</B> interface
+                                defines a set of methods for reading a
+                                field from an array of
+                                <CODE>bytes</CODE> or from an
+                                <CODE>InputStream</CODE>, and for
+                                writing a field to an array of
+                                <CODE>bytes</CODE>. Implementations
+                                typically require an offset in their
+                                constructors that, for the purposes of
+                                reading and writing to an array of
+                                <CODE>bytes</CODE>, makes sure that
+                                the correct <CODE>bytes</CODE> in the
+                                array are read or written.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="HexDump"><B>HexDump</B></A></TD>
+                                <TD>The <B>HexDump</B> class is a
+                                debugging class that can be used to
+                                dump an array of <CODE>bytes</CODE> to
+                                an <CODE>OutputStream</CODE>. The
+                                static method <CODE><I>dump</I></CODE>
+                                takes an array of <CODE>bytes</CODE>,
+                                a <CODE>long</CODE> offset that is
+                                used to label the output, an open
+                                <CODE>OutputStream</CODE>, and an
+                                <CODE>int</CODE> index that specifies
+                                the starting index within the array of
+                                <CODE>bytes</CODE>.<BR>The data is
+                                displayed 16 bytes per line, with each
+                                byte displayed in hexadecimal format
+                                and again in printable form, if
+                                possible (a byte is considered
+                                printable if its value is in the range
+                                of 32 ... 126).<BR>Here is an example
+                                of a small array of <CODE>bytes</CODE>
+                                with an offset of
+                                0x110:<BR><CODE>00000110&nbsp;C8&nbsp;00&nbsp;00&nbsp;00&nbsp;FF&nbsp;7F&nbsp;90&nbsp;01&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;05&nbsp;01&nbsp;................<BR>00000120&nbsp;41&nbsp;00&nbsp;72&nbsp;00&nbsp;69&nbsp;00&nbsp;61&nbsp;00&nbsp;6C&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A.r.i.a.l.</CODE></TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="IntegerField"><B>IntegerField</B></A></TD>
+                                <TD>The <B>IntegerField</B> class is
+                                an implementation of <A
+                                HREF="#FixedField">FixedField</A> for
+                                the purpose of managing reading and
+                                writing to an integer-wide field in an
+                                array of <CODE>bytes</CODE>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="IntList"><B>IntList</B></A></TD>
+                                <TD>The <B>IntList</B> class is a
+                                work-around for functionality missing
+                                in Java (see <A
+                                HREF="http://developer.java.sun.com/developer/bugParade/bugs/4487555.html">http://developer.java.sun.com/developer/bugParade/bugs/4487555.html</A>
+                                for details); it is a simple growable
+                                array of <CODE>ints</CODE> that gets
+                                around the requirement of wrapping and
+                                unwrapping <CODE>ints</CODE> in
+                                <CODE>Integer</CODE> instances in
+                                order to use the
+                                <CODE>java.util.List</CODE>
+                                interface.<BR><B>IntList</B> mimics
+                                the functionality of the
+                                <CODE>java.util.List</CODE> interface
+                                as much as possible.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="LittleEndian"><B>LittleEndian</B></A></TD>
+                                <TD>The <B>LittleEndian</B> class
+                                provides a set of static methods for
+                                reading and writing
+                                <CODE>shorts</CODE>,
+                                <CODE>ints</CODE>, <CODE>longs</CODE>,
+                                and <CODE>doubles</CODE> in and out of
+                                <CODE>byte</CODE> arrays, and out of
+                                <CODE>InputStreams</CODE>, preserving
+                                the Intel byte ordering and encoding
+                                of these values.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="LittleEndianConsts"><B>LittleEndianConsts</B></A></TD>
+                                <TD>The <B>LittleEndianConsts</B>
+                                interface defines the width of a
+                                <CODE>short</CODE>, <CODE>int</CODE>,
+                                <CODE>long</CODE>, and
+                                <CODE>double</CODE> as stored by Intel
+                                processors.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="LongField"><B>LongField</B></A></TD>
+                                <TD>The <B>LongField</B> class is an
+                                implementation of <A
+                                HREF="#FixedField">FixedField</A> for
+                                the purpose of managing reading and
+                                writing to a long-wide field in an
+                                array of <CODE>bytes</CODE>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="ShortField"><B>ShortField</B></A></TD>
+                                <TD>The <B>ShortField</B> class is an
+                                implementation of <A
+                                HREF="#FixedField">FixedField</A> for
+                                the purpose of managing reading and
+                                writing to a short-wide field in an
+                                array of <CODE>bytes</CODE>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="ShortList"><B>ShortList</B></A></TD>
+                                <TD>The <B>ShortList</B> class is a
+                                work-around for functionality missing
+                                in Java (see <A
+                                HREF="http://developer.java.sun.com/developer/bugParade/bugs/4487555.html">http://developer.java.sun.com/developer/bugParade/bugs/4487555.html</A>
+                                for details); it is a simple growable
+                                array of <CODE>shorts</CODE> that gets
+                                around the requirement of wrapping and
+                                unwrapping <CODE>shorts</CODE> in
+                                <CODE>Short</CODE> instances in order
+                                to use the <CODE>java.util.List</CODE>
+                                interface.<BR> <B>ShortList</B> mimics
+                                the functionality of the
+                                <CODE>java.util.List</CODE> interface
+                                as much as possible.</TD>
+                            </TR>
+                            <TR>
+                                <TD><A
+                                NAME="StringUtil"><B>StringUtil</B></A></TD>
+                                <TD>The <B>StringUtil</B> class
+                                manages the processing of Unicode
+                                strings.</TD>
+                            </TR>
+                        </TABLE>
+                    </LI>
+                </OL>
+                <A NAME="Scenarios"><FONT
+                SIZE="+1"><B>Scenarios</B></FONT></A>
+                <P>
+                    This section describes the scenarios of how the
+                    POIFS classes and interfaces will be used to
+                    convert an appropriate XML stream to a POIFS
+                    output stream containing an HSSF document.
+                </P>
+               <P>
+                   It is broken down as suggested by the following
+                   scenario diagram:
+               </P>
+               <P>
+                   <IMG SRC="POIFSLifeCycle.gif">
+               </P>
+               <TABLE BORDER="1">
+                   <TR>
+                       <TH><B>Step</B></TH>
+                       <TH><B>Description</B></TH>
+                   </TR>
+                   <TR>
+                       <TD><B>1</B></TD>
+                       <TD><A HREF="Initialization">The Filesystem is
+                       created by the client application.</A></TD>
+                   </TR>
+                   <TR>
+                       <TD><B>2</B></TD>
+                       <TD><A HREF="CreateDocument">The client
+                       application tells the Filesystem to create a
+                       document</A>, providing an
+                       <CODE>InputStream</CODE> and the name of the
+                       document. This may be repeated several
+                       times.</TD>
+                   </TR>
+                   <TR>
+                       <TD><B>3</B></TD>
+                       <TD><A HREF="Initialization">The client
+                       application asks the Filesystem to write its
+                       data to an <CODE>OutputStream</CODE>.</A></TD>
+                   </TR>
+               </TABLE>
+                <OL>
+                    <LI>
+                        <P>
+                            <A
+                            NAME="Initialization">Initialization</A>
+                        </P>
+                        <P>
+                            Initialization of the POIFS system is
+                            shown in the following scenario diagram:
+                        </P>
+                        <P>
+                            <IMG SRC="POIFSInitialization.gif">
+                        </P>
+                        <TABLE BORDER="1">
+                            <TR>
+                                <TH><B>Step</B></TH>
+                                <TH><B>Description</B></TH>
+                            </TR>
+                            <TR>
+                                <TD><B>1</B></TD>
+                                <TD>The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                object, which is created for each
+                                request to convert an appropriate XML
+                                stream to a POIFS output stream
+                                containing an HSSF document, creates
+                                its <A
+                                HREF="#PropertyTable">PropertyTable</A>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>2</B></TD>
+                                <TD>The <A
+                                HREF="#PropertyTable">PropertyTable</A>
+                                creates its <A
+                                HREF="#RootProperty">RootProperty</A>
+                                instance, making the RootProperty the
+                                first <A HREF="#Property">Property</A>
+                                in its <CODE>List</CODE> of Property
+                                instances.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>3</B></TD>
+                                <TD>The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                creates its <A
+                                HREF="#HeaderBlock">HeaderBlock</A>
+                                instance. It should be noted that the
+                                decision to create the HeaderBlock at
+                                Filesystem initialization is
+                                arbitrary; creation of the HeaderBlock
+                                could easily and harmlessly be
+                                postponed to the appropriate moment in
+                                <A HREF="#WriteFilesystem">writing the
+                                filesystem</A>.</TD>
+                            </TR>
+                        </TABLE>
+                    </LI>
+                    <LI>
+                        <P>
+                            <A NAME="CreateDocument">Creating a
+                            Document</A>
+                        </P>
+                        <P>
+                            Creating and adding a document to a POIFS
+                            system is shown in the following scenario
+                            diagram:
+                        </P>
+                        <P>
+                            <IMG SRC="POIFSAddDocument.gif">
+                        </P>
+                        <TABLE BORDER="1">
+                            <TR>
+                                <TH><B>Step</B></TH>
+                                <TH><B>Description</B></TH>
+                            </TR>
+                            <TR>
+                                <TD><B>1</B></TD>
+                                <TD>The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                instance creates a new <A
+                                HREF="#Document">Document</A>
+                                instance. It will store the newly
+                                created Document in a
+                                <CODE>List</CODE> of <A
+                                HREF="#BATManaged">BATManaged</A>
+                                instances.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>2</B></TD>
+                                <TD>The <A
+                                HREF="#Document">Document</A> reads
+                                data from the provided
+                                <CODE>InputStream</CODE>, storing the
+                                data in <A
+                                HREF="#DocumentBlock">DocumentBlock</A>
+                                instances. It keeps track of the byte
+                                count as it reads the data.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>3</B></TD>
+                                <TD>The <A
+                                HREF="#Document">Document</A> creates
+                                a <A
+                                HREF="#DocumentProperty">DocumentProperty</A>
+                                to keep track of its property
+                                data. The byte count is stored in the
+                                newly created DocumentProperty
+                                instance.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>4</B></TD>
+                                <TD>The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                requests the newly created <A
+                                HREF="#DocumentProperty">DocumentProperty</A>
+                                from the newly created <A
+                                HREF="#Document">Document</A>
+                                instance.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>5</B></TD>
+                                <TD>The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                sends the newly created <A
+                                HREF="#DocumentProperty">DocumentProperty</A>
+                                to the Filesystem's <A
+                                HREF="#PropertyTable">PropertyTable</A>
+                                so that the PropertyTable can add the
+                                DocumentProperty to its
+                                <CODE>List</CODE> of <A
+                                HREF="#Property">Property</A>
+                                instances.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>6</B></TD>
+                                <TD>The <A
+                                HREF="#Filesystem">Filesystem</A> gets
+                                the <A
+                                HREF="#RootProperty">RootProperty</A>
+                                from its <A
+                                HREF="#PropertyTable">PropertyTable</A>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>7</B></TD>
+                                <TD>The <A
+                                HREF="#Filesystem">Filesystem</A> adds
+                                the newly created <A
+                                HREF="#DocumentProperty">DocumentProperty</A>
+                                to the <A
+                                HREF="#RootProperty">RootProperty</A>.</TD>
+                            </TR>
+                        </TABLE>
+                        <P>
+                            Although typical deployment of the POIFS
+                            system will only entail adding a single <A
+                            HREF="#Document">Document</A> (the
+                            workbook) to the <A
+                            HREF="#Filesystem">Filesystem</A>, there
+                            is nothing in the design to prevent
+                            multiple Documents from being added to the
+                            Filesystem. This flexibility can be
+                            employed to write summary information
+                            document(s) in addition to the workbook.
+                        </P>
+                    </LI>
+                    <LI>
+                        <P>
+                            <A NAME="WriteFilesystem">Writing the
+                            Filesystem</A>
+                        </P>
+                        <P>
+                            Writing the filesystem is shown in the
+                            following scenario diagram:
+                        </P>
+                        <P>
+                            <IMG SRC="POIFSWriteFilesystem.gif">
+                        </P>
+                        <TABLE BORDER="1">
+                            <TR>
+                                <TH><B>Step</B></TH>
+                                <TH COLSPAN="2"><B>Description</B></TH>
+                            </TR>
+                            <TR>
+                                <TD><B>1</B></TD>
+                                <TD COLSPAN="2">The <A
+                                HREF="#Filesystem">Filesystem</A> adds
+                                the <A
+                                HREF="#PropertyTable">PropertyTable</A>
+                                to its <CODE>List</CODE> of <A
+                                HREF="#BATManaged">BATManaged</A>
+                                instances and calls the
+                                PropertyTable's
+                                <CODE><I>preWrite</I></CODE>
+                                method. The action taken by the
+                                PropertyTable is shown in the <A
+                                HREF="#PropertyTablePreWrite">PropertyTable
+                                preWrite scenario diagram</A>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>2</B></TD>
+                                <TD COLSPAN="2">The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                creates the <A
+                                HREF="#BlockAllocationTable">BlockAllocationTable</A>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>3</B></TD>
+                                <TD>The <A
+                                HREF="#Filesystem">Filesystem</A> gets
+                                the block count from the <A
+                                HREF="#BATManaged">BATManaged</A>
+                                instance.</TD> <TD
+                                ROWSPAN="3"><B>These three steps are
+                                repeated for each <A
+                                HREF="#BATManaged">BATManaged</A>
+                                instance in the <A
+                                HREF="#Filesystem">Filesystem</A>'s
+                                <CODE>List</CODE> of BATManaged
+                                instances (i.e., the <A
+                                HREF="#Document">Documents</A>, in
+                                order of their addition to the
+                                Filesystem, followed by the <A
+                                HREF="#PropertyTable">PropertyTable</A>).</B></TD>
+                            </TR>
+                            <TR>
+                                <TD><B>4</B></TD>
+                                <TD>The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                sends the block count to the <A
+                                HREF="#BlockAllocationTable">BlockAllocationTable</A>,
+                                which adds the appropriate entries to
+                                is <A HREF="#IntList">IntList</A> of
+                                entries, returning the starting block
+                                for the newly added entries.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>5</B></TD>
+                                <TD>The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                gives the start block number to the <A
+                                HREF="#BATManaged">BATManaged</A>
+                                instance. If the BATManaged instance
+                                is a <A HREF="#Document">Document</A>,
+                                it sets the start block field in its
+                                <A
+                                HREF="#DocumentProperty">DocumentProperty</A>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>6</B></TD>
+                                <TD COLSPAN="2">The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                tells the <A
+                                HREF="#BlockAllocationTable">BlockAllocationTable</A>
+                                to create its <A
+                                HREF="#BATBlock">BatBlocks</A>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>7</B></TD>
+                                <TD COLSPAN="2">The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                gives the BAT information to the <A
+                                HREF="#HeaderBlock">HeaderBlock</A> so
+                                that it can set its BAT fields and, if
+                                necessary, create XBAT blocks.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>8</B></TD>
+                                <TD COLSPAN="2">If the filesystem is
+                                unusually large (over <B>7MB</B>), the
+                                <A HREF="#HeaderBlock">HeaderBlock</A>
+                                will create XBAT blocks to contain the
+                                BAT data that it cannot hold
+                                directly. In this case, the <A
+                                HREF="#Filesystem">Filesystem</A>
+                                tells the HeaderBlock where those
+                                additional blocks will be stored.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>9</B></TD>
+                                <TD COLSPAN="2">The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                gives the <A
+                                HREF="#PropertyTable">PropertyTable</A>
+                                start block to the <A
+                                HREF="#HeaderBlock">HeaderBlock</A>.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>10</B></TD>
+                                <TD COLSPAN="2">The <A
+                                HREF="#Filesystem">Filesystem</A>
+                                tells the <A
+                                HREF="#BlockWritable">BlockWritable</A>
+                                instance to write its blocks to the
+                                provided
+                                <CODE>OutputStream</CODE>.<BR>This
+                                step is repeated for each
+                                BlockWritable instance, in this
+                                order:<BR>
+                                <OL>
+                                    <LI>
+                                        The <A
+                                        HREF="#HeaderBlock">HeaderBlock</A>.
+                                    </LI>
+                                    <LI>
+                                        Each <A
+                                        HREF="#Document">Document</A>,
+                                        in the order in which it was
+                                        added to the <A
+                                        HREF="#Filesystem">Filesystem</A>.
+                                    </LI>
+                                    <LI>
+                                        The <A
+                                        HREF="#PropertyTable">PropertyTable</A>.
+                                    </LI>
+                                    <LI>
+                                        The <A
+                                        HREF="#BlockAllocationTable">BlockAllocationTable</A>
+                                    </LI>
+                                    <LI>
+                                        The XBAT blocks created by the
+                                        <A
+                                        HREF="#HeaderBlock">HeaderBlock</A>,
+                                        if any.
+                                    </LI>
+                                </OL></TD>
+                            </TR>
+                        </TABLE>
+                        <P>
+                            <A
+                            NAME="PropertyTablePreWrite"><B>PropertyTable
+                            preWrite scenario diagram</B></A>
+                        </P>
+                        <P>
+                            <IMG SRC="POIFSPropertyTablePreWrite.gif">
+                        </P>
+                        <TABLE BORDER="1">
+                            <TR>
+                                <TH><B>Step</B></TH>
+                                <TH><B>Description</B></TH>
+                            </TR>
+                            <TR>
+                                <TD><B>1</B></TD>
+                                <TD>The <A
+                                HREF="#PropertyTable">PropertyTable</A>
+                                calls <CODE><I>setIndex</I></CODE> for
+                                each of its <A
+                                HREF="#Property">Property</A>
+                                instances, so that each Property now
+                                knows its index within the
+                                PropertyTable's <CODE>List</CODE> of
+                                Property instances.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>2</B></TD> <TD>The <A
+                                HREF="#PropertyTable">PropertyTable</A>
+                                requests the <A
+                                HREF="#PropertyBlock">PropertyBlock</A>
+                                class to create an array of <A
+                                HREF="#PropertyBlock">PropertyBlock</A>
+                                instances.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>3</B></TD>
+
+                                <TD>The <A
+                                HREF="#PropertyBlock">PropertyBlock</A>
+                                calculates the number of empty <A
+                                HREF="#Property">Property</A>
+                                instances it needs to create and
+                                creates them. The algorithm for the
+                                number to create is:<BR>
+                                <CODE>block_count = (properties.size()
+                                + 3) / 4;<BR> emptyPropertiesNeeded =
+                                (block_count * 4) -
+                                properties.size();</CODE></TD>
+                            </TR>
+                            <TR>
+                                <TD><B>4</B></TD> <TD>The <A
+                                HREF="#PropertyBlock">PropertyBlock</A>
+                                creates the required number of <A
+                                HREF="#PropertyBlock">PropertyBlock</A>
+                                instances from the <CODE>List</CODE>
+                                of <A HREF="#Property">Property</A>
+                                instances, including the newly created
+                                empty <A HREF="#Property">Property</A>
+                                instances.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>5</B></TD>
+                                <TD>The <A
+                                HREF="#PropertyTable">PropertyTable</A>
+                                calls <CODE><I>preWrite</I></CODE> on
+                                each of its <A
+                                HREF="#Property">Property</A>
+                                instances. For <A
+                                HREF="#DocumentProperty">DocumentProperty</A>
+                                instances, this call is a no-op. For
+                                the <A
+                                HREF="#RootProperty">RootProperty</A>,
+                                the action taken is shown in the <A
+                                HREF="#RootPropertyPreWrite">RootProperty
+                                preWrite scenario diagram</A>.</TD>
+                            </TR>
+                        </TABLE>
+                        <P>
+                            <A
+                            NAME="RootPropertyPreWrite"><B>RootProperty
+                            preWrite scenario diagram</B></A>
+                        </P>
+                        <P>
+                            <IMG SRC="POIFSRootPropertyPreWrite.gif">
+                        </P>
+                        <TABLE BORDER="1">
+                            <TR>
+                                <TH><B>Step</B></TH>
+                                <TH COLSPAN="2"><B>Description</B></TH>
+                            </TR>
+                            <TR>
+                                <TD><B>1</B></TD>
+                                <TD COLSPAN="2">The <A
+                                HREF="#RootProperty">RootProperty</A>
+                                sets its child property with the index
+                                of the child <A
+                                HREF="#Property">Property</A> that is
+                                first in its <CODE>List</CODE> of
+                                children.</TD>
+                            </TR>
+                            <TR>
+                                <TD><B>2</B></TD>
+                                <TD>The <A
+                                HREF="#RootProperty">RootProperty</A>
+                                sets its child's next property field
+                                with the index of the child's next
+                                sibling in the RootProperty's
+                                <CODE>List</CODE> of children. If the
+                                child is the last in the
+                                <CODE>List</CODE>, its next property
+                                field is set to <CODE>-1</CODE>.</TD>
+                                <TD ROWSPAN="2"><B>These two steps are
+                                repeated for each <A
+                                HREF="#File">File</A> in the <A
+                                HREF="#RootProperty">RootProperty</A>'s
+                                <CODE>List</CODE> of
+                                children.</B></TD>
+                            </TR>
+                            <TR>
+                                <TD><B>3</B></TD>
+                                <TD>The <A
+                                HREF="#RootProperty">RootProperty</A>
+                                sets its child's previous property
+                                field with a value of
+                                <CODE>-1</CODE>.</TD>
+                            </TR>
+                        </TABLE>
+                    </LI>
+                </OL>
+            </LI>
+        </OL>
+    </BODY>
+</HTML>
\ No newline at end of file
diff --git a/src/documentation/content/xdocs/poifs/index.xml b/src/documentation/content/xdocs/poifs/index.xml
new file mode 100644 (file)
index 0000000..f0597a4
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+<document>
+  <header>
+    <title>PoiFS</title>
+    <subtitle>Overview</subtitle>
+    <authors>
+      <person name="Andrew C. Oliver" email="acoliver@apache.org"/>     
+      <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>     
+    </authors>
+  </header>
+  <body>
+    <section><title>Overview</title>
+      <p>POIFS is a pure Java implementation of the OLE 2 Compound
+         Document format.</p>
+      <p>By definition, all APIs developed by the POI project are
+         based somehow on the POIFS API.</p>
+      <p>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 <em>use</em>
+         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.</p>
+      <p>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!".  ;-)</p>
+
+    </section>
+  </body>
+</document>
diff --git a/src/documentation/content/xdocs/poifs/usecases.xml b/src/documentation/content/xdocs/poifs/usecases.xml
new file mode 100644 (file)
index 0000000..0a505cb
--- /dev/null
@@ -0,0 +1,635 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+<document>
+  <header>
+    <title>POIFS Use Cases</title>
+    <authors>
+      <person email="mjohnson@apache.org" name="Marc Johnson" id="MJ"/>
+    </authors>
+  </header>
+  <body>
+    <section><title>POIFS Use Cases</title>
+      <section><title>Use Case 1: Read existing file system</title>
+        <table>
+         <tr>
+           <td><em>Primary Actor:</em></td>
+           <td>POIFS client</td>
+         </tr>
+         <tr>
+           <td><em>Scope:</em></td>
+           <td>POIFS</td>
+         </tr>
+         <tr>
+           <td><em>Level:</em></td>
+           <td>Summary</td>
+         </tr>
+         <tr>
+           <td><em>Stakeholders and Interests:</em></td>
+           <td>
+              POIFS client- wants to read content of file
+                  system<br/>
+              POIFS - understands POIFS file system
+           </td>
+         </tr>
+         <tr>
+           <td><em>Precondition:</em></td>
+           <td>None</td>
+         </tr>
+         <tr>
+           <td><em>Minimal Guarantee:</em></td>
+           <td>None</td>
+         </tr>
+         <tr>
+           <td><em>Main Success Guarantee:</em></td>
+           <td>
+            1. POIFS client requests POIFS to read a POIFS file
+                system, providing an
+                <code>InputStream</code>
+                containing POIFS file system in question.<br/>
+            2. POIFS reads from the
+                <code>InputStream</code> in
+                512 byte blocks.<br/>
+            3. POIFS verifies that the first block begins with
+                the well known signature
+                (
+                <code>0xE11AB1A1E011CFD0</code>)<br/>
+            4. POIFS reads the Block Allocation Table from the
+                first block and, if necessary, from the XBAT
+                blocks.<br/>
+            5. POIFS obtains the start block of the Property
+                Table and reads the Property Table (use case 9,
+                read file)<br/>
+            6. POIFS reads the individual entries in the Property
+                Table<br/>
+            7. POIFS obtains the start block of the Small Block
+                Allocation Table and reads the Small Block
+                Allocation Table (use case 9, read file)<br/>
+            8. 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)<br/>
+        </td>
+         </tr>
+         <tr>
+           <td><em>Extensions:</em></td>
+           <td>
+               2a. If the last block read is not a 512 byte
+                block, the
+                <code>InputStream</code> is not that of
+                a POIFS file system, and POIFS throws an
+                appropriate exception.
+            <br/>
+                   3a. If the signature is incorrect, the
+            <code>InputStream</code> is not that of a POIFS
+            file system, and POIFS throws an appropriate
+                   exception.<br/>
+           </td>
+         </tr>
+       </table>
+      </section>
+      <section><title>Use Case 2: Write file system</title>
+        <table>
+         <tr>
+           <th>Primary Actor:</th>
+           <th>POIFS client</th>
+         </tr>
+         <tr>
+           <th>Scope:</th>
+           <td>POIFS</td>
+         </tr>
+         <tr>
+           <th>Level:</th>
+           <td>Summary</td>
+         </tr>
+         <tr>
+           <th>Stakeholders and Interests:</th>
+           <td>
+            POIFS client- wants to write file system out.<br/>
+            POIFS - knows how to write file system out.
+           </td>
+         </tr>
+         <tr>
+           <th>Precondition:</th>
+           <td>
+               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)
+             <br/>or<br/>
+               File system has been created (use case 3, create
+                   new file system)
+           </td>
+         </tr>
+         <tr>
+           <th>Minimal Guarantee:</th>
+           <td>None</td>
+         </tr>
+         <tr>
+           <th>Main Success Guarantee:</th>
+           <td>
+                1. POIFS client provides an
+                    <code>OutputStream</code>
+                    to write the file system to.
+                <br/>
+                2. POIFS gets the sizes of the Property Table and
+                    each file in the file system.<br/>
+                3. 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.<br/>
+                4. 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.<br/>
+                5. POIFS creates a set of big blocks sufficient to
+                    store the Block Allocation Table<br/>
+                6. POIFS creates and writes the header block<br/>
+                7. POIFS writes out the XBAT blocks, if needed.<br/>
+                8. POIFS writes out the Small Block Array, if
+                    needed<br/>
+                9. POIFS writes out the Small Block Allocation Table,
+                    if needed<br/>
+                10. POIFS writes out the Property Table<br/>
+                11. POIFS writes out the large files, if needed<br/>
+                12. POIFS closes the <code>OutputStream</code>.
+           </td>
+         </tr>
+         <tr>
+           <th>Extensions:</th>
+           <td>
+              6a. Exceptions writing to the
+                  <code>OutputStream</code> will be propagated back
+                  to the POIFS client.
+              <br/>
+              7a. Exceptions writing to the
+                  <code>OutputStream</code> will be propagated back
+                  to the POIFS client.
+              <br/>
+              8a. Exceptions writing to the
+                  <code>OutputStream</code> will be propagated back
+                  to the POIFS client.
+              <br/>
+              9a. Exceptions writing to the
+                  <code>OutputStream</code> will be propagated back
+                  to the POIFS client.
+              <br/>
+              10a. Exceptions writing to the
+                  <code>OutputStream</code> will be propagated back
+                  to the POIFS client.
+              <br/>
+              11a. Exceptions writing to the
+                  <code>OutputStream</code> will be propagated back
+                  to the POIFS client.
+              <br/>
+              12a. Exceptions closing the
+                  <code>OutputStream</code> will be propagated back
+                  to the POIFS client.
+              <br/>
+           </td>
+         </tr>
+       </table>
+      </section>
+      <section><title>Use Case 3: Create new file system</title>
+        <table>
+         <tr>
+           <th>Primary Actor:</th>
+           <td>POIFS client</td>
+         </tr>
+         <tr>
+           <th>Scope:</th>
+           <td>POIFS</td>
+         </tr>
+         <tr>
+           <th>Level:</th>
+           <td>Summary</td>
+         </tr>
+         <tr>
+           <th>Stakeholders and Interests:</th>
+           <td>
+               POIFS client- wants to create a new file
+                   system<br/>
+               POIFS - knows how to create a new file system
+           </td>
+         </tr>
+         <tr>
+           <th>Precondition:</th>
+           <td>None</td>
+         </tr>
+         <tr>
+           <th>Minimal Guarantee:</th>
+           <td>None</td>
+         </tr>
+         <tr>
+           <th>Main Success Guarantee:</th>
+           <td>
+               POIFS creates an empty Property Table.
+           </td>
+         </tr>
+         <tr>
+           <th>Extensions:</th>
+           <td>None</td>
+         </tr>
+       </table>
+      </section>
+      <section><title>Use Case 4: Replace file in file system</title>
+        <table>
+         <tr>
+           <td><em>Primary Actor:</em></td>
+           <td>POIFS client</td>
+         </tr>
+         <tr>
+           <td><em>Scope:</em></td>
+           <td>POIFS</td>
+         </tr>
+         <tr>
+           <td><em>Level:</em></td>
+           <td>Summary</td>
+         </tr>
+         <tr>
+           <td><em>Stakeholders and Interests:</em></td>
+           <td>
+               1. POIFS client- wants to replace an existing file in
+                   the file system<br/>
+                   2. POIFS - knows how to manage the file system
+           </td>
+         </tr>
+         <tr>
+           <td><em>Precondition:</em></td>
+           <td>
+             Either
+             <br/><br/>
+               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)
+             <br/><br/>or<br/><br/>
+               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)
+           </td>
+         </tr>
+         <tr>
+           <td><em>Minimal Guarantee:</em></td>
+           <td>None</td>
+         </tr>
+         <tr>
+           <td><em>Main Success Guarantee:</em></td>
+           <td>
+               1. POIFS discards storage of the existing file.<br/>
+               2. POIFS updates the existing file's entry in the
+                   Property Table<br/>
+               3. POIFS stores the new file's data
+           </td>
+         </tr>
+         <tr>
+           <td><em>Extensions:</em></td>
+           <td>
+               1a. POIFS throws an exception if the file does not
+                   exist.
+           </td>
+         </tr>
+       </table>
+      </section>
+      <section><title>Use Case 5: Delete file from file system</title>
+        <table>
+         <tr>
+           <td><em>Primary Actor:</em></td>
+           <td>POIFS client</td>
+         </tr>
+         <tr>
+           <td><em>Scope:</em></td>
+           <td>POIFS</td>
+         </tr>
+         <tr>
+           <td><em>Level:</em></td>
+           <td>Summary</td>
+         </tr>
+         <tr>
+           <td><em>Stakeholders and Interests:</em></td>
+           <td>
+               * POIFS client- wants to remove a file from a file
+                   system<br/>
+                   * POIFS - knows how to manage the file system
+           </td>
+         </tr>
+         <tr>
+           <td><em>Precondition:</em></td>
+           <td>
+             Either<br/><br/>
+               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)<br/>
+             <br/>
+             or<br/>
+             <br/>
+               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)
+           </td>
+         </tr>
+         <tr>
+           <td><em>Minimal Guarantee:</em></td>
+           <td>None</td>
+         </tr>
+         <tr>
+           <td><em>Main Success Guarantee:</em></td>
+           <td>
+               1. POIFS discards the specified file's storage.<br/>
+               2. POIFS discards the file's Property Table
+                   entry.
+           </td>
+         </tr>
+         <tr>
+           <td><em>Extensions:</em></td>
+           <td>
+               1a. POIFS throws an exception if the file does not
+                   exist.
+           </td>
+         </tr>
+       </table>
+      </section>
+      <section><title>Use Case 6: Write new file to file system</title>
+        <table>
+         <tr>
+           <td><em>Primary Actor:</em></td>
+           <td>POIFS client</td>
+         </tr>
+         <tr>
+           <td><em>Scope:</em></td>
+           <td>POIFS</td>
+         </tr>
+         <tr>
+           <td><em>Level:</em></td>
+           <td>Summary</td>
+         </tr>
+         <tr>
+           <td><em>Stakeholders and Interests:</em></td>
+           <td>
+               * POIFS client- wants to add a new file to the file
+                   system<br/>
+                   * POIFS - knows how to manage the file system
+           </td>
+         </tr>
+         <tr>
+           <td><em>Precondition:</em></td>
+           <td>The specified file does not yet exist in the file
+               system</td>
+         </tr>
+         <tr>
+           <td><em>Minimal Guarantee:</em></td>
+           <td>None</td>
+         </tr>
+         <tr>
+           <td><em>Main Success Guarantee:</em></td>
+           <td>
+               1. The POIFS client provides a file name<br/>
+               2. POIFS creates a new Property Table entry for the
+                   new file<br/>
+               3. POIFS provides the POIFS client with an
+                   <code>OutputStream</code> to write to.<br/>
+               4. The POIFS client writes data to the provided
+                   <code>OutputStream</code>.<br/>
+               5. The POIFS client closes the provided
+                   <code>OutputStream</code><br/>
+               6. POIFS updates the Property Table entry with the
+                   new file's size
+           </td>
+         </tr>
+         <tr>
+           <td><em>Extensions:</em></td>
+           <td>
+               1a. POIFS throws an exception if a file with the
+                   specified name already exists in the file
+                   system.<br/>
+            1b. POIFS throws an exception if the file name is
+                too long. The limit on file name length is 31
+                characters.
+           </td>
+         </tr>
+       </table>
+      </section>
+      <section><title>Use Case 7: Read existing file from file system</title>
+        <table>
+         <tr>
+           <td><em>Primary Actor:</em></td>
+           <td>POIFS client</td>
+         </tr>
+         <tr>
+           <td><em>Scope:</em></td>
+           <td>POIFS</td>
+         </tr>
+         <tr>
+           <td><em>Level:</em></td>
+           <td>Summary</td>
+         </tr>
+         <tr>
+           <td><em>Stakeholders and Interests:</em></td>
+           <td>
+               * POIFS client- wants to read a file from the file
+                   system<br/>
+                   * POIFS - knows how to manage the file system
+           </td>
+         </tr>
+         <tr>
+           <td><em>Precondition:</em></td>
+           <td>
+               * 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).<br/>
+            * The specified file exists in the file system.
+           </td>
+         </tr>
+         <tr>
+           <td><em>Minimal Guarantee:</em></td>
+           <td>None</td>
+         </tr>
+         <tr>
+           <td><em>Main Success Guarantee:</em></td>
+           <td>
+               * The POIFS client provides the name of a file to be read <br/>
+            * POIFS provides an <code>InputStream</code> to read from. <br/>
+            * The POIFS client reads from the <code>InputStream</code>.<br/>
+            * The POIFS client closes the <code>InputStream</code>.
+           </td>
+         </tr>
+         <tr>
+           <td><em>Extensions:</em></td>
+           <td>1a. POIFS throws an exception if no file with the
+               specified name exists.</td>
+         </tr>
+       </table>
+      </section>
+      <section><title>Use Case 8: Read file system directory</title>
+        <table>
+         <tr>
+           <td><em>Primary Actor:</em></td>
+           <td>POIFS client</td>
+         </tr>
+         <tr>
+           <td><em>Scope:</em></td>
+           <td>POIFS</td>
+         </tr>
+         <tr>
+           <td><em>Level:</em></td>
+           <td>Summary</td>
+         </tr>
+         <tr>
+           <td><em>Stakeholders and Interests:</em></td>
+           <td>
+               * POIFS client- wants to know what files exist in
+                   the file system<br/>
+            * POIFS - knows how to manage the file system
+           </td>
+         </tr>
+         <tr>
+           <td><em>Precondition:</em></td>
+           <td>The file system has been read (use case 1, read
+               existing file system) or created (use case 3, create
+               new file system)</td>
+         </tr>
+         <tr>
+           <td><em>Minimal Guarantee:</em></td>
+           <td>None</td>
+         </tr>
+         <tr>
+           <td><em>Main Success Guarantee:</em></td>
+           <td>
+               1. The POIFS client requests the file system
+                   directory.
+                   2. POIFS returns an <code>Iterator</code>. The
+                   <code>Iterator</code> will not include the root
+                   entry in the Property Table, and may be an
+                   <code>Iterator</code> over an empty
+                   <code>Collection</code>.
+           </td>
+         </tr>
+         <tr>
+           <td><em>Extensions:</em></td>
+           <td>None</td>
+         </tr>
+       </table>
+      </section>
+      <section><title>Use Case 9: Read file</title>
+        <table>
+         <tr>
+           <td><em>Primary Actor:</em></td>
+           <td>POIFS</td>
+         </tr>
+         <tr>
+           <td><em>Scope:</em></td>
+           <td>POIFS</td>
+         </tr>
+         <tr>
+           <td><em>Level:</em></td>
+           <td>Summary</td>
+         </tr>
+         <tr>
+           <td><em>Stakeholders and Interests:</em></td>
+           <td>
+                   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)
+           </td>
+         </tr>
+         <tr>
+           <td><em>Precondition:</em></td>
+           <td>None</td>
+         </tr>
+         <tr>
+           <td><em>Minimal Guarantee:</em></td>
+           <td>None</td>
+         </tr>
+         <tr>
+           <td><em>Main Success Guarantee:</em></td>
+           <td>
+               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<br/>
+            2. POIFS returns an <code>InputStream</code>.<br/>
+            3. Reads from the <code>InputStream</code> are
+                performed by walking the specified Block
+                Allocation Table and reading the blocks
+                indicated.<br/>
+            4. POIFS closes the <code>InputStream</code> when
+                finished reading the file, or its client wants to
+                close the <code>InputStream</code>.
+           </td>
+         </tr>
+         <tr>
+           <td><em>Extensions:</em></td>
+           <td>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.</td>
+         </tr>
+       </table>
+      </section>
+      <section><title>Use Case 10: Rename existing file in the file system</title>
+        <table>
+         <tr>
+           <td><em>Primary Actor:</em></td>
+           <td>POIFS client</td>
+         </tr>
+         <tr>
+           <td><em>Scope:</em></td>
+           <td>POIFS</td>
+         </tr>
+         <tr>
+           <td><em>Level:</em></td>
+           <td>Summary</td>
+         </tr>
+         <tr>
+           <td><em>Stakeholders and Interests:</em></td>
+           <td>
+               * POIFS client- wants to rename an existing file in
+                   the file system.<br/>
+            * POIFS - knows how to manage the file system.
+           </td>
+         </tr>
+         <tr>
+           <td><em>Precondition:</em></td>
+           <td>
+               * 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.<br/>
+            * The specified file exists in the file system.<br/>
+            * The new name for the file does not duplicate
+                another file in the file system.
+           </td>
+         </tr>
+         <tr>
+           <td><em>Minimal Guarantee:</em></td>
+           <td>None</td>
+         </tr>
+         <tr>
+           <td><em>Main Success Guarantee:</em></td>
+           <td>
+               1. POIFS updates the Property Table entry for the
+                   specified file with its new name.
+           </td>
+         </tr>
+         <tr>
+           <td><em>Extensions:</em></td>
+           <td>
+               * 1a. If the old file name is not in the file
+                   system, POIFS throws an exception.<br/>
+            * 1b. If the new file name already exists in the
+                file system, POIFS throws an exception.<br/>
+            * 1c. If the new file name is too long (the limit is
+                31 characters), POIFS throws an exception.
+           </td>
+         </tr>
+       </table>
+      </section>
+    </section>
+  </body>
+</document>
diff --git a/src/documentation/content/xdocs/references/book.xml b/src/documentation/content/xdocs/references/book.xml
new file mode 100644 (file)
index 0000000..35f8646
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "./dtd/book-cocoon-v10.dtd">
+
+<book software="Poi" 
+      title="Poi Project Documentation" 
+      copyright="@year@ Poi Project"
+      xmlns:xlink="http://www.w3.org/1999/xlink">
+
+     
+  <menu label="References">
+    <menu-item label="Live Sites" href="index.html"/>
+    <menu-item label="XLS spec [PDF]" href="http://sc.openoffice.org/excelfileformat.pdf"/>
+    <menu-item label="Apache Cocoon" href="http://xml.apache.org/cocoon/"/>
+  </menu>
+
+
+</book>
diff --git a/src/documentation/content/xdocs/references/index.xml b/src/documentation/content/xdocs/references/index.xml
new file mode 100644 (file)
index 0000000..872e754
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>Live Sites using Poi</title>
+        <authors>
+            <person name="Donald Ball" email="balld@webslingerZ.com"/>
+            <person name="Stefano Mazzocchi" email="stefano@apache.org"/>
+            <person name="Robin Green" email="greenrd@hotmail.com"/>
+            <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+            <person name="Glen Stampoultzis" email="glens@apache.org"/>
+        </authors>
+    </header>
+
+    <body>
+        <section><title>Live Sites using Poi</title>
+            <p>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.
+            </p>
+            <!--
+            <ul>
+             <li><link href=""></link></li>
+            </ul>
+           </section>
+            -->
+        </section>
+        <section><title>Products/Projects using POI</title>
+            <p> Publically available products/projects using POI include:
+            </p>
+            <ul>
+              <li><link href="http://jtimetracker.sourceforge.net/">JTimeTracker</link></li>
+            </ul> 
+        </section>
+    </body>
+</document>
diff --git a/src/documentation/content/xdocs/resolutions/book.xml b/src/documentation/content/xdocs/resolutions/book.xml
new file mode 100644 (file)
index 0000000..c3f3d1a
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../dtd/book-cocoon-v10.dtd">
+
+<book software="Poi Project" 
+      title="Resolutions" 
+      copyright="@year@ Poi Project">
+
+  <menu label="Navigation">
+    <menu-item label="Main" href="../index.html"/>
+  </menu>
+  
+  <menu label="About">
+        <menu-item label="About" href="index.html"/>
+  </menu>
+  
+  <menu label="Resolutions">
+        <menu-item label="Coding Standards" href="res001.html"/>
+  </menu>
+
+</book>
+
+
diff --git a/src/documentation/content/xdocs/resolutions/index.xml b/src/documentation/content/xdocs/resolutions/index.xml
new file mode 100644 (file)
index 0000000..24be4da
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>Resolutions</title>
+  <subtitle>About this section</subtitle>
+  <authors>
+   <person name="Andrew C. Oliver" email="acoliver@apache.org"/>   
+  </authors>
+ </header>
+
+ <body>
+ <section><title>About Resolutions</title>
+        <p>
+                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.
+        </p>
+        <p>
+                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.
+        </p>
+        <p>
+                This section is intended mainly to reduce big waste of time
+                discussions from taking away from whats important...developing
+                POI! :-D
+        </p>
+  </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/resolutions/res001.xml b/src/documentation/content/xdocs/resolutions/res001.xml
new file mode 100644 (file)
index 0000000..b86d165
--- /dev/null
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>POI Resoluton</title>
+  <subtitle>Resolution 001 - Minimal Coding Standards</subtitle>
+  <authors>
+   <person name="Andrew C. Oliver" email="acoliver@apache.org"/>
+  </authors>
+ </header>
+
+ <body>
+ <section><title>Resolution 001 - Minimal Coding Standards</title>
+        <section><title>Majority Position</title>
+                <p>
+                        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.
+                </p>
+                <p>
+                        Marc Johnson Authored the following resolution:
+                </p>
+                <p>
+                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):
+                </p>
+                <ol>
+                        <li>
+                        All classes and interfaces MUST have, right at the beginning, the POI
+                        License (see poi/doc/LICENSE).
+                        </li>
+                        <li>
+                        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
+                        </li>
+                        <li>
+                        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.
+                        </li>
+                </ol>
+        </section>
+        <section><title>Amendments (informal by extension and not by vote)</title>
+            <section><title>License</title>
+                <p>
+                        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.
+                </p>
+            </section>
+            <section><title>2 cents</title>
+                 <p>
+                       Tip:  No laughing or joking allowed in conversations regarding coding
+                       standards.
+                       Any mail on coding standards will be treated very seriously,
+                       and sent here with a RTFM.
+                </p>
+            </section>
+        </section>
+        <section><title>Dissent</title>
+                <p>
+                        The motion was passed unanimously with no negative or
+                        neutral votes.
+                </p>
+        </section>
+        <section><title>Comments</title>
+                <p>
+                        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 ;-).
+                </p>
+        </section>
+  </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/site.xml b/src/documentation/content/xdocs/site.xml
new file mode 100644 (file)
index 0000000..25fa589
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+
+<!--
+Forrest site.xml
+
+This file contains an outline of the site's information content.  It is used to:
+- Generate the website menus (though these can be overridden - see docs)
+- Provide semantic, location-independent aliases for internal 'site:' URIs, eg
+<link href="site:changes"> links to changes.html (or ../changes.html if in
+  subdir).
+- Provide aliases for external URLs in the external-refs section.  Eg, <link
+  href="ext:cocoon"> links to http://xml.apache.org/cocoon/
+
+See http://xml.apache.org/forrest/linking.html for more info
+-->
+
+<site label="POI" href="" xmlns="http://apache.org/forrest/linkmap/1.0">
+
+    <external-refs>
+        <xml.apache.org href="http://xml.apache.org/">
+            <forrest href="forrest/">
+                <validation href="validation.html"/>
+                <webapp href="your-project.html#webapp"/>
+            </forrest>
+            <cocoon href="cocoon/"/>
+        </xml.apache.org>
+        <junit href="junit/index.html"/>
+        <jdepend href="jdepend/index.html"/>
+        <javadoc href="apidocs/index.html"/>
+    </external-refs>
+
+</site>
diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml
new file mode 100644 (file)
index 0000000..6a21002
--- /dev/null
@@ -0,0 +1,152 @@
+<?xml version="1.0"?>
+<status>
+    <devs>
+        <!-- in strict alphabetical order -->
+        <person id="AO" name="Andrew C. Oliver" email="acoliver2@users.sourceforge.net"/>
+        <person id="GS" name="Glen Stampoultzis" email="gstamp@iprimus.com.au"/>
+        <person id="MJ" name="Marc Johnson" email="mjohnson at apache dot org"/>
+        <person id="NKB" name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+        <person id="open" name="Poi Developers" email="poi-dev@jakarta.apache.org"/>
+    </devs>
+
+    <todo>
+        <title>Things To Do for POI</title>
+
+        <actions priority="high">
+            <action context="code" dev="NKB">
+                Finish HDF
+            </action>
+            <action context="code" dev="GS">
+                Finish Charts
+            </action>
+            <action context="code" dev="open">
+                Finish Formulas.
+            </action>
+        </actions>
+
+        <actions priority="medium">
+            <action context="code" dev="open">
+                Expose functionality in low level records in higher level API
+            </action>
+            <action context="code" dev="open">
+                Implement more record types.
+            </action>
+            <action context="code" dev="open">
+                Add more dummy checks (for when API user's do things they
+                &quot;can't&quot; do).  This will involve exploring the various
+                upper limits on the things Excel can handle.
+            </action>
+            <action context="code" dev="open">
+                Add support for embedded graphics and other objects.
+            </action>
+            <action context="code" dev="open">
+                Create new adapter object for handling MulBlank, MulRk, Rk
+                records.
+            </action>
+            <action context="code" dev="open">
+                Add a way to copy sheets.
+            </action>
+        </actions>
+
+    </todo>
+
+    <changes>
+
+        <title>History of Changes</title>
+
+        <release version="1.10-dev" date="19 Feb 2003">
+            <action dev="POI-DEVELOPERS" type="add">Support for zoom level</action>
+            <action dev="POI-DEVELOPERS" type="add">Freeze and split pane support</action>
+            <action dev="POI-DEVELOPERS" type="add">Row and column headers on printouts</action>
+        </release>
+        <release version="1.8-dev" date="20 Sep 2002">
+            <action dev="POI-DEVELOPERS" type="add">Custom Data Format Support</action>
+            <action dev="POI-DEVELOPERS" type="add">Enhanced Unicode Support for Russian and Japanese</action>
+            <action dev="POI-DEVELOPERS" type="add">Enhanced formula support including read-only for
+                "optimized if" statements.</action>
+            <action dev="POI-DEVELOPERS" type="add">Support for cloning objects</action>
+            <action dev="POI-DEVELOPERS" type="add">Fixes for header/footer</action>
+            <action dev="POI-DEVELOPERS" type="add">Spanish Documentation translations</action>
+            <action dev="POI-DEVELOPERS" type="add">Support for preserving VBA macros</action>
+        </release>
+        <release version="1.7-dev" date="???">
+            <action dev="NKB" type="update">Removed runtime dependency on commons logging.</action>
+            <action dev="POI-DEVELOPERS" type="update">Formula support</action>
+        </release>
+        <release version="1.5.1" date="16 June 2002">
+            <action dev="GJS" type="update">Removed depedency on commons logging.  Now define poi.logging system property to enable logging to standard out.</action>
+            <action dev="GJS" type="fix">Fixed SST string handling so that spreadsheets with rich text or extended text will be read correctly.</action>
+        </release>
+        <release version="1.5" date="06 May 2002">
+            <action dev="NKB" type="update">New project build.</action>
+            <action dev="NKB" type="update">New project documentation system based on Cocoon.</action>
+            <action dev="POI-DEVELOPERS" type="update">Package rename</action>
+            <action dev="POI-DEVELOPERS" type="fix">Various bug fixes</action>
+            <action dev="POI-DEVELOPERS" type="add">Early stages of HSF development (not ready for development)</action>
+            <action dev="POI-DEVELOPERS" type="add">Initial low level record support for charting (not complete)</action>
+        </release>
+        <release version="1.1.0" date="Release date not recorded">
+            <action dev="POI-DEVELOPERS">Created new event model</action>
+            <action dev="POI-DEVELOPERS">Optimizations made to HSSF including aggregate records for
+                values, rows, etc.</action>
+            <action dev="POI-DEVELOPERS">predictive sizing, offset based writing (instead of lots of
+                array copies)</action>
+            <action dev="POI-DEVELOPERS">minor re-factoring and bug fixes.</action>
+        </release>
+        <release version="1.0.0" date="Release date not recorded">
+            <action dev="POI-DEVELOPERS">Minor documentation updates.</action>
+        </release>
+        <release version="0.14.0" date="Release date not recorded">
+            <action dev="POI-DEVELOPERS">Added DataFormat helper class and exposed set and get format
+                on HSSFCellStyle</action>
+            <action dev="POI-DEVELOPERS">Fixed column width apis (unit wise) and various javadoc on
+                the subject</action>
+            <action dev="POI-DEVELOPERS">Fix for Dimensions record (again)... (one of these days I'll
+                write a unit test for this ;-p).</action>
+            <action dev="POI-DEVELOPERS">Some optimization on sheet creation.</action>
+        </release>
+        <release version="0.13.0" date="Release date not recorded">
+            <action dev="POI-DEVELOPERS">Changes not recorded.</action>
+        </release>
+        <release version="0.12.0" date="Release date not recorded">
+            <action dev="POI-DEVELOPERS">Added MulBlank, Blank, ColInfo</action>
+            <action dev="POI-DEVELOPERS">Added log4j facility and removed all sys.out type logging</action>
+            <action dev="POI-DEVELOPERS">Added support for adding font's, styles and corresponding
+                high level api for styling cells</action>
+            <action dev="POI-DEVELOPERS">added support for changing row height, cell width and default
+                row height/cell width.</action>
+            <action dev="POI-DEVELOPERS">Added fixes for internationalization (UTF-16 should work now
+                from HSSFCell.setStringValue, etc when the encoding is set)</action>
+            <action dev="POI-DEVELOPERS">added support for adding/removing and naming sheets.</action>
+        </release>
+        <release version="0.11.0" date="Release date not recorded">
+            <action dev="POI-DEVELOPERS">Bugfix release. We were throwing an exception when reading
+                RKRecord objects.</action>
+        </release>
+        <release version="0.10.0" date="Release date not recorded">
+            <action dev="POI-DEVELOPERS">Got continuation records to work (read/write)</action>
+            <action dev="POI-DEVELOPERS">Added various pre-support for formulas</action>
+            <action dev="POI-DEVELOPERS">Massive API reorganization, repackaging.</action>
+            <action dev="POI-DEVELOPERS">BiffViewer class added for validating HSSF &amp; POI and/or
+                HSSF Output.</action>
+            <action dev="POI-DEVELOPERS">Better API support for modification.</action>
+        </release>
+        <release version="0.7 (and interim releases)" date="Release date not recorded">
+            <action dev="POI-DEVELOPERS">Added encoding flag to high and low level api to use utf-16
+                when needed (HSSFCell.setEncoding())</action>
+            <action dev="POI-DEVELOPERS">added read only support for Label records (which are
+                reinterpreted as LabelSST when written)</action>
+            <action dev="POI-DEVELOPERS">Broken continuation record implementation (oops)</action>
+            <action dev="POI-DEVELOPERS">BiffViewer class added for validating HSSF &amp; POI and/or
+                HSSF Output.</action>
+        </release>
+        <release version="0.6 (release)" date="Release date not recorded">
+            <action dev="POI-DEVELOPERS">Support for read/write and modify.</action>
+            <action dev="POI-DEVELOPERS">Read only support for MulRK records (converted to Number when
+                writing)
+            </action>
+        </release>
+
+    </changes>
+
+</status>
\ No newline at end of file
diff --git a/src/documentation/content/xdocs/tabs.xml b/src/documentation/content/xdocs/tabs.xml
new file mode 100644 (file)
index 0000000..761cf49
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE tabs PUBLIC "-//APACHE//DTD Cocoon Documentation Tab V1.0//EN" "tab-cocoon-v10.dtd">
+
+<tabs software="MyProj"
+  title="MyProj"
+  copyright="Foo"
+  xmlns:xlink="http://www.w3.org/1999/xlink">
+
+  <!-- The rules are:
+    @dir will always have /index.html added.
+    @href is not modified unless it is root-relative and obviously specifies a
+    directory (ends in '/'), in which case /index.html will be added
+  -->
+
+
+  <tab label="Home" dir=""/>
+  <!-- Add new tabs here, eg:
+  <tab label="How-Tos" dir="community/howto/"/>
+  <tab label="XML Site" dir="xml-site/"/>
+  -->
+
+</tabs>
diff --git a/src/documentation/content/xdocs/todo.xml b/src/documentation/content/xdocs/todo.xml
new file mode 100644 (file)
index 0000000..9084de4
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!DOCTYPE todo PUBLIC "-//APACHE//DTD Todo V1.1//EN" "./dtd/todo-v11.dtd">
+
+<todo><title>Things To Do for Poi</title>
+
+    <devs>
+        <!-- in strict alphabetical order -->
+        <person id="AO"  name="Andrew C. Oliver"   email="acoliver2@users.sourceforge.net"/>
+        <person id="GS"  name="Glen Stampoultzis"  email="gstamp@iprimus.com.au"/>
+        <person id="MJ"  name="Marc Johnson"       email="mjohnson at apache dot org"/>
+        <person id="NKB" name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+        <person id="open" name="Poi Developers"    email="poi-dev@jakarta.apache.org"/>
+    </devs>
+
+    <actions priority="high">
+        <action context="code" dev="NKB">
+          Finish HDF
+        </action>
+        <action context="code" dev="GS">
+          Finish Charts
+        </action>
+        <action context="code" dev="open">
+          Finish Formulas.
+        </action>
+    </actions>
+
+    <actions priority="medium">
+        <action context="code" dev="open">
+          Expose functionality in low level records in higher level API
+        </action>
+        <action context="code" dev="open">
+          Implement more record types.
+        </action>
+        <action context="code" dev="open">
+          Add more dummy checks (for when API user's do things they
+          &quot;can't&quot; do).  This will involve exploring the various
+          upper limits on the things Excel can handle.
+        </action>
+        <action context="code" dev="open">
+              Add support for embedded graphics and other objects.
+        </action>
+        <action context="code" dev="open">
+          Create new adapter object for handling MulBlank, MulRk, Rk
+          records.
+        </action>
+        <action context="code" dev="open">
+          Add a way to copy sheets.
+        </action>
+    </actions>
+
+</todo>
diff --git a/src/documentation/content/xdocs/trans/book.xml b/src/documentation/content/xdocs/trans/book.xml
new file mode 100644 (file)
index 0000000..9eb9789
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "./dtd/book-cocoon-v10.dtd">
+
+<book software="Poi" 
+      title="POI Documentation Translations" 
+      copyright="@year@ Poi Project"
+      xmlns:xlink="http://www.w3.org/1999/xlink">
+
+  <menu label="Translations">
+    <menu-item label="Main Index" href="../index.html"/>    
+    <menu-item label="Guidelines" href="guidelines.html"/>    
+  </menu>
+
+  <menu label="Languages">
+    <menu-item label="Spanish" href="es/index.html"/>    
+    <menu-item label="German" href="de/index.html"/>    
+    <menu-item label="Japanese" href="http://www.terra-intl.com/jakarta/poi/"/>    
+  </menu>
+
+</book>
diff --git a/src/documentation/content/xdocs/trans/de/book.xml b/src/documentation/content/xdocs/trans/de/book.xml
new file mode 100644 (file)
index 0000000..5810a96
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../../dtd/book-cocoon-v10.dtd">
+
+<book software="POI"
+      title="Dokumentation des POI-Projekts"
+      copyright="@year@ POI Project"
+      xmlns:xlink="http://www.w3.org/1999/xlink">
+
+  <menu label="Gemeinschaft">
+    <menu-item label="Neuigkeiten" href="../../news.html"/>
+    <menu-item label="Änderungen" href="../../changes.html"/>
+    <menu-item label="Aufgaben" href="../../todo.html"/>
+    <menu-item label="Mitmachen" href="../../getinvolved/index.html"/>
+    <menu-item label="Unsere Vision" href="../../plan/POI20Vision.html"/>
+    <menu-item label="Geschichte und Zukunft" href="../../historyandfuture.html"/>
+    <menu-item label="Wer wir sind" href="../../who.html"/>
+    <menu-item label="Beschlüsse" href="../../resolutions/index.html"/>
+  </menu>
+
+  <menu label="Marketing">
+    <menu-item label="Fallstudien" href="../../casestudies.html"/>
+  </menu>
+
+  <menu label="Projekt">
+    <menu-item label="Überblick" href="../../overview.html"/>
+    <menu-item label="POIFS" href="../../poifs/index.html"/>
+    <menu-item label="HSSF" href="../../hssf/index.html"/>
+    <menu-item label="HDF" href="../../hdf/index.html"/>
+    <menu-item label="HPSF" href="../../hpsf/index.html"/>
+    <menu-item label="POI-Utils" href="../../utils/index.html"/>
+    <menu-item label="Download" href="http://jakarta.apache.org/builds/jakarta-poi/"/>
+  </menu>
+
+  <menu label="Dokumentation">
+    <menu-item label="Javadocs" href="http://jakarta.apache.org/poi/javadocs/"/>
+    <menu-item label="FAQ" href="../../faq.html"/>
+    <menu-item label="Referenzen" href="../../references/index.html"/>
+  </menu>
+
+  <menu label="Code">
+    <menu-item label="Quellcode" href="http://jakarta.apache.org/poi/javadocs/javasrc/"/>
+    <menu-item label="CVS" href="http://jakarta.apache.org/site/cvsindex.html"/>
+    <menu-item label="Die wichtigsten Fehler" href="http://nagoya.apache.org/bugzilla/buglist.cgi?votes=1&amp;product=POI&amp;order=bugs.votes"/>
+    <menu-item label="Fehlerdatenbank" href="http://nagoya.apache.org/bugzilla/buglist.cgi?product=POI"/>
+    <menu-item label="Liste der Patches" href="http://nagoya.apache.org/bugzilla/buglist.cgi?product=POI&amp;short_desc=%5BPATCH%5D&amp;short_desc_type=allwordssubstr"/>
+
+    <menu-item label="Ergebnis der JUnit-Funktionstests" href="http://jakarta.apache.org/poi/tests/junit/"/>
+    <menu-item label="Ergebnis des Abhängigkeitstests" href="http://jakarta.apache.org/poi/metrics/jdepend/"/>
+    <menu-item label="Ergebnis des Stiltests" href="http://jakarta.apache.org/poi/metrics/checkstyle/"/>
+  </menu>
+
+</book>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: xml
+sgml-omittag:nil
+sgml-shorttag:nil
+sgml-namecase-general:nil
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/src/documentation/content/xdocs/trans/de/index.xml b/src/documentation/content/xdocs/trans/de/index.xml
new file mode 100644 (file)
index 0000000..9e7175e
--- /dev/null
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../../dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title>Willkommen bei POI</title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+      <person id="GJS" name="Glen Stampoultzis" email="glens@apache.org"/>
+      <person id="JENS" name="Jens Lorenz" email="???"/>
+      <person id="RK" name="Rainer Klute" email="klute@apache.org"/>
+    </authors>
+  </header>
+
+  <body>
+    <section><title>Nachrichten</title>
+      <section><title>Übersetzungen</title>
+        <p>
+          Das POI-Übersetzungsprojekt hat begonnen.
+          Den Anfang machen <link href="../es/index.html">spanisch</link>,
+          <link href="http://www.terra-intl.com/jakarta/poi/">japanisch</link>
+          und deutsch. Andere Sprachen sind herzlich willkommen.
+          Machen Sie mit!
+        </p>
+      </section>
+      <section><title>Logo-Wettbewerb </title>
+        <p>
+          Die Wahl für das POI-Logo ist beendet. Danke für Ihre Stimmen.
+        </p>
+<!--        <p>-->
+<!--            <link href="http://vote.sparklit.com/poll.spark/640946">Click here</link> to see the current results.-->
+<!--        </p>-->
+      </section>
+    </section>
+    <section><title>Zweck</title>
+      <p>
+        Das POI-Projekt besteht aus Java-APIs zum Erstellen und
+        Bearbeiten von Dateiformaten, die auf dem Microsoft-Dateiformat »OLE-2
+        Compound Document« beruhen. Dateien in diesem Format sind unter
+        anderem die meisten Microsoft-Office-Dateien, wie zum
+        Beispiel Excel- und Word-Dateien.
+      </p>
+      <p>
+        Grundsätzlich versuchen wir, möglichst viel mit anderen Projekten
+        zusammenzuarbeiten, um die gewünschten Funktionalitäten zur Verfügung
+        zu stellen. Einige Beispiele: Für
+        <link href="http://xml.apache.org/cocoon">Cocoon</link>
+        werden bald Generatoren und Serializer zur Verfügung stehen. Wir
+        arbeiten mit 
+        <link href="http://www.openoffice.org/">Open Office.org</link>
+        zusammen, um das Excel-Dateiformat zu
+        dokumentieren.
+        Für <link href="http://jakarta.apache.org/lucene">Lucene</link>
+        werden bald Filtermodule zur Verfügung stehen. Wir stellen anderen
+        Projekten Teile des POI-Projektes zur Verfügung, damit diese
+        die POI-Funktionalitäten nutzen können.
+      </p>
+      <section><title>Warum und wann sollte man POI nutzen?</title>
+        <p>
+          Wir werden diese Frage komponentenweise beantworten. POI besteht aus
+          einer Reihe von Komponenten, die jeweils unterschiedliche Probleme
+          angehen. Das Kürzel »POI« steht für das gesamte Projekt.
+        </p>
+        <p>
+          Mit <strong>POIFS</strong> können Sie Dateien oder Dokumente, die im
+         OLE 2 Compound Document Format geschrieben wurden, mit Java
+         einlesen. Solche Dateien werden üblicherweise mit der
+         MFC-Klassenbibliothek erzeugt.
+          Außerdem können sie POIFS nutzen, um Dateien im OLE 2 Compound
+          Document Format zu schreiben. Damit können sie zum Beispiel
+          den Datenaustausch mit der Windows-Plattform sicherstellen.
+          Wir können guten Gewissens behaupten, daß POIFS die
+          vollständigste Implementierung dieses Dateiformates ist.
+        </p>
+        <p>
+          Mit <strong>HSSF</strong> können sie Excel-Dateien in Java lesen und
+         schreiben. Sie können auch Excel-Tabellen lesen und
+         modifizieren. Allerdings ist die Schreibfunktionalität im Moment am
+         ausgereiftesten.
+        </p>
+      </section>
+
+      <section><title>Wofür steht POI ?</title>
+        <p>
+          POI bedeutet »Poor Obfuscation Implementation« (Schlechte,
+          verschleiernde Implementierung).
+          Warum geben wir unserem Projekt einen so abschätzigen Namen?
+          Nun, das Microsoft OLE 2 Compound Document Format ist einfach
+          schlecht durchdacht. Von seiner Grundidee her ist es ein
+          Dateiarchiv mit einer Struktur, die dem alten DOS-FAT-Dateisystem
+          ähnelt. Die Redmonder haben kein bereits vorhandenes Archivformat
+          wie tar, gzip, zip oder arc genutzt, sondern stattdessen ein
+          eigenes Archivformat erfunden,
+          das keinerlei Standardverschlüsselung oder -komprimierung
+          bietet, das schlecht erweiterbar ist, und das zur 
+          Fragmentierung neigt.
+        </p>
+        <p>Poi ist außerdem eine Spezialität der hawaiianischen Küche. Sie wird
+         in <link href="http://www.m-w.com/">Merriam Webster's
+         Dictionary</link> beschrieben als: »Ein hawaiianisches Gericht aus
+         Taro-Wurzeln, die durch Stampfen, Kochen und Kneten zu einer Paste
+         geformt und oft noch ein wenig gegoren wird.« Dies ist witzigerweise
+         eine treffende Beschreibung des Dateiformats.</p>
+        <p>
+          POI ist also eine Abkürzung. Wenn Sie Abkürzungen nicht mögen,
+          dann denken sie einfach bei Poi an das hawaiianischen Gericht.
+          Je nachdem, ob Sie Abkürzungen mögen oder nicht, nutzen sie
+          einfach POI oder Poi, wenn sie dieses Projekt meinen.
+        </p>
+      </section>
+    </section>
+
+
+    <section><title>Komponenten</title>
+      <section><title>Überblick</title>
+        <p>
+          POI besteht aus mehreren Komponenten, die jeweils unterschiedliche
+         Aufgaben angehen. Beispielsweise dient die Komponente HSSF dazu,
+         Excel-Dateien zu schreiben und zu lesen. Es folgt eine Liste aller
+         Komponenten des POI-Projektes mit einer sehr kurzen Zusammenfassung
+         ihres Zweckes.
+        </p>
+      </section>
+      <section><title>POIFS (POI Filesystem)</title>
+        <p>
+          POIFS ist der älteste und stabilste Teil des Projektes. POIFS
+          ist unsere Portierung des OLE 2 Compound Document Formats
+          in reinem Java. Es unterstützt Lesen und Schreiben. Alle
+          anderen Komponenten basieren auf POIFS. Mehr Informationen
+          gibt es auf der <link
+          href="../../poifs/index.html">POIFS-Seite</link>.
+        </p>
+      </section>
+      <section><title>HSSF (Horrible Spreadsheet Format)</title>
+        <p>
+          HSSF ist unsere Portierung des Microsoft Excel 97(-2002)
+          Dateiformats in reinem Java. Es unterstützt Lesen und
+          Schreiben. Mehr Informationen gibt es auf der
+          <link href="../../hssf/index.html">HSSF-Seite</link>.
+        </p>
+      </section>
+      <section><title>HDF (Horrible Document Format)</title>
+        <p>
+          HDF ist unsere Portierung des Microsoft Word 97 Datei-Formats
+          in reinem Java. Es unterstützt Lesen und Schreiben. Mehr
+          Informationen gibt es auf der
+          <link href="../../hdf/index.html">HDF-Seite</link>.
+          Diese Komponente ist noch nicht sehr weit fortgeschritten. Wir suchen
+          Entwickler, die mitmachen.
+        </p>
+      </section>
+      <section><title>HPSF (Horrible Property Set Format)</title>
+        <p>
+          HPSF ist unsere Portierung des OLE 2 Property Formats.
+          Property Sets werden häufig genutzt, um Metadaten eines
+          Dokuments wie Titel, Autor und Datum zu speichern. Sie
+          können aber auch für applikationsspezifische Anwendungen
+          genutzt werden. Mehr Informationen gibt es auf der
+          <link href="../../hpsf/index.html">HPSF-Seite</link>.
+        </p>
+      </section>
+    </section>
+    <section><title>Wo ist der HSSF-Serializer geblieben?</title>
+      <p>
+        Der HSSF-Serializer war Teil der Version 1.0 und der letzten Versionen
+        von <link
+        href="http://www.sourceforge.net/projects/poi">Sourceforge</link>.
+        Er wurde an das <link
+        href="http://xml.apache.org/cocoon/">Cocoon</link>-Projekt 
+        übertragen und ist Bestandteil von Cocoon seit Version 2.0.2.
+      </p>
+    </section>
+    <section><title>Beitragen</title>
+      <p>
+        Sie möchten zu diesem Projekt beitragen? Hervorragend!
+        Wir brauchen immer begeisterte, fleißige und talentierte Leute, die
+        uns bei den verschiedenen Aufgaben des Projektes helfen. Nummer eins
+        sind Fehlerberichte und Vorschläge für neue Funktionen. Nummer zwei
+        ist die Dokumentation.</p>
+      <p>Egal, ob sie Kritik oder Vorschläge haben,
+        oder ob Sie Beiträge in Form von Code oder Dokumentation liefern
+       möchten, immer werden Sie bei uns ein offenes Ohr
+        finden. Und nicht zuletzt brauchen wir Java-Programmierer, die
+        sich durch die zahlreichen Ecken und Kanten der Microsoft-Dateiformate
+        hindurchwühlen und uns dabei helfen, diese Formate auf die
+        Java-Plattform zu portieren.
+      </p>
+      <p>
+        Wenn Sie motiviert sind und Zeit haben, tragen Sie sich
+        in unsere Mailing-Listen ein, und machen sie mit! Bei der Einarbeitung
+       helfen wir Ihnen gerne.
+      </p>
+    </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: xml
+sgml-omittag:nil
+sgml-shorttag:nil
+sgml-namecase-general:nil
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/src/documentation/content/xdocs/trans/es/3rdparty.xml b/src/documentation/content/xdocs/trans/es/3rdparty.xml
new file mode 100644 (file)
index 0000000..3341b02
--- /dev/null
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>Contribuciones de Terceras Partes</title>
+  <authors>
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+   <person name="Agustín Martín Barbero" email="-"/>
+  </authors>
+ </header>
+
+ <body>
+
+ <section><title>Cómo Contribuir</title>
+  <p>
+   Vea <link href="contrib.xml">Cómo contribuir a Poi</link>.
+  </p>
+
+ </section>
+
+ <section><title>Componentes Contribuidos</title>
+  <p>
+   No es que estos tengan, necesariamente, suficiente calidad como para ser incluidos
+   en el núcleo de la distribución, pero han sido probados bajo <link href="contrib.xml">
+   varios entornos clave </link>, se proporcionan bajo la misma licencia que Poi, y se
+   incluyen en la distribución de POI bajo el directorio
+   <code>contrib/</code>.
+  </p>
+
+  <p>
+   <strong>¡Ninguno Todavía!</strong> - aunque pude esperarse que algunos de los enlaces
+   listados a continuación lleguen eventualmente a migrarse al nivel de "componentes contribuidos",
+   y posteriormente incluso a la mismísima distribución principal.
+  </p>
+ </section>
+
+ <section><title>Cola de Parches (Patch Queue)</title>
+  <p><link href="patches.html">Entregas de modificaciones (Submissions of modifications)</link>
+   a Poi que esperan revisión. Cualquiera puede realizar comentarios sobre ellas en la lista
+   de desarrollo - ¡se necesitan revisores del código!
+   <strong>Su utilización cae bajo su responsabilidad</strong> - aunque Poi no puede garantizarlo,
+   estos parches no han sido revisados, cuando menos aceptados.
+  </p>
+ </section>
+
+ <section><title>Otras Extensiones</title>
+  <p> Las otras extensiones listadas aquí <strong>tampoco están respaldadas</strong>
+   por el proyecto Poi - se proporcionan sólo por comodidad. Pueden funcionar o no,
+   pueden ser de código abierto o no, etc.
+  </p>
+
+  <p> Para añadir un enlace a esta tabla, ver <link href="contrib.xml">Cómo contribuir
+  a POI</link>.</p>
+
+  <table>
+   <tr>
+    <th>Nombre y Enlace</th>
+    <th>Tipo</th>
+    <th>Descripción</th>
+    <th>Estado</th>
+    <th>Licencia</th>
+    <th>Contacto</th>
+   </tr>
+  </table>
+
+ </section>
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/book.xml b/src/documentation/content/xdocs/trans/es/book.xml
new file mode 100644 (file)
index 0000000..602e75c
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../../dtd/book-cocoon-v10.dtd">
+
+<book software="Poi" 
+      title="Documentación del Proyecto Poi" 
+      copyright="@year@ Poi Project"
+      xmlns:xlink="http://www.w3.org/1999/xlink">
+
+  <menu label="Comunidad">
+    <menu-item label="Noticias" href="news.html"/>    
+    <menu-item label="Espejos" href="../../mirrors.html"/>    
+    <menu-item label="Cambios" href="changes.html"/> 
+    <menu-item label="Tareas" href="todo.html"/> 
+    <menu-item label="Contribuya" href="../../getinvolved/index.html"/>
+    <menu-item label="Listas de Correo" href="http://jakarta.apache.org/site/mail.html"/>
+    <menu-item label="Visión" href="../../plan/POI20Vision.html"/>
+    <menu-item label="Historia y Futuro" href="historyandfuture.html"/>
+    <menu-item label="Quiénes Somos" href="who.html"/> 
+    <menu-item label="Resoluciones" href="../../resolutions/index.html"/>    
+  </menu>
+  
+  <menu label="Marketing">
+    <menu-item label="Casos" href="casestudies.html"/>
+  </menu>
+
+  <menu label="Proyecto">
+    <menu-item label="Descripción General" href="overview.html"/>
+    <menu-item label="POIFS" href="../../poifs/index.html"/>
+    <menu-item label="HSSF" href="../../hssf/index.html"/>
+    <menu-item label="HDF" href="../../hdf/index.html"/>
+    <menu-item label="HPSF" href="../../hpsf/index.html"/>
+    <menu-item label="POI-Utils" href="../../utils/index.html"/>  
+    <menu-item label="Descargas" href="http://jakarta.apache.org/builds/jakarta-poi/"/> 
+  </menu>
+  
+  <menu label="Documentación">
+    <menu-item label="Javadocs" href="http://jakarta.apache.org/poi/javadocs/"/>  
+    <menu-item label="FAQ" href="faq.html"/>
+    <menu-item label="Referencias" href="../../references/index.html"/>  
+  </menu>
+  
+  <menu label="Traducciones">
+    <menu-item label="Índice" href="../../trans/index.html"/>
+    <menu-item label="Procedimientos" href="../../trans/guidelines.html"/>
+    <menu-item label="Alemán" href="../de/index.html"/>
+    <menu-item label="Español" href="index.html"/>
+    <menu-item label="Japonés" href="http://www.terra-intl.com/jakarta/poi/"/>
+  </menu>
+  
+  <menu label="Código">
+    <menu-item label="El C&#243;digo" href="http://jakarta.apache.org/poi/javadocs/javasrc/"/>       
+    <menu-item label="CVS" href="http://jakarta.apache.org/site/cvsindex.html"/>  
+    <menu-item label="Fallos (Bugs) Más Votados" href="http://nagoya.apache.org/bugzilla/buglist.cgi?votes=1&amp;product=POI&amp;order=bugs.votes"/>  
+    <menu-item label="Base de Datos de Fallos" href="http://nagoya.apache.org/bugzilla/buglist.cgi?product=POI"/>  
+    <menu-item label="Parches" href="http://nagoya.apache.org/bugzilla/buglist.cgi?product=POI&amp;short_desc=%5BPATCH%5D&amp;short_desc_type=allwordssubstr"/>  
+    <menu-item label="Resultados de Pruebas Junit" href="http://jakarta.apache.org/poi/tests/junit/"/>  
+    <menu-item label="Métricas de Dependencia" href="http://jakarta.apache.org/poi/metrics/jdepend/"/> 
+    <menu-item label="Métricas de Comprobación de Estilo" href="http://jakarta.apache.org/poi/metrics/checkstyle/"/> 
+  </menu>
+
+</book>
diff --git a/src/documentation/content/xdocs/trans/es/casestudies.xml b/src/documentation/content/xdocs/trans/es/casestudies.xml
new file mode 100644 (file)
index 0000000..3778587
--- /dev/null
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../../dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title>Jakarta POI - Case Studies</title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+      <person id="CR" name="Cameron Riley" email="crileyNO@SPAMekmail.com"/>
+      <person id="AMB" name="Agustín Martín Barbero" email="-"/>
+    </authors>
+  </header>
+  
+  <body>
+    <section><title>Introducción</title>
+       <p>
+          A number of people are using POI for a variety of purposes.  As with
+          any new API or technology, the first question people generally ask
+          is not "how can I" but rather "Who else is doing what I'm about to 
+          do?"  This is understandable with the abismal success rate in the 
+          software business.  These case statements are meant to help create
+          confidence and understanding.
+       </p>
+    </section>
+    <section><title>Submitting a Case Study</title>
+       <p>
+          We are actively seeking case studies for this page (after all it 
+          just started).  Andy Oliver (acoliver at apache dot org) has 
+          agreed to have a few T-Shirts printed with the POI logo (once its
+          chosen) for the first
+          few best submissions.  To submit a case study, either  
+          <link href="http://jakarta.apache.org/poi/getinvolved/index.html">
+          submit a patch for this page</link> (preferred) or email it to the 
+          <link href="http://jakarta.apache.org/site/mail.html">mailing list
+          </link>.  
+       </p>
+    </section>
+    <section><title>Case Studies</title>
+      <section><title>Edwards And Kelcey Technology</title>
+      <p>
+      Edwards and Kelcey Technology (http://www.ekcorp.com/) developed a 
+      Facility
+      Managament and Maintenance System for the Telecommunications industry 
+      based
+      on Turbine and Velocity. Originally the invoicing was done with a simple 
+      CVS
+      sheet which was then marked up by accounts and customized for each client.
+      As growth has been consistent with the application, the requirement for
+      invoices that need not be touched by hand increased. POI provided the
+      solution to this issue, integrating easily and transparently into the
+      system. POI HSSF was used to create the invoices directly from the server
+      in
+      Excel 97 format and now services over 150 unique invoices per month.
+      </p>
+      <p>
+      Cameron Riley (crileyNO@ SPAMekmail.com)
+      </p>
+     </section>
+    </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/changes.xml b/src/documentation/content/xdocs/trans/es/changes.xml
new file mode 100644 (file)
index 0000000..62292be
--- /dev/null
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE changes PUBLIC "-//APACHE//DTD Changes V1.1//EN" "../../dtd/changes-v11.dtd">
+
+<changes><title>Historial de Cambios</title>
+
+    <devs>
+        <!-- in strict alphabetical order -->
+        <person id="AO"  name="Andrew C. Oliver"   email="acoliver2@users.sourceforge.net"/>
+        <person id="GJS"  name="Glen Stampoultzis" email="glens@apache.org"/>
+        <person id="MJ"  name="Marc Johnson"       email="mjohnson@apache.org"/>
+        <person id="NKB" name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+        <person id="POI-DEVELOPERS" name="Poi Developers"    email="poi-dev@jakarta.apache.org"/>
+    </devs>
+    <release version="1.8-dev" date="20 Septiembre 2002">
+        <action dev="POI-DEVELOPERS" type="add">Soporte para Formato de Datos Personalizado (Custom)</action>
+        <action dev="POI-DEVELOPERS" type="add">Soporte Unicode Mejorado para Ruso y Japonés</action>
+        <action dev="POI-DEVELOPERS" type="add">Soporte para Fórmulas Mejorado, incluyendo
+            sólo-lectura para sentencias tipo "optimizado si" (optimized if).</action>
+        <action dev="POI-DEVELOPERS" type="add">Soporte para la clonación de objetos</action>
+        <action dev="POI-DEVELOPERS" type="add">Arreglos en la cabecera/pie</action>
+        <action dev="POI-DEVELOPERS" type="add">Traducciones de la documentación al Español</action>
+        <action dev="POI-DEVELOPERS" type="add">Soporte para preservar macros VBA</action>
+    </release>
+    <release version="1.7-dev" date="???">
+        <action dev="NKB" type="update">Se quita la dependencia en tiempo de ejecución del registro
+       (logging) de "commons".</action>
+        <action dev="POI-DEVELOPERS" type="update">Soporte para fórmulas</action>
+    </release>
+    <release version="1.5.1" date="16 Junio 2002">
+        <action dev="GJS" type="update">Se quita la dependencia del registro de "commons". Ahora hay que definir la propiedad del sistema poi.loggin para permitir
+       que los registros (logs) vayan a la salida estándar.</action>
+        <action dev="GJS" type="fix">Se arregla la gestión de la cadena SST para que las hojas de cálculo con texto rico (rich text) o texto
+       extendido se lean correctamente.</action>
+    </release>
+    <release version="1.5" date="06 Mayo 2002">
+        <action dev="NKB" type="update">Nueva versión (build) del proyecto.</action>
+        <action dev="NKB" type="update">Nuevo sistema de documentación del proyecto basada en  Cocoon.</action>
+        <action dev="POI-DEVELOPERS" type="update">Cambio de nombre del paquete</action>
+        <action dev="POI-DEVELOPERS" type="fix">Varios errores (bugs) corregidos</action>
+        <action dev="POI-DEVELOPERS" type="add">Etapas preliminares del desarrollo de HFS (no esta listo para el desarrollo)</action>
+        <action dev="POI-DEVELOPERS" type="add">Soporte inicial de registros de bajo nivel para gráficas (no está completo)</action>
+    </release>
+    <release version="1.1.0" date="Fecha de distribución no registrada">
+        <action dev="POI-DEVELOPERS">Se crea un nuevo modelo de eventos</action>
+        <action dev="POI-DEVELOPERS">Se optimiza HSSF, incluyendo registros (records) para
+       valores, filas, etc.</action>
+        <action dev="POI-DEVELOPERS">predicción de tamaño, escritura basada en desplazamiento (en lugar de
+       multitud de copias de arrays)</action>
+        <action dev="POI-DEVELOPERS">un poco de re-factoring (¿re-factorización? mejor no) y corrección de errores.</action>
+    </release>
+    <release version="1.0.0" date="Fecha de distribución no registrada">
+        <action dev="POI-DEVELOPERS">Actualizaciones menores a la documentación.</action>
+    </release>
+    <release version="0.14.0" date="Fecha de distribución no registrada">
+        <action dev="POI-DEVELOPERS">Se añade la clase de ayuda DataFormat y se expone el formato set y get en
+       HSSFCellStyle</action>
+        <action dev="POI-DEVELOPERS">Correcciones a las apis de anchura de columna (en cuanto a las unidades) y
+       varios comentarios javadoc al respecto</action>
+        <action dev="POI-DEVELOPERS">Corrección para el registro de "Dimensions" (de nuevo)... (uno de estos días
+       escribiré una prueba unitaria (unit test) para esto ;-p).</action>
+        <action dev="POI-DEVELOPERS">Alguna optimización en la creación de páginas.</action>
+    </release>
+    <release version="0.13.0" date="Fecha de distribución no registrada">
+        <action dev="POI-DEVELOPERS">Mejoras no registradas</action>
+    </release>
+    <release version="0.12.0" date="Fecha de distribución no registrada">
+        <action dev="POI-DEVELOPERS">Se añaden MulBlank, Blank, ColInfo</action>
+        <action dev="POI-DEVELOPERS">Se añade facilidad log4j y se quitan las anotaciones (logs) del tipo sys.out</action>
+        <action dev="POI-DEVELOPERS">Se añade soporte para la adición de fuentes, estilos y el api de alto
+       nivel correspondiente para dar estilo a las celdas</action>
+        <action dev="POI-DEVELOPERS">Se añade soporte para cambiar el alto de una fila, el ancho de una celda, y
+       sus valores por defecto.</action>
+        <action dev="POI-DEVELOPERS">Correcciones para internacionalización (UTF-16 debería funcionar ahora
+       desde HSSFCell.setStringValue, etc cuando se define la codificación)</action>
+        <action dev="POI-DEVELOPERS">Soporte para la adición / eliminación y cambio de nombre de hojas.</action>
+    </release>
+    <release version="0.11.0" date="Fecha de distribución no registrada">
+        <action dev="POI-DEVELOPERS">Distribución de corrección de errores.
+       Lanzamos una excepción cuando leemos objetos de tipo RKRecord.</action>
+    </release>
+    <release version="0.10.0" date="Fecha de distribución no registrada">
+        <action dev="POI-DEVELOPERS">Registros de continuación ya funcionan (lectura/escritura)</action>
+        <action dev="POI-DEVELOPERS">Se añade soporte previo para fórmulas</action>
+        <action dev="POI-DEVELOPERS">Reorganización del API masiva, re-enpaquetado.</action>
+        <action dev="POI-DEVELOPERS">Se añade la clase BiffViewer para validar HSSF &amp; POI y/o la
+       salida de HSSF.</action>
+        <action dev="POI-DEVELOPERS">Se mejora el soporte a la modificación del API.</action>
+    </release>
+    <release version="0.7 (y distribuciones internas)" date="Fecha de distribución no registrada">
+        <action dev="POI-DEVELOPERS">Se añade una bandera de codificación para que las apis de alto
+       y bajo nivel utilicen utf-16 cuando sea necesario (HSSFCell.setEncoding())</action>
+        <action dev="POI-DEVELOPERS">Se añade soporte de sólo lectura a registros de Etiqueta
+       (que son reinterpretados como LabelSST cuando se escriben)</action>
+        <action dev="POI-DEVELOPERS">Se rompe la implementación del registro de continuación (oops)</action>
+        <action dev="POI-DEVELOPERS">Se añade la clase BiffViewer
+       para validar HSSF &amp; POI y/o la
+       salida de HSSF.</action>
+    </release>
+    <release version="0.6 (distribución/release)" date="Fecha de distribución no registrada">
+        <action dev="POI-DEVELOPERS">Soporte para lectura/escritura y modificación.</action>
+        <action dev="POI-DEVELOPERS">Soporte de sólo lectura para registros de tipo MulRK
+       (convertidos a Number cuando se escriben)
+        </action>
+    </release>
+
+</changes>
diff --git a/src/documentation/content/xdocs/trans/es/faq.xml b/src/documentation/content/xdocs/trans/es/faq.xml
new file mode 100644 (file)
index 0000000..8f61433
--- /dev/null
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE faqs PUBLIC "-//APACHE//DTD FAQ V1.1//EN" "../../dtd/faq-v11.dtd">
+
+<faqs title="Preguntas Más Frecuentes (FAQ)">
+    <faq>
+        <question>
+          ¿Por qué la lectura de una hoja de cálculo simple lleva tanto tiempo?
+        </question>
+        <answer>
+          <p>
+          Probablemente hayas habilitado el registro (logging). Dicho registro es
+          una herramienta útil para la búsqueda de errores (debug). Tenerlo habilitado
+          reducirá el rendimiento en un factor de al menos 100. El registro es útil para
+          comprender por qué POI no puede leer algún fichero o para el propio desarrollo
+          de POI.
+          Los errores importantes se lanzan como excepciones, lo cual significa que
+          probablemente no necesites el registro (log).
+          </p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+          ¿Qué es el "eventmodel" (modelo de evento) de HSSF?
+        </question>
+        <answer>
+              <p> El paquete "eventmodel" de HSSF es un nuevo API para la lectura más eficiente de ficheros
+              XML. Requiere mayor conocimiento por parte del usuario, pero reduce el consumo de memoria a
+              una décima parte. Está basado en el modelo de eventos AWT en combinación con SAX. Si necesita
+              acceso de sólo-lectura a un fichero XML determinado, esta es la mejor manera de hacerlo.</p>
+        </answer>
+
+    </faq>
+    <faq>
+        <question>
+          ¿Por qué no puedo leer el documento que creé utilizando Star Office 5.1?
+        </question>
+        <answer>
+              <p>Star Office 5.1 escribe algunos registros utilizando el viejo estándar BIFF.
+              Esto provoca algunos problemas con POI que sólo soporta BIFF8.</p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            ¿Por qué recibo una excepción cada vez que intento leer mi hoja de cálculo?
+        </question>
+        <answer>
+            <p>Es posible que su hoja de cálculo contenga alguna característica que no esté
+            soportada actualmente por HSSF. Por ejemplo - hojas de cálculo que contengan
+            celdas con formato RTF (rich text) no están soportadas actualmente.</p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            ¿Soporta HSSF hojas de cálculo protegidas?
+        </question>
+        <answer>
+            <p>Al proteger una hoja de cálculo, ésta se cifra. No tocaremos el cifrado, porque no
+            tenemos el suficiente conocimiento legal y no estamos seguros de las implicaciones que
+            conllevaría el intentar implementar esto. Si desea intentarlo, es libre de hacerlo y
+            de añadirlo como un módulo enchufable (plugin). Sin embargo, no lo guardaremos aquí.</p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            ¿Cómo se sabe si un campo contiene una fecha con HSSF?
+        </question>
+        <answer>
+            <p>Excel almacena las fechas como números. Así la única manera para determinar
+            si una celda está realmente almacenada como una fecha consiste en mirar su formato.
+            Hay un método de ayuda (helper) en HSSFDateUtil (desde la distribución 1.7.0-dev)
+            que lo comprueba. Gracias a Jason Hoffman por proporcionar la solución.</p>
+            <source>
+
+case HSSFCell.CELL_TYPE_NUMERIC:
+                  double d = cell.getNumericCellValue();
+                  // test if a date!
+                             if (HSSFDateUtil.isCellDateFormatted(cell)) {
+                    // format in form of M/D/YY
+                    cal.setTime(HSSFDateUtil.getJavaDate(d));
+                    cellText =
+                      (String.valueOf(cal.get(Calendar.YEAR))).substring(2);
+                    cellText = cal.get(Calendar.MONTH)+1 + "/" +
+                               cal.get(Calendar.DAY_OF_MONTH) + "/" +
+                               cellText;
+                  }
+
+            </source>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            Estoy intentando ver un fichero XLS enviado como flujo (stream) desde un servlet y tengo
+            complicaciones. ¿Cuál es el problema?
+        </question>
+        <answer>
+            <p>
+            El problema normalmente se manifiesta como un montón de caracteres basura
+            en la pantalla. El problema persiste incluso aunque hayas configurado el tipo mime
+            correcto.
+            </p>
+            <p>
+            La respuesta breve es: no dependas de IE para mostrar un fichero binario. 
+            Escribe un documento adjunto como es debido si lo envías a través de un servlet. 
+            Toda versión de IE tiene diferentes fallos (bugs) en este sentido.
+            </p>
+            <p>
+            El problema en la mayoría de las versiones de IE reside en que no utiliza el tipo mime
+            de la respuesta HTTP para determinar el tipo de fichero; en su lugar utiliza la extensión
+            del fichero en la petición. Así podría añadir un <strong>.xls</strong> a su cadena de petición.
+            Por ejemplo: <em>http://yourserver.com/myServelet.xls?param1=xx</em>. Esto se consigue
+            fácilmente a través del mapeo de URL en cualquier contenedor servlet. A veces una
+            petición como
+                <em>http://yourserver.com/myServelet?param1=xx&amp;dummy=file.xls</em> 
+            también funciona.
+            </p>
+            <p>
+            Para garantizar la correcta apertura del fichero en Excel desde IE, escribe
+            tu fichero a un fichero temporal bajo su raiz web desde tu servlet. Envía entonces
+            una respuesta http al navegador para que haga una redirección en el lado del cliente
+            a tu fichero temporal. (Si haces una redirección en el lado del servidor utilizando
+            RequestDispatcher, tendrás que añadir .xls a la petición como se ha mendionado más
+            arriba)
+            </p>
+            <p>
+            Date cuenta de que cuando pides un documento que se abre con un manejador externo,
+            IE a veces realiza dos peticiones al servidor web. Así que si tu proceso generador
+            es pesado, tiene sentido escribir a un fichero temporal, para que peticiones
+            múltiples utilicen el fichero estático.
+            </p>
+            <p>
+            Nada de esto pertenece a Excel. El mismo problema ocurre cuando intentas general
+            cualquier fichero binario dinámicamente a un cliente IE. Por ejemplo, si generas
+            ficheros pdf utilizando
+                <link href="http://xml.apache.org/fop">FOP</link>,
+                te encontrarás con los mismos problemas.
+            </p>
+            <!-- Gracias a Avik por la respuesta -->
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            Quiero dar formato a una celda (Data format of a cell) de una hoja excel como
+            ###,###,###.#### o ###,###,###.0000. ¿Es posible hacer esto con POI?
+        </question>
+        <answer>
+            <p>
+                HSSF no soporta todavía formatos de datos personalizados, sin embargo,
+                debería ser una facilidad razonablemente sencilla de añadir y aceptaremos
+                gustosos contribuciones en este área.
+            </p>
+            <p>
+                Estos son los formatos incluidos que soporta:
+            </p>
+            <p>
+            <link href="http://jakarta.apache.org/poi/javadocs/javasrc/org/apache/poi/hssf/usermodel/HSSFDataFormat_java.html#HSSFDataFormat">http://jakarta.apache.org/poi/javadocs/javasrc/org/apache/poi/hssf/usermodel/HSSFDataFormat_java.html#HSSFDataFormat</link>
+            </p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            ¿Cómo añado un borde alrededor de una celda unida (merged)?
+        </question>
+        <answer>
+            <p>
+            Añade celdas vacías alrededor de donde las celdas hubieran estado normalmente y
+            configura los bordes individualmente para cada celda.
+            Probablemente mejoraremos HSSF en el futuro para facilitar este proceso.
+            </p>
+        </answer>
+    </faq>
+    <faq>
+        <question>
+            Intenté escribir valores en celdas así como cambiar el nombre de la hoja Excel
+            en mi lengua nativa, pero no pude hacerlo. :(
+        </question>
+        <answer>
+            <p>
+            Por defecto HSSF utiliza valores de celdas y nombres de hoja en unicode comprimido,
+            asi que para soportar la localización deberías utilizar Unicode.
+            Para hacerlo deberías configurarlo manualmente:
+            </p>
+            <source>
+
+                //
+                // para el nombre de la hoja
+                //
+                HSSFWorkbook wb = new HSSFWorkbook();
+                HSSFSheet s = wb.createSheet();
+                wb.setSheetName( 0, "SomeUnicodeName", HSSFWorkbook.ENCODING_UTF_16 );
+
+
+                //
+                // para el valor de la celda
+                //
+                HSSFRow r = s.createRow( 0 );
+                HSSFCell c = r.createCell( (short)0 );
+                c.setCellType( HSSFCell.CELL_TYPE_STRING );
+                c.setEncoding( HSSFCell.ENCODING_UTF_16 );
+                c.setCellValue( "\u0422\u0435\u0441\u0442\u043E\u0432\u0430\u044F" );
+
+            </source>
+            <p>
+            Asegúrate de que haces la llamada a setEncoding() antes de llamar a setCellValue(),
+            si no, lo que le pases no será interpretado correctamente.
+            </p>
+        </answer>
+    </faq>
+</faqs>
diff --git a/src/documentation/content/xdocs/trans/es/historyandfuture.xml b/src/documentation/content/xdocs/trans/es/historyandfuture.xml
new file mode 100644 (file)
index 0000000..fb39269
--- /dev/null
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../../dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title>Historia del Proyecto</title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+      <person id="AMB" name="Agustín Martín Barbero" email="-"/>
+    </authors>
+  </header>
+  
+  <body>
+
+
+    <section><title>Breve Historia del Proyecto</title>
+
+        <p>
+        El proyecto POI se gestó tiempo atrás, cerca de abril de 2001,
+        cuando Andy Oliver obtuvo un contrato de corta duración para realizar
+        informes Excel basados en Java. Ya había realizado este proyecto unas
+        cuantas veces antes, y sabía exactamente dónde buscar las herramientas
+        que necesitaría.
+        Irónicamente, el API que solía utilizar se había disparado en precio
+        desde unos $300 ($US) hasta unos $10K ($US). Calculó que a dos personas
+        les llevaría unos seis meses el portar Excel así que le recomendó al
+        cliente que pagase los $10K.
+        </p>
+
+        <p>
+        Cerca de junio de 2001, Andy empezó a pensar lo genial que sería
+        tener una herramienta Java de código abierto para hacer esto y,
+        mientras tuvo algo de tiempo libre, comenzó el proyecto y aprendió
+        cosas sobre el Formato de Documento Compuesto OLE2. Tras chocarse
+        con varios obstáculos insalvables, se dio cuenta de que necesitaría ayuda.
+        Publicó un mensaje en su Grupo de Usuarios Java local (JUG) y
+        preguntó si alguien estaba interesado. Tuvo mucha suerte y el
+        programador Java de mayor talento que había conocido nunca,
+        Marc Johnson, se unió al proyecto. A Marc le llevó unas pocas
+        iteraciones el obtener algo con lo que estaban contentos.
+        </p>
+
+        <p>
+        Mientras Marc trabajaba en eso, Andy portó XLS a Java, basándose
+        en la biblioteca de Marc. Varios usuarios escribieron peticiones
+        para poder leer XLS (no sólo escribirlo como había sido planeado
+        originalmente) y un usuario tenía peticiones especiales para
+        un uso diferente de POIFS. Antes de que pasara mucho tiempo,
+        el alcance del proyecto se había triplicado. POI 1.0 se distribuyó
+        un mes más tarde de lo planeado, pero con muchas más características.
+        Marc escribió rápidamente el marco del serializador y el
+        Serializador HSSF en tiempo récord y Andy generó más documentación
+        y trabajó en hacer que la gente conociera este proyecto.
+        </p>
+
+        <p> 
+          Poco antes de la distribución, POI tuvo la fortuna de entrar
+          en contacto con Nicola -Ken- Barrozzi quien proporcionó ejemplos
+          para el Serializador HSSF y ayudó a descrubir sus desafortunados
+          fallos (que fueron arreglados de inmediato). Recientemente, Ken
+          portó la mayoría de la documentación del proyecto POI a XML
+          partiendo de los documentos HTML cutres que Andy había escrito
+          con Star Office.
+        </p>
+
+        <p>
+        Más o menos al mismo tiempo de la primera distribución, Glen Stampoultzis
+        se unió al proyecto. A Glen le molestaba la actitud impertinente de Andy
+        en lo que añadir capacidades gráficas a HSSF se refería. Glen se molestó
+        tanto que decidió coger un martillo y hacerlo él mismo. Glen ya se ha
+        convertido en parte integral de la comunidad de desarrollo de POI; sus
+        contribuciones a HSSF ya han comenzado a producir olas.
+        </p>
+
+        <p>
+         En algún momento decidimos finalmente remitir el proyecto a
+         <link href="http://xml.apache.org/cocoon">El Proyecto Cocoon
+         de Apache</link>, sólo para descubrir que el proyecto había
+         crecido encajando perfectamente con Cocoon hacía tiempo.
+         Lo que es más, Andy comenzó a ojear otros proyectos a los que
+         le gustaría que se añadiera la funcionalidad de POI. Así que
+         se decidió donar los Serializadores y Generadores a Cocoon, otros
+         componentes de integración con POI a otros proyectos, y los APIs
+         de POI pasarían a formar parte de Jakarta. Fue un camino con
+         baches, ¡pero parece que todo salió bien puesto que ahora estás
+         leyendo esto!
+        </p>
+
+    </section>
+
+    <section><title>¿Hacia dónde va POI?</title>
+        <p>
+        Primero abordaremos esto desde el punto de vista del proyecto:
+        Bueno, les hicimos la oferta a Microsoft y Actuate (de coña
+        ... en su mayor parte) de que dejaríamos el proyecto y nos
+        retiraríamos si simplemente nos firmaban a cada uno un cheque
+        con muchos ceros. Todavía estoy esperando una llamada o correo
+        electrónico, así que de momento asumo que no nos van a pagar
+        para quitarnos de en medio.
+        </p>
+        <p>
+         Después, tenemos algo de trabajo que hacer aquí en Jakarta
+         para terminar de integrar POI en la comunidad. Lo que es más,
+         todavía estamos realizando la transición del Serializador a 
+         Cocoon.
+        </p>
+        <p>
+          HSSF, durante el ciclo 2.0, sufrirá varias optimizaciones.
+          También añadiremos nuevas características como una implementación
+          completa de Fórmulas y formatos de texto personalizados. Esperamos
+          ser capaces de generar ficheros más pequeños añadiendo soporte de
+          escritura para registros RK, MulRK y MulBlank. A día de hoy, la
+          lectura en HSSF no es muy eficiente. Esto se debe sobre todo a que
+          para escribir o modificar, uno necesita ser capaz de actualizar
+          punteros del flujo de subida (upstream pointers) a datos del flujo
+          de bajada. Para hacer esto hay que tener todo lo que haya en
+          medio en memoria. En vez de eso, un Generador permitiría que se 
+          procesaran eventos SAX. (Esto se basará en las estructuras de
+          bajo nivel). Una de las mejores cosas sobre esto es que así no sólo
+          tendremos una manera más eficiente de leer el fichero, también
+          tendremos una magnífica forma de utilizar hojas de cálculo como
+          fuentes de datos XML.
+        </p>
+        <p>
+          El Serializador HSSF, se separará más aún en un marco genérico
+          para la creación de serializadores para otras plataformas y
+          en la implementación específica del serializador HSSF. (Esto ya
+          es cierto en gran medida). También añadiremos soporte para 
+          características ya soportadas por HSSF (estilos, fuentes, formatos
+          de texto). Esperamos añadir soporte para fórmulas durante este ciclo.
+        </p>
+        <p>
+          Estamos empezando a expandir nuestro alcance de nuevo. Si pudimos
+          hacer todo esto para ficheros XLS, ¿qué hay de ficheros Doc o PPT?
+          Pensamos que nuestro siguiente componente (HDF - Formato de 
+          Documento Horrible) debería seguir el mismo patrón. Esperamos
+          que se nos una sangre nueva al equipo y que nos permita abordar
+          esto con mayor celeridad (en parte porque POIFS ya está terminado).
+          ¡Pero a lo mejor lo que más necesitamos es a ti!
+        </p>
+      </section>
+
+    </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+
+
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/hssf/alternatives.xml b/src/documentation/content/xdocs/trans/es/hssf/alternatives.xml
new file mode 100644 (file)
index 0000000..86683c3
--- /dev/null
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>HSSF</title>
+        <subtitle>Programas Alternativos a HSSF</subtitle>
+        <authors>
+            <person name="Glen Stampoultzis" email="glens@apache.org"/>
+        </authors>
+    </header>
+
+    <body>
+        <section><title>Alternativos</title>
+            <p>
+               Puede ser que no es buen idea hablar de nuestra competidores pero nosotros creemos que la compentencia es bueno y que tenemos disponible hoy en día la mejor solución para escribir y leer archivos de Excel
+            </p>
+            <table>
+                <tr>
+                    <th>Producto</th>
+                    <th>URL</th>
+                    <th>Descripción</th>
+                </tr>
+                <tr>
+                    <td>Formula One</td>
+                    <td>
+                        <link href="http://www.tidestone.com/">www.tidestone.com</link>
+                    </td>
+                    <td>
+                      Una alternativa a este proyecto es comprar a $10,000 (dolares EEUU) el "Formula 1 library" y aceptar su API immadura y sus limitaciones.
+                    </td>
+                </tr>
+                <tr>
+                    <td>Visual Basic</td>
+                    <td>
+                        <link href="http://www.microsoft.com/">www.microsoft.com</link>
+                    </td>
+                    <td>
+                      Deja de usar XML y escriba su programa usando Visual Basic en una computadora de Microsoft Windows.  O trata de crear una solución usando la versión beta e indocumentada del nuevo formato de Microsoft llamado 'XML for Office'. 
+                                   </td>
+                </tr>
+                <tr>
+                    <td>JExcel</td>
+                    <td>http://stareyes.homeip.net:8888</td>
+                    <td>Frequentemente no está disponible.  Se conoce poco acerca de  
+                        las habilidades de este programa.
+                    </td>
+                </tr>
+                <tr>
+                    <td>JWorkbook</td>
+                    <td>http://www.object-refinery.com/jworkbook/index.html</td>
+                    <td>
+                      Este esfuerzo puede trabajar con Gnumeric y Excel, pero la parte de Excel lo hace usando POI de todas formas.
+                    </td>
+                </tr>
+                <tr>
+                    <td>xlReader</td>
+                    <td><link href="http://www.sourceforge.net/projects/xlrd">http://www.sourceforge.net/projects/xlrd</link></td>
+                    <td>Funciona bastante bien leyendo Excel.
+                    </td>
+                </tr>
+                <tr>
+                    <td>Excel ODBC Driver</td>
+                    <td><link href="http://www.nwlink.com/~leewal/content/exceljavasample.htm">http://www.nwlink.com/~leewal/content/exceljavasample.htm</link></td>
+                    <td>ODBC ofrece una forma bastante rara para trabajar con Excel.
+                    </td>
+                </tr>
+                <tr>
+                    <td>ExtenXLS</td>
+                    <td><link href="http://www.extentech.com/products/ExtenXLS/docs/intro3.jsp">http://www.extentech.com/products/ExtenXLS/docs/intro3.jsp</link></td>
+                    <td>Una biblioteca commercial para leer, modificar, y escribir hojas de balance de Excel.  No es barato pero cuesta menos que Formula 1.  No tenemos idea de la calidad de este software.
+                    </td>
+                </tr>
+                <tr>
+                    <td>J-Integra Java-Excel Bridge</td>
+                    <td><link href="http://www.intrinsyc.com/products/bridging/jintegra.asp">http://www.intrinsyc.com/products/bridging/jintegra.asp</link></td>
+                    <td>Usa DCOM a una instancia de Excel en una computadora de Windows.
+                    </td>
+                </tr>
+                <tr>
+                    <td>Perl &amp; C</td>
+                    <td>-</td>
+                    <td>Hay varias bibliotecas en los idiomas de Perl y C.  Pero no son consistentes o compatibles.
+                    </td>
+                </tr>
+                <tr>
+                    <td>VistaJDBC</td>
+                    <td><link href="http://www.vistaportal.com/products/vistajdbc.htm">http://www.vistaportal.com/products/vistajdbc.htm</link></td>
+                    <td>El driver de VistaJDBC trabaja con hojas de balance de StarOffice y Excel y proveen acceso al data sin tener que programar usando SQL estandar.  VistaJDBC tambien permite escoger cellulas no solo por columna y fila per tambien cellulas individuales específicas, juegos de celulas, etc.
+                    </td>
+                </tr>
+                <tr>
+                    <td>Coldtags Excel Tag Library</td>
+                    <td><link href="http://www.servletsuite.com/servlets/exceltag.htm">http://www.servletsuite.com/servlets/exceltag.htm</link></td>
+                    <td>
+                       Esta biblioteca ayuda a crear archivos en el formato de CSV, en la cual se permiten numeros y textos.  Puede crear achivos de CSV sin esta ayuda, pero la bibioteca da estructura y leabilidad a su codigo y lo puede extender si necesita manejar casos mas complejos.  Cuando un browser encuentra uno de estos páginas de JSP, abre una instancia de Excel automaticamente.  No hay formatting, hojas de balance distintas, etc.  O sea que, estrictamente, no es un competidor pero en algunos casos es todo lo que se necesita.
+                    </td>
+                </tr>
+            </table>
+        </section>
+    </body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/hssf/book.xml b/src/documentation/content/xdocs/trans/es/hssf/book.xml
new file mode 100644 (file)
index 0000000..6aa20aa
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../dtd/book-cocoon-v10.dtd">
+
+<book software="El Proyecto de POI"
+    title="HSSF"
+    copyright="El Proyecto de POI de @year@"
+    xmlns:xlink="http://www.w3.org/1999/xlink">
+
+        <menu label="Navegación">
+            <menu-item label="Página Principal" href="../index.html"/>
+        </menu>
+
+        <menu label="HSSF">
+            <menu-item label="Referencia Rápida" href="quick-guide.html"/>
+            <menu-item label="Como Se Hace" href="how-to.html"/>
+            <menu-item label="Apoyo Con Fórmulas" href="formula.html" />
+            <menu-item label="Use Case" href="use-case.html"/>
+            <menu-item label="Diagramas" href="diagrams.html"/>
+            <menu-item label="Alternativas" href="alternatives.html"/>
+            <menu-item label="Limitaciones" href="limitations.html"/>
+        </menu>
+
+        <menu label="Guía para el Contribuyente">
+            <menu-item label="Hack-eando HSSF" href="hacking-hssf.html"/>
+            <menu-item label="Generador de Registros" href="record-generator.html"/>
+        </menu>
+
+</book>
diff --git a/src/documentation/content/xdocs/trans/es/hssf/diagram1.xml b/src/documentation/content/xdocs/trans/es/hssf/diagram1.xml
new file mode 100644 (file)
index 0000000..8c23eeb
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>HSSF</title>
+        <subtitle>Vista General</subtitle>
+        <authors>
+            <person name="Andrew C. Oliver" email="acoliver@apache.org"/>
+            <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+        </authors>
+    </header>
+
+    <body>
+        <section>
+            <title>Diagrama de Clases del Usermodel por Matthew Young</title>
+            <p>
+                <img alt="usermodel" src="images/usermodel.gif"/>
+            </p>
+        </section>
+    </body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/hssf/diagrams.xml b/src/documentation/content/xdocs/trans/es/hssf/diagrams.xml
new file mode 100644 (file)
index 0000000..5ebd676
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>HSSF</title>
+  <subtitle>Vista General</subtitle>
+  <authors>
+   <person name="Andrew C. Oliver" email="acoliver@apache.org"/>     
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>     
+  </authors>
+ </header>
+
+ <body>
+ <section><title>Vista General</title>
+        <p>
+                       Se espera usar esta sección para diagramas (UML/etc) que ayudan a 
+                       explicar HSSF.
+        </p>
+        <ul>
+               <li>
+                      <link href="diagram1.html">Diagrama de Clases del UserModel</link> -                
+                      por Matthew Young (myoung at westernasset dot com)
+               </li>
+        </ul>
+        <p>
+                       Tiene más?  Agrega un nuevo &quot;bug&quot; al archivo de bugs con la
+                       palabra [DOCUMENTATION] antes de la descripción y un link al file en algun webserver.  Si no tiene su propio webserver, mandaselo por email a  (acoliver at apache dot org) siempre y cuando el tamaño del archivo es menor a 5 Mb.  Diagramas deben estar en algun formato compatible, por lo menos, con Linux y Windows.  Se prefieren diagramas que se pueden cambiar o modificar pero entendemos que hay pocos programas para crear UML que están a buen precio.  Y no, no TIENEN que ser UML... solo tienen que ser utiles.
+        </p>
+  </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/hssf/formula.xml b/src/documentation/content/xdocs/trans/es/hssf/formula.xml
new file mode 100644 (file)
index 0000000..d128995
--- /dev/null
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>Formula Support</title>
+        <authors>
+            <person email="avik@apache.org" name="Avik Sengupta" id="AS"/>
+        </authors>
+    </header>
+    <body>
+        <section><title>Introduction</title>
+            <p>
+                This document describes the current state of formula support in POI. 
+                The information in this document applies to the 2.0-dev version of POI (i.e. CVS HEAD). 
+                Since this area is a work in progress, this document will be updated with new features as and 
+                when they are added. 
+            </p>
+           
+        </section>
+        <section><title>The basics</title>
+              <p>
+                In org.apache.poi.hssf.usermodel.HSSFCell
+                    <strong> setCellFormula(&quot;formulaString&quot;) </strong> is used to add a formula to sheet and 
+                    <strong> getCellFormula() </strong> is used to retrieve the string representation of a formula. 
+                </p>
+            <p>
+                We aim to support the complete excel grammer for formulas. Thus, the string that you pass in 
+                to the <em> setCellFormula </em> call should be what you expect to type into excel. Also, note
+                that you should NOT add a "=" to the front of the string.  
+            </p>
+        </section>
+        <section><title>Supported Features</title>
+        <ul>
+             <li>Cell References</li>
+             <li>String, integer and floating point literals</li>
+              <li>Area references</li>
+              <li>Relative or absolute references</li>
+              <li>Arithmetic Operators</li>
+              <li>Sheet Functions</li>
+        </ul>
+        </section>
+        <section><title>Partially supported</title>
+            <ul>
+                <li>
+                   The formula parser now has the ability to parse formulas containing strings. However
+                   formulas that return a string value are not yet supported. 
+                   </li>
+                <li>Formula tokens in Excel are stored in one of three possible <em> classes </em>:
+                    Reference, Value and Array. Based on the location of a token, its class can change
+                    in complicated and undocumented ways. While we have support for most cases, we
+                    are not sure if we have covered all bases (since there is no documentation for this area.)
+                    We would therefore like you to report any
+                    occurence of #VALUE! in a cell upon opening a POI generated workbook in excel. (Check that
+                    typing the formula into Excel directly gives a valid result.)
+            </li>
+                    
+            </ul>
+        </section>
+        <section><title>Not yet supported</title>
+            <ul>
+                <li>Array formulas</li>
+                <li>Formulas with logical operations (IF) </li>
+                    <li>Sheet References in formulas</li>
+                    <li>Everything else :) </li>
+            </ul>
+        </section>
+
+        <section><title>Internals</title>
+            <p>
+                Formulas in Excel are stored as  sequences of tokens in Reverse Polish Notation order. The 
+                <link href="http://sc.openoffice.org/excelfileformat.pdf">open office XLS spec</link> is the best
+                documentation you will find for the format.
+            </p>
+
+            <p>
+                The tokens used by excel are modelled as individual *Ptg classes in the <strong>
+                org.apache.poi.hssf.record.formula</strong> package. 
+            </p>
+            <p>
+                The task of parsing a formula string into an array of RPN ordered tokens is done by the <strong>
+                org.apache.poi.hssf.record.formula.FormulaParser</strong> class. This class implements a hand 
+                written recursive descent parser. 
+            </p>
+            <p>Check out the <link href="http://jakarta.apache.org/poi/javadocs/">javadocs </link> for details. 
+            </p>
+        </section>
+       
+    </body>
+</document>
\ No newline at end of file
diff --git a/src/documentation/content/xdocs/trans/es/hssf/hacking-hssf.xml b/src/documentation/content/xdocs/trans/es/hssf/hacking-hssf.xml
new file mode 100644 (file)
index 0000000..81879d0
--- /dev/null
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>Hacking HSSF</title>
+        <authors>
+            <person email="glens@apache.org" name="Glen Stampoultzis" id="GJS"/>
+            <person email="acoliver@apache.org" name="Andrew Oliver" id="AO"/>
+        </authors>
+    </header>
+    <body>
+        <section><title>Where Can I Find Documentation on Feature X</title>
+            <p>
+                You might find the
+                'Excel 97 Developer's Kit' (out of print, Microsoft Press, no
+                restrictive covenants, available on Amazon.com) helpful for
+                understanding the file format.
+            </p>
+            <p>
+                Also useful is the <link href="http://sc.openoffice.org/excelfileformat.pdf">open office XLS spec</link>.  We
+                are collaborating with the maintainer of the spec so if you think you can add something to their
+                document just send through your changes.
+            </p>
+        </section>
+        <section><title>Help, I Can't Find Feature X Documented Anywhere</title>
+            <ol>
+                <li>
+                Look at OpenOffice.org or Gnumeric sources if its implemented there.
+                </li>
+                <li>
+                Use org.apache.poi.hssf.dev.BiffViewer to view the structure of the
+                file.  Experiment by adding one criteria entry at a time.  See what it
+                does to the structure, infer behavior and structure from it.  Using the
+                unix diff command (or get cygwin from www.cygwin.com for windows) you
+                can figure out a lot very quickly. Unimplemented records show up as
+                'UNKNOWN' and prints a hex dump.
+                </li>
+            </ol>
+        </section>
+        <section><title>Low-level Record Generation</title>
+            <p>
+                Low level records can be time consuming to created.  We created a record
+                generator to help generate some of the simpler tasks.
+            </p>
+            <p>
+                We use XML
+                descriptors to generate the Java code (which sure beats the heck out of
+                the PERL scripts originally used ;-) for low level records.  The
+                generator is kinda alpha-ish right now and could use some enhancement,
+                so you may find that to be about 1/2 of the work.  Notice this is in
+                org.apache.poi.hssf.record.definitions.
+            </p>
+        </section>
+        <section><title>Important Notice</title>
+            <p>One thing to note:  If you are making a large code contribution we need to ensure
+            any participants in this process have never
+            signed a "Non Disclosure Agreement" with Microsoft, and have not
+            received any information covered by such an agreement.  If they have
+            they'll not be able to participate in the POI project.  For large contributions we
+            may ask you to sign an agreement.</p>
+        </section>
+        <section><title>What Can I Work On?</title>
+            <p>Check our <link href="../todo.html">todo list</link> or simply look for missing functionality.  Start small
+            and work your way up.</p>
+        </section>
+        <section><title>What Else Should I Know?</title>
+            <p>Make sure you <link href="http://jakarta.apache.org/poi/contrib.html">read the contributing section</link>
+            as it contains more generation information about contributing to Poi in general.</p>
+        </section>
+    </body>
+</document>
\ No newline at end of file
diff --git a/src/documentation/content/xdocs/trans/es/hssf/how-to.xml b/src/documentation/content/xdocs/trans/es/hssf/how-to.xml
new file mode 100644 (file)
index 0000000..f6713c5
--- /dev/null
@@ -0,0 +1,498 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>The New Halloween Document</title>
+        <authors>
+            <person email="acoliver2@users.sourceforge.net" name="Andrew C. Oliver" id="AO"/>
+            <person email="glens@apache.org" name="Glen Stampoultzis" id="GJS"/>
+            <person email="sergeikozello@mail.ru" name="Sergei Kozello" id="SK"/>
+        </authors>
+    </header>
+  <body>
+    <section><title>How to use the HSSF prototype API</title>
+
+        <section><title>Capabilities</title>
+            <p>This release of the how-to outlines functionality for the CVS HEAD.
+            Those looking for information on previous releases should
+            look in the documentation distributed with that release.</p>
+            <p>
+              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.</p>
+        </section>
+    <section><title>General Use</title>
+        <section><title>User API</title>
+                <section><title>Writing a new one</title>
+
+                    <p>The high level API (package: org.apache.poi.hssf.usermodel)
+                    is what most people should use. Usage is very simple.
+                    </p>
+                    <p>Workbooks are created by creating an instance of
+                    org.apache.poi.hssf.usermodel.HSSFWorkbook.
+                    </p>
+                    <p>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,&quot;SheetName&quot;,encoding).
+                    The name may be in 8bit format (HSSFWorkbook.ENCODING_COMPRESSED_UNICODE)
+                    or Unicode (HSSFWorkbook.ENCODING_UTF_16). Default encoding is 8bit per char.
+                    </p>
+                    <p>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.
+                    </p>
+                    <p>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).</p>
+                    <p>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).
+                    </p>
+                    <p>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.
+                    </p>
+                    <p>Here is some example code (excerpted and adapted from
+                    org.apache.poi.hssf.dev.HSSF test class):</p>
+<source><![CDATA[
+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 blue
+f.setColor( (short)0xc );
+// make it bold
+//arial is the default font
+f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+
+//set font 2 to 10 point type
+f2.setFontHeightInPoints((short) 10);
+//make it red
+f2.setColor( (short)HSSFFont.COLOR_RED );
+//make it bold
+f2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+
+f2.setStrikeout( true );
+
+//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 the font
+cs2.setFont(f2);
+
+// set the sheet name in Unicode
+wb.setSheetName(0, "\u0422\u0435\u0441\u0442\u043E\u0432\u0430\u044F " + 
+                   "\u0421\u0442\u0440\u0430\u043D\u0438\u0447\u043A\u0430", 
+                HSSFWorkbook.ENCODING_UTF_16 );
+// in case of compressed Unicode
+// wb.setSheetName(0, "HSSF Test", HSSFWorkbook.ENCODING_COMPRESSED_UNICODE );
+// create a sheet with 30 rows (0-29)
+for (rownum = (short) 0; rownum < 30; 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 10 cells (0-9) (the += 2 becomes apparent later
+    for (short cellnum = (short) 0; cellnum < 10; 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)));
+
+        String cellValue;
+
+        // create a string cell (see why += 2 in the
+        c = r.createCell((short) (cellnum + 1));
+        
+        // on every other row
+        if ((rownum % 2) == 0)
+        {
+            // set this cell to the first cell style we defined
+            c.setCellStyle(cs);
+            // set the cell's string value to "Test"
+            c.setEncoding( HSSFCell.ENCODING_COMPRESSED_UNICODE );
+            c.setCellValue( "Test" );
+        }
+        else
+        {
+            c.setCellStyle(cs2);
+            // set the cell's string value to "\u0422\u0435\u0441\u0442"
+            c.setEncoding( HSSFCell.ENCODING_UTF_16 );
+            c.setCellValue( "\u0422\u0435\u0441\u0442" );
+        }
+
+
+        // make this column a bit wider
+        s.setColumnWidth((short) (cellnum + 1), (short) ((50 * 8) / ((double) 1 / 20)));
+    }
+}
+
+//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();
+        ]]></source>
+        </section>
+                <section><title>Reading or modifying an existing file</title>
+
+<p>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).
+</p>
+<p>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.</p>
+<p>An example of this can be seen in
+<link href="http://cvs.apache.org/viewcvs/~checkout~/jakarta-poi/src/java/org/apache/poi/hssf/dev/HSSF.java?rev=1.1">org.apache.poi.hssf.dev.HSSF</link>.</p>
+         </section>
+        </section>
+                <section><title>Event API</title>
+
+                    <p>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.
+                    </p>
+                    <p>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.</p>
+                    <p>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(&quot;Workbook&quot;) 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.
+                    </p>
+                    <p>A code excerpt from org.apache.poi.hssf.dev.EFHSSF (which is
+                    in CVS or the source distribution) is reprinted below with excessive
+                    comments:</p>
+<source><![CDATA[
+/**
+ * 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.");
+    }
+}
+]]></source>
+     </section>
+                <section><title>Low Level APIs</title>
+
+<p>The low level API is not much to look at. It consists of lots of
+&quot;Records&quot; 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: &quot;Microsoft Excel 97 Developer's Kit&quot;
+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.</p>
+     </section>
+                <section><title>HSSF Class/Test Application</title>
+
+<p>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:
+</p>
+<ul>
+    <li>download the poi-alpha build and untar it (tar xvzf
+    tarball.tar.gz)
+    </li>
+    <li>set up your classpath as follows:
+    <code>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</code>
+    </li><li>type:
+    <code>java org.apache.poi.hssf.dev.HSSF ~/myxls.xls write</code></li>
+</ul>
+<p></p>
+<p>This should generate a test sheet in your home directory called <code>&quot;myxls.xls&quot;</code>.  </p>
+<ul>
+    <li>Type:
+    <code>java org.apache.poi.hssf.dev.HSSF ~/input.xls output.xls</code>
+    <br/>
+    <br/>
+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.  </li>
+</ul>
+     </section>
+    <section><title>Logging facility</title>
+        <p>Poi can dynamically select it's logging implementation. Poi trys to
+        create a logger using the System property named "org.apache.poi.util.POILogger".
+        Out of the box this can be set to one of three values:
+        </p>
+        <ul>
+           <li>org.apache.poi.util.CommonsLogger</li>
+           <li>org.apache.poi.util.NullLogger</li>
+           <li>org.apache.poi.util.SystemOutLogger</li>
+        </ul>
+        <p>
+        If the property is not defined or points to an invalid classthen the NullLogger is used.
+        </p>
+        <p>
+        Refer to the commons logging package level javadoc for more information concerning how to
+        <link href="http://jakarta.apache.org/commons/logging/api/index.html">configure commons logging.</link>
+        </p>
+     </section>
+    <section><title>HSSF Developer's Tools</title>
+
+<p>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.
+</p>
+<p>The first is &quot;biffview&quot;. 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.
+</p>
+<p>The second function is &quot;big freakin dump&quot;, just pass a
+file and a second argument matching &quot;bfd&quot; exactly. This
+will just make a big hexdump of the file.
+</p>
+<p>Lastly, there is &quot;mixed&quot; 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 &quot;on&quot; exactly.</p>
+<p>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.</p>
+
+     </section>
+                <section><title>What's Next?</title>
+
+<p>This release contains code that supports &quot;internationalization&quot;
+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).</p>
+<p>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?
+</p>
+     </section>
+
+</section>
+
+</section>
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/hssf/index.xml b/src/documentation/content/xdocs/trans/es/hssf/index.xml
new file mode 100644 (file)
index 0000000..5bc4662
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>HSSF</title>
+  <subtitle>Overview</subtitle>
+  <authors>
+   <person name="Andrew C. Oliver" email="acoliver@apache.org"/>     
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>     
+  </authors>
+ </header>
+
+ <body>
+ <section><title>Overview</title>
+
+  <p>HSSF is the POI Project's pure Java implementation of the Excel '97(-2002) file format.</p>
+  <p>HSSF provides a way to read spreadsheets create, modify, read and write XLS spreadsheets
+     It provides: 
+  </p>
+  <ul>
+        <li>low level structures for those with special needs</li>
+        <li>an eventmodel api for efficient read-only access</li>
+        <li>a full usermodel api for creating, reading and modifying XLS files</li>
+  </ul>
+  <p>
+        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 <link href="http://xml.apache.org/cocoon">Apache Cocoon
+        Project</link>.  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.
+  </p>
+  <p>
+        If you're merely reading spreadsheet data, then use the eventmodel api
+        in the org.apache.poi.hssf.eventmodel package.
+  </p>
+  <p>
+        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.
+  </p>
+
+  </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/hssf/limitations.xml b/src/documentation/content/xdocs/trans/es/hssf/limitations.xml
new file mode 100644 (file)
index 0000000..9560602
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>Limitations</title>
+        <authors>
+            <person email="glens@apache.org" name="Glen Stampoultzis" id="GJS"/>
+        </authors>
+    </header>
+    <body>
+        <section><title>Version 1.5 limitations</title>
+            <p>
+                The intent of this document is to outline some of the known limitations of the
+                POI HSSF API's.  It is not intended to be complete list of every bug or missing
+                feature of HSSF, rather it's purpose is to provide a broad feel for some of the
+                functionality that is missing or broken.
+            </p>
+            <ul>
+                <li>
+                    Charts<br/><br/>
+                    You can not currently create charts.  This is planned for the 2.0 release.  You can
+                    however create a chart in Excel, modify the chart data values using HSSF and write
+                    a new spreadsheet out.  This is possible because POI attempts to keep existing records
+                    intact as far as possible.<br/><br/>
+                </li>
+                <li>
+                    Rich Text<br/><br/>
+                    HSSF does not support rich text cells.  Rich text cells are
+                    cells that have multiple fonts and styles in the once cell.  Any attempt to read
+                    a spreadsheet that has rich text cells will throw an exception.  This feature may
+                    be supported in the future but it is not currently planned.  Patches are welcome.<br/><br/>
+                </li>
+                <li>
+                    Outlines<br/><br/>
+                    It is not yet possible to create outlines.  Reading a spreadsheet with outlines
+                    may work correctly but has not been tested.  Write support for outlines may
+                    be added in the future but it is not currently planned.  Patches are welcome.<br/><br/>
+                </li>
+                <li>
+                    Macros<br/><br/>
+                    Macros can not be created.  The are currently no plans to support macros.  Reading
+                    workbooks containing macros is supported but attempting to write those workbooks
+                    will fail.  This is because macros are stored as extra file sytems within the
+                    compound document, and these are not currently kept when the file is rewritten.<br/><br/>
+                </li>
+                <li>
+                    Pivot Tables<br/><br/>
+                    Generating pivot tables is not supported.  Reading spreadsheets containing pivot tables
+                    has not been tested.
+                </li>
+            </ul>
+        </section>
+    </body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/hssf/quick-guide.xml b/src/documentation/content/xdocs/trans/es/hssf/quick-guide.xml
new file mode 100644 (file)
index 0000000..371f360
--- /dev/null
@@ -0,0 +1,404 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>Busy Developers' Guide to HSSF Features</title>
+        <authors>
+            <person email="glens@apache.org" name="Glen Stampoultzis" id="CO"/>
+        </authors>
+    </header>
+    <body>
+        <section><title>Busy Developers' Guide to Features</title>
+            <p>
+                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 <link href="how-to.html">HOWTO</link>
+                guide as it contains actual descriptions of how to use this stuff.
+            </p>
+            <section><title>Index of Features</title>
+                <ul>
+                    <li><link href="#NewWorkbook">How to create a new workbook</link></li>
+                    <li><link href="#NewSheet">How to create a sheet</link></li>
+                    <li><link href="#CreateCells">How to create cells</link></li>
+                    <li><link href="#CreateDateCells">How to create date cells</link></li>
+                    <li><link href="#CellTypes">Working with different types of cells</link></li>
+                    <li><link href="#Alignment">Aligning cells</link></li>
+                    <li><link href="#Borders">Working with borders</link></li>
+                    <li><link href="#FrillsAndFills">Fills and color</link></li>
+                    <li><link href="#MergedCells">Merging cells</link></li>
+                    <li><link href="#WorkingWithFonts">Working with fonts</link></li>
+                    <li><link href="#ReadWriteWorkbook">Reading and writing</link></li>
+                    <li><link href="#NewLinesInCells">Use newlines in cells.</link></li>
+                    <li><link href="#DataFormats">Create user defined data formats.</link></li>
+                    <li><link href="#PrintArea">Set print area for a sheet.</link></li>
+                    <li><link href="#FooterPageNumbers">Set page numbers on the footer of a sheet.</link></li>
+                </ul>
+            </section>
+            <section><title>Features</title>
+                <anchor id="NewWorkbook"/>
+                <section><title>New Workbook</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+                <anchor id="NewSheet"/>
+                <section><title>New Sheet</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="CreateCells"/>
+                <section><title>Creating Cells</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="CreateDateCells"/>
+                <section><title>Creating Date Cells</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="CellTypes"/>
+                <section><title>Working with different types of cells</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="Alignment"/>
+                <section><title>Demonstrates various alignment options</title>
+                    <source>
+    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);
+    }
+                    </source>
+                </section>
+                <anchor id="Borders"/>
+                <section><title>Working with borders</title>
+                    <source>
+    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(HSSFColor.BLACK.index);
+    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+    style.setLeftBorderColor(HSSFColor.GREEN.index);
+    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
+    style.setRightBorderColor(HSSFColor.BLUE.index);
+    style.setBorderTop(HSSFCellStyle.BORDER_MEDIUM_DASHED);
+    style.setTopBorderColor(HSSFColor.BLACK.index);
+    cell.setCellStyle(style);
+
+    // Write the output to a file
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+                <anchor id="FillsAndFrills"/>
+                <section><title>Fills and colors</title>
+                    <source>
+    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(HSSFColor.AQUA.index);
+    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(HSSFColor.ORANGE.index);
+    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();
+                    </source>
+                </section>
+                <anchor id="MergedCells"/>
+                <section><title>Merging cells</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="WorkingWithFonts"/>
+                <section><title>Working with fonts</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="ReadWriteWorkbook"/>
+                <section><title>Reading and Rewriting Workbooks</title>
+                    <source>
+    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();
+                    </source>
+                </section>
+                <anchor id="UseNewLinesInCells"/>
+                <section><title>Using newlines in cells</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet s = wb.createSheet();
+    HSSFRow r = null;
+    HSSFCell c = null;
+    HSSFCellStyle cs = wb.createCellStyle();
+    HSSFFont f = wb.createFont();
+    HSSFFont f2 = wb.createFont();
+
+    cs = wb.createCellStyle();
+
+    cs.setFont( f2 );
+    //Word Wrap MUST be turned on
+    cs.setWrapText( true );
+
+    r = s.createRow( (short) 2 );
+    r.setHeight( (short) 0x349 );
+    c = r.createCell( (short) 2 );
+    c.setCellType( HSSFCell.CELL_TYPE_STRING );
+    c.setCellValue( "Use \n with word wrap on to create a new line" );
+    c.setCellStyle( cs );
+    s.setColumnWidth( (short) 2, (short) ( ( 50 * 8 ) / ( (double) 1 / 20 ) ) );
+
+    FileOutputStream fileOut = new FileOutputStream( "workbook.xls" );
+    wb.write( fileOut );
+    fileOut.close();</source>
+                </section>
+                <anchor id="DataFormats"/>
+                <section><title>Data Formats</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet = wb.createSheet("format sheet");
+    HSSFCellStyle style;
+    HSSFDataFormat format = wb.createDataFormat();
+    HSSFRow row;
+    HSSFCell cell;
+    short rowNum = 0;
+    short colNum = 0;
+
+    row = sheet.createRow(rowNum++);
+    cell = row.createCell(colNum);
+    cell.setCellValue(11111.25);
+    style = wb.createCellStyle();
+    style.setDataFormat(format.getFormat("0.0"));
+    cell.setCellStyle(style);
+
+    row = sheet.createRow(rowNum++);
+    cell = row.createCell(colNum);
+    cell.setCellValue(11111.25);
+    style = wb.createCellStyle();
+    style.setDataFormat(format.getFormat("#,##0.0000"));
+    cell.setCellStyle(style);
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+                <anchor id="PrintArea"/>
+                <section><title>Set Print Area to One Page</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet = wb.createSheet("format sheet");
+    HSSFPrintSetup ps = sheet.getPrintSetup()
+    
+    sheet.setAutobreaks(true)
+    
+    ps.setFitHeight((short)1);
+    ps.setFitWidth((short)1);
+
+
+    // Create various cells and rows for spreadsheet.
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>
+                <anchor id="FooterPageNumbers"/>
+                <section><title>Set Page Numbers on Footer</title>
+                    <source>
+    HSSFWorkbook wb = new HSSFWorkbook();
+    HSSFSheet sheet = wb.createSheet("format sheet");
+    HSSFFooter footer = sheet.getFooter()
+    
+    footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );
+    
+
+
+    // Create various cells and rows for spreadsheet.
+
+    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+    wb.write(fileOut);
+    fileOut.close();
+                    </source>
+                </section>                
+                
+
+            </section>
+        </section>
+    </body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/hssf/record-generator.xml b/src/documentation/content/xdocs/trans/es/hssf/record-generator.xml
new file mode 100644 (file)
index 0000000..b504667
--- /dev/null
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+  <header>
+   <title>Record Generator HOWTO</title>
+   <authors>
+    <person email="glens@apache.org" name="Glen Stampoultzis" id="glens"/>
+    <person email="acoliver@apache.org" name="Andrew C. Oliver" id="acoliver"/>
+   </authors>
+  </header>
+  <body>
+    <section><title>How to Use the Record Generator</title>
+
+    <section><title>History</title>
+        <p>
+        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.
+        </p>
+        <p>
+        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.
+        </p>
+    </section>
+
+    <section><title>Capabilities</title>
+    <p>
+        The record generator takes XML as input and produced the following
+        output:
+    </p>
+    <ul>
+        <li>A Java file capabile of decoding and encoding the record.</li>
+        <li>A test class with provides a fill-in-the-blanks implementation of a test case
+            for ensuring the record operates as designed.</li>
+    </ul>
+    </section>
+    <section><title>Usage</title>
+        <p>
+            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.
+        </p>
+        <p>
+            The records themselves have the following general layout:
+        </p>
+        <source><![CDATA[
+<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>
+        ]]></source>
+        <p>
+            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'.
+        </p>
+        <p>
+            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.
+        </p>
+    </section>
+    <section><title>How it Works</title>
+        <p>
+            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.   
+        </p>
+        <p>
+            See record.xsl, record_test.xsl, FieldIterator.java, 
+            RecordUtil.java, RecordGenerator.java
+        </p>
+    </section>
+    <section><title>Limitations</title>
+        <p>
+            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.
+        </p>
+        <p>
+            Currently the record generator is optimized to create Excel records.  
+            It could be adapted to create Word records with a little poking 
+            around.
+        </p>
+        <p>
+            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.  
+        </p>
+    </section>
+</section>
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/hssf/use-case.xml b/src/documentation/content/xdocs/trans/es/hssf/use-case.xml
new file mode 100644 (file)
index 0000000..0da732f
--- /dev/null
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd"> 
+     
+<document>
+  <header>
+   <title>HSSF Use Cases</title>
+   <authors>
+    <person email="marc.johnson@yahoo.com" name="Marc Johnson" id="MJ"/>
+   </authors>
+  </header>
+  <body>
+    <section><title>HSSF Use Cases</title>
+    <section><title>Use Case 1: Read existing HSSF</title>
+
+<p><strong>Primary Actor:</strong> HSSF client</p>
+<p><strong>Scope:</strong> HSSF</p>
+<p><strong>Level:</strong> Summary</p>
+<p><strong>Stakeholders and Interests:</strong></p>
+<ul>
+       <li>HSSF client- wants to read content
+       of HSSF file</li>
+       <li>HSSF - understands HSSF file</li>
+       <li>POIFS - understands underlying POI
+       file system</li>
+</ul>
+<p><strong>Precondition:</strong> None</p>
+<p><strong>Minimal Guarantee:</strong> None</p>
+<p><strong>Main Success Guarantee:</strong></p>
+<ol>
+       <li>HSSF client requests HSSF to read
+       a HSSF file, providing an InputStream
+       containing HSSF file in question.</li>
+       <li>HSSF requests POIFS to read the HSSF
+       file, passing the InputStream
+       object to POIFS (POIFS use case 1, read existing file system)</li>
+       <li>HSSF reads the &quot;Workbook&quot;
+       file (use case 4, read workbook entry)</li>
+</ol>
+<p><strong>Extensions:</strong></p>
+<p>2a. Exceptions
+thrown by POIFS will be passed on to the HSSF client.</p>
+</section>
+    <section><title>Use Case 2: Write HSSF file</title>
+
+<p><strong>Primary Actor:</strong> HSSF client</p>
+<p><strong>Scope:</strong> HSSF</p>
+<p><strong>Level:</strong> Summary</p>
+<p><strong>Stakeholders and Interests:</strong></p>
+<ul>
+       <li>HSSF client- wants to write file
+       out.</li>
+       <li>HSSF - knows how to write file
+       out.</li>
+       <li>POIFS - knows how to write file
+       system out.</li>
+</ul>
+<p><strong>Precondition:</strong></p>
+<ul>
+       <li>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)</li>
+</ul>
+<p><strong>Minimal Guarantee:</strong> None</p>
+<p><strong>Main Success Guarantee:</strong></p>
+<ol>
+       <li>HSSF client
+       provides an OutputStream to
+       write the file to.</li>
+       <li>HSSF writes
+       the &quot;Workbook&quot; to its associated POIFS file system (use case
+       5, write workbook entry)</li>
+       <li>HSSF
+       requests POIFS to write its file system out, using the OutputStream
+       obtained from the HSSF client (POIFS use case 2, write file system).</li>
+</ol>
+<p><strong>Extensions:</strong></p>
+<p>3a. Exceptions
+from POIFS are passed to the HSSF client.</p>
+
+</section>
+    <section><title>Use Case 3:Create HSSF file</title>
+
+<p><strong>Primary Actor:</strong> HSSF client</p>
+<p><strong>Scope:</strong> HSSF</p>
+<p>
+<strong>Level:</strong> Summary</p>
+<p><strong>Stakeholders and Interests:</strong></p>
+<ul>
+       <li>HSSF client- wants to create a new
+       file.</li>
+       <li>HSSF - knows how to create a new
+       file.</li>
+       <li>POIFS - knows how to creat a new
+       file system.</li>
+</ul>
+<p><strong>Precondition:</strong></p>
+<p><strong>Minimal Guarantee:</strong> None</p>
+<p><strong>Main Success Guarantee:</strong></p>
+<ol>
+       <li>HSSF requests
+       POIFS to create a new file system (POIFS use case 3, create new file
+       system)</li>
+</ol>
+<p><strong>Extensions:</strong>
+None</p>
+
+</section>
+    <section><title>Use Case 4: Read workbook entry</title>
+<p><strong>Primary Actor:</strong> HSSF</p>
+<p><strong>Scope:</strong> HSSF</p>
+<p>
+<strong>Level:</strong> Summary</p>
+<p><strong>Stakeholders and Interests:</strong></p>
+<ul>
+       <li>HSSF - knows how to read the
+       workbook entry</li>
+       <li>POIFS - knows how to manage the file
+       system.</li>
+</ul>
+<p><strong>Precondition:</strong></p>
+<ul>
+       <li>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).</li>
+</ul>
+<p><strong>Minimal
+Guarantee:</strong> None</p>
+<p><strong>Main Success Guarantee:</strong></p>
+<ol>
+       <li>
+       HSSF requests POIFS for the &quot;Workbook&quot; file</li>
+       <li>POIFS returns
+       an InputStream for the file.</li>
+       <li>HSSF reads
+       from the InputStream provided by POIFS</li>
+       <li>HSSF closes
+       the InputStream provided by POIFS</li>
+</ol>
+<p><strong>Extensions:</strong></p>
+<p>3a. Exceptions
+thrown by POIFS will be passed on</p>
+</section>
+    <section><title>Use Case 5: Write workbook entry</title>
+
+
+<p><strong>Primary Actor:</strong> HSSF</p>
+<p><strong>Scope:</strong> HSSF</p>
+<p>
+<strong>Level:</strong> Summary</p>
+<p><strong>Stakeholders and Interests:</strong></p>
+<ul>
+       <li>HSSF - knows how to manage the
+       write the workbook entry.</li>
+       <li>POIFS - knows how to manage the file
+       system.</li>
+</ul>
+<p><strong>Precondition:</strong> 
+</p>
+<ul>
+       <li>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).</li>
+</ul>
+<p><strong>Minimal Guarantee:</strong> None</p>
+<p><strong>Main Success Guarantee:</strong></p>
+<ol>
+       <li>HSSF
+       checks the POIFS file system directory for the &quot;Workbook&quot;
+       file (POIFS use case  8, read file system directory)</li>
+       <li>If &quot;Workbook&quot; 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 &quot;Workbook&quot; (POIFS use case 6,
+       write new file to file system)</li>
+</ol>
+<p><strong>Extensions:</strong>None</p>
+</section>
+
+</section>
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/index.xml b/src/documentation/content/xdocs/trans/es/index.xml
new file mode 100644 (file)
index 0000000..f050b3c
--- /dev/null
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../../dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title>Bienvenido a POI</title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+      <person id="GJS" name="Glen Stampoultzis" email="glens@apache.org"/>
+      <person id="AMB" name="Agustín Martín Barbero" email="-"/>
+    </authors>
+  </header>
+
+  <body>
+   <section><title>Noticias</title>
+    <section><title>Traducciones</title>
+        <p> 
+            El proyecto de traducción de la documentación de POI ha comenzado.
+           Los primeros en empezar han sido las traducciones al <link href="index.html">Español 
+            </link>, al <link href="http://www.terra-intl.com/jakarta/poi/">Japonés</link> y al
+            <link href="../de/index.html">Alemán</link>.
+           Otras serán bienvenidas. ¡Podéis participar si queréis!
+        </p>
+    </section>
+    <section><title>Concurso de Logotipo</title>
+        <p>
+            Se ha terminado el plazo de votaciones para el concurso de logotipo de POI. Gracias por vuestros votos.
+        </p>
+<!--        <p>-->
+<!--            <link href="http://vote.sparklit.com/poll.spark/640946">Pinche aquí</link> para ver los resultados actuales.-->
+<!--        </p>-->
+    </section>
+    </section>
+    <section><title>Propósito</title>
+      <p>
+      El proyecto POI consiste en APIs para manipular varios formatos de ficheros,
+      basados en el formato de Documento Compuesto OLE 2 de Microsoft, utilizando Java puro.
+      </p>
+      <p>
+      Entre los ficheros basados en el formato de Documento Compuesto OLE 2 de Microsoft se
+      incluyen la mayor parte de los ficheros de Microsoft Office tales como XLS y DOC.
+      </p>
+      <p>
+         Como regla general intentamos colaborar lo más posible con otros proyectos para proporcionar esta
+        funcionalidad. Algunos ejemplos: <link href="http://xml.apache.org/cocoon">Cocoon</link> para
+        el que pronto encontraréis generadores y serializadores para nuestros proyectos;
+        <link href="http://www.openoffice.org">Open Office.org</link> con quienes colaboramos en la
+        documentación del formato XLS; y <link href="http://jakarta.apache.org/lucene">Lucene</link> para
+        el que pronto tendremos intérpretes del formato de fichero. Cuando sea práctico, donaremos componentes
+        directamente a aquellos proyectos para dotarles de capacidad-POI.
+      </p>
+      <section><title>¿Por qué/cuándo utilizaría POI?</title>
+        <p>
+               Abordaremos esto a nivel de componente. POI se refiere al proyecto completo.
+        </p>
+        <p>
+               Así que, ¿por qué debería utilizar POIFS o HSSF?
+        </p>
+        <p>
+               Utilizarías POIFS si tuvieras un documento escrito en el Formato de Documento Compuesto OLE 2, probablemente
+               escrito utilizando MFC, que necesitaras leer en Java. Alternativamente, utilizarías POI para escribir
+               en el Formato de Documento Compuesto OLE 2 si necesitaras inter-operar con programas ejecutándose en la
+               plataforma Windows. No nos estamos jactando cuando decimos que POIFS es la adaptación más completa y correcta
+               de este formato de fichero hasta la fecha.
+        </p>
+        <p>
+               Utilizaríás HSSF si necesitaras leer o escribir un fichero XLS (Excel) utilizando Java. También se pueden
+               leer y modificar hojas de cálculo utilizando este API, aunque ahora mismo la escritura está más madura.
+        </p>
+      </section>
+
+      <section><title>¿Qué significa POI?</title>
+        <p>
+               POI significa Implementación Pobre de Ofuscación (Poor Obfuscation Implementation). ¿Por qué daríamos a
+               nuestro proyecto un nombre tan derogatorio? Bien, el Formato de Documento Compuesto OLE 2 de Microsoft es
+               algo bastante mal concebido. Esencialmente es un fichero estructurado muy a la manera del viejo sistema FAT
+               del DOS. Redmon eligió, en vez de utilizar tar, gzip, o arc, inventar su propio formato de fichero que no
+               proporciona ningún estándar de cifrado o compresión, no es fácil de unir con otros ficheros del mismo tipo, y
+               es dado a sufrir problemas de fragmentación.
+        </p>
+      <p>
+               Poi  también es una delicatessen Hawaiiana que <link href="http://www.m-w.com">el diccionario Merriam Webster's</link>
+               define como "Comida Hawaiiana de raiz de taro cocinada, machacada y amasada en una pasta que a menudo se deja fermentar."
+               Esto extrañamente parecía una descripción del formato del fichero.
+        </p>
+      <p>
+               Así que si te gustan los acrónimos, entonces POI es un acrónimo. Si los odias, entonces sólo usamos el nombre de la
+               comida para nuestro proyecto. Si deseas expresar amor u odio por los acrónimos, utiliza POI o Poi respectivamente
+               para referirte al proyecto.
+      </p>
+      </section>
+
+    </section>
+
+
+    <section><title>Componentes hasta Hoy</title>
+        <section><title>Visión General</title>
+            <p>Un concepto erróneo es que POI escribe ficheros Excel. POI es el nombre del proyecto. POI contiene varios
+            componentes, uno de los cuales, HSSF, escribe ficheros Excel. Siguen a continuación los componentes del
+            proyecto POI completo y un pequeño sumario de su propósito.</p>
+        </section>
+        <section><title>POIFS (Sistema de Ficheros POI)</title>
+             <p>POIFS es la parte más vieja y más estable del proyecto. Es nuestra adaptación del Formato de Documento Compuesto
+            OLE 2 a Java puro. Soporta funcionalidad de lectura y escritura. Todos nuestros componentes se sirven de él por
+            definición. Por favor, vea <link href="../../poifs/index.html">la página del proyecto POIFS</link> para más información.</p>
+        </section>
+        <section><title>HSSF (Formato de Hoja de Cálculo Horrible)</title>
+             <p>HSSF es nuestra adaptación del formato de fichero de Microsoft Excel 97(-2002) a Java puro. Soporta lectura y
+            escritura. Por favor, vea <link href="../../hssf/index.html">la página del proyecto HSSF</link> para más información.</p>
+        </section>
+        <section><title>HDF (Formato de Documento Horrible)</title>
+             <p>HDF es nuestra adaptación del formato de fichero de Microsoft Word 97 a Java puro. Soporta lectura y escritura.
+            Por favor, vea <link href="../../hdf/index.html">la página del proyecto HDF para más información</link>. Este
+            componente está en la fase inicial de diseño. ¡Salta dentro!</p>
+        </section>
+        <section><title>HPSF (Formato de Conjunto de Propiedades Horrible)</title>
+       <p>HPSF es nuestra adaptación del formato de conjunto de propiedades OLE 2 a java puro.
+         Los conjuntos de propiedades se utilizan mayoritariamente para almacenar las propiedades de un documento
+         (título, autor, fecha de la última modificació, etc.), pero también pueden ser utilizados para propósitos
+         específicos de una aplicación. Actualmente HPSF soporta sólo funcionalidad de lectura. Por favor, vea
+         <link href="../../hpsf/index.html">la página del proyecto HPSF</link> para más información.</p>
+        </section>
+
+     </section>
+
+    <section><title>¿Qué le ocurrió al Serializador HSSF?</title>
+       <p>El Serializador HSSF, que era parte de nuestra release 1.0 y de las últimas compilaciones en
+       <link href="http://www.sourceforge.net/projects/poi">Sourceforge</link>, ha sido donado al proyecto
+       <link href="http://xml.apache.org/cocoon/">Cocoon</link>, y está disponible a partir de la versión
+       2.0.2.</p>
+    </section>
+
+    <section><title>Contribuyendo </title>
+        <p>
+               ¿Así que te gustaría contribuir al proyecto? ¡Genial! Necesitamos gente entusiasta, que trabaje duro,
+               que tenga talento para ayudarnos con el proyecto en varias áreas. ¡La primera es petición de nuevas
+               funciones y aviso de errores! La segunda es documentación - estaremos a tu entera disposición si
+               tienes alguna crítica o te gustaría contribuir o mejorar de alguna forma la documentación. ¡Especialmente
+               no nos vendría mal algo de ayuda en documentar el formato de fichero HSSF! ¡Por último, aunque no por ello
+               menos importante, nos vendría bien algunos programadores Java que mastiquen binario, para que le echen el diente
+               a la convolución que caracteriza los formatos de fichero de Microsoft y para que nos ayude a adaptar nuevos
+               formatos a una plataforma Java superior!
+        </p>
+        <p> ¡Así que si estás motivado, listo, y tienes tiempo, únete a las listas de correo y estaremos encantados de ayudarte a
+          empezar en el proyecto!
+        </p>
+
+
+    </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
+
+
+
diff --git a/src/documentation/content/xdocs/trans/es/news.xml b/src/documentation/content/xdocs/trans/es/news.xml
new file mode 100644 (file)
index 0000000..4e04c86
--- /dev/null
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../../dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title></title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+      <person id="AMB" name="Agustín Martín Barbero" email="-"/>
+    </authors>
+  </header>
+  
+  <body>
+    <section><title>POI en los medios de comunicación</title>
+        <p>
+                Estos son artículos/etc. sobre POI publicados en la red. Si ves
+               alguna noticia sobre POI o algún sitio en el que se le menciona
+               de manera notable (no en tu propia página en la que pones la palabra
+               POI para que enlacemos contigo y en la que casualmente hay una foto
+               de tu mujer e hijos) entonces envía un parche a la lista. En general
+               dedicaremos el mismo tiempo así que no tengáis reparos en enviar
+               difamaciones coléricas así como comentarios favorables, técnicos y
+               objetivos. No mencionaremos mensajes realmente estúpidos (lo sentimos).
+        </p>                        
+    </section>
+    <section><title>Inglés</title>
+        <ul>
+                <li>   
+                      <link href="http://archive.midrange.com/web400/200204/msg00023.html">Discusión sobre el uso de POI en AS/400s</link>
+                </li>
+                <li>
+                      <link href="http://www.somelist.com/mails/23819.html">Discusión de cuando casi tuvimos POI como el filtro para KOffice si asuntos de política y licencias no lo hubieran condenado al fracaso</link> 
+                </li>
+                <li>
+                       <link href="http://www.oreillynet.com/pub/wlg/1552?page=last&amp;x-showcontent=text">Discusión Java en O'Reilly Network incluyendo discusión sobre POI</link> - O'Reilly.net
+                </li>
+                <li>   
+                       <link href="http://www.rollerweblogger.org/page/roller/20020715">Poor Obfuscation Implementation (Implementación Pobre de Ofuscación).</link> - Blog de David M. Johnson
+                </li>
+               <li>   
+                       <link href="http://www.jsurfer.org/article.php?sid=322">
+                        Descarga POI 1.5-dev-rc2 </link> - JSurfer
+                </li>
+
+                <li>
+                       <link href="http://directory.google.com/Top/Computers/Programming/Languages/Java/Class_Libraries/Data_Formats/Microsoft_Formats/"> Google dice que somos los más importantes en nuestra categoría </link>
+                </li>
+                <li>
+                       <link href="http://www.javaworld.com/javaworld/javaqa/2002-05/01-qa-0503-excel3.html">It's POI-fect</link> - Tony Sintes, Javaworld
+                </li>
+                <li>
+                       <link href="http://www.need-a-cake.com/categories/cocoonWeblog/2002/03/07.html">
+                       Nicola anuncia código de serialización POI
+                       </link> - Matthew Langham's Radio Weblog
+                </li>
+                <li>
+                        <link href="http://javalobby.org/discussionContext/showThreaded/frm/javalobby?folderId=20&amp;discussionContextId=11523">
+                        Descarga Jakarta POI 1.4583</link> - JavaLobby
+                </li>        
+                <li>
+                        <link href="http://javalobby.org/discussionContext/showThreaded/frm/javalobby?discussionContextId=11442&amp;folderId=20">
+                        El proyecto POI se mueve a Jakarta (OLE 2 CDF/Excel/Word en 
+                        java puro)</link> - JavaLobby
+                </li>
+                <li>
+                        <link
+                        href="http://www.geocities.com/marcoschmidt.geo/java-image-coding.html">
+                        Listado de bibliotecas Java para leer y escribir ficheros de imágenes y documentos
+                        </link> - Página de Marco Schmidt (normalmente no anunciaríamos
+                       la página personal de nadie, pero es un listado extensivo de información
+                       que incluye "alternativas a POI" (para aquellos que son muy ricos). ¡Pero, qué
+                       l3ch3s, creo que voy a marcar esta página para mí puesto que tiene enlaces a
+                       direcciones que en conjunto contienen o enlazan con todo el conocimiento de la humanidad!)
+                </li>
+                <li>
+                        <link href="http://radio.weblogs.com/0101350/">
+                       Experiencias de un Operador (Måns af Klercker)
+                        </link> - radio.weblogs.com
+                </li>
+                <li>
+                        <link href="http://dataconv.org/apps_office.html">
+                        DATACONV - Herramientas de Conversión de Datos: Office
+                        </link> DATACONV
+                </li>
+                <li>
+                        <link href="http://chicago.sourceforge.net/devel/">
+                        Página del Desarrollador de Chicago
+                        </link>                        
+                </li>
+                <li>
+                        <link href="http://www.onjava.com/pub/d/1157">
+                        POI/Proyecto de Serialización de POI
+                        </link> - Tío, sabes que estás en lo alto cuando le gustas a
+                        O'Reilly.  ;-)
+                </li>
+                <li>
+                        <link
+                        href="http://www.javaworld.com/netnews/index.shtml">
+                        Noticias en la Red
+                        </link> - Java World
+                </li>
+                
+        </ul>
+    </section>
+    <section><title>Nederlandstalige (Holandés)</title>
+        <ul>
+                <li>
+                        <link 
+                        href="http://www.ster.be/java/java9.html">
+                        Een Excel-werkboek maken vanuit Java - Lieven Smits 
+                        </link>
+                </li>
+        </ul>
+    </section>
+    <section><title>Deutsch (Alemán)</title>
+        <ul>
+                <li> <link 
+                      href="http://www.entwickler.com/itr/news/show.php3?id=6132&amp;nodeid=82 ">Apache POI verffentlicht</link> - entwicker.com 
+                </li>
+                <li>
+                       <link 
+                       href="http://www.jsp-develop.de/newsletter/10/">
+                       Apache Jakarta-Projekt bringt Word und Excel in die Java-Welt </link> - jsp-develop.de  (for the misguided who use JSP ;-) )
+                </li>
+                <li>
+                        <link
+                        href="http://www.entwickler.com/news/2002/02/5718/news.shtml">
+                        Neues Apache-Projekt bringt Word- und Excel nach Java
+                        </link> - entwickler.com
+                </li>
+        </ul>
+    </section>
+    <section><title>Español (Spanish)</title>
+        <ul>
+                <li>
+                        <link href="http://www.javahispano.com/noticias/todas.jsp">
+                        OLE2 desde Java nativo
+                        </link> - javaHispano
+                </li>
+                
+        </ul>
+    </section>
+    <section><title>Francais (Francés)</title>
+        <ul>
+               <li>
+                       <link href="http://linuxfr.org/section/D%E9veloppeur,0,1,8,0.html">
+                       Excel/OLE accessibles   
+                        </link> - Da Linux French Page
+                </li>
+                <li>
+                        <link href="http://www.sogid.com/javalist/f2002/traiter_word_java.html">Discusión sobre POI en francés</link>
+                </li>
+        </ul>
+    </section>
+    <section><title>Nihongo (Japonés)</title>
+        <ul>
+                <li>
+                        <link href="http://drpanda.freezope.org/Memo/docs/jakarta/poi/poi_sample">100% PureJava...</link> - Dr. Panda Portal
+                </li>
+                <li>
+                        <link
+                        href="http://www.gimlay.org/~andoh/java/javanew.html">
+                        What's new with java?
+                        </link> - gimlay.org
+                </li>
+                <li><link href="http://taka-2.com/jclass/POI/">Java?Excel?????</link> - appears to show how to use Japanese with POI</li>
+                <li><link href="http://www.tech-arts.co.jp/macosx/webobjects-jp/htdocs/3200/3218.html">Various discussion in Japanese including on POI</link></li>
+                <li><link href="http://muimi.com/j/jakarta/">Japanese resources on Jakarta projects including POI</link></li>
+                <li><link href="http://www.fk.urban.ne.jp/home/kishida/">Kishida's site</link> various information, includes a snip about POI and Japanese.</li>
+        </ul>
+    </section>
+    <section><title>No sé cómo decir Ruso en Ruso (Ruso)</title>
+        <ul>
+          <li>
+             <link href="http://www.nestor.minsk.by/kg/kg02/21/kg22108.html">
+             Probably a translation of the Javalobby announcement of 1.5-final
+             </link> Java-???????
+          </li>
+        </ul>
+    </section>
+    <section><title>No sé cómo de cir Coreano en Coreano (Coreano)</title>
+        <ul>
+           <li>
+             <link href="http://www.javabrain.co.kr/AnswerView?questionId=1189&amp;categoryId=8">Various discussion in Korean about Excel output/APIs including POI</link>
+           </li>
+        </ul>
+    </section>
+    <section><title>Ni idea</title>
+        <p>
+                ¡Si entiendes alguno de estos idiomas, envía un correo a la lista
+               diciéndonos en qué idioma está escrito y lo pondremos donde corresponda!
+        </p>
+       <ul>
+                <li> 
+                       <link 
+                       href="http://www.javacentrix.com/index.htm">
+                       Si tuviera que adivinar, diría que es Tailandés, pero a lo mejor
+                      alguno de vosotros lo sabe con seguridad.</link> - javacentrix.com
+                </li>
+        </ul>
+    </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/overview.xml b/src/documentation/content/xdocs/trans/es/overview.xml
new file mode 100644 (file)
index 0000000..2c25cd1
--- /dev/null
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../../dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title>Descripción General</title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver2@users.sourceforge.net"/>
+      <person id="AMB" name="Agustín Martín Barbero" email="-"/>
+    </authors>
+  </header>
+  
+  <body>
+    <section><title>¿Qué es?</title>
+      <p>El proyecto POI es el proyecto principal para el desarrollo de adaptaciones (ports)
+        en Java puro de los formatos de fichero basados en el Formato de Documento Compuesto OLE 2
+       de Microsoft. El Formato de Documento Compuesto OLE 2 lo utilizan los Documentos Office de
+       Microsoft, así como por los programas que utilizan conjuntos de propiedades MFC para serializar
+       sus objetos de tipo documento.
+      </p>
+    </section>
+    <section><title>Sub-Proyectos</title>
+      <p>
+        Los siguientes son adaptaciones, paquetes o componentes contenidos en el proyecto POI.
+      </p>
+      <section><title>POIFS</title>
+        <p>
+          <link href="../../poifs/index.html">POIFS</link> es el conjunto de APIs
+         (Interfaces de Aplicación) para la lectura y escritura del Formato de Documento Compuesto OLE 2
+         utilizando (únicamente) Java.
+        </p> 
+      </section>
+      
+      <section><title>HSSF</title>
+        <p>
+          <link href="../../hssf/index.html">HSSF</link> es el conjunto de APIs para la lectura y
+         escritura de hojas de cálculo de Microsoft Excel 97(-XP) utilizando (únicamente) Java.
+        </p>
+      </section>
+
+      <section><title>HDF</title>
+        <p>
+          <link href="../../hdf/index.html">HDF</link> es el conjunto de APIs para la lectura y
+         escritura de documentos Word 97(-XP) de Microsoft utilizando (únicamente) Java.
+        </p>
+      </section>
+
+      <section><title>HPSF</title>
+        <p>
+          <link href="../../hpsf/index.html">HPSF</link> es el conjunto de APIs para la lectura
+         de conjuntos de propiedades utilizando (únicamente) Java.
+        </p> 
+      </section>
+
+      <section><title>Utilidades-POI (POI-Utils)</title>
+        <p>
+          <link href="../../utils/index.html">POI-Utils</link> son artefactos de propósito
+         general surgidos en el desarrollo de POI que no han sido implementados en ningún otro sitio.
+         Siempre buscamos donarlos y mantenerlos como parte de una biblioteca general utilizada en
+         algún otro proyecto. Estas son cosas que necesitamos para completar nuestra misión pero que
+         generalmente estan fuera de ella.
+        </p>
+      </section>
+    </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Poi Project All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/patches.xml b/src/documentation/content/xdocs/trans/es/patches.xml
new file mode 100644 (file)
index 0000000..8681c66
--- /dev/null
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../../dtd/document-v11.dtd">
+
+<document>
+    <header>
+        <title>Patch Queue</title>
+        <authors>
+            <person email="greenrd@hotmail.com" name="Robin Green"/>
+            <person email="barozzi@nicolaken.com" name="Nicola Ken Barozzi"/>
+        </authors>
+    </header>
+    <body>
+        <section>
+            <title>Introduction</title>
+            <p>
+                This is an
+                <strong>informal</strong> list - in chronological order -
+                of some of the noteworthy patches that have been posted
+                to the
+                <code>developers</code> mailing list.
+                These patches are not (yet) part of the Poi project, but need reviewing for possible
+                inclusion. This system was instituted because, due to the large volume of mail and
+                the lack of time of the committers, some patches tended to get forgotten about. This
+                queue does not guarantee that any patch will be reviewed within a reasonable time frame,
+                but it does at least make them easier to find!
+            </p>
+            <p>
+                <strong>Reviewers wanted!</strong> - If you have time to review and/or test these patches,
+                we would be grateful for your time. Please post comments to the dev mailing lists.
+            </p>
+            <p>
+                Before submitting a patch, please read the page on
+                <link href="contrib.xml">Third-Party
+                    Contributions</link>. The preferred submission method for patches is:
+            </p>
+            <ul>
+                <li>Post to Poi developers list</li>
+                <li>Describe the patch, the reason for it and (if necessary) why this is important.</li>
+                <li>Generate the patch in
+                    <code>diff -u</code> format from CVS
+                </li>
+                <li>Also generate a documentation patch or new file, if this is something that should be documented.
+                </li>
+                <li>Post as an attachment rather than inline (unless it is trivially small).</li>
+            </ul>
+            <p>Following the above guidelines will facilitate your patch being reviewed
+                and applied efficiently.</p>
+        </section>
+        <section>
+            <title>Patch Queue</title>
+            <p>
+                <strong> [Under Construction] </strong> Archive links will be added later.
+                <strong>Please do not bother the patch submitters/authors</strong> without first reading the
+                relevant post(s) in the
+                <link href="mail-archives.xml">mailing list archives.</link>
+            </p>
+            <p>Vapourware will not be listed.</p>
+            <table>
+                <tr>
+                    <th>id</th>
+                    <th>Summary</th>
+                    <th>Reviewer</th>
+                    <th>Resolution</th>
+                    <th>Status</th>
+                </tr>
+            </table>
+            <p>See also additional list of patches to be added in
+                <link href="todo.xml">To Do</link>.
+            </p>
+        </section>
+    </body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/es/todo.xml b/src/documentation/content/xdocs/trans/es/todo.xml
new file mode 100644 (file)
index 0000000..e67fda4
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!DOCTYPE todo PUBLIC "-//APACHE//DTD Todo V1.1//EN" "../../dtd/todo-v11.dtd">
+
+<todo><title>Tareas Pendientes para Poi</title>
+
+    <devs>
+        <!-- in strict alphabetical order -->
+        <person id="AO"  name="Andrew C. Oliver"   email="acoliver2@users.sourceforge.net"/>
+        <person id="GS"  name="Glen Stampoultzis"  email="gstamp@iprimus.com.au"/>
+        <person id="MJ"  name="Marc Johnson"       email="mjohnson at apache dot org"/>
+        <person id="NKB" name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+        <person id="open" name="Poi Developers"    email="poi-dev@jakarta.apache.org"/>
+    </devs>
+
+    <actions priority="high">
+        <action context="code" dev="NKB">
+          Terminar HDF
+        </action>
+        <action context="code" dev="NKB">
+          Terminar Gráficas (Charts)
+        </action>
+        <action context="code" dev="open">
+          Terminar Fórmulas.
+        </action>
+    </actions>
+
+    <actions priority="medium">
+        <action context="code" dev="open">
+          Exponer funcionalidad de registros a bajo nivel en API de más alto nivel
+        </action>
+        <action context="code" dev="open">
+          Implementar más tipos de registros (para otras cosas ... no estoy
+          seguro de lo que significará esto).
+        </action>
+        <action context="code" dev="open">
+          Implementar más tipos de registros (para otras cosas ... no estoy
+          seguro de lo que significará esto).
+        </action>
+        <action context="code" dev="open">
+          Añadir más comprobaciones evidentes (para cuando los usuarios del API
+          hagan cosas que &quot;no pueden&quot; hacer)
+        </action>
+        <action context="code" dev="open">
+          Añadir soporte para gráficos embebidos y cosas similares.
+        </action>
+        <action context="code" dev="open">
+          Crear un nuevo objeto adaptador para manejar registros MulBlank, MulRk, Rk.
+        </action>
+        <action context="code" dev="open">
+          Añadir alguna manera de copiar hojas.
+        </action>
+    </actions>
+
+</todo>
+
+<!--
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+-->
diff --git a/src/documentation/content/xdocs/trans/es/who.xml b/src/documentation/content/xdocs/trans/es/who.xml
new file mode 100644 (file)
index 0000000..8bfb2ee
--- /dev/null
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>Who we are</title>
+  <authors>
+   <person name="Davanum Srinivas" email="dims@yahoo.com"/>
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+   </authors>
+ </header>
+
+ <body>
+
+ <section><title>Who we are</title>
+  <p>
+    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.
+  </p>
+
+  <p>
+    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.
+  </p>
+
+  <section><title>Advisors</title>
+    <ul>
+       <li><link href="http://jakarta.apache.org/avalon/authors/stefano.html">Stefano Mazzocchi</link> (stefano at apache dot org)
+       </li>
+    </ul>
+  </section>
+
+  <section><title>Committers</title>
+    <ul>
+      <li><link href="http://trilug.org/~acoliver">Andrew C. Oliver</link> (acoliver at apache dot org)</li>
+      <li><link href="http://www.marcj.com">Marc Johnson</link> (mjohnson at apache dot org)</li>
+      <li>Glen Stampoultzis (glens at apache.org)</li>
+      <li><link href="http://www.rainer-klute.de/">Rainer Klute</link> (klute at apache dot org)</li>
+      <li>Nicola Ken Barozzi (barozzi at nicolaken dot com)</li>
+      <li>Ryan Ackley (sackley at apache dot org)</li>
+      <li>Avik Sengupta (avik at apache dot org)</li>
+    </ul>
+  </section>
+  <section><title>Developers</title>
+    
+  </section>
+ </section>
+
+</body>
+</document>
diff --git a/src/documentation/content/xdocs/trans/guidelines.xml b/src/documentation/content/xdocs/trans/guidelines.xml
new file mode 100644 (file)
index 0000000..7af132b
--- /dev/null
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title>Welcome to POI</title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+    </authors>
+  </header>
+
+  <body>
+   <section><title>Purpose</title>
+      <p>This document hopes to serve as a general introduction and helpful set of  
+         guidelines for translating POI documentation into other languages.  We hope 
+         to capture both general information here (such as "how do I test my changes")
+         as well as language specific guidelines and translation conventions.</p>
+   </section>
+   <section><title>Introduction</title>
+     <p>
+       POI's XML based documentation is built along side the sources.  To build poi's documentation
+       you run "./build.sh docs" (UNIX/cygwin) or "build docs" (Windows) from the jakarta-poi 
+       directory.  This will put the documentation under the build/docs directory, you can navigate
+       there using your browser generally by typing in the path name or File -&gt; Open new web location
+       (or some similar wording) 
+       and browsing to the "index.html" file.   You may also want to run "./build.sh clean docs" or 
+       "build clean docs" so that all documentation previously built is erased before running the build.
+       The words "clean" and "docs" are called "targets", from here on out we will refer to them as 
+       "targets" in which case you may assume you type "./build.sh" or "build" before them in order to 
+       execute them.  
+     </p>
+     <p>
+       To generate all of teh documentation such as it would appear on the 
+       <link href="http://jakarta.apache.org/poi">POI Website</link> you can execute the "site" target (optionally
+       preceeded by the "clean" target.
+     </p>
+     <p> 
+       The source for POI's XML documentation is in src/documentation/xdocs.  To edit one of these files you can use
+       a standard text editor.  Translated documentation is under src/documentation/xdocs/trans/xx, where xx is a 
+       two to three letter country code, in general this should match the internet domain suffix of the country where
+       that language generally evolved or just be generally recognizable and unique.  The directory structure under 
+       src/documentation/trans/xx should match the structure of src/documentation (the English edition) minus the 
+       trans directory.  
+     </p>
+     <p>
+       The translated documentation should match the content and meaning of the "master" or English documentation.
+       All documentation should originate in English (this is for simplicity).  While documentation written in other
+       languages is certainly welcome, it must first be translated (perhaps by posting it to the mail list and 
+       requesting it be translated) into English and applied to the master before being applied to a translation.
+     </p>
+     <p>
+       We prefer you donate translations directly to the <link href="http://jakarta.apache.org/poi">Jakarta POI</link>
+       project rather than hosting them offsite.  We will make every effort to accomidate you as we greatly appreciate your 
+       efforts.  However, we understand that sites located within a country are the fastest and most searchable.  Therefore,
+       we recommend and welcome folks mirroring the POI site and making the translated page the home page.  You can do this 
+       either via an HTML copy with some <link href="http://httpd.apache.org/info/how-to-mirror.html">appropriate software</link>
+       or the preferred method of executing the POI build directly.  You can contact us via the mail list for both push and
+       pull options.  The same scripts which regenerate the POI website every 2 hours, should work for others.  These are not
+       yet in CVS as they are nasty dirty shell scripts ;-).  If you mirror us, tell us so we can link you.  (This will help google
+       associate you strongly with the project) 
+     </p>
+     <p>
+       Submitting translations is simple, you follow the same 
+       <link href="http://jakarta.apache.org/poi/getinvolved/index.html">instructions</link> as you would for submitting a code patch.
+       Remeber to always generate patchs in diff -u format preserving the context relative to the jakarta-poi directory.  Also remember
+       to submit any new files in a directory preserving archive format.  Never post these to the list, always use 
+       <link href="http://nagoya.apache.org/bugzilla/buglist.cgi?product=POI&amp;short_desc=%5BPATCH%5D&amp;short_desc_type=allwordssubstr">Bugzilla</link>
+       and create attachments per the above linked instructions.
+     </p>
+   </section>
+   <section><title>Credits</title>
+     <p>
+       Some people feel uncomfortable putting themselves in the &lt;authors&gt; tags at the top of the documentation as they feel that 
+       translation does not give them the right to claim authorship.  Please don't feel this way, please add yourself to the authors
+       tags.  It can be assumed that authors on the master documentation are all content creators and any additional authors listed
+       on the translation that are not on the master document are translators of the documentation.  You authored the xx language 
+       version of the document and should freely add yourself there.  Additionally, please supply a patch to the 
+       <link href="../who.html">Who We Are</link> page noting you as a developer once you've submitted a few translation patches.  You deserve 
+       credit and it helps the project to give you credit.  Remember documentation is on par with code contribution.
+     </p>
+   </section>
+   <section><title>Starting a new translation</title>
+      <p>
+        To start a translation for a language not already in existance you must create a directory under src/documentation/xdocs/trans with a 
+        two or three letter designation of the country where the language originated.  (For example es = Spanish, de = German)
+        Copy the book.xml and index.xml file from src/documentation/xdocs directory into the src/documentation/xdocs/trans/xx directory.  
+        Change all paths in the book.xml and index.xml to match the relative location of the English version.  For example if there is a 
+        link in index.html that references ./poifs/index.html, you'd change that to ../../poifs/index.html (up 2 directories from trans/xx).
+        Create a link from the book.xml file in the src/documentation/trans directory (this is necessary or the build will ignore your 
+        documentation) similar to the other languages.
+        Run the clean target followed by the docs target.  If the build is successful, congradulations!  If it fails, you probably got one of
+        the relative paths incorrect!  Go fix it (the first error message generally contains the most useful information).  If you need help
+        post to the poi-dev list and ask for it (send the output from the build).
+      </p>
+      <p>
+        So now you have a directory with a copy of the index from the master documentation...so what?  Well now translate book.xml and index.xml.
+        Try to build again.  It probably won't work.  Why?  The encoding.  At the top of every file there is an encoding="UTF-8" (in general).
+        This encoding will work for many Western European languages, but not for others, or will require some nasty escape sequencing.  This is 
+        where trial and error + guess work come in.  This <link 
+        href="http://www.ibiblio.org/xml/books/xmljava/chapters/ch03s03.html#encoding_table">Table of encodings</link> may help.  There is a 
+        catch.  Your encoding should work on a Linux system under Java 1.3.1 and of course with the build in general.  If in doubt, ask.
+        (This is a practical consideration as thats the setup of the machine currently running the nightly/site builds.)
+      </p>
+   </section>
+   <section><title>Need help?</title>
+      <p> 
+        Andy Oliver is the cofounder of the POI project and one of its most active documentation contributers.  Well, Andy used to think he 
+        spoke very clearly until he traveled abroad and discovered his speech was composed almost entirely of coloquialisms.  This can make some 
+        of the POI documentation difficult to translate, if in doubt...ask.  Its also appropriate to eliminate these from the master documentation
+        where it makes it clearer.  
+      </p>
+   </section>
+   <section><title>Translation Conventions</title>
+      <p>
+        In addition to the above practical guidelines we hope to come up with a set of translation guidelines here (or linked from here) for 
+        general use as well as language specific translation guidelines and conventions.  We assume that the POI translators will document
+        them here as they develop.
+      </p>
+   </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
diff --git a/src/documentation/content/xdocs/trans/index.xml b/src/documentation/content/xdocs/trans/index.xml
new file mode 100644 (file)
index 0000000..55dcee8
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+  <header>
+    <title>POI Documentation Translations</title>
+    <authors>
+      <person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
+    </authors>
+  </header>
+
+  <body>
+   <section><title>Introduction</title>
+      <p>
+        The POI project has always had a very international following.  In fact even today POI is 
+        more popular in Europe than in the US where the original founders reside.  Today POI is 
+        developed by people from all over the world including India, Austrailia, Japan, and Russia. 
+        We recognize and welcome our geographically and culturally diverse users and contributors and
+        wish to accomidate you as best as we can.  
+      </p>
+      <p>
+        Documentation has always been a cornerstone to POI's success.  No matter how fluent one is in 
+        a second language, it is always easier to comprehend concepts explained in one's native language,
+        therefore, we encourage volunteers to come and help us translate the documentation into other 
+        languages.  Below is a list of the translations that are currently in progress and their status.
+      </p>
+   </section>
+   <section><title>Languages</title>
+      <table>
+        <tr><td>xx</td><td>Language</td><td>Status</td><td>On/Offsite</td><td>Link</td></tr>
+        <tr><td>de</td><td>German</td><td>Just beginning (help!)</td><td>On</td>
+            <td><link href="de/index.html">link</link></td></tr>
+        <tr><td>es</td><td>Spanish</td><td>Index page, some auxiliary pages translated</td><td>On</td>
+            <td><link href="es/index.html">link</link></td></tr>
+        <tr><td>jp</td><td>Japanese</td><td>Complete XML translation, a few releases old</td><td>Off</td>
+            <td><link href="http://www.terra-intl.com/jakarta/poi/">link</link></td></tr>
+      </table>
+   </section>
+  </body>
+  <footer>
+    <legal>
+      Copyright (c) @year@ The Apache Software Foundation All rights reserved.
+      $Revision$ $Date$
+    </legal>
+  </footer>
+</document>
diff --git a/src/documentation/content/xdocs/utils/book.xml b/src/documentation/content/xdocs/utils/book.xml
new file mode 100644 (file)
index 0000000..d335bf3
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../dtd/book-cocoon-v10.dtd">
+
+<book software="Poi Project" 
+      title="Poi Utils" 
+      copyright="@year@ Poi Project">
+
+  <menu label="Navigation">
+    <menu-item label="Main" href="../index.html"/>
+  </menu>
+
+  <menu label="POI Util">
+    <menu-item label="Overview" href="index.html"/>
+    <menu-item label="Logging"  href="logging.html"/>
+  </menu>
+  
+</book>
+
+
diff --git a/src/documentation/content/xdocs/utils/index.xml b/src/documentation/content/xdocs/utils/index.xml
new file mode 100644 (file)
index 0000000..840d7b4
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>Poi Utils</title>
+  <subtitle>Overview</subtitle>
+  <authors>
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>     
+  </authors>
+ </header>
+
+ <body>
+ <section><title>Overview</title>
+
+  <p>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.
+  </p>
+  <p>
+     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!"
+  </p>
+
+  </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/utils/logging.xml b/src/documentation/content/xdocs/utils/logging.xml
new file mode 100644 (file)
index 0000000..80751e6
--- /dev/null
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>Poi Utils</title>
+  <subtitle>Overview</subtitle>
+  <authors>
+   <person name="Nicola Ken Barozzi" email="nicolaken@apache.org"/>     
+   <person name="Andrew C. Oliver" email="acoliver@apache.org"/>     
+  </authors>
+ </header>
+
+ <body>
+ <section><title>Logging</title>
+
+  <p>
+    Logging in POI is used only as a debugging mechanism, not a normal runtime
+    logging system.  Logging is ONLY for autopsie type debugging, and should 
+    NEVER be enabled on a production system.  Enabling logging will reduce 
+    performance by at least a factor of 100.  If you are not developing 
+    POI or trying to debug why POI isn't reading a file correctly, then DO 
+    NOT enable logging.  You've been warned. 
+  </p>
+
+  <p>
+    Hence, we need to be able to easily disable it entirely and make POI not dependent
+    on any logging package.
+  </p>
+  
+  <warning>
+    POI is not dependent on commons-logging for running, but not for compiling.
+  </warning>
+    
+   <section><title>Logging Overview</title>
+     <p>
+       Every class uses a <code>POILogger</code> to log, and gets it using a static method 
+       of the <code>POILogFactory</code> .
+     </p>
+     <p>
+       The <code>POILogFactory</code> uses the <code>NullLogger</code> by default;
+       it can be instructed to use any other <code>POILogger</code> implementation
+       by setting the system property <code>org.apache.poi.util.POILogger</code>.
+     </p>
+     <note> java -Dorg.apache.poi.util.POILogger=the.package.of.MyPoiLoggerImpl ProgramThatUsesPoi
+     </note>    
+     <fixme author="nicolaken"> Still needs testing.
+     </fixme>  
+   </section>
+   
+   <section><title>POILogFactory</title>
+     <p>   
+       Each class in POI can get its <code>POILogger</code> by calling a static method 
+       of the <code>POILogFactory</code> .
+     </p>
+   </section>
+   
+   <section><title>POILogger</title>
+     <p>   
+     Each class in POI can log using a <code>POILogger</code>, which is an abstract class.
+     We decided to make our own logging facade because:</p>
+     <ol>
+      <li>we need to log many values and we put many methods in this class to facilitate the 
+          programmer, without having him write string concatenations;</li>
+      <li>we need to be able to use POI without any logger package present.</li>
+     </ol>
+     <p>There are three implementations available, and you can roll out your own, just
+     extend <code>org.apache.poi.util.POILogger</code>.
+     </p>
+   <section><title>NullLogger</title>
+     <p>Discards every logging request.</p>     
+   </section>
+   <section><title>SystemOutLogger</title>
+     <p>Sends every logging request to System.out.</p>     
+   </section>
+   <section><title>CommonsLogger</title>
+     <p>Sends every logging request to the Commons Logging package. This can use JDK1.4 logging,
+     log4j, logkit, and is an actively maintained Jakarta Project.</p>     
+   </section>   
+   
+  </section>
+  </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/who.xml b/src/documentation/content/xdocs/who.xml
new file mode 100644 (file)
index 0000000..4373f7b
--- /dev/null
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
+
+<document>
+ <header>
+  <title>Who we are</title>
+  <authors>
+   <person name="Davanum Srinivas" email="dims@yahoo.com"/>
+   <person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
+   </authors>
+ </header>
+
+ <body>
+
+ <section><title>Who we are</title>
+  <p>
+    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.
+  </p>
+
+  <p>
+    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.
+  </p>
+
+  <section><title>Advisors</title>
+    <ul>
+       <li><link href="http://jakarta.apache.org/avalon/authors/stefano.html">Stefano Mazzocchi</link> (stefano at apache dot org)
+       </li>
+    </ul>
+  </section>
+
+  <section><title>Committers</title>
+    <ul>
+      <li><link href="http://trilug.org/~acoliver">Andrew C. Oliver</link> (acoliver at apache dot org)</li>
+      <li><link href="http://www.marcj.com">Marc Johnson</link> (mjohnson at apache dot org)</li>
+      <li><link href="http://members.iinet.net.au/~gstamp/glen/">Glen Stampoultzis</link> (glens at apache.org)</li>
+      <li><link href="http://www.rainer-klute.de/">Rainer Klute</link> (klute at apache dot org)</li>
+      <li>Nicola Ken Barozzi (barozzi at nicolaken dot com)</li>
+      <li>Ryan Ackley (sackley at apache dot org)</li>
+      <li>Avik Sengupta (avik at apache dot org)</li>
+      <li>Shawn Laubach (slaubach at apache dot org)</li>
+    </ul>
+  </section>
+  <section><title>Developers</title>
+    <ul>
+      <li>Jason Height (jheight at chariot dot net dot au)</li>
+      <li>Agustin Martin (agusmba at terra dot es)</li>
+    </ul>
+  </section>
+ </section>
+
+</body>
+</document>
diff --git a/src/documentation/resources/images/BlockClassDiagram.gif b/src/documentation/resources/images/BlockClassDiagram.gif
new file mode 100644 (file)
index 0000000..2433adc
Binary files /dev/null and b/src/documentation/resources/images/BlockClassDiagram.gif differ
diff --git a/src/documentation/resources/images/POIFSAddDocument.gif b/src/documentation/resources/images/POIFSAddDocument.gif
new file mode 100644 (file)
index 0000000..d9b2002
Binary files /dev/null and b/src/documentation/resources/images/POIFSAddDocument.gif differ
diff --git a/src/documentation/resources/images/POIFSClassDiagram.gif b/src/documentation/resources/images/POIFSClassDiagram.gif
new file mode 100644 (file)
index 0000000..c4ddfff
Binary files /dev/null and b/src/documentation/resources/images/POIFSClassDiagram.gif differ
diff --git a/src/documentation/resources/images/POIFSInitialization.gif b/src/documentation/resources/images/POIFSInitialization.gif
new file mode 100644 (file)
index 0000000..d23bf29
Binary files /dev/null and b/src/documentation/resources/images/POIFSInitialization.gif differ
diff --git a/src/documentation/resources/images/POIFSLifeCycle.gif b/src/documentation/resources/images/POIFSLifeCycle.gif
new file mode 100644 (file)
index 0000000..3626dcc
Binary files /dev/null and b/src/documentation/resources/images/POIFSLifeCycle.gif differ
diff --git a/src/documentation/resources/images/POIFSPropertyTablePreWrite.gif b/src/documentation/resources/images/POIFSPropertyTablePreWrite.gif
new file mode 100644 (file)
index 0000000..801c1d8
Binary files /dev/null and b/src/documentation/resources/images/POIFSPropertyTablePreWrite.gif differ
diff --git a/src/documentation/resources/images/POIFSRootPropertyPreWrite.gif b/src/documentation/resources/images/POIFSRootPropertyPreWrite.gif
new file mode 100644 (file)
index 0000000..3927bcc
Binary files /dev/null and b/src/documentation/resources/images/POIFSRootPropertyPreWrite.gif differ
diff --git a/src/documentation/resources/images/POIFSWriteArchive.gif b/src/documentation/resources/images/POIFSWriteArchive.gif
new file mode 100644 (file)
index 0000000..eac7fd7
Binary files /dev/null and b/src/documentation/resources/images/POIFSWriteArchive.gif differ
diff --git a/src/documentation/resources/images/POIFSWriteFilesystem.gif b/src/documentation/resources/images/POIFSWriteFilesystem.gif
new file mode 100644 (file)
index 0000000..d5011a0
Binary files /dev/null and b/src/documentation/resources/images/POIFSWriteFilesystem.gif differ
diff --git a/src/documentation/resources/images/PropertySet.jpg b/src/documentation/resources/images/PropertySet.jpg
new file mode 100644 (file)
index 0000000..c0d1461
Binary files /dev/null and b/src/documentation/resources/images/PropertySet.jpg differ
diff --git a/src/documentation/resources/images/PropertyTableClassDiagram.gif b/src/documentation/resources/images/PropertyTableClassDiagram.gif
new file mode 100644 (file)
index 0000000..8a72c51
Binary files /dev/null and b/src/documentation/resources/images/PropertyTableClassDiagram.gif differ
diff --git a/src/documentation/resources/images/add.jpg b/src/documentation/resources/images/add.jpg
new file mode 100644 (file)
index 0000000..a9a0766
Binary files /dev/null and b/src/documentation/resources/images/add.jpg differ
diff --git a/src/documentation/resources/images/fix.jpg b/src/documentation/resources/images/fix.jpg
new file mode 100644 (file)
index 0000000..1d6820b
Binary files /dev/null and b/src/documentation/resources/images/fix.jpg differ
diff --git a/src/documentation/resources/images/group-logo.gif b/src/documentation/resources/images/group-logo.gif
new file mode 100644 (file)
index 0000000..049cf82
Binary files /dev/null and b/src/documentation/resources/images/group-logo.gif differ
diff --git a/src/documentation/resources/images/logoAdria1.png b/src/documentation/resources/images/logoAdria1.png
new file mode 100644 (file)
index 0000000..16a6f11
Binary files /dev/null and b/src/documentation/resources/images/logoAdria1.png differ
diff --git a/src/documentation/resources/images/logoAdria2.png b/src/documentation/resources/images/logoAdria2.png
new file mode 100644 (file)
index 0000000..d1ad50b
Binary files /dev/null and b/src/documentation/resources/images/logoAdria2.png differ
diff --git a/src/documentation/resources/images/logoAdria3.png b/src/documentation/resources/images/logoAdria3.png
new file mode 100644 (file)
index 0000000..4247b97
Binary files /dev/null and b/src/documentation/resources/images/logoAdria3.png differ
diff --git a/src/documentation/resources/images/logoAndrewClements.png b/src/documentation/resources/images/logoAndrewClements.png
new file mode 100644 (file)
index 0000000..0bc88e4
Binary files /dev/null and b/src/documentation/resources/images/logoAndrewClements.png differ
diff --git a/src/documentation/resources/images/logoAndrewClements2.png b/src/documentation/resources/images/logoAndrewClements2.png
new file mode 100644 (file)
index 0000000..eaccaf0
Binary files /dev/null and b/src/documentation/resources/images/logoAndrewClements2.png differ
diff --git a/src/documentation/resources/images/logoDanielFernandez.png b/src/documentation/resources/images/logoDanielFernandez.png
new file mode 100644 (file)
index 0000000..1ed7ff9
Binary files /dev/null and b/src/documentation/resources/images/logoDanielFernandez.png differ
diff --git a/src/documentation/resources/images/logoGlenStampoutlzis.png b/src/documentation/resources/images/logoGlenStampoutlzis.png
new file mode 100644 (file)
index 0000000..f7707c7
Binary files /dev/null and b/src/documentation/resources/images/logoGlenStampoutlzis.png differ
diff --git a/src/documentation/resources/images/logoGustafsson1.png b/src/documentation/resources/images/logoGustafsson1.png
new file mode 100644 (file)
index 0000000..ff13834
Binary files /dev/null and b/src/documentation/resources/images/logoGustafsson1.png differ
diff --git a/src/documentation/resources/images/logoGustafsson2.png b/src/documentation/resources/images/logoGustafsson2.png
new file mode 100644 (file)
index 0000000..a3f5c86
Binary files /dev/null and b/src/documentation/resources/images/logoGustafsson2.png differ
diff --git a/src/documentation/resources/images/logoJanssen1.png b/src/documentation/resources/images/logoJanssen1.png
new file mode 100644 (file)
index 0000000..e02fe52
Binary files /dev/null and b/src/documentation/resources/images/logoJanssen1.png differ
diff --git a/src/documentation/resources/images/logoJanssen2.png b/src/documentation/resources/images/logoJanssen2.png
new file mode 100644 (file)
index 0000000..c7b406e
Binary files /dev/null and b/src/documentation/resources/images/logoJanssen2.png differ
diff --git a/src/documentation/resources/images/logoKarmokar1.png b/src/documentation/resources/images/logoKarmokar1.png
new file mode 100644 (file)
index 0000000..232b22e
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar1.png differ
diff --git a/src/documentation/resources/images/logoKarmokar1s.png b/src/documentation/resources/images/logoKarmokar1s.png
new file mode 100644 (file)
index 0000000..4174203
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar1s.png differ
diff --git a/src/documentation/resources/images/logoKarmokar2.png b/src/documentation/resources/images/logoKarmokar2.png
new file mode 100644 (file)
index 0000000..7168b70
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar2.png differ
diff --git a/src/documentation/resources/images/logoKarmokar2s.png b/src/documentation/resources/images/logoKarmokar2s.png
new file mode 100644 (file)
index 0000000..93977b0
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar2s.png differ
diff --git a/src/documentation/resources/images/logoKarmokar3.png b/src/documentation/resources/images/logoKarmokar3.png
new file mode 100644 (file)
index 0000000..ef8b146
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar3.png differ
diff --git a/src/documentation/resources/images/logoKarmokar3s.png b/src/documentation/resources/images/logoKarmokar3s.png
new file mode 100644 (file)
index 0000000..e9e86bd
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar3s.png differ
diff --git a/src/documentation/resources/images/logoKarmokar4.png b/src/documentation/resources/images/logoKarmokar4.png
new file mode 100644 (file)
index 0000000..90a915a
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar4.png differ
diff --git a/src/documentation/resources/images/logoKarmokar4s.png b/src/documentation/resources/images/logoKarmokar4s.png
new file mode 100644 (file)
index 0000000..33391cd
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar4s.png differ
diff --git a/src/documentation/resources/images/logoKarmokar5.png b/src/documentation/resources/images/logoKarmokar5.png
new file mode 100644 (file)
index 0000000..e2d1f3f
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar5.png differ
diff --git a/src/documentation/resources/images/logoKarmokar5s.png b/src/documentation/resources/images/logoKarmokar5s.png
new file mode 100644 (file)
index 0000000..5ea300d
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar5s.png differ
diff --git a/src/documentation/resources/images/logoKarmokar6.png b/src/documentation/resources/images/logoKarmokar6.png
new file mode 100644 (file)
index 0000000..0407c35
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar6.png differ
diff --git a/src/documentation/resources/images/logoKarmokar6s.png b/src/documentation/resources/images/logoKarmokar6s.png
new file mode 100644 (file)
index 0000000..b13fb18
Binary files /dev/null and b/src/documentation/resources/images/logoKarmokar6s.png differ
diff --git a/src/documentation/resources/images/logoLoicLefevre.png b/src/documentation/resources/images/logoLoicLefevre.png
new file mode 100644 (file)
index 0000000..520840d
Binary files /dev/null and b/src/documentation/resources/images/logoLoicLefevre.png differ
diff --git a/src/documentation/resources/images/logoLoicLefevre2.png b/src/documentation/resources/images/logoLoicLefevre2.png
new file mode 100644 (file)
index 0000000..ce8efa3
Binary files /dev/null and b/src/documentation/resources/images/logoLoicLefevre2.png differ
diff --git a/src/documentation/resources/images/logoMichaelMosmann.png b/src/documentation/resources/images/logoMichaelMosmann.png
new file mode 100644 (file)
index 0000000..08424c7
Binary files /dev/null and b/src/documentation/resources/images/logoMichaelMosmann.png differ
diff --git a/src/documentation/resources/images/logoRaPiGmbH1.png b/src/documentation/resources/images/logoRaPiGmbH1.png
new file mode 100644 (file)
index 0000000..3bef8bb
Binary files /dev/null and b/src/documentation/resources/images/logoRaPiGmbH1.png differ
diff --git a/src/documentation/resources/images/logoRaPiGmbH10.png b/src/documentation/resources/images/logoRaPiGmbH10.png
new file mode 100644 (file)
index 0000000..46fd998
Binary files /dev/null and b/src/documentation/resources/images/logoRaPiGmbH10.png differ
diff --git a/src/documentation/resources/images/logoRaPiGmbH11.png b/src/documentation/resources/images/logoRaPiGmbH11.png
new file mode 100644 (file)
index 0000000..c92d326
Binary files /dev/null and b/src/documentation/resources/images/logoRaPiGmbH11.png differ
diff --git a/src/documentation/resources/images/logoRaPiGmbH12.png b/src/documentation/resources/images/logoRaPiGmbH12.png
new file mode 100644 (file)
index 0000000..c006c7c
Binary files /dev/null and b/src/documentation/resources/images/logoRaPiGmbH12.png differ
diff --git a/src/documentation/resources/images/logoRaPiGmbH2.png b/src/documentation/resources/images/logoRaPiGmbH2.png
new file mode 100644 (file)
index 0000000..d842217
Binary files /dev/null and b/src/documentation/resources/images/logoRaPiGmbH2.png differ
diff --git a/src/documentation/resources/images/logoRaPiGmbH5.png b/src/documentation/resources/images/logoRaPiGmbH5.png
new file mode 100644 (file)
index 0000000..f96ef9e
Binary files /dev/null and b/src/documentation/resources/images/logoRaPiGmbH5.png differ
diff --git a/src/documentation/resources/images/logoRaPiGmbH6.png b/src/documentation/resources/images/logoRaPiGmbH6.png
new file mode 100644 (file)
index 0000000..53ee5e9
Binary files /dev/null and b/src/documentation/resources/images/logoRaPiGmbH6.png differ
diff --git a/src/documentation/resources/images/logoRaPiGmbH7.png b/src/documentation/resources/images/logoRaPiGmbH7.png
new file mode 100644 (file)
index 0000000..498499d
Binary files /dev/null and b/src/documentation/resources/images/logoRaPiGmbH7.png differ
diff --git a/src/documentation/resources/images/logoRaPiGmbH8.png b/src/documentation/resources/images/logoRaPiGmbH8.png
new file mode 100644 (file)
index 0000000..7df1b28
Binary files /dev/null and b/src/documentation/resources/images/logoRaPiGmbH8.png differ
diff --git a/src/documentation/resources/images/logoRaPiGmbH9.png b/src/documentation/resources/images/logoRaPiGmbH9.png
new file mode 100644 (file)
index 0000000..7df1b28
Binary files /dev/null and b/src/documentation/resources/images/logoRaPiGmbH9.png differ
diff --git a/src/documentation/resources/images/logoRandyStanard01.png b/src/documentation/resources/images/logoRandyStanard01.png
new file mode 100644 (file)
index 0000000..f236c10
Binary files /dev/null and b/src/documentation/resources/images/logoRandyStanard01.png differ
diff --git a/src/documentation/resources/images/logoRandyStanard02.png b/src/documentation/resources/images/logoRandyStanard02.png
new file mode 100644 (file)
index 0000000..d20c8ba
Binary files /dev/null and b/src/documentation/resources/images/logoRandyStanard02.png differ
diff --git a/src/documentation/resources/images/logoRandyStanard03.png b/src/documentation/resources/images/logoRandyStanard03.png
new file mode 100644 (file)
index 0000000..45850fa
Binary files /dev/null and b/src/documentation/resources/images/logoRandyStanard03.png differ
diff --git a/src/documentation/resources/images/logoRandyStanard04.png b/src/documentation/resources/images/logoRandyStanard04.png
new file mode 100644 (file)
index 0000000..da62011
Binary files /dev/null and b/src/documentation/resources/images/logoRandyStanard04.png differ
diff --git a/src/documentation/resources/images/logoRandyStanard05.png b/src/documentation/resources/images/logoRandyStanard05.png
new file mode 100644 (file)
index 0000000..0b63989
Binary files /dev/null and b/src/documentation/resources/images/logoRandyStanard05.png differ
diff --git a/src/documentation/resources/images/logoRandyStanard06.png b/src/documentation/resources/images/logoRandyStanard06.png
new file mode 100644 (file)
index 0000000..9474220
Binary files /dev/null and b/src/documentation/resources/images/logoRandyStanard06.png differ
diff --git a/src/documentation/resources/images/logoRandyStanard07.png b/src/documentation/resources/images/logoRandyStanard07.png
new file mode 100644 (file)
index 0000000..c7b6aca
Binary files /dev/null and b/src/documentation/resources/images/logoRandyStanard07.png differ
diff --git a/src/documentation/resources/images/logoRandyStanard08.png b/src/documentation/resources/images/logoRandyStanard08.png
new file mode 100644 (file)
index 0000000..83d5bf9
Binary files /dev/null and b/src/documentation/resources/images/logoRandyStanard08.png differ
diff --git a/src/documentation/resources/images/logoRussellBeattie1.png b/src/documentation/resources/images/logoRussellBeattie1.png
new file mode 100644 (file)
index 0000000..228d13c
Binary files /dev/null and b/src/documentation/resources/images/logoRussellBeattie1.png differ
diff --git a/src/documentation/resources/images/logoRussellBeattie2.png b/src/documentation/resources/images/logoRussellBeattie2.png
new file mode 100644 (file)
index 0000000..052209e
Binary files /dev/null and b/src/documentation/resources/images/logoRussellBeattie2.png differ
diff --git a/src/documentation/resources/images/logoRussellBeattie3.png b/src/documentation/resources/images/logoRussellBeattie3.png
new file mode 100644 (file)
index 0000000..9a4e98c
Binary files /dev/null and b/src/documentation/resources/images/logoRussellBeattie3.png differ
diff --git a/src/documentation/resources/images/logoRussellBeattie4.png b/src/documentation/resources/images/logoRussellBeattie4.png
new file mode 100644 (file)
index 0000000..5a6b0fb
Binary files /dev/null and b/src/documentation/resources/images/logoRussellBeattie4.png differ
diff --git a/src/documentation/resources/images/logoRussellBeattie5.png b/src/documentation/resources/images/logoRussellBeattie5.png
new file mode 100644 (file)
index 0000000..71ef63c
Binary files /dev/null and b/src/documentation/resources/images/logoRussellBeattie5.png differ
diff --git a/src/documentation/resources/images/logoWendyWise.png b/src/documentation/resources/images/logoWendyWise.png
new file mode 100644 (file)
index 0000000..43f7569
Binary files /dev/null and b/src/documentation/resources/images/logoWendyWise.png differ
diff --git a/src/documentation/resources/images/logoWendyWise2.png b/src/documentation/resources/images/logoWendyWise2.png
new file mode 100644 (file)
index 0000000..8ab6eaa
Binary files /dev/null and b/src/documentation/resources/images/logoWendyWise2.png differ
diff --git a/src/documentation/resources/images/poi-logo.png b/src/documentation/resources/images/poi-logo.png
new file mode 100644 (file)
index 0000000..73c02a5
Binary files /dev/null and b/src/documentation/resources/images/poi-logo.png differ
diff --git a/src/documentation/resources/images/project-logo.gif b/src/documentation/resources/images/project-logo.gif
new file mode 100644 (file)
index 0000000..b9c2ee1
Binary files /dev/null and b/src/documentation/resources/images/project-logo.gif differ
diff --git a/src/documentation/resources/images/remove.jpg b/src/documentation/resources/images/remove.jpg
new file mode 100644 (file)
index 0000000..e18d135
Binary files /dev/null and b/src/documentation/resources/images/remove.jpg differ
diff --git a/src/documentation/resources/images/update.jpg b/src/documentation/resources/images/update.jpg
new file mode 100644 (file)
index 0000000..586a452
Binary files /dev/null and b/src/documentation/resources/images/update.jpg differ
diff --git a/src/documentation/resources/images/usermodel.gif b/src/documentation/resources/images/usermodel.gif
new file mode 100644 (file)
index 0000000..4f4c360
Binary files /dev/null and b/src/documentation/resources/images/usermodel.gif differ
diff --git a/src/documentation/resources/images/utilClasses.gif b/src/documentation/resources/images/utilClasses.gif
new file mode 100644 (file)
index 0000000..5cb07b7
Binary files /dev/null and b/src/documentation/resources/images/utilClasses.gif differ
diff --git a/src/documentation/skinconf.xml b/src/documentation/skinconf.xml
new file mode 100644 (file)
index 0000000..4606684
--- /dev/null
@@ -0,0 +1,100 @@
+<?xml version="1.0"?>
+
+<!--
+Skin configuration file. This file contains details of your project, which will
+be used to configure the chosen Forrest skin.
+-->
+
+<!DOCTYPE skinconfig [
+
+  <!ENTITY % links.att 'name CDATA #REQUIRED'>
+  <!ENTITY % link.att 'name CDATA #REQUIRED href CDATA #REQUIRED'>
+  <!ELEMENT skinconfig (disable-search?, disable-compliance-links?, searchsite-domain?, searchsite-name?,
+  project-name, project-url, project-logo, group-name?, group-url?, group-logo?,
+  host-url?, host-logo?, year?, vendor?, trail?, credits?)*>
+  <!ELEMENT credits (credit*)>
+  <!ELEMENT credit (name, url, image?, width?, height?)>
+  <!-- id uniquely identifies the tool, and role indicates its function -->
+  <!ATTLIST credit id   CDATA #IMPLIED
+                   role CDATA #IMPLIED>
+  <!ELEMENT disable-search (#PCDATA)>
+  <!ELEMENT disable-compliance-links (#PCDATA)>
+  <!ELEMENT searchsite-domain (#PCDATA)>
+  <!ELEMENT searchsite-name (#PCDATA)>  
+  <!ELEMENT project-name (#PCDATA)>
+  <!ELEMENT project-url (#PCDATA)>
+  <!ELEMENT project-logo (#PCDATA)>
+  <!ELEMENT group-name (#PCDATA)>
+  <!ELEMENT group-url (#PCDATA)>
+  <!ELEMENT group-logo (#PCDATA)>
+  <!ELEMENT host-url (#PCDATA)>
+  <!ELEMENT host-logo (#PCDATA)>
+  <!ELEMENT year (#PCDATA)>
+  <!ELEMENT vendor (#PCDATA)>
+  <!ELEMENT trail (link1, link2, link3)>
+  <!ELEMENT link1 EMPTY>
+  <!-- Seems we can't use param entity refs until this is DTDified -->
+  <!ATTLIST link1 name CDATA #REQUIRED href CDATA #IMPLIED>
+  <!ELEMENT link2 EMPTY>
+  <!ATTLIST link2 name CDATA #REQUIRED href CDATA #IMPLIED>
+  <!ELEMENT link3 EMPTY>
+  <!ATTLIST link3 name CDATA #REQUIRED href CDATA #IMPLIED>
+  <!ELEMENT name (#PCDATA)>
+  <!ELEMENT url (#PCDATA)>
+  <!ELEMENT image (#PCDATA)>
+  <!ELEMENT width (#PCDATA)>
+  <!ELEMENT height (#PCDATA)>
+  ]>
+
+<skinconfig>
+  <!-- Do we want to disable the Google search box? -->
+  <disable-search>false</disable-search>
+  <disable-compliance-links>false</disable-compliance-links>
+  <searchsite-domain>jakarta.apache.org</searchsite-domain>
+  <searchsite-name>jakarta</searchsite-name>
+
+  <!-- mandatory project logo
+       skin: forrest-site renders it at the top -->
+  <project-name>POI</project-name>
+  <project-url>http://jakarta.apache.org/poi/</project-url>
+  <project-logo>resources/images/project-logo.gif</project-logo>
+
+  <!-- optional group logo
+       skin: forrest-site renders it at the top-left corner -->
+  <group-name>Jakarta</group-name>
+  <group-url>http://jakarta.apache.org</group-url>
+  <group-logo>resources/images/group-logo.gif</group-logo>
+
+  <!-- optional host logo (e.g. sourceforge logo)
+       skin: forrest-site renders it at the bottom-left corner -->
+  <host-url></host-url>
+  <host-logo></host-logo>
+
+  <!-- The following are used to construct a copyright statement -->
+  <year>2003</year>
+  <vendor>The Apache Software Foundation.</vendor>
+
+  <!-- Some skins use this to form a 'breadcrumb trail' of links. If you don't
+  want these, set the attributes to blank. The DTD purposefully requires them.
+  -->
+  <trail>
+    <link1 name="Apache" href="http://www.apache.org/"/>
+    <link2 name="Jakarta" href="http://jakarta.apache.org/"/>
+    <link3 name="POI" href="http://jakarta.apache.org/poi/"/>
+  </trail>
+
+  <!-- Credits are typically rendered as a set of small clickable images in the
+  page footer -->
+  <credits>
+    <credit>
+      <name>Built with Apache Forrest</name>
+      <url>http://xml.apache.org/forrest/</url>
+      <image>images/built-with-forrest-button.png</image>
+      <width>88</width>
+      <height>31</height>
+    </credit>
+    <!-- A credit with @role='pdf' will have its name and url displayed in the
+    PDF page's footer. -->
+  </credits>
+
+</skinconfig>
diff --git a/src/scratchpad/lib/.cvsignore b/src/scratchpad/lib/.cvsignore
new file mode 100644 (file)
index 0000000..d392f0e
--- /dev/null
@@ -0,0 +1 @@
+*.jar
diff --git a/src/scratchpad/lib/dummy.txt b/src/scratchpad/lib/dummy.txt
deleted file mode 100644 (file)
index ee37f45..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Dummy file so this directory is not deleted by CVS.  It's required for the build.
\ No newline at end of file
diff --git a/src/scratchpad/targets/dummy.txt b/src/scratchpad/targets/dummy.txt
deleted file mode 100644 (file)
index ee37f45..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Dummy file so this directory is not deleted by CVS.  It's required for the build.
\ No newline at end of file
diff --git a/src/scratchpad/testcases/dummy.txt b/src/scratchpad/testcases/dummy.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/targets/record-generation/xbuild.xml b/src/targets/record-generation/xbuild.xml
deleted file mode 100644 (file)
index 4d79b88..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<project default="generate-records" basedir="../../" name="Record Generation build">
-
-  <target name="generate-records"
-     description="Generates the record source code">
-
-      <java classname="org.apache.poi.dev.RecordGenerator" fork="yes">
-          <arg value="src/records/definitions"/>
-          <arg value="src/records/styles"/>
-          <arg value="src/java"/>
-          <arg value="src/testcases"/>
-     <classpath>
-       <path>
-          <pathelement path="${xlayout.build.classes.dir}"/>       
-          <pathelement path="${xlayout.build.scratchpad.classes.dir}"/>
-          <fileset dir="${xlayout.library.dir}" casesensitive="yes">
-           <patternset>
-             <include name="*/*.jar"/>
-             <include name="*/*.zip"/>
-           </patternset>
-         </fileset>  
-          <fileset dir="${xlayout.source.scratchpad.library.dir}" casesensitive="yes"> 
-           <patternset>
-             <include name="*.jar"/>
-             <include name="*.zip"/>
-           </patternset>
-         </fileset>           
-       </path> 
-     </classpath>
-      </java>
-
-  </target>
-  
-   <target name="generate-types"
-     description="Generates the record source code">
-
-      <java classname="org.apache.poi.dev.RecordGenerator" fork="yes">
-          <arg value="src/types/definitions"/>
-          <arg value="src/types/styles"/>
-          <arg value="src/scratchpad/src"/>
-          <arg value="src/scratchpad/testcases"/>
-     <classpath>
-       <pathelement path="${xlayout.build.classes.dir}"/>       
-       <path>
-          <fileset dir="${xlayout.library.dir}" casesensitive="yes"> 
-           <patternset>
-             <include name="*/*.jar"/>
-             <include name="*/*.zip"/>
-           </patternset>
-         </fileset>  
-          <fileset dir="${xlayout.source.scratchpad.library.dir}" casesensitive="yes"> 
-           <patternset>
-             <include name="*.jar"/>
-             <include name="*.zip"/>
-           </patternset>
-         </fileset>           
-       </path> 
-     </classpath>
-      </java>
-
-   </target>
-</project>   
\ No newline at end of file
diff --git a/status.xml b/status.xml
deleted file mode 100644 (file)
index 5217a7c..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0"?>
-<status>
-
-  <developers>
-    <!-- in strict alphabetical order -->
-    <person name="Andrew C. Oliver"   id="acoliver"        email="acoliver at apache dot org"/>
-    <person name="Glen Stampoultzis"  id="glens"           email="glens at apache dot org"/>
-    <person name="Marc Johnson"       id="mjohnson"        email="mjohnson at apache dot org"/>
-    <person name="Nicola Ken Barozzi" id="nicolaken"       email="nicolaken at apache dot org"/>
-    <person name="Rainer Klute"       id="rainer"          email="klute at apache dot org"/>
-    <person name="Poi Developers"     id="poi-developers"  email="poi-dev at jakarta.apache dot org"/>    
-  </developers>
-  
-  <todo>
-   <actions priority="high">
-        <action context="code" assigned-to="NKB">
-          Finish HDF
-        </action>
-        <action context="code" assigned-to="GS">
-          Finish Charts
-        </action>
-        <action context="code">
-          Finish Formulas.
-        </action>
-    </actions>
-
-    <actions priority="medium">
-        <action context="code">
-          Expose functionality in low level records in higher level API
-        </action>
-        <action context="code">
-          Implement more record types.
-        </action>
-        <action context="code">
-          Add more dummy checks (for when API user's do things they
-          &quot;can't&quot; do).  This will involve exploring the various
-          upper limits on the things Excel can handle.
-        </action>
-        <action context="code">
-              Add support for embedded graphics and other objects.
-        </action>
-        <action context="code">
-          Create new adapter object for handling MulBlank, MulRk, Rk
-          records.
-        </action>
-        <action context="code">
-          Add a way to copy sheets.
-        </action>
-    </actions>
-  </todo>
-  
-  <changes>
-    <release version="1.8-dev" date="20 Sep 2002">
-        <action dev="POI-DEVELOPERS" type="add">Custom Data Format Support</action>
-        <action dev="POI-DEVELOPERS" type="add">Enhanced Unicode Support for Russian and Japanese</action>
-        <action dev="POI-DEVELOPERS" type="add">Enhanced formula support including read-only for
-            "optimized if" statements.</action>
-        <action dev="POI-DEVELOPERS" type="add">Support for cloning objects</action>
-        <action dev="POI-DEVELOPERS" type="add">Fixes for header/footer</action>
-        <action dev="POI-DEVELOPERS" type="add">Spanish Documentation translations</action>
-        <action dev="POI-DEVELOPERS" type="add">Support for preserving VBA macros</action>
-    </release>
-    <release version="1.7-dev" date="???">
-        <action dev="nicolaken" type="update">Removed runtime dependency on commons logging.</action>
-        <action dev="POI-DEVELOPERS" type="update">Formula support</action>
-    </release>
-    <release version="1.5.1" date="16 June 2002">
-        <action dev="glens" type="update">Removed depedency on commons logging.  Now define poi.logging system property to enable logging to standard out.</action>
-        <action dev="glens" type="fix">Fixed SST string handling so that spreadsheets with rich text or extended text will be read correctly.</action>
-    </release>
-    <release version="1.5" date="06 May 2002">
-        <action dev="nicolaken" type="update">New project build.</action>
-        <action dev="nicolaken" type="update">New project documentation system based on Cocoon.</action>
-        <action dev="POI-DEVELOPERS" type="update">Package rename</action>
-        <action dev="POI-DEVELOPERS" type="fix">Various bug fixes</action>
-        <action dev="POI-DEVELOPERS" type="add">Early stages of HSF development (not ready for development)</action>
-        <action dev="POI-DEVELOPERS" type="add">Initial low level record support for charting (not complete)</action>
-    </release>
-    <release version="1.1.0" date="Release date not recorded">
-        <action dev="POI-DEVELOPERS">Created new event model</action>
-        <action dev="POI-DEVELOPERS">Optimizations made to HSSF including aggregate records for
-        values, rows, etc.</action>
-        <action dev="POI-DEVELOPERS">predictive sizing, offset based writing (instead of lots of
-        array copies)</action>
-        <action dev="POI-DEVELOPERS">minor re-factoring and bug fixes.</action>
-    </release>
-    <release version="1.0.0" date="Release date not recorded">
-        <action dev="POI-DEVELOPERS">Minor documentation updates.</action>
-    </release>
-    <release version="0.14.0" date="Release date not recorded">
-        <action dev="POI-DEVELOPERS">Added DataFormat helper class and exposed set and get format
-        on HSSFCellStyle</action>
-        <action dev="POI-DEVELOPERS">Fixed column width apis (unit wise) and various javadoc on
-        the subject</action>
-        <action dev="POI-DEVELOPERS">Fix for Dimensions record (again)... (one of these days I'll
-        write a unit test for this ;-p).</action>
-        <action dev="POI-DEVELOPERS">Some optimization on sheet creation.</action>
-    </release>
-    <release version="0.13.0" date="Release date not recorded">
-
-    </release>
-    <release version="0.12.0" date="Release date not recorded">
-        <action dev="POI-DEVELOPERS">Added MulBlank, Blank, ColInfo</action>
-        <action dev="POI-DEVELOPERS">Added log4j facility and removed all sys.out type logging</action>
-        <action dev="POI-DEVELOPERS">Added support for adding font's, styles and corresponding
-        high level api for styling cells</action>
-        <action dev="POI-DEVELOPERS">added support for changing row height, cell width and default
-        row height/cell width.</action>
-        <action dev="POI-DEVELOPERS">Added fixes for internationalization (UTF-16 should work now
-        from HSSFCell.setStringValue, etc when the encoding is set)</action>
-        <action dev="POI-DEVELOPERS">added support for adding/removing and naming sheets.</action>
-    </release>
-    <release version="0.11.0" date="Release date not recorded">
-        <action dev="POI-DEVELOPERS">Bugfix release. We were throwing an exception when reading
-        RKRecord objects.</action>
-    </release>
-    <release version="0.10.0" date="Release date not recorded">
-        <action dev="POI-DEVELOPERS">Got continuation records to work (read/write)</action>
-        <action dev="POI-DEVELOPERS">Added various pre-support for formulas</action>
-        <action dev="POI-DEVELOPERS">Massive API reorganization, repackaging.</action>
-        <action dev="POI-DEVELOPERS">BiffViewer class added for validating HSSF &amp; POI and/or
-        HSSF Output.</action>
-        <action dev="POI-DEVELOPERS">Better API support for modification.</action>
-    </release>
-    <release version="0.7 (and interim releases)" date="Release date not recorded">
-        <action dev="POI-DEVELOPERS">Added encoding flag to high and low level api to use utf-16
-        when needed (HSSFCell.setEncoding())</action>
-        <action dev="POI-DEVELOPERS">added read only support for Label records (which are
-        reinterpreted as LabelSST when written)</action>
-        <action dev="POI-DEVELOPERS">Broken continuation record implementation (oops)</action>
-        <action dev="POI-DEVELOPERS">BiffViewer class added for validating HSSF &amp; POI and/or
-        HSSF Output.</action>
-    </release>
-    <release version="0.6 (release)" date="Release date not recorded">
-        <action dev="POI-DEVELOPERS">Support for read/write and modify.</action>
-        <action dev="POI-DEVELOPERS">Read only support for MulRK records (converted to Number when
-        writing)
-        </action>
-    </release>
-  </changes>  
-  
-</status>
\ No newline at end of file
diff --git a/tools/.cvsignore b/tools/.cvsignore
deleted file mode 100755 (executable)
index 1c2f433..0000000
+++ /dev/null
@@ -1 +0,0 @@
-tmp
\ No newline at end of file
diff --git a/tools/antipede/bin/ant b/tools/antipede/bin/ant
deleted file mode 100644 (file)
index 94d5a7b..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-#! /bin/sh
-
-#   Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
-#   reserved.
-
-if [ -f "$HOME/.antrc" ] ; then 
-  . $HOME/.antrc
-fi
-
-# OS specific support.  $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-  Darwin*) darwin=true ;;
-esac
-
-if [ -z "$ANT_HOME" ] ; then
-  # try to find ANT
-  if [ -d /opt/ant ] ; then 
-    ANT_HOME=/opt/ant
-  fi
-
-  if [ -d ${HOME}/opt/ant ] ; then 
-    ANT_HOME=${HOME}/opt/ant
-  fi
-
-  ## resolve links - $0 may be a link to ant's home
-  PRG=$0
-  progname=`basename $0`
-  saveddir=`pwd`
-
-  # need this for relative symlinks
-  cd `dirname $PRG`
-  
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '.*/.*' > /dev/null; then
-       PRG="$link"
-    else
-       PRG="`dirname $PRG`/$link"
-    fi
-  done
-  
-  ANT_HOME=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  ANT_HOME=`cd "$ANT_HOME" && pwd`
-
-  cd $saveddir
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
-  [ -n "$ANT_HOME" ] &&
-    ANT_HOME=`cygpath --unix "$ANT_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-if [ -z "$JAVACMD" ] ; then 
-  if [ -n "$JAVA_HOME"  ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 
-      # IBM's JDK on AIX uses strange locations for the executables
-      JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-      JAVACMD="$JAVA_HOME/bin/java"
-    fi
-  else
-    JAVACMD=java
-  fi
-fi
-if [ ! -x "$JAVACMD" ] ; then
-  echo "Error: JAVA_HOME is not defined correctly."
-  echo "  We cannot execute $JAVACMD"
-  exit 1
-fi
-
-if [ -n "$CLASSPATH" ] ; then
-  LOCALCLASSPATH="$CLASSPATH"
-fi
-
-# add in the dependency .jar files
-DIRLIBS="${ANT_HOME}"/lib
-for i in "${DIRLIBS}"/*.jar
-do
-    # if the directory is empty, then it will return the input string
-    # this is stupid, so case for it
-    if [ "$i" != "${DIRLIBS}/*.jar" ] ; then
-      if [ -z "$LOCALCLASSPATH" ] ; then
-        LOCALCLASSPATH=$i
-      else
-        LOCALCLASSPATH="$i":"$LOCALCLASSPATH"
-      fi
-    fi
-done
-
-if [ -n "$JAVA_HOME" ] ; then
-  if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
-    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/tools.jar"
-  fi
-
-  if [ -f "$JAVA_HOME/lib/classes.zip" ] ; then
-    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/classes.zip"
-  fi
-
-  # OSX hack to make Ant work with jikes
-  if $darwin ; then
-    OSXHACK="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Classes"
-    if [ -d ${OSXHACK} ] ; then
-      for i in ${OSXHACK}/*.jar
-      do
-        JIKESPATH=$JIKESPATH:$i
-      done
-    fi
-  fi
-
-else
-  echo "Warning: JAVA_HOME environment variable is not set."
-  echo "  If build fails because sun.* classes could not be found"
-  echo "  you will need to set the JAVA_HOME environment variable"
-  echo "  to the installation directory of java."
-fi
-
-# supply JIKESPATH to Ant as jikes.class.path
-if [ -n "$JIKESPATH" ] ; then
-  if $cygwin ; then
-    JIKESPATH=`cygpath --path --windows "$JIKESPATH"`
-  fi
-  ANT_OPTS="$ANT_OPTS -Djikes.class.path=$JIKESPATH"
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
-  ANT_HOME=`cygpath --path --windows "$ANT_HOME"`
-  JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
-  CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-  LOCALCLASSPATH=`cygpath --path --windows "$LOCALCLASSPATH"`
-fi
-
-"$JAVACMD" -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" $ANT_OPTS org.apache.tools.ant.Main $ANT_ARGS "$@"
diff --git a/tools/antipede/bin/ant.bat b/tools/antipede/bin/ant.bat
deleted file mode 100644 (file)
index 8c261ad..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-@echo off
-
-REM   Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
-REM   reserved.
-
-if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat"
-
-if not "%OS%"=="Windows_NT" goto win9xStart
-:winNTStart
-@setlocal
-
-rem %~dp0 is name of current script under NT
-set DEFAULT_ANT_HOME=%~dp0
-
-rem : operator works similar to make : operator
-set DEFAULT_ANT_HOME=%DEFAULT_ANT_HOME%\..
-
-if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME%
-set DEFAULT_ANT_HOME=
-
-rem Need to check if we are using the 4NT shell...
-if "%@eval[2+2]" == "4" goto setup4NT
-
-rem On NT/2K grab all arguments at once
-set ANT_CMD_LINE_ARGS=%*
-goto doneStart
-
-:setup4NT
-set ANT_CMD_LINE_ARGS=%$
-goto doneStart
-
-:win9xStart
-rem Slurp the command line arguments.  This loop allows for an unlimited number of 
-rem agruments (up to the command line limit, anyway).
-
-set ANT_CMD_LINE_ARGS=
-
-:setupArgs
-if %1a==a goto doneStart
-set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
-shift
-goto setupArgs
-
-:doneStart
-rem This label provides a place for the argument list loop to break out 
-rem and for NT handling to skip to.
-
-rem find ANT_HOME
-if not "%ANT_HOME%"=="" goto checkJava
-
-rem check for ant in Program Files on system drive
-if not exist "%SystemDrive%\Program Files\ant" goto checkSystemDrive
-set ANT_HOME=%SystemDrive%\Program Files\ant
-goto checkJava
-
-:checkSystemDrive
-rem check for ant in root directory of system drive
-if not exist %SystemDrive%\ant\nul goto checkCDrive
-set ANT_HOME=%SystemDrive%\ant
-goto checkJava
-
-:checkCDrive
-rem check for ant in C:\ant for Win9X users
-if not exist C:\ant\nul goto noAntHome
-set ANT_HOME=C:\ant
-goto checkJava
-
-:noAntHome
-echo ANT_HOME is not set and ant could not be located. Please set ANT_HOME.
-goto end
-
-:checkJava
-set _JAVACMD=%JAVACMD%
-set LOCALCLASSPATH=%CLASSPATH%
-for %%i in ("%ANT_HOME%\lib\*.jar") do call "%ANT_HOME%\bin\lcp.bat" %%i
-
-if "%JAVA_HOME%" == "" goto noJavaHome
-if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java
-if not exist "%_JAVACMD%.exe" echo Error: "%_JAVACMD%.exe" not found - check JAVA_HOME && goto end
-if exist "%JAVA_HOME%\lib\tools.jar" call "%ANT_HOME%\bin\lcp.bat" %JAVA_HOME%\lib\tools.jar
-if exist "%JAVA_HOME%\lib\classes.zip" call "%ANT_HOME%\bin\lcp.bat" %JAVA_HOME%\lib\classes.zip
-goto checkJikes
-
-:noJavaHome
-if "%_JAVACMD%" == "" set _JAVACMD=java
-echo.
-echo Warning: JAVA_HOME environment variable is not set.
-echo   If build fails because sun.* classes could not be found
-echo   you will need to set the JAVA_HOME environment variable
-echo   to the installation directory of java.
-echo.
-
-:checkJikes
-if not "%JIKESPATH%" == "" goto runAntWithJikes
-
-:runAnt
-"%_JAVACMD%" -classpath "%LOCALCLASSPATH%" -Dant.home="%ANT_HOME%" %ANT_OPTS% org.apache.tools.ant.Main %ANT_ARGS% %ANT_CMD_LINE_ARGS%
-goto end
-
-:runAntWithJikes
-"%_JAVACMD%" -classpath "%LOCALCLASSPATH%" -Dant.home="%ANT_HOME%" -Djikes.class.path="%JIKESPATH%" %ANT_OPTS% org.apache.tools.ant.Main %ANT_ARGS% %ANT_CMD_LINE_ARGS%
-
-:end
-set LOCALCLASSPATH=
-set _JAVACMD=
-set ANT_CMD_LINE_ARGS=
-
-if not "%OS%"=="Windows_NT" goto mainEnd
-:winNTend
-@endlocal
-
-:mainEnd
-if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"
-
diff --git a/tools/antipede/bin/antRun b/tools/antipede/bin/antRun
deleted file mode 100644 (file)
index cf9272e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#! /bin/sh
-
-#   Copyright (c) 2001 The Apache Software Foundation.  All rights
-#   reserved.
-
-# Args: DIR command
-cd "$1"
-CMD="$2"
-shift
-shift
-
-exec $CMD "$@"
diff --git a/tools/antipede/bin/antRun.bat b/tools/antipede/bin/antRun.bat
deleted file mode 100644 (file)
index 6ecbe38..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-@echo off
-
-REM   Copyright (c) 2001 The Apache Software Foundation.  All rights
-REM   reserved.
-
-rem Change drive and directory to %1 (Win9X only for NT/2K use "cd /d")
-cd %1
-%1\
-set ANT_RUN_CMD=%2
-shift
-shift
-
-set PARAMS=
-:loop
-if ""%1 == "" goto runCommand
-set PARAMS=%PARAMS% %1
-shift
-goto loop
-
-:runCommand
-rem echo %ANT_RUN_CMD% %PARAMS%
-%ANT_RUN_CMD% %PARAMS%
-
diff --git a/tools/antipede/bin/antRun.pl b/tools/antipede/bin/antRun.pl
deleted file mode 100644 (file)
index 649d9e5..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/perl
-#######################################################################
-#
-# antRun.pl
-#
-# wrapper script for invoking commands on a platform with Perl installed
-# this is akin to antRun.bat, and antRun the SH script 
-#
-# created:         2001-10-18
-# last modified:   2001-11-13
-# author:          Jeff Tulley jtulley@novell.com 
-#######################################################################
-#be fussy about variables
-use strict;
-
-#turn warnings on during dev; generates a few spurious uninitialised var access warnings
-#use warnings;
-
-#and set $debug to 1 to turn on trace info (currently unused)
-my $debug=1;
-
-#######################################################################
-# change drive and directory to "%1"
-my $ANT_RUN_CMD = @ARGV[0];
-
-# assign current run command to "%2"
-chdir (@ARGV[0]) || die "Can't cd to $ARGV[0]: $!\n";
-if ($^O eq "NetWare") {
-    # There is a bug in Perl 5 on NetWare, where chdir does not
-    # do anything.  On NetWare, the following path-prefixed form should 
-    # always work. (afaict)
-    $ANT_RUN_CMD .= "/".@ARGV[1];
-}
-else {
-    $ANT_RUN_CMD = @ARGV[1];
-}
-
-# dispose of the first two arguments, leaving only the command's args.
-shift;
-shift;
-
-# run the command
-my $returnValue = system $ANT_RUN_CMD, @ARGV;
-if ($returnValue eq 0) {
-    exit 0;
-}
-else {
-    # only 0 and 1 are widely recognized as exit values
-    # so change the exit value to 1
-    exit 1;
-}
diff --git a/tools/antipede/bin/complete-ant-cmd.pl b/tools/antipede/bin/complete-ant-cmd.pl
deleted file mode 100644 (file)
index 618056b..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/perl
-#
-#   Copyright (c) 2001 The Apache Software Foundation.  All rights
-#   reserved.
-#
-# A script to allow Bash or Z-Shell to complete an Ant command-line.  
-#
-# To install for Bash 2.0 or better, add the following to ~/.bashrc:
-# 
-#     $ complete -C complete-ant-cmd ant build.sh
-#
-# To install for Z-Shell 2.5 or better, add the following to ~/.zshrc:
-#
-#     function ant_complete () {
-#         local args_line args
-#         read -l args_line
-#         set -A args $args_line
-#         set -A reply $(COMP_LINE=$args_line complete-ant-cmd ${args[1]} $1)
-#     }
-#     compctl -K ant_complete ant build.sh
-#     
-# @author Mike Williams <mikew@cortexebusiness.com.au>
-
-my $cmdLine = $ENV{'COMP_LINE'};
-my $antCmd = $ARGV[0];
-my $word = $ARGV[1];
-
-my @completions;
-if ($word =~ /^-/) {
-    list( restrict( $word, getArguments() ));
-} elsif ($cmdLine =~ /-(f|buildfile)\s+\S*$/) {
-    list( getBuildFiles($word) );
-} else {
-    list( restrict( $word, getTargets() ));
-}
-
-exit(0);
-
-sub list {
-    for (@_) {
-        print "$_\n";
-    }
-}
-
-sub restrict {
-    my ($word, @completions) = @_;
-    grep( /^\Q$word\E/, @completions );
-}
-
-sub getArguments {
-    qw(-buildfile -debug -emacs -f -find -help -listener -logfile 
-       -logger -projecthelp -quiet -verbose -version); 
-}
-
-
-sub getBuildFiles {
-    my ($word) = @_;
-    grep( /\.xml$/, glob( "$word*" ));
-}
-
-sub getTargets {
-
-    # Look for build-file
-    my $buildFile = 'build.xml';
-    if ($cmdLine =~ /-(f|buildfile)\s+(\S+)/) {
-        $buildFile = $2;
-    }
-    return () unless (-f $buildFile);
-
-    # Run "ant -projecthelp" to list targets.  Keep a cache of results in a
-    # cache-file.
-    my $cacheFile = $buildFile;
-    $cacheFile =~ s|(.*/)?(.*)|${1}.ant-targets-${2}|;
-    if ((!-e $cacheFile) || (-M $buildFile) < (-M $cacheFile)) {
-        open( CACHE, '>'.$cacheFile ) || die "can\'t write $cacheFile: $!\n";
-        open( HELP, "$antCmd -projecthelp -f '$buildFile'|" ) || return(); 
-        my %targets;
-        while( <HELP> ) {
-            if (/^\s+(\S+)/) {
-                $targets{$1}++;
-            }
-        }
-        my @targets = sort keys %targets;
-        for (@targets) { print CACHE "$_\n"; }
-        return @targets;
-    }
-    
-    # Read the target-cache
-    open( CACHE, $cacheFile ) || die "can\'t read $cacheFile: $!\n";
-    my @targets;
-    while (<CACHE>) {
-        chop;
-        s/\r$//;  # for Cygwin
-        push( @targets, $_ );
-    }
-    close( CACHE );
-    @targets;
-
-}
-
-
-
diff --git a/tools/antipede/bin/lcp.bat b/tools/antipede/bin/lcp.bat
deleted file mode 100644 (file)
index 982b117..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-REM   Copyright (c) 2001 The Apache Software Foundation.  All rights
-REM   reserved.
-
-set _CLASSPATHCOMPONENT=%1
-:argCheck
-if %2a==a goto gotAllArgs
-shift
-set _CLASSPATHCOMPONENT=%_CLASSPATHCOMPONENT% %1
-goto argCheck
-:gotAllArgs
-set LOCALCLASSPATH=%_CLASSPATHCOMPONENT%;%LOCALCLASSPATH%
-
diff --git a/tools/antipede/bin/runant.pl b/tools/antipede/bin/runant.pl
deleted file mode 100644 (file)
index f4e5067..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/perl
-#
-#   Copyright (c) 2001 The Apache Software Foundation.  All rights
-#   reserved.
-#
-#######################################################################
-#
-# runant.pl
-#
-# wrapper script for invoking ant in a platform with Perl installed
-# this may include cgi-bin invocation, which is considered somewhat daft.
-# (slo: that should be a separate file which can be derived from this
-# and returns the XML formatted output)
-#
-# the code is not totally portable due to classpath and directory splitting
-# issues. oops. (NB, use File::Spec::Functions  will help and the code is
-# structured for the catfile() call, but because of perl version funnies
-# the code is not included. 
-#
-# created:         2000-8-24
-# last modified:   2000-8-24
-# author:          Steve Loughran steve_l@sourceforge.net
-#######################################################################
-#
-# Assumptions:
-#
-# - the "java" executable/script is on the command path
-# - ANT_HOME has been set
-# - target platform uses ":" as classpath separator or perl indicates it is dos/win32
-# - target platform uses "/" as directory separator.
-
-#be fussy about variables
-use strict;
-
-#platform specifics (disabled)
-#use File::Spec::Functions;
-
-#turn warnings on during dev; generates a few spurious uninitialised var access warnings
-#use warnings;
-
-#and set $debug to 1 to turn on trace info
-my $debug=0;
-
-#######################################################################
-#
-# check to make sure environment is setup
-#
-
-my $HOME = $ENV{ANT_HOME};
-if ($HOME eq "")
-        {
-    die "\n\nANT_HOME *MUST* be set!\n\n";
-        }
-
-my $JAVACMD = $ENV{JAVACMD};
-$JAVACMD = "java" if $JAVACMD eq "";
-
-#ISSUE: what java wants to split up classpath varies from platform to platform 
-#and perl is not too hot at hinting which box it is on.
-#here I assume ":" 'cept on win32 and dos. Add extra tests here as needed.
-my $s=":";
-if(($^O eq "MSWin32") || ($^O eq "dos") || ($^O eq "cygwin"))
-        {
-        $s=";";
-        }
-
-#build up standard classpath
-my $localpath=$ENV{CLASSPATH};
-if ($localpath eq "")
-        {
-        print "warning: no initial classpath\n" if ($debug);
-        $localpath="";
-        }
-
-#add jar files. I am sure there is a perl one liner to do this.
-my $jarpattern="$HOME/lib/*.jar";
-my @jarfiles =glob($jarpattern);
-print "jarfiles=@jarfiles\n" if ($debug);
-my $jar;
-foreach $jar (@jarfiles )
-        {
-        $localpath.="$s$jar";
-        }
-
-#if Java home is defined, look for tools.jar & classes.zip and add to classpath
-my $JAVA_HOME = $ENV{JAVA_HOME};
-if ($JAVA_HOME ne "")
-        {
-        my $tools="$JAVA_HOME/lib/tools.jar";
-        if (-e "$tools")
-                {
-                $localpath .= "$s$tools";
-                }
-        my $classes="$JAVA_HOME/lib/classes.zip";
-        if (-e $classes)
-                {
-                $localpath .= "$s$classes";
-                }
-        }
-else
-        {
-    print "\n\nWarning: JAVA_HOME environment variable is not set.\n".
-                "If the build fails because sun.* classes could not be found\n".
-                "you will need to set the JAVA_HOME environment variable\n".
-                "to the installation directory of java\n";
-        }
-
-#set JVM options and Ant arguments, if any
-my @ANT_OPTS=split(" ", $ENV{ANT_OPTS});
-my @ANT_ARGS=split(" ", $ENV{ANT_ARGS});
-
-#jikes
-if($ENV{JIKESPATH} ne "")
-        {
-        push @ANT_OPTS, "-Djikes.class.path=$ENV{JIKESPATH}";
-        }
-
-#construct arguments to java
-my @ARGS;
-push @ARGS, "-classpath", "$localpath", "-Dant.home=$HOME";
-push @ARGS, @ANT_OPTS;
-push @ARGS, "org.apache.tools.ant.Main", @ANT_ARGS;
-push @ARGS, @ARGV;
-
-print "\n $JAVACMD @ARGS\n\n" if ($debug);
-
-my $returnValue = system $JAVACMD, @ARGS;
-if ($returnValue eq 0)
-        {
-        exit 0;
-        }
-else
-        {
-        # only 0 and 1 are widely recognized as exit values
-        # so change the exit value to 1
-        exit 1;
-        }
diff --git a/tools/antipede/bin/runant.py b/tools/antipede/bin/runant.py
deleted file mode 100644 (file)
index 45150fd..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/python
-"""
-
- runant.py
-
-       This script is a translation of the runant.pl written by Steve Loughran.
-       It runs ant with/out arguments, it should be quite portable (thanks to
-       the python os library)
-       This script has been tested with Python2.0/Win2K
-
-        Copyright (c) 2001 The Apache Software Foundation.  All rights
-        reserved.
-
- created:         2001-04-11
- author:          Pierre Dittgen pierre.dittgen@criltelecom.com
-
- Assumptions:
-
- - the "java" executable/script is on the command path
- - ANT_HOME has been set
-"""
-import os, os.path, string, sys
-
-# Change it to 1 to get extra debug information
-debug = 0
-
-#######################################################################
-#
-# check to make sure environment is setup
-#
-if not os.environ.has_key('ANT_HOME'):
-       print '\n\nANT_HOME *MUST* be set!\n\n'
-       sys.exit(1)
-else:
-       ANT_HOME = os.environ['ANT_HOME']
-
-if not os.environ.has_key('JAVACMD'):
-       JAVACMD = 'java'
-else:
-       JAVACMD = os.environ['JAVACMD']
-
-# Sets the separator char for CLASSPATH
-SEPARATOR = ':'
-if os.name == 'dos' or os.name == 'nt':
-       SEPARATOR = ';'
-
-# Build up standard classpath
-localpath = ''
-if os.environ.has_key('CLASSPATH'):
-       localpath = os.environ['CLASSPATH']
-else:
-       if debug:
-               print 'Warning: no initial classpath\n'
-
-# Add jar files
-LIBDIR = os.path.join(ANT_HOME, 'lib')
-jarfiles = []
-for file in os.listdir(LIBDIR):
-       if file[-4:] == '.jar':
-               jarfiles.append(os.path.join(LIBDIR,file))
-if debug:
-       print 'Jar files:'
-       for jar in jarfiles:
-               print jar
-localpath = localpath + SEPARATOR + string.join(jarfiles, SEPARATOR)
-
-# If JAVA_HOME is defined, look for tools.jar & classes.zip
-# and add to classpath
-if os.environ.has_key('JAVA_HOME') and os.environ['JAVA_HOME'] != '':
-       JAVA_HOME = os.environ['JAVA_HOME']
-       TOOLS = os.path.join(JAVA_HOME, os.path.join('lib', 'tools.jar'))
-       if os.path.exists(TOOLS):
-               localpath = localpath + SEPARATOR + TOOLS
-       CLASSES = os.path.join(JAVA_HOME, os.path.join('lib', 'classes.zip'))
-       if os.path.exists(CLASSES):
-               localpath = localpath + SEPARATOR + CLASSES
-else:
-       print '\n\nWarning: JAVA_HOME environment variable is not set.\n', \
-               'If the build fails because sun.* classes could not be found\n', \
-               'you will need to set the JAVA_HOME environment variable\n', \
-               'to the installation directory of java\n'
-
-# Jikes
-ANT_OPTS = []
-if os.environ.has_key('ANT_OPTS'):
-       ANT_OPTS = string.split(os.environ['ANT_OPTS'])
-if os.environ.has_key('JIKESPATH'):
-       ANT_OPTS.append('-Djikes.class.path=' + os.environ['JIKESPATH'])
-
-# Builds the commandline
-cmdline = '%s -classpath %s -Dant.home=%s %s org.apache.tools.ant.Main %s' \
-        % (JAVACMD, localpath, ANT_HOME, string.join(ANT_OPTS,' '), \
-               string.join(sys.argv[1:], ' '))
-
-if debug:
-       print '\n%s\n\n' % (cmdline)
-
-# Run the biniou!
-os.system(cmdline)
diff --git a/tools/antipede/build.dtd b/tools/antipede/build.dtd
deleted file mode 100644 (file)
index 02e8903..0000000
+++ /dev/null
@@ -1,3179 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!ENTITY import-antipede  SYSTEM "./tools/antipede/build.xtarget"> 
-
-<!ENTITY % boolean "(true|false|on|off|yes|no)">
-
-<!ENTITY % tasks "fail | tar | centipede-xml-property | uptodate | jpcoverage | dependset | vsscheckin | java | echo | execon | native2ascii | changelog | jjtree | chmod | manifest | javadoc2 | deltree | jlink | cvs | ccmcreatetask | tstamp | unjar | pathconvert | translate | patch | sound | serverdeploy | cccheckout | mail | buildnumber | gzip | loadfile | jpcovreport | echoproperties | mimemail | copy | filter | centipede-class-available | jar | waitfor | centipede-user-input | antipede-if | unzip | rename | mmetrics | propertyfile | antipede-propertycopy | checksum | copyfile | splash | ccmcheckintask | gunzip | bunzip2 | antcall | antipede-foreach | taskdef | jspc | soscheckout | mkdir | sql | replace | ear | ant | vsshistory | vsscp | style | vssget | genkey | sequential | fixcrlf | zip | replaceregexp | condition | pvcs | antstructure | javah | javac | test | ccmreconfigure | xmlvalidate | cab | typedef | mparse | ccuncheckout | jpcovmerge | ejbjar | available | rpm | vsslabel | soscheckin | cvspass | wljspc | move | junitreport | dirname | vsscreate | javacc | csc | signjar | cccheckin | property | iplanet-ejbc | unwar | ilasm | touch | ccmcheckin | blgenclient | get | vsscheckout | antipede-switch | checkstyle | sosget | javadoc | record | untar | delete | antipede-jjar | basename | copydir | loadproperties | war | ccupdate | concat | depend | ccmcheckout | parallel | renameext | vssadd | antipede-trycatch | exec | apply | junit2 | input | soslabel | bzip2 | jdepend2 | rmic | sleep">
-<!ENTITY % types "mapper | patternset | filelist | xmlcatalog | fileset | regexp | dirset | filterset | classfileset | description | substitution | path">
-
-<!ELEMENT project (target | property | taskdef | %types;)*>
-<!ATTLIST project
-          name    CDATA #IMPLIED
-          default CDATA #REQUIRED
-          basedir CDATA #IMPLIED>
-
-<!ELEMENT target (%tasks; | %types;)*>
-
-<!ATTLIST target
-          id          ID    #IMPLIED
-          name        CDATA #REQUIRED
-          if          CDATA #IMPLIED
-          unless      CDATA #IMPLIED
-          depends     CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT mapper (classpath)*>
-<!ATTLIST mapper
-          id ID #IMPLIED
-          classpath CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          type (identity | flatten | glob | merge | regexp | package) #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          classname CDATA #IMPLIED
-          from CDATA #IMPLIED
-          to CDATA #IMPLIED>
-
-<!ELEMENT classpath (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST classpath
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT fileset (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST fileset
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT include EMPTY>
-<!ATTLIST include
-          id ID #IMPLIED
-          name CDATA #IMPLIED
-          unless CDATA #IMPLIED
-          if CDATA #IMPLIED>
-
-<!ELEMENT patternset (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST patternset
-          id ID #IMPLIED
-          includes CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED>
-
-<!ELEMENT exclude EMPTY>
-<!ATTLIST exclude
-          id ID #IMPLIED
-          name CDATA #IMPLIED
-          unless CDATA #IMPLIED
-          if CDATA #IMPLIED>
-
-<!ELEMENT excludesfile EMPTY>
-<!ATTLIST excludesfile
-          id ID #IMPLIED
-          name CDATA #IMPLIED
-          unless CDATA #IMPLIED
-          if CDATA #IMPLIED>
-
-<!ELEMENT includesfile EMPTY>
-<!ATTLIST includesfile
-          id ID #IMPLIED
-          name CDATA #IMPLIED
-          unless CDATA #IMPLIED
-          if CDATA #IMPLIED>
-
-<!ELEMENT dirset (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST dirset
-          id ID #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          dir CDATA #IMPLIED
-          includes CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED>
-
-<!ELEMENT filelist EMPTY>
-<!ATTLIST filelist
-          id ID #IMPLIED
-          dir CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          files CDATA #IMPLIED>
-
-<!ELEMENT pathelement EMPTY>
-<!ATTLIST pathelement
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT path (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST path
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT xmlcatalog (entity | dtd)*>
-<!ATTLIST xmlcatalog
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT entity EMPTY>
-<!ATTLIST entity
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          publicid CDATA #IMPLIED>
-
-<!ELEMENT dtd EMPTY>
-<!ATTLIST dtd
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          publicid CDATA #IMPLIED>
-
-<!ELEMENT regexp EMPTY>
-<!ATTLIST regexp
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          pattern CDATA #IMPLIED>
-
-<!ELEMENT filterset (filterset | filter | filtersfile)*>
-<!ATTLIST filterset
-          id ID #IMPLIED
-          begintoken CDATA #IMPLIED
-          endtoken CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          filtersfile CDATA #IMPLIED>
-
-<!ELEMENT filter EMPTY>
-<!ATTLIST filter
-          id ID #IMPLIED
-          token CDATA #IMPLIED
-          value CDATA #IMPLIED>
-
-<!ELEMENT filtersfile EMPTY>
-<!ATTLIST filtersfile
-          id ID #IMPLIED
-          file CDATA #IMPLIED>
-
-<!ELEMENT classfileset (include | root | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST classfileset
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          rootclass CDATA #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT root EMPTY>
-<!ATTLIST root
-          id ID #IMPLIED
-          classname CDATA #IMPLIED>
-
-<!ELEMENT description (#PCDATA)>
-<!ATTLIST description
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT substitution EMPTY>
-<!ATTLIST substitution
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          expression CDATA #IMPLIED>
-
-<!ELEMENT fail (#PCDATA)>
-<!ATTLIST fail
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          message CDATA #IMPLIED
-          unless CDATA #IMPLIED
-          if CDATA #IMPLIED>
-
-<!ELEMENT tar (include | patternset | exclude | excludesfile | tarfileset | includesfile)*>
-<!ATTLIST tar
-          id ID #IMPLIED
-          tarfile CDATA #IMPLIED
-          destfile CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          basedir CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          longfile (warn | fail | truncate | gnu | omit) #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT tarfileset (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST tarfileset
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          username CDATA #IMPLIED
-          mode CDATA #IMPLIED
-          prefix CDATA #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          preserveleadingslashes %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          group CDATA #IMPLIED
-          fullpath CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT centipede-xml-property EMPTY>
-<!ATTLIST centipede-xml-property
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          keeproot %boolean; #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED
-          prefix CDATA #IMPLIED>
-
-<!ELEMENT uptodate (include | srcfiles | patternset | exclude | excludesfile | mapper | includesfile)*>
-<!ATTLIST uptodate
-          id ID #IMPLIED
-          srcfile CDATA #IMPLIED
-          targetfile CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          value CDATA #IMPLIED
-          description CDATA #IMPLIED
-          property CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT srcfiles (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST srcfiles
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT jpcoverage (arg | socket | fileset | jvmarg | classpath | triggers | filters)*>
-<!ATTLIST jpcoverage
-          id ID #IMPLIED
-          applet %boolean; #IMPLIED
-          recordfromstart (coverage | none | all) #IMPLIED
-          vm (java2 | jdk118 | jdk117) #IMPLIED
-          classname CDATA #IMPLIED
-          workingdir CDATA #IMPLIED
-          inputfile CDATA #IMPLIED
-          snapshotdir CDATA #IMPLIED
-          seedname CDATA #IMPLIED
-          javaexe CDATA #IMPLIED
-          home CDATA #IMPLIED
-          exitprompt CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          warnlevel CDATA #IMPLIED
-          finalsnapshot CDATA #IMPLIED
-          description CDATA #IMPLIED
-          tracknatives %boolean; #IMPLIED>
-
-<!ELEMENT arg EMPTY>
-<!ATTLIST arg
-          id ID #IMPLIED
-          line CDATA #IMPLIED
-          file CDATA #IMPLIED
-          value CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT socket EMPTY>
-<!ATTLIST socket
-          id ID #IMPLIED
-          port CDATA #IMPLIED
-          host CDATA #IMPLIED>
-
-<!ELEMENT jvmarg EMPTY>
-<!ATTLIST jvmarg
-          id ID #IMPLIED
-          line CDATA #IMPLIED
-          file CDATA #IMPLIED
-          value CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT triggers (method)*>
-<!ATTLIST triggers
-          id ID #IMPLIED>
-
-<!ELEMENT method EMPTY>
-<!ATTLIST method
-          id ID #IMPLIED
-          name CDATA #IMPLIED
-          event CDATA #IMPLIED
-          action CDATA #IMPLIED
-          param CDATA #IMPLIED>
-
-<!ELEMENT filters (include | exclude)*>
-<!ATTLIST filters
-          id ID #IMPLIED
-          defaultexclude %boolean; #IMPLIED>
-
-<!ELEMENT dependset (targetfileset | include | srcfilelist | exclude | patternset | srcfileset | targetfilelist | includesfile | excludesfile)*>
-<!ATTLIST dependset
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          includes CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED>
-
-<!ELEMENT targetfileset (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST targetfileset
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT srcfilelist EMPTY>
-<!ATTLIST srcfilelist
-          id ID #IMPLIED
-          dir CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          files CDATA #IMPLIED>
-
-<!ELEMENT srcfileset (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST srcfileset
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT targetfilelist EMPTY>
-<!ATTLIST targetfilelist
-          id ID #IMPLIED
-          dir CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          files CDATA #IMPLIED>
-
-<!ELEMENT vsscheckin EMPTY>
-<!ATTLIST vsscheckin
-          id ID #IMPLIED
-          ssdir CDATA #IMPLIED
-          recursive %boolean; #IMPLIED
-          autoresponse CDATA #IMPLIED
-          vsspath CDATA #IMPLIED
-          comment CDATA #IMPLIED
-          serverpath CDATA #IMPLIED
-          writable %boolean; #IMPLIED
-          login CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          localpath CDATA #IMPLIED>
-
-<!ELEMENT java (arg | jvmarg | classpath | sysproperty | env)*>
-<!ATTLIST java
-          id ID #IMPLIED
-          fork %boolean; #IMPLIED
-          classpath CDATA #IMPLIED
-          output CDATA #IMPLIED
-          jvm CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          classname CDATA #IMPLIED
-          jar CDATA #IMPLIED
-          maxmemory CDATA #IMPLIED
-          jvmversion CDATA #IMPLIED
-          args CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          newenvironment %boolean; #IMPLIED
-          jvmargs CDATA #IMPLIED>
-
-<!ELEMENT sysproperty EMPTY>
-<!ATTLIST sysproperty
-          id ID #IMPLIED
-          key CDATA #IMPLIED
-          file CDATA #IMPLIED
-          value CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT env EMPTY>
-<!ATTLIST env
-          id ID #IMPLIED
-          key CDATA #IMPLIED
-          file CDATA #IMPLIED
-          value CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT echo (#PCDATA)>
-<!ATTLIST echo
-          id ID #IMPLIED
-          append %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED
-          message CDATA #IMPLIED
-          level (error | warning | info | verbose | debug) #IMPLIED>
-
-<!ELEMENT execon (arg | fileset | env | targetfile | srcfile | mapper)*>
-<!ATTLIST execon
-          id ID #IMPLIED
-          resultproperty CDATA #IMPLIED
-          skipemptyfilesets %boolean; #IMPLIED
-          type (file | dir | both) #IMPLIED
-          failifexecutionfails %boolean; #IMPLIED
-          command CDATA #IMPLIED
-          executable CDATA #IMPLIED
-          os CDATA #IMPLIED
-          output CDATA #IMPLIED
-          timeout CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          description CDATA #IMPLIED
-          outputproperty CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          newenvironment %boolean; #IMPLIED
-          vmlauncher %boolean; #IMPLIED
-          relative %boolean; #IMPLIED
-          parallel %boolean; #IMPLIED>
-
-<!ELEMENT targetfile EMPTY>
-<!ATTLIST targetfile
-          id ID #IMPLIED>
-
-<!ELEMENT srcfile EMPTY>
-<!ATTLIST srcfile
-          id ID #IMPLIED>
-
-<!ELEMENT native2ascii (include | patternset | exclude | excludesfile | mapper | includesfile)*>
-<!ATTLIST native2ascii
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          encoding CDATA #IMPLIED
-          ext CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          reverse %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT changelog (fileset | user)*>
-<!ATTLIST changelog
-          id ID #IMPLIED
-          end CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          description CDATA #IMPLIED
-          usersfile CDATA #IMPLIED
-          daysinpast CDATA #IMPLIED
-          start CDATA #IMPLIED
-          destfile CDATA #IMPLIED>
-
-<!ELEMENT user EMPTY>
-<!ATTLIST user
-          id ID #IMPLIED
-          userid CDATA #IMPLIED
-          displayname CDATA #IMPLIED>
-
-<!ELEMENT jjtree EMPTY>
-<!ATTLIST jjtree
-          id ID #IMPLIED
-          nodedefaultvoid %boolean; #IMPLIED
-          buildnodefiles %boolean; #IMPLIED
-          outputdirectory CDATA #IMPLIED
-          static %boolean; #IMPLIED
-          javacchome CDATA #IMPLIED
-          nodeprefix CDATA #IMPLIED
-          nodefactory %boolean; #IMPLIED
-          multi %boolean; #IMPLIED
-          visitor %boolean; #IMPLIED
-          target CDATA #IMPLIED
-          nodeusesparser %boolean; #IMPLIED
-          visitorexception CDATA #IMPLIED
-          nodescopehook %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          nodepackage CDATA #IMPLIED>
-
-<!ELEMENT chmod (mapper | include | srcfile | exclude | targetfile | patternset | env | fileset | arg)*>
-<!ATTLIST chmod
-          id ID #IMPLIED
-          resultproperty CDATA #IMPLIED
-          perm CDATA #IMPLIED
-          skipemptyfilesets %boolean; #IMPLIED
-          excludes CDATA #IMPLIED
-          failifexecutionfails %boolean; #IMPLIED
-          type (file | dir | both) #IMPLIED
-          command CDATA #IMPLIED
-          executable CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          os CDATA #IMPLIED
-          output CDATA #IMPLIED
-          timeout CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          includes CDATA #IMPLIED
-          description CDATA #IMPLIED
-          outputproperty CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          vmlauncher %boolean; #IMPLIED
-          newenvironment %boolean; #IMPLIED
-          file CDATA #IMPLIED
-          relative %boolean; #IMPLIED
-          parallel %boolean; #IMPLIED>
-
-<!ELEMENT manifest (attribute | section)*>
-<!ATTLIST manifest
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED
-          mode (update | replace) #IMPLIED>
-
-<!ELEMENT attribute EMPTY>
-<!ATTLIST attribute
-          id ID #IMPLIED
-          name CDATA #IMPLIED
-          value CDATA #IMPLIED>
-
-<!ELEMENT section (attribute)*>
-<!ATTLIST section
-          id ID #IMPLIED
-          name CDATA #IMPLIED>
-
-<!ELEMENT javadoc2 (bottom | source | classpath | doctitle | header | excludepackage | bootclasspath | doclet | sourcepath | link | footer | package | group | tag)*>
-<!ATTLIST javadoc2
-          id ID #IMPLIED
-          bottom CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          bootclasspathref IDREF #IMPLIED
-          header CDATA #IMPLIED
-          link CDATA #IMPLIED
-          noindex %boolean; #IMPLIED
-          access (protected | public | package | private) #IMPLIED
-          doclet CDATA #IMPLIED
-          public %boolean; #IMPLIED
-          author %boolean; #IMPLIED
-          footer CDATA #IMPLIED
-          docletpath CDATA #IMPLIED
-          package %boolean; #IMPLIED
-          useexternalfile %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          sourcepathref IDREF #IMPLIED
-          protected %boolean; #IMPLIED
-          nonavbar %boolean; #IMPLIED
-          maxmemory CDATA #IMPLIED
-          group CDATA #IMPLIED
-          linkoffline CDATA #IMPLIED
-          additionalparam CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          locale CDATA #IMPLIED
-          destdir CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          bootclasspath CDATA #IMPLIED
-          private %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          charset CDATA #IMPLIED
-          nodeprecatedlist %boolean; #IMPLIED
-          classpathref IDREF #IMPLIED
-          stylesheetfile CDATA #IMPLIED
-          docencoding CDATA #IMPLIED
-          excludepackagenames CDATA #IMPLIED
-          docletpathref IDREF #IMPLIED
-          packagenames CDATA #IMPLIED
-          windowtitle CDATA #IMPLIED
-          notree %boolean; #IMPLIED
-          splitindex %boolean; #IMPLIED
-          packagelist CDATA #IMPLIED
-          encoding CDATA #IMPLIED
-          doctitle CDATA #IMPLIED
-          serialwarn %boolean; #IMPLIED
-          old %boolean; #IMPLIED
-          use %boolean; #IMPLIED
-          sourcepath CDATA #IMPLIED
-          helpfile CDATA #IMPLIED
-          version %boolean; #IMPLIED
-          sourcefiles CDATA #IMPLIED
-          extdirs CDATA #IMPLIED
-          nohelp %boolean; #IMPLIED
-          nodeprecated %boolean; #IMPLIED
-          overview CDATA #IMPLIED>
-
-<!ELEMENT bottom (#PCDATA)>
-<!ATTLIST bottom
-          id ID #IMPLIED>
-
-<!ELEMENT source EMPTY>
-<!ATTLIST source
-          id ID #IMPLIED
-          file CDATA #IMPLIED>
-
-<!ELEMENT doctitle (#PCDATA)>
-<!ATTLIST doctitle
-          id ID #IMPLIED>
-
-<!ELEMENT header (#PCDATA)>
-<!ATTLIST header
-          id ID #IMPLIED>
-
-<!ELEMENT excludepackage EMPTY>
-<!ATTLIST excludepackage
-          id ID #IMPLIED
-          name CDATA #IMPLIED>
-
-<!ELEMENT bootclasspath (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST bootclasspath
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT doclet (path | param)*>
-<!ATTLIST doclet
-          id ID #IMPLIED
-          name CDATA #IMPLIED
-          pathref IDREF #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT param EMPTY>
-<!ATTLIST param
-          id ID #IMPLIED
-          name CDATA #IMPLIED
-          value CDATA #IMPLIED>
-
-<!ELEMENT sourcepath (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST sourcepath
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT link EMPTY>
-<!ATTLIST link
-          id ID #IMPLIED
-          href CDATA #IMPLIED
-          offline %boolean; #IMPLIED
-          packagelistloc CDATA #IMPLIED>
-
-<!ELEMENT footer (#PCDATA)>
-<!ATTLIST footer
-          id ID #IMPLIED>
-
-<!ELEMENT package EMPTY>
-<!ATTLIST package
-          id ID #IMPLIED
-          name CDATA #IMPLIED>
-
-<!ELEMENT group (package | title)*>
-<!ATTLIST group
-          id ID #IMPLIED
-          packages CDATA #IMPLIED
-          title CDATA #IMPLIED>
-
-<!ELEMENT title (#PCDATA)>
-<!ATTLIST title
-          id ID #IMPLIED>
-
-<!ELEMENT tag EMPTY>
-<!ATTLIST tag
-          id ID #IMPLIED
-          enabled %boolean; #IMPLIED
-          name CDATA #IMPLIED
-          scope CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT deltree EMPTY>
-<!ATTLIST deltree
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT jlink (include | addfiles | patternset | exclude | excludesfile | includesfile | mergefiles)*>
-<!ATTLIST jlink
-          id ID #IMPLIED
-          outfile CDATA #IMPLIED
-          compress %boolean; #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          addfiles CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          mergefiles CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT addfiles (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST addfiles
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT mergefiles (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST mergefiles
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT cvs EMPTY>
-<!ATTLIST cvs
-          id ID #IMPLIED
-          passfile CDATA #IMPLIED
-          append %boolean; #IMPLIED
-          port CDATA #IMPLIED
-          output CDATA #IMPLIED
-          date CDATA #IMPLIED
-          quiet %boolean; #IMPLIED
-          command CDATA #IMPLIED
-          noexec %boolean; #IMPLIED
-          cvsrsh CDATA #IMPLIED
-          cvsroot CDATA #IMPLIED
-          error CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          package CDATA #IMPLIED
-          description CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          tag CDATA #IMPLIED>
-
-<!ELEMENT ccmcreatetask EMPTY>
-<!ATTLIST ccmcreatetask
-          id ID #IMPLIED
-          subsystem CDATA #IMPLIED
-          task CDATA #IMPLIED
-          platform CDATA #IMPLIED
-          resolver CDATA #IMPLIED
-          comment CDATA #IMPLIED
-          ccmaction CDATA #IMPLIED
-          ccmdir CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          release CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT tstamp (format)*>
-<!ATTLIST tstamp
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          prefix CDATA #IMPLIED>
-
-<!ELEMENT format EMPTY>
-<!ATTLIST format
-          id ID #IMPLIED
-          locale CDATA #IMPLIED
-          unit (millisecond | second | minute | hour | day | week | month | year) #IMPLIED
-          timezone CDATA #IMPLIED
-          pattern CDATA #IMPLIED
-          property CDATA #IMPLIED
-          offset CDATA #IMPLIED>
-
-<!ELEMENT unjar (include | fileset | exclude | patternset | excludesfile | includesfile)*>
-<!ATTLIST unjar
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          overwrite %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT pathconvert (path | map)*>
-<!ATTLIST pathconvert
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          pathsep CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          dirsep CDATA #IMPLIED
-          property CDATA #IMPLIED
-          targetos CDATA #IMPLIED>
-
-<!ELEMENT map EMPTY>
-<!ATTLIST map
-          id ID #IMPLIED
-          from CDATA #IMPLIED
-          to CDATA #IMPLIED>
-
-<!ELEMENT translate (include | fileset | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST translate
-          id ID #IMPLIED
-          bundlecountry CDATA #IMPLIED
-          bundlelanguage CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          srcencoding CDATA #IMPLIED
-          bundle CDATA #IMPLIED
-          bundleencoding CDATA #IMPLIED
-          destencoding CDATA #IMPLIED
-          bundlevariant CDATA #IMPLIED
-          includes CDATA #IMPLIED
-          description CDATA #IMPLIED
-          todir CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          endtoken CDATA #IMPLIED
-          forceoverwrite %boolean; #IMPLIED
-          starttoken CDATA #IMPLIED>
-
-<!ELEMENT patch EMPTY>
-<!ATTLIST patch
-          id ID #IMPLIED
-          strip CDATA #IMPLIED
-          quiet %boolean; #IMPLIED
-          originalfile CDATA #IMPLIED
-          patchfile CDATA #IMPLIED
-          reverse %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          backups %boolean; #IMPLIED
-          ignorewhitespace %boolean; #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT sound (fail | success)*>
-<!ATTLIST sound
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT success EMPTY>
-<!ATTLIST success
-          id ID #IMPLIED
-          loops CDATA #IMPLIED
-          source CDATA #IMPLIED
-          duration CDATA #IMPLIED>
-
-<!ELEMENT serverdeploy (weblogic | generic | jonas)*>
-<!ATTLIST serverdeploy
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          source CDATA #IMPLIED
-          action CDATA #IMPLIED>
-
-<!ELEMENT weblogic (classpath)*>
-<!ATTLIST weblogic
-          id ID #IMPLIED
-          classpath CDATA #IMPLIED
-          debug %boolean; #IMPLIED
-          password CDATA #IMPLIED
-          component CDATA #IMPLIED
-          application CDATA #IMPLIED
-          server CDATA #IMPLIED
-          username CDATA #IMPLIED>
-
-<!ELEMENT generic (arg | classpath | jvmarg)*>
-<!ATTLIST generic
-          id ID #IMPLIED
-          classpath CDATA #IMPLIED
-          password CDATA #IMPLIED
-          server CDATA #IMPLIED
-          classname CDATA #IMPLIED
-          username CDATA #IMPLIED>
-
-<!ELEMENT jonas (arg | classpath | jvmarg)*>
-<!ATTLIST jonas
-          id ID #IMPLIED
-          jonasroot CDATA #IMPLIED
-          orb CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          davidhost CDATA #IMPLIED
-          classname CDATA #IMPLIED
-          server CDATA #IMPLIED
-          username CDATA #IMPLIED
-          davidport CDATA #IMPLIED
-          password CDATA #IMPLIED>
-
-<!ELEMENT cccheckout EMPTY>
-<!ATTLIST cccheckout
-          id ID #IMPLIED
-          reserved %boolean; #IMPLIED
-          viewpath CDATA #IMPLIED
-          out CDATA #IMPLIED
-          comment CDATA #IMPLIED
-          nodata %boolean; #IMPLIED
-          version %boolean; #IMPLIED
-          nowarn %boolean; #IMPLIED
-          cleartooldir CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          branch CDATA #IMPLIED
-          description CDATA #IMPLIED
-          commentfile CDATA #IMPLIED>
-
-<!ELEMENT mail (fileset | bcc | message | cc | to | from)*>
-<!ATTLIST mail
-          id ID #IMPLIED
-          includefilenames %boolean; #IMPLIED
-          files CDATA #IMPLIED
-          encoding (auto | mime | uu | plain) #IMPLIED
-          cclist CDATA #IMPLIED
-          bcclist CDATA #IMPLIED
-          tolist CDATA #IMPLIED
-          subject CDATA #IMPLIED
-          mailhost CDATA #IMPLIED
-          messagefile CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          messagemimetype CDATA #IMPLIED
-          from CDATA #IMPLIED
-          description CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          mailport CDATA #IMPLIED
-          message CDATA #IMPLIED>
-
-<!ELEMENT bcc EMPTY>
-<!ATTLIST bcc
-          id ID #IMPLIED
-          address CDATA #IMPLIED
-          name CDATA #IMPLIED>
-
-<!ELEMENT message (#PCDATA)>
-<!ATTLIST message
-          id ID #IMPLIED
-          mimetype CDATA #IMPLIED
-          src CDATA #IMPLIED>
-
-<!ELEMENT cc EMPTY>
-<!ATTLIST cc
-          id ID #IMPLIED
-          address CDATA #IMPLIED
-          name CDATA #IMPLIED>
-
-<!ELEMENT to EMPTY>
-<!ATTLIST to
-          id ID #IMPLIED
-          address CDATA #IMPLIED
-          name CDATA #IMPLIED>
-
-<!ELEMENT from EMPTY>
-<!ATTLIST from
-          id ID #IMPLIED
-          address CDATA #IMPLIED
-          name CDATA #IMPLIED>
-
-<!ELEMENT buildnumber EMPTY>
-<!ATTLIST buildnumber
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT gzip EMPTY>
-<!ATTLIST gzip
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          zipfile CDATA #IMPLIED
-          description CDATA #IMPLIED
-          src CDATA #IMPLIED>
-
-<!ELEMENT loadfile (filterchain)*>
-<!ATTLIST loadfile
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          encoding CDATA #IMPLIED
-          property CDATA #IMPLIED
-          srcfile CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED>
-
-<!ELEMENT filterchain (linecontainsregexp | classconstants | headfilter | tabstospaces | striplinebreaks | tailfilter | stripjavacomments | expandproperties | linecontains | replacetokens | striplinecomments | prefixlines | filterreader)*>
-<!ATTLIST filterchain
-          id ID #IMPLIED>
-
-<!ELEMENT linecontainsregexp (regexp)*>
-<!ATTLIST linecontainsregexp
-          id ID #IMPLIED>
-
-<!ELEMENT classconstants EMPTY>
-<!ATTLIST classconstants
-          id ID #IMPLIED>
-
-<!ELEMENT headfilter EMPTY>
-<!ATTLIST headfilter
-          id ID #IMPLIED
-          lines CDATA #IMPLIED>
-
-<!ELEMENT tabstospaces EMPTY>
-<!ATTLIST tabstospaces
-          id ID #IMPLIED
-          tablength CDATA #IMPLIED>
-
-<!ELEMENT striplinebreaks EMPTY>
-<!ATTLIST striplinebreaks
-          id ID #IMPLIED
-          linebreaks CDATA #IMPLIED>
-
-<!ELEMENT tailfilter EMPTY>
-<!ATTLIST tailfilter
-          id ID #IMPLIED
-          lines CDATA #IMPLIED>
-
-<!ELEMENT stripjavacomments EMPTY>
-<!ATTLIST stripjavacomments
-          id ID #IMPLIED>
-
-<!ELEMENT expandproperties EMPTY>
-<!ATTLIST expandproperties
-          id ID #IMPLIED>
-
-<!ELEMENT linecontains (contains)*>
-<!ATTLIST linecontains
-          id ID #IMPLIED>
-
-<!ELEMENT contains EMPTY>
-<!ATTLIST contains
-          id ID #IMPLIED
-          value CDATA #IMPLIED>
-
-<!ELEMENT replacetokens (token)*>
-<!ATTLIST replacetokens
-          id ID #IMPLIED
-          begintoken CDATA #IMPLIED
-          endtoken CDATA #IMPLIED>
-
-<!ELEMENT token EMPTY>
-<!ATTLIST token
-          id ID #IMPLIED
-          key CDATA #IMPLIED
-          value CDATA #IMPLIED>
-
-<!ELEMENT striplinecomments (comment)*>
-<!ATTLIST striplinecomments
-          id ID #IMPLIED>
-
-<!ELEMENT comment EMPTY>
-<!ATTLIST comment
-          id ID #IMPLIED
-          value CDATA #IMPLIED>
-
-<!ELEMENT prefixlines EMPTY>
-<!ATTLIST prefixlines
-          id ID #IMPLIED
-          prefix CDATA #IMPLIED>
-
-<!ELEMENT filterreader (classpath | param)*>
-<!ATTLIST filterreader
-          id ID #IMPLIED
-          classpath CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          classname CDATA #IMPLIED>
-
-<!ELEMENT jpcovreport (reference | coveragepath | sourcepath)*>
-<!ATTLIST jpcovreport
-          id ID #IMPLIED
-          snapshot CDATA #IMPLIED
-          tofile CDATA #IMPLIED
-          filters CDATA #IMPLIED
-          percent CDATA #IMPLIED
-          home CDATA #IMPLIED
-          type (executive | summary | detailed | verydetailed) #IMPLIED
-          taskname CDATA #IMPLIED
-          format (html | text | xml) #IMPLIED
-          includesource %boolean; #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT reference (classpath | filters)*>
-<!ATTLIST reference
-          id ID #IMPLIED>
-
-<!ELEMENT coveragepath (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST coveragepath
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT echoproperties EMPTY>
-<!ATTLIST echoproperties
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          prefix CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          destfile CDATA #IMPLIED>
-
-<!ELEMENT mimemail (fileset | bcc | message | cc | to | from)*>
-<!ATTLIST mimemail
-          id ID #IMPLIED
-          includefilenames %boolean; #IMPLIED
-          files CDATA #IMPLIED
-          encoding (auto | mime | uu | plain) #IMPLIED
-          cclist CDATA #IMPLIED
-          bcclist CDATA #IMPLIED
-          tolist CDATA #IMPLIED
-          subject CDATA #IMPLIED
-          mailhost CDATA #IMPLIED
-          messagefile CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          messagemimetype CDATA #IMPLIED
-          from CDATA #IMPLIED
-          description CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          mailport CDATA #IMPLIED
-          message CDATA #IMPLIED>
-
-<!ELEMENT copy (filterchain | fileset | filterset | mapper)*>
-<!ATTLIST copy
-          id ID #IMPLIED
-          flatten %boolean; #IMPLIED
-          encoding CDATA #IMPLIED
-          tofile CDATA #IMPLIED
-          todir CDATA #IMPLIED
-          file CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          includeemptydirs %boolean; #IMPLIED
-          overwrite %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          preservelastmodified %boolean; #IMPLIED
-          filtering %boolean; #IMPLIED>
-
-<!ELEMENT centipede-class-available (classpath)*>
-<!ATTLIST centipede-class-available
-          id ID #IMPLIED
-          classpath CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          description CDATA #IMPLIED
-          value CDATA #IMPLIED
-          property CDATA #IMPLIED
-          classname CDATA #IMPLIED>
-
-<!ELEMENT jar (manifest | include | exclude | patternset | fileset | metainf | excludesfile | includesfile | zipfileset | zipgroupfileset)*>
-<!ATTLIST jar
-          id ID #IMPLIED
-          whenempty (fail | skip | create) #IMPLIED
-          duplicate (add | preserve | fail) #IMPLIED
-          excludes CDATA #IMPLIED
-          basedir CDATA #IMPLIED
-          encoding CDATA #IMPLIED
-          manifest CDATA #IMPLIED
-          jarfile CDATA #IMPLIED
-          index %boolean; #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          update %boolean; #IMPLIED
-          destfile CDATA #IMPLIED
-          includes CDATA #IMPLIED
-          description CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          compress %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          filesonly %boolean; #IMPLIED
-          file CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          filesetmanifest (skip | merge | mergewithoutmain) #IMPLIED
-          zipfile CDATA #IMPLIED>
-
-<!ELEMENT metainf (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST metainf
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          prefix CDATA #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          fullpath CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT zipfileset (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST zipfileset
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          prefix CDATA #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          fullpath CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT zipgroupfileset (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST zipgroupfileset
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT waitfor (equals | available | not | contains | os | or | and | filesmatch | checksum | isset | socket | http | uptodate)*>
-<!ATTLIST waitfor
-          id ID #IMPLIED
-          checkeveryunit (millisecond | second | minute | hour | day | week) #IMPLIED
-          checkevery CDATA #IMPLIED
-          maxwaitunit (millisecond | second | minute | hour | day | week) #IMPLIED
-          maxwait CDATA #IMPLIED
-          timeoutproperty CDATA #IMPLIED>
-
-<!ELEMENT equals EMPTY>
-<!ATTLIST equals
-          id ID #IMPLIED
-          trim %boolean; #IMPLIED
-          arg2 CDATA #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          arg1 CDATA #IMPLIED>
-
-<!ELEMENT available (classpath | filepath)*>
-<!ATTLIST available
-          id ID #IMPLIED
-          classpath CDATA #IMPLIED
-          file CDATA #IMPLIED
-          classname CDATA #IMPLIED
-          resource CDATA #IMPLIED
-          ignoresystemclasses %boolean; #IMPLIED
-          type (file | dir) #IMPLIED
-          classpathref IDREF #IMPLIED
-          taskname CDATA #IMPLIED
-          value CDATA #IMPLIED
-          description CDATA #IMPLIED
-          property CDATA #IMPLIED
-          filepath CDATA #IMPLIED>
-
-<!ELEMENT filepath (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST filepath
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT not (equals | available | not | contains | os | or | and | filesmatch | checksum | isset | socket | http | uptodate)*>
-<!ATTLIST not
-          id ID #IMPLIED>
-
-<!ELEMENT os EMPTY>
-<!ATTLIST os
-          id ID #IMPLIED
-          version CDATA #IMPLIED
-          name CDATA #IMPLIED
-          family CDATA #IMPLIED
-          arch CDATA #IMPLIED>
-
-<!ELEMENT or (equals | available | not | contains | os | or | and | filesmatch | checksum | isset | socket | http | uptodate)*>
-<!ATTLIST or
-          id ID #IMPLIED>
-
-<!ELEMENT and (equals | available | not | contains | os | or | and | filesmatch | checksum | isset | socket | http | uptodate)*>
-<!ATTLIST and
-          id ID #IMPLIED>
-
-<!ELEMENT filesmatch EMPTY>
-<!ATTLIST filesmatch
-          id ID #IMPLIED
-          file2 CDATA #IMPLIED
-          file1 CDATA #IMPLIED>
-
-<!ELEMENT checksum (include | fileset | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST checksum
-          id ID #IMPLIED
-          file CDATA #IMPLIED
-          verifyproperty CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          algorithm CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          provider CDATA #IMPLIED
-          description CDATA #IMPLIED
-          property CDATA #IMPLIED
-          forceoverwrite %boolean; #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          fileext CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT isset EMPTY>
-<!ATTLIST isset
-          id ID #IMPLIED
-          property CDATA #IMPLIED>
-
-<!ELEMENT http EMPTY>
-<!ATTLIST http
-          id ID #IMPLIED
-          url CDATA #IMPLIED>
-
-<!ELEMENT centipede-user-input (#PCDATA)>
-<!ATTLIST centipede-user-input
-          id ID #IMPLIED
-          question CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          name CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT antipede-if (equals | available | not | contains | os | then | or | and | filesmatch | checksum | isset | else | socket | http | uptodate)*>
-<!ATTLIST antipede-if
-          id ID #IMPLIED>
-
-<!ELEMENT then (%tasks;)*>
-<!ATTLIST then
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT else (%tasks;)*>
-<!ATTLIST else
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT unzip (include | fileset | exclude | patternset | excludesfile | includesfile)*>
-<!ATTLIST unzip
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          overwrite %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT rename EMPTY>
-<!ATTLIST rename
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          replace CDATA #IMPLIED
-          description CDATA #IMPLIED
-          src CDATA #IMPLIED>
-
-<!ELEMENT mmetrics (fileset | jvmarg | classpath | path | sourcepath)*>
-<!ATTLIST mmetrics
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          metamatahome CDATA #IMPLIED
-          description CDATA #IMPLIED
-          tofile CDATA #IMPLIED
-          maxmemory CDATA #IMPLIED
-          home CDATA #IMPLIED
-          granularity (compilation-units | files | methods | types | packages) #IMPLIED>
-
-<!ELEMENT propertyfile (entry)*>
-<!ATTLIST propertyfile
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED
-          comment CDATA #IMPLIED>
-
-<!ELEMENT entry EMPTY>
-<!ATTLIST entry
-          id ID #IMPLIED
-          operation CDATA #IMPLIED
-          default CDATA #IMPLIED
-          key CDATA #IMPLIED
-          type (int | date | string) #IMPLIED
-          unit (millisecond | second | minute | hour | day | week | month | year) #IMPLIED
-          pattern CDATA #IMPLIED
-          value CDATA #IMPLIED>
-
-<!ELEMENT antipede-propertycopy EMPTY>
-<!ATTLIST antipede-propertycopy
-          id ID #IMPLIED
-          silent CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          name CDATA #IMPLIED
-          description CDATA #IMPLIED
-          from CDATA #IMPLIED>
-
-<!ELEMENT copyfile EMPTY>
-<!ATTLIST copyfile
-          id ID #IMPLIED
-          forceoverwrite %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          description CDATA #IMPLIED
-          filtering CDATA #IMPLIED
-          src CDATA #IMPLIED>
-
-<!ELEMENT splash EMPTY>
-<!ATTLIST splash
-          id ID #IMPLIED
-          port CDATA #IMPLIED
-          user CDATA #IMPLIED
-          proxy CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          imageurl CDATA #IMPLIED
-          description CDATA #IMPLIED
-          password CDATA #IMPLIED
-          showduration CDATA #IMPLIED
-          useproxy %boolean; #IMPLIED>
-
-<!ELEMENT ccmcheckintask EMPTY>
-<!ATTLIST ccmcheckintask
-          id ID #IMPLIED
-          ccmaction CDATA #IMPLIED
-          task CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED
-          ccmdir CDATA #IMPLIED
-          comment CDATA #IMPLIED>
-
-<!ELEMENT gunzip EMPTY>
-<!ATTLIST gunzip
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          description CDATA #IMPLIED
-          src CDATA #IMPLIED>
-
-<!ELEMENT bunzip2 EMPTY>
-<!ATTLIST bunzip2
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          description CDATA #IMPLIED
-          src CDATA #IMPLIED>
-
-<!ELEMENT antcall (reference | param)*>
-<!ATTLIST antcall
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          inheritall %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          target CDATA #IMPLIED>
-
-<!ELEMENT antipede-foreach (fileset)*>
-<!ATTLIST antipede-foreach
-          id ID #IMPLIED
-          delimiter CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          list CDATA #IMPLIED
-          target CDATA #IMPLIED
-          param CDATA #IMPLIED>
-
-<!ELEMENT taskdef (classpath)*>
-<!ATTLIST taskdef
-          id ID #IMPLIED
-          name CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          file CDATA #IMPLIED
-          classname CDATA #IMPLIED
-          resource CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          taskname CDATA #IMPLIED
-          reverseloader %boolean; #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT jspc (include | patternset | exclude | classpath | excludesfile | webapp | includesfile)*>
-<!ATTLIST jspc
-          id ID #IMPLIED
-          mapped %boolean; #IMPLIED
-          ieplugin CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          package CDATA #IMPLIED
-          destdir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          uribase CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          verbose CDATA #IMPLIED
-          compiler CDATA #IMPLIED
-          includes CDATA #IMPLIED
-          description CDATA #IMPLIED
-          webxml CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          srcdir CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          uriroot CDATA #IMPLIED
-          webinc CDATA #IMPLIED>
-
-<!ELEMENT webapp EMPTY>
-<!ATTLIST webapp
-          id ID #IMPLIED
-          basedir CDATA #IMPLIED>
-
-<!ELEMENT soscheckout EMPTY>
-<!ATTLIST soscheckout
-          id ID #IMPLIED
-          password CDATA #IMPLIED
-          comment CDATA #IMPLIED
-          nocompress %boolean; #IMPLIED
-          version CDATA #IMPLIED
-          username CDATA #IMPLIED
-          sosserverpath CDATA #IMPLIED
-          label CDATA #IMPLIED
-          vssserverpath CDATA #IMPLIED
-          soscmd CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          localpath CDATA #IMPLIED
-          nocache %boolean; #IMPLIED
-          projectpath CDATA #IMPLIED
-          description CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          recursive %boolean; #IMPLIED
-          file CDATA #IMPLIED
-          soshome CDATA #IMPLIED>
-
-<!ELEMENT mkdir EMPTY>
-<!ATTLIST mkdir
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT sql (#PCDATA | fileset | classpath | transaction)*>
-<!ATTLIST sql
-          id ID #IMPLIED
-          onerror (continue | stop | abort) #IMPLIED
-          password CDATA #IMPLIED
-          userid CDATA #IMPLIED
-          autocommit %boolean; #IMPLIED
-          rdbms CDATA #IMPLIED
-          print %boolean; #IMPLIED
-          classpathref IDREF #IMPLIED
-          encoding CDATA #IMPLIED
-          version CDATA #IMPLIED
-          url CDATA #IMPLIED
-          src CDATA #IMPLIED
-          output CDATA #IMPLIED
-          driver CDATA #IMPLIED
-          showheaders %boolean; #IMPLIED
-          classpath CDATA #IMPLIED
-          delimitertype (normal | row) #IMPLIED
-          description CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          caching %boolean; #IMPLIED
-          delimiter CDATA #IMPLIED>
-
-<!ELEMENT transaction (#PCDATA)>
-<!ATTLIST transaction
-          id ID #IMPLIED
-          src CDATA #IMPLIED>
-
-<!ELEMENT replace (include | patternset | exclude | replacefilter | replacetoken | excludesfile | replacevalue | includesfile)*>
-<!ATTLIST replace
-          id ID #IMPLIED
-          encoding CDATA #IMPLIED
-          file CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          token CDATA #IMPLIED
-          propertyfile CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          summary %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          value CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT replacefilter EMPTY>
-<!ATTLIST replacefilter
-          id ID #IMPLIED
-          token CDATA #IMPLIED
-          value CDATA #IMPLIED
-          property CDATA #IMPLIED>
-
-<!ELEMENT replacetoken (#PCDATA)>
-<!ATTLIST replacetoken
-          id ID #IMPLIED>
-
-<!ELEMENT replacevalue (#PCDATA)>
-<!ATTLIST replacevalue
-          id ID #IMPLIED>
-
-<!ELEMENT ear (manifest | include | exclude | patternset | fileset | metainf | excludesfile | includesfile | zipfileset | archives | zipgroupfileset)*>
-<!ATTLIST ear
-          id ID #IMPLIED
-          whenempty (fail | skip | create) #IMPLIED
-          duplicate (add | preserve | fail) #IMPLIED
-          excludes CDATA #IMPLIED
-          basedir CDATA #IMPLIED
-          encoding CDATA #IMPLIED
-          manifest CDATA #IMPLIED
-          jarfile CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          index %boolean; #IMPLIED
-          update %boolean; #IMPLIED
-          destfile CDATA #IMPLIED
-          earfile CDATA #IMPLIED
-          includes CDATA #IMPLIED
-          description CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          appxml CDATA #IMPLIED
-          compress %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          filesonly %boolean; #IMPLIED
-          file CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          filesetmanifest (skip | merge | mergewithoutmain) #IMPLIED
-          zipfile CDATA #IMPLIED>
-
-<!ELEMENT archives (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST archives
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          prefix CDATA #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          fullpath CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT ant (reference | property)*>
-<!ATTLIST ant
-          id ID #IMPLIED
-          output CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          inheritall %boolean; #IMPLIED
-          dir CDATA #IMPLIED
-          inheritrefs %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          antfile CDATA #IMPLIED
-          target CDATA #IMPLIED>
-
-<!ELEMENT property (classpath)*>
-<!ATTLIST property
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          name CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          userproperty %boolean; #IMPLIED
-          file CDATA #IMPLIED
-          resource CDATA #IMPLIED
-          environment CDATA #IMPLIED
-          prefix CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          taskname CDATA #IMPLIED
-          value CDATA #IMPLIED
-          location CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT vsshistory EMPTY>
-<!ATTLIST vsshistory
-          id ID #IMPLIED
-          style (brief | codediff | nofile | default) #IMPLIED
-          numdays CDATA #IMPLIED
-          todate CDATA #IMPLIED
-          fromlabel CDATA #IMPLIED
-          output CDATA #IMPLIED
-          ssdir CDATA #IMPLIED
-          recursive %boolean; #IMPLIED
-          vsspath CDATA #IMPLIED
-          user CDATA #IMPLIED
-          fromdate CDATA #IMPLIED
-          serverpath CDATA #IMPLIED
-          login CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          tolabel CDATA #IMPLIED
-          dateformat CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT vsscp EMPTY>
-<!ATTLIST vsscp
-          id ID #IMPLIED
-          login CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          vsspath CDATA #IMPLIED
-          serverpath CDATA #IMPLIED
-          ssdir CDATA #IMPLIED
-          autoresponse CDATA #IMPLIED>
-
-<!ELEMENT style (include | patternset | exclude | classpath | excludesfile | xmlcatalog | param | includesfile)*>
-<!ATTLIST style
-          id ID #IMPLIED
-          outputtype CDATA #IMPLIED
-          force %boolean; #IMPLIED
-          excludes CDATA #IMPLIED
-          processor CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          basedir CDATA #IMPLIED
-          destdir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          scanincludeddirectories %boolean; #IMPLIED
-          extension CDATA #IMPLIED
-          in CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          includes CDATA #IMPLIED
-          description CDATA #IMPLIED
-          out CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          style CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED>
-
-<!ELEMENT vssget EMPTY>
-<!ATTLIST vssget
-          id ID #IMPLIED
-          ssdir CDATA #IMPLIED
-          recursive %boolean; #IMPLIED
-          date CDATA #IMPLIED
-          autoresponse CDATA #IMPLIED
-          quiet %boolean; #IMPLIED
-          vsspath CDATA #IMPLIED
-          version CDATA #IMPLIED
-          serverpath CDATA #IMPLIED
-          login CDATA #IMPLIED
-          writable %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          label CDATA #IMPLIED
-          description CDATA #IMPLIED
-          localpath CDATA #IMPLIED>
-
-<!ELEMENT genkey (dname)*>
-<!ATTLIST genkey
-          id ID #IMPLIED
-          storepass CDATA #IMPLIED
-          sigalg CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          keypass CDATA #IMPLIED
-          dname CDATA #IMPLIED
-          keysize CDATA #IMPLIED
-          alias CDATA #IMPLIED
-          keyalg CDATA #IMPLIED
-          validity CDATA #IMPLIED
-          keystore CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          storetype CDATA #IMPLIED>
-
-<!ELEMENT dname (param)*>
-<!ATTLIST dname
-          id ID #IMPLIED>
-
-<!ELEMENT sequential (%tasks;)*>
-<!ATTLIST sequential
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT fixcrlf (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST fixcrlf
-          id ID #IMPLIED
-          encoding CDATA #IMPLIED
-          destdir CDATA #IMPLIED
-          tab (add | asis | remove) #IMPLIED
-          tablength CDATA #IMPLIED
-          javafiles %boolean; #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          cr (add | asis | remove) #IMPLIED
-          eol (asis | cr | lf | crlf) #IMPLIED
-          taskname CDATA #IMPLIED
-          srcdir CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          eof (add | asis | remove) #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT zip (include | fileset | patternset | exclude | zipgroupfileset | excludesfile | zipfileset | includesfile)*>
-<!ATTLIST zip
-          id ID #IMPLIED
-          encoding CDATA #IMPLIED
-          file CDATA #IMPLIED
-          destfile CDATA #IMPLIED
-          compress %boolean; #IMPLIED
-          update %boolean; #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          duplicate (add | preserve | fail) #IMPLIED
-          basedir CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          zipfile CDATA #IMPLIED
-          description CDATA #IMPLIED
-          whenempty (fail | skip | create) #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED
-          filesonly %boolean; #IMPLIED>
-
-<!ELEMENT replaceregexp (fileset | substitution | regexp)*>
-<!ATTLIST replaceregexp
-          id ID #IMPLIED
-          flags CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          match CDATA #IMPLIED
-          byline CDATA #IMPLIED
-          replace CDATA #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT condition (equals | available | not | contains | os | or | and | filesmatch | checksum | isset | socket | http | uptodate)*>
-<!ATTLIST condition
-          id ID #IMPLIED
-          value CDATA #IMPLIED
-          property CDATA #IMPLIED>
-
-<!ELEMENT pvcs (pvcsproject)*>
-<!ATTLIST pvcs
-          id ID #IMPLIED
-          updateonly %boolean; #IMPLIED
-          force CDATA #IMPLIED
-          workspace CDATA #IMPLIED
-          pvcsbin CDATA #IMPLIED
-          pvcsproject CDATA #IMPLIED
-          filenameformat CDATA #IMPLIED
-          userid CDATA #IMPLIED
-          repository CDATA #IMPLIED
-          ignorereturncode %boolean; #IMPLIED
-          linestart CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          promotiongroup CDATA #IMPLIED
-          label CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT pvcsproject EMPTY>
-<!ATTLIST pvcsproject
-          id ID #IMPLIED
-          name CDATA #IMPLIED>
-
-<!ELEMENT antstructure EMPTY>
-<!ATTLIST antstructure
-          id ID #IMPLIED
-          output CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT javah (classpath | class | bootclasspath)*>
-<!ATTLIST javah
-          id ID #IMPLIED
-          stubs %boolean; #IMPLIED
-          force %boolean; #IMPLIED
-          destdir CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          old %boolean; #IMPLIED
-          outputfile CDATA #IMPLIED
-          class CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          bootclasspath CDATA #IMPLIED
-          bootclasspathref IDREF #IMPLIED
-          classpathref IDREF #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT class EMPTY>
-<!ATTLIST class
-          id ID #IMPLIED
-          name CDATA #IMPLIED>
-
-<!ELEMENT javac (src | include | exclude | classpath | patternset | compilerarg | bootclasspath | extdirs | sourcepath | excludesfile | includesfile)*>
-<!ATTLIST javac
-          id ID #IMPLIED
-          target CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          bootclasspathref IDREF #IMPLIED
-          compiler CDATA #IMPLIED
-          executable CDATA #IMPLIED
-          debuglevel CDATA #IMPLIED
-          memoryinitialsize CDATA #IMPLIED
-          deprecation %boolean; #IMPLIED
-          includeantruntime %boolean; #IMPLIED
-          sourcepathref IDREF #IMPLIED
-          description CDATA #IMPLIED
-          depend %boolean; #IMPLIED
-          includes CDATA #IMPLIED
-          source CDATA #IMPLIED
-          includejavaruntime %boolean; #IMPLIED
-          failonerror %boolean; #IMPLIED
-          destdir CDATA #IMPLIED
-          debug %boolean; #IMPLIED
-          classpath CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          bootclasspath CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          nowarn %boolean; #IMPLIED
-          proceed %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          fork %boolean; #IMPLIED
-          srcdir CDATA #IMPLIED
-          memorymaximumsize CDATA #IMPLIED
-          optimize %boolean; #IMPLIED
-          encoding CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          sourcepath CDATA #IMPLIED
-          listfiles %boolean; #IMPLIED
-          extdirs CDATA #IMPLIED>
-
-<!ELEMENT src (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST src
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT compilerarg EMPTY>
-<!ATTLIST compilerarg
-          id ID #IMPLIED
-          line CDATA #IMPLIED
-          file CDATA #IMPLIED
-          compiler CDATA #IMPLIED
-          value CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT extdirs (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST extdirs
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT test (arg | jvmarg | classpath | sysproperty | testlet | env)*>
-<!ATTLIST test
-          id ID #IMPLIED
-          jvmargs CDATA #IMPLIED
-          args CDATA #IMPLIED
-          fork %boolean; #IMPLIED
-          maxmemory CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          jar CDATA #IMPLIED
-          forceshowtrace %boolean; #IMPLIED
-          output CDATA #IMPLIED
-          jvm CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          description CDATA #IMPLIED
-          showsuccess %boolean; #IMPLIED
-          jvmversion CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          showbanner CDATA #IMPLIED
-          newenvironment %boolean; #IMPLIED
-          classname CDATA #IMPLIED
-          showtrace %boolean; #IMPLIED>
-
-<!ELEMENT testlet (#PCDATA)>
-<!ATTLIST testlet
-          id ID #IMPLIED>
-
-<!ELEMENT ccmreconfigure EMPTY>
-<!ATTLIST ccmreconfigure
-          id ID #IMPLIED
-          ccmaction CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          ccmproject CDATA #IMPLIED
-          description CDATA #IMPLIED
-          recurse %boolean; #IMPLIED
-          ccmdir CDATA #IMPLIED>
-
-<!ELEMENT xmlvalidate (fileset | classpath | dtd)*>
-<!ATTLIST xmlvalidate
-          id ID #IMPLIED
-          classpath CDATA #IMPLIED
-          file CDATA #IMPLIED
-          classname CDATA #IMPLIED
-          lenient %boolean; #IMPLIED
-          warn %boolean; #IMPLIED
-          classpathref IDREF #IMPLIED
-          taskname CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT cab (include | fileset | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST cab
-          id ID #IMPLIED
-          cabfile CDATA #IMPLIED
-          compress %boolean; #IMPLIED
-          verbose %boolean; #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          basedir CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED
-          options CDATA #IMPLIED>
-
-<!ELEMENT typedef (classpath)*>
-<!ATTLIST typedef
-          id ID #IMPLIED
-          name CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          file CDATA #IMPLIED
-          classname CDATA #IMPLIED
-          resource CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          taskname CDATA #IMPLIED
-          reverseloader %boolean; #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT mparse (jvmarg | classpath | sourcepath)*>
-<!ATTLIST mparse
-          id ID #IMPLIED
-          cleanup %boolean; #IMPLIED
-          verbose %boolean; #IMPLIED
-          maxmemory CDATA #IMPLIED
-          metamatahome CDATA #IMPLIED
-          target CDATA #IMPLIED
-          debugparser %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          debugscanner %boolean; #IMPLIED>
-
-<!ELEMENT ccuncheckout EMPTY>
-<!ATTLIST ccuncheckout
-          id ID #IMPLIED
-          keepcopy %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          cleartooldir CDATA #IMPLIED
-          viewpath CDATA #IMPLIED>
-
-<!ELEMENT jpcovmerge (fileset)*>
-<!ATTLIST jpcovmerge
-          id ID #IMPLIED
-          verbose %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          tofile CDATA #IMPLIED
-          home CDATA #IMPLIED>
-
-<!ELEMENT ejbjar (dtd | include | weblogictoplink | exclude | classpath | patternset | iplanet | jboss | weblogic | borland | websphere | support | excludesfile | includesfile | jonas)*>
-<!ATTLIST ejbjar
-          id ID #IMPLIED
-          manifest CDATA #IMPLIED
-          destdir CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          basejarname CDATA #IMPLIED
-          basenameterminator CDATA #IMPLIED
-          genericjarsuffix CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          srcdir CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          flatdestdir %boolean; #IMPLIED
-          naming (ejb-name | directory | descriptor | basejarname) #IMPLIED
-          includes CDATA #IMPLIED
-          descriptordir CDATA #IMPLIED>
-
-<!ELEMENT weblogictoplink (classpath | wlclasspath)*>
-<!ATTLIST weblogictoplink
-          id ID #IMPLIED
-          newcmp %boolean; #IMPLIED
-          ejbdtd CDATA #IMPLIED
-          rebuild %boolean; #IMPLIED
-          suffix CDATA #IMPLIED
-          args CDATA #IMPLIED
-          toplinkdtd CDATA #IMPLIED
-          wldtd CDATA #IMPLIED
-          destdir CDATA #IMPLIED
-          weblogicdtd CDATA #IMPLIED
-          wlclasspath CDATA #IMPLIED
-          jvmdebuglevel CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          keepgenerated CDATA #IMPLIED
-          compiler CDATA #IMPLIED
-          oldcmp %boolean; #IMPLIED
-          keepgeneric %boolean; #IMPLIED
-          ejbcclass CDATA #IMPLIED
-          toplinkdescriptor CDATA #IMPLIED
-          noejbc %boolean; #IMPLIED
-          genericjarsuffix CDATA #IMPLIED>
-
-<!ELEMENT wlclasspath (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST wlclasspath
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT iplanet (classpath)*>
-<!ATTLIST iplanet
-          id ID #IMPLIED
-          destdir CDATA #IMPLIED
-          genericjarsuffix CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          keepgenerated %boolean; #IMPLIED
-          debug %boolean; #IMPLIED
-          suffix CDATA #IMPLIED
-          iashome CDATA #IMPLIED>
-
-<!ELEMENT jboss (classpath)*>
-<!ATTLIST jboss
-          id ID #IMPLIED
-          destdir CDATA #IMPLIED
-          genericjarsuffix CDATA #IMPLIED
-          classpath CDATA #IMPLIED>
-
-<!ELEMENT borland (classpath)*>
-<!ATTLIST borland
-          id ID #IMPLIED
-          verifyargs CDATA #IMPLIED
-          debug %boolean; #IMPLIED
-          destdir CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          genericjarsuffix CDATA #IMPLIED
-          basdtd CDATA #IMPLIED
-          verify %boolean; #IMPLIED
-          suffix CDATA #IMPLIED
-          generateclient %boolean; #IMPLIED>
-
-<!ELEMENT websphere (classpath | wasclasspath)*>
-<!ATTLIST websphere
-          id ID #IMPLIED
-          newcmp %boolean; #IMPLIED
-          ejbdtd CDATA #IMPLIED
-          noinform %boolean; #IMPLIED
-          rebuild %boolean; #IMPLIED
-          suffix CDATA #IMPLIED
-          args CDATA #IMPLIED
-          quiet %boolean; #IMPLIED
-          dbschema CDATA #IMPLIED
-          destdir CDATA #IMPLIED
-          ejbdeploy %boolean; #IMPLIED
-          tempdir CDATA #IMPLIED
-          use35 %boolean; #IMPLIED
-          novalidate %boolean; #IMPLIED
-          codegen %boolean; #IMPLIED
-          dbvendor (SQL92 | SQL99 | DB2UDBWIN_V71 | DB2UDBOS390_V6 | DB2UDBAS400_V4R5 | ORACLE_V8 | INFORMIX_V92 | SYBASE_V1192 | MSSQLSERVER_V7 | MYSQL_V323) #IMPLIED
-          classpath CDATA #IMPLIED
-          keepgenerated CDATA #IMPLIED
-          compiler CDATA #IMPLIED
-          wasclasspath CDATA #IMPLIED
-          oldcmp %boolean; #IMPLIED
-          dbname CDATA #IMPLIED
-          keepgeneric %boolean; #IMPLIED
-          trace %boolean; #IMPLIED
-          nowarn %boolean; #IMPLIED
-          genericjarsuffix CDATA #IMPLIED>
-
-<!ELEMENT wasclasspath (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST wasclasspath
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT support (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST support
-          id ID #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT rpm EMPTY>
-<!ATTLIST rpm
-          id ID #IMPLIED
-          removesource %boolean; #IMPLIED
-          output CDATA #IMPLIED
-          command CDATA #IMPLIED
-          cleanbuilddir %boolean; #IMPLIED
-          removespec %boolean; #IMPLIED
-          error CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          specfile CDATA #IMPLIED
-          topdir CDATA #IMPLIED>
-
-<!ELEMENT vsslabel EMPTY>
-<!ATTLIST vsslabel
-          id ID #IMPLIED
-          ssdir CDATA #IMPLIED
-          autoresponse CDATA #IMPLIED
-          vsspath CDATA #IMPLIED
-          comment CDATA #IMPLIED
-          version CDATA #IMPLIED
-          serverpath CDATA #IMPLIED
-          login CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          label CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT soscheckin EMPTY>
-<!ATTLIST soscheckin
-          id ID #IMPLIED
-          password CDATA #IMPLIED
-          comment CDATA #IMPLIED
-          nocompress %boolean; #IMPLIED
-          version CDATA #IMPLIED
-          username CDATA #IMPLIED
-          sosserverpath CDATA #IMPLIED
-          label CDATA #IMPLIED
-          vssserverpath CDATA #IMPLIED
-          soscmd CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          localpath CDATA #IMPLIED
-          nocache %boolean; #IMPLIED
-          projectpath CDATA #IMPLIED
-          description CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          recursive %boolean; #IMPLIED
-          file CDATA #IMPLIED
-          soshome CDATA #IMPLIED>
-
-<!ELEMENT cvspass EMPTY>
-<!ATTLIST cvspass
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          password CDATA #IMPLIED
-          description CDATA #IMPLIED
-          cvsroot CDATA #IMPLIED
-          passfile CDATA #IMPLIED>
-
-<!ELEMENT wljspc (include | patternset | exclude | classpath | excludesfile | includesfile)*>
-<!ATTLIST wljspc
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          package CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT move (filterchain | fileset | filterset | mapper)*>
-<!ATTLIST move
-          id ID #IMPLIED
-          flatten %boolean; #IMPLIED
-          encoding CDATA #IMPLIED
-          tofile CDATA #IMPLIED
-          todir CDATA #IMPLIED
-          file CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          includeemptydirs %boolean; #IMPLIED
-          overwrite %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          preservelastmodified %boolean; #IMPLIED
-          filtering %boolean; #IMPLIED>
-
-<!ELEMENT junitreport (report | fileset)*>
-<!ATTLIST junitreport
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          todir CDATA #IMPLIED
-          description CDATA #IMPLIED
-          tofile CDATA #IMPLIED>
-
-<!ELEMENT report EMPTY>
-<!ATTLIST report
-          id ID #IMPLIED
-          todir CDATA #IMPLIED
-          styledir CDATA #IMPLIED
-          format (frames | noframes) #IMPLIED
-          extension CDATA #IMPLIED>
-
-<!ELEMENT dirname EMPTY>
-<!ATTLIST dirname
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED
-          property CDATA #IMPLIED>
-
-<!ELEMENT vsscreate EMPTY>
-<!ATTLIST vsscreate
-          id ID #IMPLIED
-          ssdir CDATA #IMPLIED
-          autoresponse CDATA #IMPLIED
-          quiet %boolean; #IMPLIED
-          vsspath CDATA #IMPLIED
-          comment CDATA #IMPLIED
-          serverpath CDATA #IMPLIED
-          login CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED>
-
-<!ELEMENT javacc EMPTY>
-<!ATTLIST javacc
-          id ID #IMPLIED
-          debugparser %boolean; #IMPLIED
-          javacchome CDATA #IMPLIED
-          forcelacheck %boolean; #IMPLIED
-          optimizetokenmanager %boolean; #IMPLIED
-          commontokenaction %boolean; #IMPLIED
-          buildtokenmanager %boolean; #IMPLIED
-          sanitycheck %boolean; #IMPLIED
-          buildparser %boolean; #IMPLIED
-          otherambiguitycheck CDATA #IMPLIED
-          lookahead CDATA #IMPLIED
-          debuglookahead %boolean; #IMPLIED
-          choiceambiguitycheck CDATA #IMPLIED
-          unicodeinput %boolean; #IMPLIED
-          usercharstream %boolean; #IMPLIED
-          debugtokenmanager %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          outputdirectory CDATA #IMPLIED
-          cachetokens %boolean; #IMPLIED
-          javaunicodeescape %boolean; #IMPLIED
-          static %boolean; #IMPLIED
-          target CDATA #IMPLIED
-          ignorecase %boolean; #IMPLIED
-          usertokenmanager %boolean; #IMPLIED
-          errorreporting %boolean; #IMPLIED>
-
-<!ELEMENT csc (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST csc
-          id ID #IMPLIED
-          references CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          mainclass CDATA #IMPLIED
-          extraoptions CDATA #IMPLIED
-          additionalmodules CDATA #IMPLIED
-          win32icon CDATA #IMPLIED
-          destdir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          utf8output %boolean; #IMPLIED
-          includedefaultreferences %boolean; #IMPLIED
-          optimize %boolean; #IMPLIED
-          targettype CDATA #IMPLIED
-          win32res CDATA #IMPLIED
-          debug %boolean; #IMPLIED
-          unsafe %boolean; #IMPLIED
-          docfile CDATA #IMPLIED
-          incremental %boolean; #IMPLIED
-          includes CDATA #IMPLIED
-          outputfile CDATA #IMPLIED
-          description CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          warnlevel CDATA #IMPLIED
-          srcdir CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          fullpaths %boolean; #IMPLIED
-          definitions CDATA #IMPLIED
-          referencefiles CDATA #IMPLIED>
-
-<!ELEMENT signjar (fileset)*>
-<!ATTLIST signjar
-          id ID #IMPLIED
-          storepass CDATA #IMPLIED
-          lazy %boolean; #IMPLIED
-          jar CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          keypass CDATA #IMPLIED
-          alias CDATA #IMPLIED
-          sectionsonly %boolean; #IMPLIED
-          keystore CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          sigfile CDATA #IMPLIED
-          description CDATA #IMPLIED
-          internalsf %boolean; #IMPLIED
-          storetype CDATA #IMPLIED
-          signedjar CDATA #IMPLIED>
-
-<!ELEMENT cccheckin EMPTY>
-<!ATTLIST cccheckin
-          id ID #IMPLIED
-          preservetime %boolean; #IMPLIED
-          viewpath CDATA #IMPLIED
-          comment CDATA #IMPLIED
-          nowarn %boolean; #IMPLIED
-          identical %boolean; #IMPLIED
-          cleartooldir CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          keepcopy %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          commentfile CDATA #IMPLIED>
-
-<!ELEMENT iplanet-ejbc (classpath)*>
-<!ATTLIST iplanet-ejbc
-          id ID #IMPLIED
-          ejbdescriptor CDATA #IMPLIED
-          debug %boolean; #IMPLIED
-          classpath CDATA #IMPLIED
-          iasdescriptor CDATA #IMPLIED
-          iashome CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          description CDATA #IMPLIED
-          keepgenerated %boolean; #IMPLIED>
-
-<!ELEMENT unwar (include | fileset | exclude | patternset | excludesfile | includesfile)*>
-<!ATTLIST unwar
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          overwrite %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT ilasm (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST ilasm
-          id ID #IMPLIED
-          owner CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          extraoptions CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          targettype CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          debug %boolean; #IMPLIED
-          includes CDATA #IMPLIED
-          outputfile CDATA #IMPLIED
-          description CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          resourcefile CDATA #IMPLIED
-          srcdir CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          listing %boolean; #IMPLIED
-          keyfile CDATA #IMPLIED>
-
-<!ELEMENT touch (fileset)*>
-<!ATTLIST touch
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          millis CDATA #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED
-          datetime CDATA #IMPLIED>
-
-<!ELEMENT ccmcheckin EMPTY>
-<!ATTLIST ccmcheckin
-          id ID #IMPLIED
-          ccmaction CDATA #IMPLIED
-          task CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED
-          ccmdir CDATA #IMPLIED
-          comment CDATA #IMPLIED>
-
-<!ELEMENT blgenclient (classpath)*>
-<!ATTLIST blgenclient
-          id ID #IMPLIED
-          clientjar CDATA #IMPLIED
-          debug %boolean; #IMPLIED
-          classpath CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          description CDATA #IMPLIED
-          ejbjar CDATA #IMPLIED
-          mode CDATA #IMPLIED>
-
-<!ELEMENT get EMPTY>
-<!ATTLIST get
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          ignoreerrors %boolean; #IMPLIED
-          username CDATA #IMPLIED
-          usetimestamp %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          description CDATA #IMPLIED
-          password CDATA #IMPLIED>
-
-<!ELEMENT vsscheckout EMPTY>
-<!ATTLIST vsscheckout
-          id ID #IMPLIED
-          ssdir CDATA #IMPLIED
-          recursive %boolean; #IMPLIED
-          date CDATA #IMPLIED
-          autoresponse CDATA #IMPLIED
-          vsspath CDATA #IMPLIED
-          version CDATA #IMPLIED
-          serverpath CDATA #IMPLIED
-          login CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          label CDATA #IMPLIED
-          description CDATA #IMPLIED
-          localpath CDATA #IMPLIED>
-
-<!ELEMENT antipede-switch (default | case)*>
-<!ATTLIST antipede-switch
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          caseinsensitive %boolean; #IMPLIED
-          value CDATA #IMPLIED>
-
-<!ELEMENT default (%tasks;)*>
-<!ATTLIST default
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT case (%tasks;)*>
-<!ATTLIST case
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          value CDATA #IMPLIED>
-
-<!ELEMENT checkstyle (fileset | formatter)*>
-<!ATTLIST checkstyle
-          id ID #IMPLIED
-          memberpattern CDATA #IMPLIED
-          lcurlymethod CDATA #IMPLIED
-          allownoauthor %boolean; #IMPLIED
-          ignorebraces %boolean; #IMPLIED
-          staticpattern CDATA #IMPLIED
-          headerfile CDATA #IMPLIED
-          allowprotected %boolean; #IMPLIED
-          maxlinelen CDATA #IMPLIED
-          maxmethodlen CDATA #IMPLIED
-          javadocscope CDATA #IMPLIED
-          typepattern CDATA #IMPLIED
-          publicmemberpattern CDATA #IMPLIED
-          maxfilelen CDATA #IMPLIED
-          lcurlytype CDATA #IMPLIED
-          parampattern CDATA #IMPLIED
-          maxconstructorlen CDATA #IMPLIED
-          allowtabs %boolean; #IMPLIED
-          failonviolation %boolean; #IMPLIED
-          cachefile CDATA #IMPLIED
-          methodpattern CDATA #IMPLIED
-          lcurlyother CDATA #IMPLIED
-          allowpackage %boolean; #IMPLIED
-          localvarpattern CDATA #IMPLIED
-          description CDATA #IMPLIED
-          requirepackagehtml %boolean; #IMPLIED
-          rcurly CDATA #IMPLIED
-          ignoreimportlen %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          ignorewhitespace %boolean; #IMPLIED
-          headerignoreline CDATA #IMPLIED
-          file CDATA #IMPLIED
-          constpattern CDATA #IMPLIED
-          headerlinesregexp %boolean; #IMPLIED
-          ignoreimports %boolean; #IMPLIED
-          ignorecastwhitespace %boolean; #IMPLIED>
-
-<!ELEMENT formatter EMPTY>
-<!ATTLIST formatter
-          id ID #IMPLIED
-          type (xml | plain) #IMPLIED
-          tofile CDATA #IMPLIED
-          classname CDATA #IMPLIED>
-
-<!ELEMENT sosget EMPTY>
-<!ATTLIST sosget
-          id ID #IMPLIED
-          password CDATA #IMPLIED
-          comment CDATA #IMPLIED
-          nocompress %boolean; #IMPLIED
-          version CDATA #IMPLIED
-          username CDATA #IMPLIED
-          sosserverpath CDATA #IMPLIED
-          label CDATA #IMPLIED
-          vssserverpath CDATA #IMPLIED
-          soscmd CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          localpath CDATA #IMPLIED
-          nocache %boolean; #IMPLIED
-          projectpath CDATA #IMPLIED
-          description CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          recursive %boolean; #IMPLIED
-          file CDATA #IMPLIED
-          soshome CDATA #IMPLIED>
-
-<!ELEMENT javadoc (bottom | source | classpath | doctitle | header | excludepackage | bootclasspath | doclet | sourcepath | link | footer | package | group | tag)*>
-<!ATTLIST javadoc
-          id ID #IMPLIED
-          bottom CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          bootclasspathref IDREF #IMPLIED
-          header CDATA #IMPLIED
-          link CDATA #IMPLIED
-          noindex %boolean; #IMPLIED
-          access (protected | public | package | private) #IMPLIED
-          doclet CDATA #IMPLIED
-          public %boolean; #IMPLIED
-          author %boolean; #IMPLIED
-          footer CDATA #IMPLIED
-          docletpath CDATA #IMPLIED
-          package %boolean; #IMPLIED
-          useexternalfile %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          sourcepathref IDREF #IMPLIED
-          protected %boolean; #IMPLIED
-          nonavbar %boolean; #IMPLIED
-          maxmemory CDATA #IMPLIED
-          group CDATA #IMPLIED
-          linkoffline CDATA #IMPLIED
-          additionalparam CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          locale CDATA #IMPLIED
-          destdir CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          bootclasspath CDATA #IMPLIED
-          private %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          charset CDATA #IMPLIED
-          nodeprecatedlist %boolean; #IMPLIED
-          classpathref IDREF #IMPLIED
-          stylesheetfile CDATA #IMPLIED
-          docencoding CDATA #IMPLIED
-          excludepackagenames CDATA #IMPLIED
-          docletpathref IDREF #IMPLIED
-          packagenames CDATA #IMPLIED
-          windowtitle CDATA #IMPLIED
-          notree %boolean; #IMPLIED
-          splitindex %boolean; #IMPLIED
-          packagelist CDATA #IMPLIED
-          encoding CDATA #IMPLIED
-          doctitle CDATA #IMPLIED
-          serialwarn %boolean; #IMPLIED
-          old %boolean; #IMPLIED
-          use %boolean; #IMPLIED
-          sourcepath CDATA #IMPLIED
-          helpfile CDATA #IMPLIED
-          version %boolean; #IMPLIED
-          sourcefiles CDATA #IMPLIED
-          extdirs CDATA #IMPLIED
-          nohelp %boolean; #IMPLIED
-          nodeprecated %boolean; #IMPLIED
-          overview CDATA #IMPLIED>
-
-<!ELEMENT record EMPTY>
-<!ATTLIST record
-          id ID #IMPLIED
-          append %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          name CDATA #IMPLIED
-          loglevel (error | warn | info | verbose | debug) #IMPLIED
-          description CDATA #IMPLIED
-          action (start | stop) #IMPLIED>
-
-<!ELEMENT untar (include | fileset | exclude | patternset | excludesfile | includesfile)*>
-<!ATTLIST untar
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          overwrite %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT delete (include | fileset | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST delete
-          id ID #IMPLIED
-          file CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          quiet %boolean; #IMPLIED
-          verbose %boolean; #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          includeemptydirs %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT antipede-jjar EMPTY>
-<!ATTLIST antipede-jjar
-          id ID #IMPLIED
-          classpath CDATA #IMPLIED
-          verifyignore %boolean; #IMPLIED
-          version CDATA #IMPLIED
-          repository CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          localrepository CDATA #IMPLIED
-          pathrefid CDATA #IMPLIED
-          package CDATA #IMPLIED
-          description CDATA #IMPLIED
-          onlydependencies %boolean; #IMPLIED>
-
-<!ELEMENT basename EMPTY>
-<!ATTLIST basename
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED
-          property CDATA #IMPLIED
-          suffix CDATA #IMPLIED>
-
-<!ELEMENT copydir (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST copydir
-          id ID #IMPLIED
-          flatten %boolean; #IMPLIED
-          src CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          description CDATA #IMPLIED
-          forceoverwrite %boolean; #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          filtering %boolean; #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT loadproperties (filterchain)*>
-<!ATTLIST loadproperties
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          srcfile CDATA #IMPLIED>
-
-<!ELEMENT war (include | manifest | exclude | patternset | webinf | classes | fileset | lib | metainf | excludesfile | includesfile | zipfileset | zipgroupfileset)*>
-<!ATTLIST war
-          id ID #IMPLIED
-          whenempty (fail | skip | create) #IMPLIED
-          duplicate (add | preserve | fail) #IMPLIED
-          excludes CDATA #IMPLIED
-          basedir CDATA #IMPLIED
-          encoding CDATA #IMPLIED
-          manifest CDATA #IMPLIED
-          jarfile CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          index %boolean; #IMPLIED
-          update %boolean; #IMPLIED
-          destfile CDATA #IMPLIED
-          includes CDATA #IMPLIED
-          description CDATA #IMPLIED
-          webxml CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          compress %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          filesonly %boolean; #IMPLIED
-          warfile CDATA #IMPLIED
-          file CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          filesetmanifest (skip | merge | mergewithoutmain) #IMPLIED
-          zipfile CDATA #IMPLIED>
-
-<!ELEMENT webinf (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST webinf
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          prefix CDATA #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          fullpath CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT classes (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST classes
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          prefix CDATA #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          fullpath CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT lib (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST lib
-          id ID #IMPLIED
-          src CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          dir CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          prefix CDATA #IMPLIED
-          casesensitive %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          fullpath CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT ccupdate EMPTY>
-<!ATTLIST ccupdate
-          id ID #IMPLIED
-          preservetime %boolean; #IMPLIED
-          rename %boolean; #IMPLIED
-          viewpath CDATA #IMPLIED
-          log CDATA #IMPLIED
-          overwrite %boolean; #IMPLIED
-          cleartooldir CDATA #IMPLIED
-          graphical %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          currenttime %boolean; #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT concat (#PCDATA | fileset | filelist)*>
-<!ATTLIST concat
-          id ID #IMPLIED
-          append %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          encoding CDATA #IMPLIED
-          destfile CDATA #IMPLIED>
-
-<!ELEMENT depend (include | patternset | exclude | classpath | excludesfile | includesfile)*>
-<!ATTLIST depend
-          id ID #IMPLIED
-          cache CDATA #IMPLIED
-          destdir CDATA #IMPLIED
-          classpath CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          dump %boolean; #IMPLIED
-          closure %boolean; #IMPLIED
-          classpathref IDREF #IMPLIED
-          taskname CDATA #IMPLIED
-          srcdir CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT ccmcheckout EMPTY>
-<!ATTLIST ccmcheckout
-          id ID #IMPLIED
-          ccmaction CDATA #IMPLIED
-          task CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          file CDATA #IMPLIED
-          description CDATA #IMPLIED
-          ccmdir CDATA #IMPLIED
-          comment CDATA #IMPLIED>
-
-<!ELEMENT parallel (%tasks;)*>
-<!ATTLIST parallel
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT renameext (include | patternset | exclude | excludesfile | includesfile)*>
-<!ATTLIST renameext
-          id ID #IMPLIED
-          replace %boolean; #IMPLIED
-          toextension CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          fromextension CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          srcdir CDATA #IMPLIED
-          description CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          excludes CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          includes CDATA #IMPLIED>
-
-<!ELEMENT vssadd EMPTY>
-<!ATTLIST vssadd
-          id ID #IMPLIED
-          ssdir CDATA #IMPLIED
-          recursive %boolean; #IMPLIED
-          autoresponse CDATA #IMPLIED
-          vsspath CDATA #IMPLIED
-          comment CDATA #IMPLIED
-          serverpath CDATA #IMPLIED
-          writable %boolean; #IMPLIED
-          login CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          localpath CDATA #IMPLIED>
-
-<!ELEMENT antipede-trycatch (try | finally | catch)*>
-<!ATTLIST antipede-trycatch
-          id ID #IMPLIED
-          reference CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED
-          property CDATA #IMPLIED>
-
-<!ELEMENT try (%tasks;)*>
-<!ATTLIST try
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT finally (%tasks;)*>
-<!ATTLIST finally
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT catch (%tasks;)*>
-<!ATTLIST catch
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT exec (arg | env)*>
-<!ATTLIST exec
-          id ID #IMPLIED
-          output CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          command CDATA #IMPLIED
-          outputproperty CDATA #IMPLIED
-          os CDATA #IMPLIED
-          resultproperty CDATA #IMPLIED
-          failifexecutionfails %boolean; #IMPLIED
-          timeout CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          vmlauncher %boolean; #IMPLIED
-          description CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          newenvironment %boolean; #IMPLIED
-          executable CDATA #IMPLIED>
-
-<!ELEMENT apply (arg | fileset | env | targetfile | srcfile | mapper)*>
-<!ATTLIST apply
-          id ID #IMPLIED
-          resultproperty CDATA #IMPLIED
-          skipemptyfilesets %boolean; #IMPLIED
-          type (file | dir | both) #IMPLIED
-          failifexecutionfails %boolean; #IMPLIED
-          command CDATA #IMPLIED
-          executable CDATA #IMPLIED
-          os CDATA #IMPLIED
-          output CDATA #IMPLIED
-          timeout CDATA #IMPLIED
-          dest CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          description CDATA #IMPLIED
-          outputproperty CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED
-          taskname CDATA #IMPLIED
-          newenvironment %boolean; #IMPLIED
-          vmlauncher %boolean; #IMPLIED
-          relative %boolean; #IMPLIED
-          parallel %boolean; #IMPLIED>
-
-<!ELEMENT junit2 (batchtest | jvmarg | classpath | sysproperty | formatter | env | test)*>
-<!ATTLIST junit2
-          id ID #IMPLIED
-          haltonerror %boolean; #IMPLIED
-          fork %boolean; #IMPLIED
-          jvm CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          failureproperty CDATA #IMPLIED
-          maxmemory CDATA #IMPLIED
-          filtertrace %boolean; #IMPLIED
-          includeantruntime %boolean; #IMPLIED
-          haltonfailure %boolean; #IMPLIED
-          errorproperty CDATA #IMPLIED
-          timeout CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          printsummary (true | yes | false | no | on | off | withOutAndErr) #IMPLIED
-          description CDATA #IMPLIED
-          newenvironment %boolean; #IMPLIED>
-
-<!ELEMENT batchtest (fileset | formatter)*>
-<!ATTLIST batchtest
-          id ID #IMPLIED
-          if CDATA #IMPLIED
-          unless CDATA #IMPLIED
-          haltonerror %boolean; #IMPLIED
-          fork %boolean; #IMPLIED
-          todir CDATA #IMPLIED
-          failureproperty CDATA #IMPLIED
-          filtertrace %boolean; #IMPLIED
-          haltonfailure %boolean; #IMPLIED
-          errorproperty CDATA #IMPLIED>
-
-<!ELEMENT input (#PCDATA)>
-<!ATTLIST input
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          addproperty CDATA #IMPLIED
-          description CDATA #IMPLIED
-          validargs CDATA #IMPLIED
-          message CDATA #IMPLIED
-          testinput CDATA #IMPLIED>
-
-<!ELEMENT soslabel EMPTY>
-<!ATTLIST soslabel
-          id ID #IMPLIED
-          password CDATA #IMPLIED
-          comment CDATA #IMPLIED
-          nocompress %boolean; #IMPLIED
-          version CDATA #IMPLIED
-          username CDATA #IMPLIED
-          sosserverpath CDATA #IMPLIED
-          label CDATA #IMPLIED
-          vssserverpath CDATA #IMPLIED
-          soscmd CDATA #IMPLIED
-          verbose %boolean; #IMPLIED
-          localpath CDATA #IMPLIED
-          nocache %boolean; #IMPLIED
-          projectpath CDATA #IMPLIED
-          description CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          recursive %boolean; #IMPLIED
-          file CDATA #IMPLIED
-          soshome CDATA #IMPLIED>
-
-<!ELEMENT bzip2 EMPTY>
-<!ATTLIST bzip2
-          id ID #IMPLIED
-          taskname CDATA #IMPLIED
-          zipfile CDATA #IMPLIED
-          description CDATA #IMPLIED
-          src CDATA #IMPLIED>
-
-<!ELEMENT jdepend2 (classpath | sourcespath)*>
-<!ATTLIST jdepend2
-          id ID #IMPLIED
-          haltonerror %boolean; #IMPLIED
-          fork %boolean; #IMPLIED
-          classpath CDATA #IMPLIED
-          jvm CDATA #IMPLIED
-          dir CDATA #IMPLIED
-          outputfile CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          taskname CDATA #IMPLIED
-          format (xml | text) #IMPLIED
-          description CDATA #IMPLIED>
-
-<!ELEMENT sourcespath (fileset | dirset | filelist | pathelement | path)*>
-<!ATTLIST sourcespath
-          id ID #IMPLIED
-          location CDATA #IMPLIED
-          refid IDREF #IMPLIED
-          description CDATA #IMPLIED
-          path CDATA #IMPLIED>
-
-<!ELEMENT rmic (include | patternset | exclude | classpath | extdirs | excludesfile | includesfile)*>
-<!ATTLIST rmic
-          id ID #IMPLIED
-          verify %boolean; #IMPLIED
-          excludes CDATA #IMPLIED
-          iiop %boolean; #IMPLIED
-          idlopts CDATA #IMPLIED
-          extdirs CDATA #IMPLIED
-          sourcebase CDATA #IMPLIED
-          classpathref IDREF #IMPLIED
-          base CDATA #IMPLIED
-          defaultexcludes %boolean; #IMPLIED
-          includeantruntime %boolean; #IMPLIED
-          includejavaruntime %boolean; #IMPLIED
-          classpath CDATA #IMPLIED
-          debug %boolean; #IMPLIED
-          includes CDATA #IMPLIED
-          description CDATA #IMPLIED
-          includesfile CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          idl %boolean; #IMPLIED
-          iiopopts CDATA #IMPLIED
-          classname CDATA #IMPLIED
-          excludesfile CDATA #IMPLIED
-          filtering %boolean; #IMPLIED
-          stubversion CDATA #IMPLIED>
-
-<!ELEMENT sleep EMPTY>
-<!ATTLIST sleep
-          id ID #IMPLIED
-          hours CDATA #IMPLIED
-          taskname CDATA #IMPLIED
-          milliseconds CDATA #IMPLIED
-          minutes CDATA #IMPLIED
-          description CDATA #IMPLIED
-          seconds CDATA #IMPLIED
-          failonerror %boolean; #IMPLIED>
-
diff --git a/tools/antipede/build.xtarget b/tools/antipede/build.xtarget
deleted file mode 100644 (file)
index 32db6d6..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-  <!-- =================================================================== -->
-  <!-- Prepares the source code                                            -->
-  <!-- =================================================================== -->
-  <target name="-prepare-src">
-
-    <mkdir dir="${xlayout.build.java.dir}"/>
-    <mkdir dir="${xlayout.build.classes.dir}"/>
-    <copy todir="${xlayout.build.java.dir}" filtering="off">
-      <fileset dir="${xlayout.source.java.dir}"/>
-    </copy>
-
-    <mkdir dir="${xlayout.build.scratchpad.java.dir}"/>
-    <mkdir dir="${xlayout.build.scratchpad.classes.dir}"/>
-    <copy todir="${xlayout.build.scratchpad.java.dir}" filtering="off">
-      <fileset dir="${xlayout.source.scratchpad.java.dir}"/>
-    </copy>
-    
-    <mkdir dir="${xlayout.build.examples.java.dir}"/>
-    <mkdir dir="${xlayout.build.examples.classes.dir}"/>
-    <copy todir="${xlayout.build.examples.java.dir}" filtering="off">
-      <fileset dir="${xlayout.source.examples.java.dir}"/>
-    </copy>
-
-    <mkdir dir="${xlayout.build.contributions.java.dir}"/>
-    <mkdir dir="${xlayout.build.contributions.classes.dir}"/>
-    <copy todir="${xlayout.build.contributions.java.dir}" filtering="off">
-      <fileset dir="${xlayout.source.contributions.java.dir}"/>
-    </copy>    
-
-  </target>
-  
-  <target name="-init" unless="${antipede.init.already.called}">
-   <tstamp>
-     <format property="YEAR" pattern="yyyy" locale="en"/>
-   </tstamp>
-   
-   <buildnumber/>
-
-   <property name="antipede.init.already.called" value="true"/>
-   
-   <echo>
-    --------------------------------------------------------------
-
-      Using ${ant.version}
-      Build file ${ant.file}
-      Build number ${build.number}
-      Project Name ${ant.project.name}
-      Java Version ${ant.java.version}      
-      Timestamp ${DSTAMP}${TSTAMP}
-
-    --------------------------------------------------------------
-   </echo>
-       
-   <!--
-    The location of tools.jar, relative to the JAVA_HOME home.
-    If tools.jar is not present, exit with an error, since it
-    means that a JDK is not installed.
-    -->
-    <property name="tools.jar" value="${java.home}/../lib/tools.jar"/>
-    <available file="${tools.jar}" property="tools.jar.present"/>
-    <fail unless="tools.jar.present" message="tools.jar not found. Probably you are using the JRE and the JDK is not installed. Please download the JDK from the Java Sun website www.javasoft.com ."/>    
-
-
-    <!-- fixed centipede dirs -->
-    <property name="tools.dir"                   value="tools"/>
-    
-    <property name="temp.dir"                    value="tools/tmp"/>
-    <mkdir   dir="${temp.dir}"/>
-    <property name="cents.dir"                   value="tools/cents"/>
-    <mkdir   dir="${cents.dir}"/>
-        
-    <property name="antipede.dir"                value="tools/antipede"/>
-    <property name="antipede.lib.dir"            value="tools/antipede/lib"/>
-    
-    <property name="cent.lib.dir.name"           value="lib"/>
-    <property name="task.properties.name"        value="tasks.properties"/>
-    <property name="cent.jar.suffix"             value="cent.jar"/>    
-    <property name="cent.dir.suffix"             value="cent"/>    
-    
-                        
-    <!-- define all ant tasks in antipede -->
-    <taskdef file="${antipede.dir}/${task.properties.name}">
-     <classpath>
-      <path>
-       <fileset dir="${antipede.lib.dir}" casesensitive="yes"> 
-         <include name="*.jar"/>
-         <include name="*.zip"/>
-       </fileset>  
-      </path>
-     </classpath>
-    </taskdef>
-    
-    <!--
-    Load project information
-    -->
-    <xmlproperty file="module.xml"     prefix="xgump"    keeproot="true"  collapseAttributes="true" />
-    <xmlproperty file="status.xml"     prefix="xstatus"  keeproot="false" collapseAttributes="true" />   
-    <xmlproperty file="layout.xml"     prefix="xlayout"  keeproot="false" collapseAttributes="true" />
-    <xmlproperty file="properties.xml"                   keeproot="false" collapseAttributes="true" />
-    
-    <antcall target="get-needed-cents"/>
-
-    <delete file="${temp.dir}/${task.properties.name}"/>
-                        
-    <!-- put all ant task definitions in cents in a single file -->
-    <antipede-trycatch><try>
-    
-    <concat destfile="${temp.dir}/${task.properties.name}" append="no">
-      <fileset dir=".">
-       <patternset>
-         <include name="${cents.dir}/*.${cent.dir.suffix}/${task.properties.name}"/>
-       </patternset>
-     </fileset>          
-    </concat>
-
-    <!-- define the tasks found in cents -->
-    <taskdef file="${temp.dir}/${task.properties.name}">
-     <classpath>      
-      <fileset dir="./tools">
-        <include name="**/*.jar"/>
-      </fileset>
-     </classpath>
-    </taskdef>
-    
-    </try>
-    <catch><echo message="Unable to load tasks... could be already loaded." /></catch>
-    </antipede-trycatch>
-
-    <antcall target="-prepare-src"/>
-       
-  </target>
-
-  <!-- ================================ -->
-  <!--  Used only by the -init target   -->
-  <!-- =================================--> 
-  <target  name="get-needed-cents">
-  
-    <style basedir="."
-           destdir="${temp.dir}"
-           includes="properties.xml"
-           extension=".build.xml"
-           style="${antipede.dir}/resources/stylesheets/getcent.xsl"/>
-           
-    <ant antfile="${temp.dir}/properties.build.xml"
-         inheritall="true" 
-         dir="."
-         target="getcents" />        
-
-    <style basedir="."
-           destdir="${temp.dir}"
-           includes="module.xml"
-           extension=".build.xml"
-           style="${antipede.dir}/resources/stylesheets/getcorelibs.xsl"/>
-<!--           
-     <ant antfile="${temp.dir}/module.build.xml"
-         inheritall="true" 
-         dir="."
-         target="getcorelibs" />        
--->
-    
-    <!-- Unpack jarred cents -->
-    <antipede-foreach target="-cent-unjar" param="current.cent.jar">
-     <fileset dir="." casesensitive="yes"> 
-      <patternset>
-       <include name="${cents.dir}/*.${cent.jar.suffix}"/>
-      </patternset>
-     </fileset>  
-    </antipede-foreach>
-
-    <delete dir="${cents.dir}/META-INF"/>  
-    
-  </target>   
-  
-  <!-- ================================ -->
-  <!--  Used only by the -init target   -->
-  <!-- =================================--> 
-  <target  name="-cent-unjar" depends="-cent-unjar-expand,-cent-unjar-keep"/>      
-  
-  <!-- ================================ -->
-  <!--  Used only by the -init target   -->
-  <!-- =================================--> 
-  <target  name="-cent-unjar-check">
-      
-    <basename property="current.cent.jar.name" file="${current.cent.jar}" suffix=".cent.jar"/>
-    
-    <condition property="cent-unjar.not.required">
-      <and>
-        <uptodate targetfile="${cents.dir}/${current.cent.jar.name}.${cent.dir.suffix}/${task.properties.name}"
-                  srcfile="${current.cent.jar}"/>
-        <available type="file" file="${cents.dir}/${current.cent.jar.name}.${cent.dir.suffix}/${task.properties.name}"/>
-      </and>
-    </condition>
-  </target>       
-
-  <!-- ====================================== -->
-  <!--  Used only by the -cent-unjar target   -->
-  <!-- ====================================== --> 
-  <target  name="-cent-unjar-expand" unless="cent-unjar.not.required" 
-           depends="-cent-unjar-check">
-      <echo message="Expanding ${current.cent.jar}..." />
-      <unjar src="${current.cent.jar}" dest="${cents.dir}"/> 
-      <touch>
-        <fileset dir="${cents.dir}/${current.cent.jar.name}.${cent.dir.suffix}"/>
-      </touch>      
-      <echo message="... ${current.cent.jar} expanded in ${current.cent.jar.name}." />    
-  </target> 
-
-  <!-- ====================================== -->
-  <!--  Used only by the -cent-unjar target   -->
-  <!-- =======================================--> 
-  <target  name="-cent-unjar-keep" if="cent-unjar.not.required"
-           depends="-cent-unjar-check">
-      <echo message="${current.cent.jar} is uptodate with respect to ${current.cent.jar.name}." />
-      <echo message="No need to expand it." />
-  </target> 
-            
-  <!-- ============================================= -->
-  <!-- Simple utility target to call a cent target   -->
-  <!-- ==============================================-->
-  <target name="call-cent">
-     <ant antfile="tools/cents/${cent-name}.cent/xbuild.xml"
-         inheritall="true" 
-         dir="."
-         target="${cent-target}" />       
-  </target>            
-  
-  <!-- ============================================= -->
-  <!-- Simple utility target to call a cent target   -->
-  <!-- ==============================================-->
-  <target name="cent-target" depends="-init">
-     <ant antfile="tools/cents/${cent-name}.cent/xbuild.xml"
-         inheritall="true" 
-         dir="."
-         target="${cent-target}" />       
-  </target>     
-    
-  <!-- ================================== -->
-  <!--   Create a cent.jar package        -->
-  <!--   using an already deployed cent   -->
-  <!-- ================================== -->
-  
-  <target  name="jar-cent"   depends="-init">
-
-    <antcall target="call-cent">
-      <param name="cent-name"   value="centipede"/> 
-      <param name="cent-target" value="jar-cent"/> 
-    </antcall>
-    
-  </target>      
-
-  <!-- ================================== -->
-  <!--   Create a cent.jar package        -->
-  <!--   using an already deployed cent   -->
-  <!-- ================================== -->
-  
-  <target  name="update-cent">
-
-    <centipede-user-input name="cent-name">Please select a cent to update: </centipede-user-input> 
-    <delete file="${cents.dir}/${cent-name}.${cent.jar.suffix}"/>
-    <delete  dir="${cents.dir}/${cent-name}.${cent.dir.suffix}"/>
-    
-    <antcall target="get-needed-cents"/>
-            
-  </target>   
-
-  <!-- ================================== -->
-  <!--   Create a cent.jar package        -->
-  <!--   using an already deployed cent   -->
-  <!-- ================================== -->
-  
-  <target  name="update-all-cents">
-  
-    <property name="yn" value="n"/>
-    <centipede-user-input name="yn">This will delete and download all cents. Are you sure? [y/n]: </centipede-user-input> 
-   
-   
-    <condition property="stopit">
-     <not>
-      <equals arg1="${yn}" arg2="y"/>
-     </not>
-    </condition>
-
-    <fail if="stopit"/>
-   
-    <delete  dir="${cents.dir}"/>
-    <mkdir   dir="${cents.dir}"/>
-    
-    <antcall target="get-needed-cents"/>
-    
-  </target>   
-      
-  <!-- ================================== -->
-  <!--   Create a cent.jar package        -->
-  <!--   using an already deployed cent   -->
-  <!-- ================================== -->
-  
-  <target  name="create-dtd"   depends="-init">
-    <antstructure output="${xlayout.build.dir}/build.dtd"/>
-  </target>       
diff --git a/tools/antipede/lib/ant-1.5-dev-20020402.jar b/tools/antipede/lib/ant-1.5-dev-20020402.jar
deleted file mode 100644 (file)
index 60e24be..0000000
Binary files a/tools/antipede/lib/ant-1.5-dev-20020402.jar and /dev/null differ
diff --git a/tools/antipede/lib/ant-contrib-0.1.jar b/tools/antipede/lib/ant-contrib-0.1.jar
deleted file mode 100644 (file)
index a80386d..0000000
Binary files a/tools/antipede/lib/ant-contrib-0.1.jar and /dev/null differ
diff --git a/tools/antipede/lib/ant-optional-1.5-dev-20020402.jar b/tools/antipede/lib/ant-optional-1.5-dev-20020402.jar
deleted file mode 100644 (file)
index dbb17b3..0000000
Binary files a/tools/antipede/lib/ant-optional-1.5-dev-20020402.jar and /dev/null differ
diff --git a/tools/antipede/lib/ant-taskdefs-dev-20020402.jar b/tools/antipede/lib/ant-taskdefs-dev-20020402.jar
deleted file mode 100644 (file)
index 64d26cb..0000000
Binary files a/tools/antipede/lib/ant-taskdefs-dev-20020402.jar and /dev/null differ
diff --git a/tools/antipede/lib/ant-xmlproperty-1.5-cvs.jar b/tools/antipede/lib/ant-xmlproperty-1.5-cvs.jar
deleted file mode 100644 (file)
index 0e81028..0000000
Binary files a/tools/antipede/lib/ant-xmlproperty-1.5-cvs.jar and /dev/null differ
diff --git a/tools/antipede/lib/jjar.jar b/tools/antipede/lib/jjar.jar
deleted file mode 100644 (file)
index 8c1610a..0000000
Binary files a/tools/antipede/lib/jjar.jar and /dev/null differ
diff --git a/tools/antipede/lib/krysalis-centipede.jar b/tools/antipede/lib/krysalis-centipede.jar
deleted file mode 100644 (file)
index 1ac63c1..0000000
Binary files a/tools/antipede/lib/krysalis-centipede.jar and /dev/null differ
diff --git a/tools/antipede/resources/stylesheets/build.xsl b/tools/antipede/resources/stylesheets/build.xsl
deleted file mode 100644 (file)
index 92fd964..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" ?>
-<!-- Create documentation from an ant build file  -->
-<xsl:stylesheet version="1.0"
-xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
-       <xsl:output method="html"  indent="yes"/>
-       
-       <xsl:template match="project">
-               <html>
-               <body>
-               <h1><xsl:value-of select="./@name"/></h1>
-                       <pre><xsl:value-of select="./description"/></pre>
-                       <br />
-                       <xsl:apply-templates select="target"/>
-               </body>
-               </html>
-       </xsl:template >
-       
-       <xsl:template match="*[ @description | @taskname]">
-       <!-- use taskname if it exists, otherwise use the task element name-->
-               <li><b>
-               <xsl:if test="not(@taskname)">
-                               <xsl:value-of select="name()"/>
-               </xsl:if>
-               <xsl:value-of select="@taskname"/></b>
-               <xsl:text> </xsl:text>
-               <xsl:value-of select="@description"/>
-               </li>
-       </xsl:template>
-       
-       <xsl:template match="//target">
-         
-         <xsl:if test = "not(starts-with(@name,'-'))">
-          <p>
-               <b><xsl:value-of select="@name"/></b> - 
-               <xsl:value-of select="@description"/>
-               <ul><xsl:apply-templates select="./*"/></ul>
-               </p>
-         </xsl:if>
-       </xsl:template>
-               
-       <xsl:template match="*"/>
-       
-</xsl:stylesheet>
diff --git a/tools/antipede/resources/stylesheets/getcent.xsl b/tools/antipede/resources/stylesheets/getcent.xsl
deleted file mode 100644 (file)
index 0225d00..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-       <xsl:template match="/">        
-        <project default="getcents" basedir="." name="getcents">
-      
-       <description>            
-         Autogenerated Ant build file that downloads needed cents for the project.
-       </description>
-        
-          <target name="getcents">
-            <xsl:attribute name="depends">
-              <xsl:for-each select = "properties/centipede/tools/cents/*">
-                <xsl:value-of select="name()"/>-present,
-           </xsl:for-each>
-              <xsl:for-each select = "properties/centipede/tools/cents/*">
-                <xsl:value-of select="name()"/>-target,
-           </xsl:for-each>dummy-target
-        </xsl:attribute> 
-       </target>          
-
-       <xsl:apply-templates/>
-       
-          <target name="dummy-target">
-            <echo message="cents fetch finished"/>
-       </target> 
-              
-     </project>  
-       </xsl:template>
-               
-
-       <xsl:template match="properties">       
-       
-       <xsl:variable name = "repository" select = "centipede/tools/cents/./@repository" />      
-      
-      <xsl:for-each select = "centipede/tools/cents/*">
-       
-          <target>
-             <xsl:attribute name="name"><xsl:value-of select="name()"/>-target</xsl:attribute>
-             <xsl:attribute name="unless"><xsl:value-of select="name()"/>.present</xsl:attribute>
-             <xsl:attribute name="depends"><xsl:value-of select="name()"/>-present</xsl:attribute> 
-                     
-        <antipede-jjar>
-         
-         <xsl:attribute name="package"><xsl:value-of select="name()"/>.cent</xsl:attribute> 
-         <xsl:attribute name="repository"><xsl:value-of select="$repository"/></xsl:attribute>   
-         <xsl:attribute name="localrepository">${cents.dir}</xsl:attribute>    
-         <xsl:attribute name="pathrefid">dummy.classpath</xsl:attribute>
-         <!--            
-         <xsl:attribute name="version"></xsl:attribute> 
-         <xsl:attribute name="pathrefid"></xsl:attribute> 
-         <xsl:attribute name="classpath"></xsl:attribute> 
-         <xsl:attribute name="onlyDependencies"></xsl:attribute> 
-         <xsl:attribute name="verifyignore"></xsl:attribute> -->
-      
-        </antipede-jjar>
-       </target>       
-      </xsl:for-each>
-
-      <xsl:for-each select = "centipede/tools/cents/*">
-       
-          <target>
-             <xsl:attribute name="name"><xsl:value-of select="name()"/>-present</xsl:attribute>
-             
-          <condition>
-               <xsl:attribute name="property"><xsl:value-of select="name()"/>.present</xsl:attribute>          
-            <or>
-             <available>
-              <xsl:attribute name="file">${cents.dir}/<xsl:value-of select="name()"/>.cent.jar</xsl:attribute>          
-             </available>
-             <available type="dir">
-              <xsl:attribute name="file">${cents.dir}/<xsl:value-of select="name()"/>.cent</xsl:attribute>          
-            </available>
-           </or>
-          </condition>
-
-          <echo><xsl:value-of select="name()"/> cent is present: ${<xsl:value-of select="name()"/>.present}</echo> 
-       </target>       
-      </xsl:for-each>
-                 
-       </xsl:template>
-               
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/tools/antipede/resources/stylesheets/getcorelibs.xsl b/tools/antipede/resources/stylesheets/getcorelibs.xsl
deleted file mode 100644 (file)
index e858340..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-       <xsl:template match="/">        
-        <project default="getcorelibs" basedir="." name="getcorelibs">
-      
-       <description>            
-         Autogenerated Ant build file that downloads core libs for the project.
-       </description>
-        
-          <target name="getcorelibs">
-            <xsl:attribute name="depends">
-              <xsl:for-each select = "module/project/depend">
-                <xsl:value-of select="@project"/>-present,
-           </xsl:for-each>
-              <xsl:for-each select = "module/project/depend">
-                <xsl:value-of select="@project"/>-target,
-           </xsl:for-each>dummy-target
-        </xsl:attribute> 
-       </target>          
-
-       <xsl:apply-templates/>
-       
-          <target name="dummy-target">
-            <echo message="core libs fetch finished"/>
-       </target> 
-              
-     </project>  
-       </xsl:template>
-               
-
-       <xsl:template match="properties">       
-       
-       <xsl:variable name = "repository" select = "@project" />         
-      
-      <xsl:for-each select = "module/project/depend">
-       
-          <target>
-             <xsl:attribute name="name"><xsl:value-of select="@project"/>-target</xsl:attribute>
-             <xsl:attribute name="unless"><xsl:value-of select="@project"/>.present</xsl:attribute>
-             <xsl:attribute name="depends"><xsl:value-of select="@project"/>-present</xsl:attribute> 
-                     
-        <antipede-jjar>
-         
-         <xsl:attribute name="package"><xsl:value-of select="@project"/></xsl:attribute> 
-         <xsl:attribute name="repository"><xsl:value-of select="$repository"/></xsl:attribute>   
-         <xsl:attribute name="localrepository">${xlayout.lib.core.dir}</xsl:attribute>    
-         <xsl:attribute name="pathrefid">dummy.classpath</xsl:attribute>
-         <!--            
-         <xsl:attribute name="version"></xsl:attribute> 
-         <xsl:attribute name="pathrefid"></xsl:attribute> 
-         <xsl:attribute name="classpath"></xsl:attribute> 
-         <xsl:attribute name="onlyDependencies"></xsl:attribute> 
-         <xsl:attribute name="verifyignore"></xsl:attribute> -->
-      
-        </antipede-jjar>
-       </target>       
-      </xsl:for-each>
-
-      <xsl:for-each select = "module/project/depend">
-       
-          <target>
-             <xsl:attribute name="name"><xsl:value-of select="@project"/>-present</xsl:attribute>
-
-          <available>
-            <xsl:attribute name="file">${cents.dir}/<xsl:value-of select="@project"/>.cent.jar</xsl:attribute>          
-               <xsl:attribute name="property"><xsl:value-of select="@project"/>.present</xsl:attribute>
-          </available>
-
-          <echo><xsl:value-of select="@project"/>.jar is present: ${<xsl:value-of select="@project"/>.present}</echo> 
-       </target>       
-      </xsl:for-each>
-                 
-       </xsl:template>
-               
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/tools/antipede/resources/stylesheets/layout.xsl b/tools/antipede/resources/stylesheets/layout.xsl
deleted file mode 100644 (file)
index 05e57c3..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-   
-   <xsl:output indent="yes" method="html"/>
-
-   <xsl:template match="/">
-      <html>
-         <head>
-           <title>Project properties</title>
-           <style><![CDATA[
-   <!--
-
-td.block
-{   display:block; 
-    text-align: justify; 
-    font-weight:plain;
-    padding: 0px;
-    background-color: #414681; 
-    color: #ffffff; 
-    margin: 5px 0px 5px 0px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-}
-
-td.comment
-{   display:block; 
-    text-align: justify; 
-    font-weight:plain;
-    font-style:italic;   
-    padding: 0px;
-    background-color: #cfcdc6; 
-    color: #000000; 
-    margin: 5px 0px 5px 0px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-}
-
-td.name {display:block; 
-      list-style-type:disc;
-      text-align: left; 
-      font-weight:plain;
-      padding: 0px;
-      background-color: #FFFFFF; 
-      color: #000000; 
-      margin: 0px 0px 0px 40px; 
-      font-size: 12px; 
-      font-family: Verdana, Arial, Helvetica, sans-serif
-    }
-    
-
-td.value {
-    display:block; 
-    text-align: left; 
-    font-weight:plain;
-    padding: 0px;
-    background-color: #ffe3a6; 
-    color: #000000; 
-    margin: 0px 0px 0px 40px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-  }
-
-
-     //-->]]>
-
-           </style>
-         </head>
-         <body>
-           <table><tr><td>
-            <xsl:apply-templates/>
-           </td></tr></table> 
-         </body>
-      </html>
-   </xsl:template>
-
-   <xsl:template match="@*">
-   </xsl:template>
-
-   <xsl:template match="text()">
-      <xsl:value-of select="."/>
-   </xsl:template>
-
-   <xsl:template match="comment()">
-     <table><tr><td class="comment"><pre>
-      <xsl:value-of select="."/>
-     </pre></td></tr></table>
-   </xsl:template>
-
-   <xsl:template match="*">
-     <table><tr><td class="block">
-     <xsl:value-of select="name(.)"/>
-     <table>
-     <xsl:for-each select="@*">
-      <tr>
-        <td class="name"><xsl:value-of select="name(.)"/></td>
-        <td class="value">=<xsl:value-of select="."/></td>
-      </tr>      
-     </xsl:for-each>
-     </table> 
-     </td></tr></table>        
-   </xsl:template>
-
-   <xsl:template match="*[node()]">
-     <table><tr><td class="block">
-     <xsl:value-of select="name(.)"/>
-     </td></tr></table> 
-    
-     <table><tr>
-     <td width="20px"></td>
-     <td class="name">     
-     <xsl:apply-templates/>
-     </td></tr></table> 
-     
-   </xsl:template>
-
-   <xsl:template match="*[text() and not (comment() or processing-instruction())]">
-      <br/><xsl:value-of select="name(.)"/>
-      <xsl:apply-templates select="@*"/>
-      <xsl:value-of select="."/>
-   </xsl:template>
-
-   <xsl:template name="nbsp-ref">
-      <xsl:text>&#160;</xsl:text>
-   </xsl:template>
-
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/tools/antipede/resources/stylesheets/log.xsl b/tools/antipede/resources/stylesheets/log.xsl
deleted file mode 100644 (file)
index 744736c..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-    Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
-<!--
-
-  The purpose have this XSL is to provide a nice way to look at the output
-  from the Ant XmlLogger (ie: ant -listener org.apache.tools.ant.XmlLogger )
-  
-  @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
-  
--->
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-
-<xsl:template match="/">
-<html>
-  <head>
-    <style type="text/css">
-    .bannercell {
-      border: 0px;
-      padding: 0px;
-    }
-    body {
-      margin: 0;
-      font:normal 100% arial,helvetica,sanserif;
-      background-color:#FFFFFF;
-      color:#000000;
-    }
-    table.status {
-      font:bold 80% arial,helvetica,sanserif;
-      background-color:#525D76;
-      color:#ffffff;
-    }
-    table.log tr td, tr th {
-      font-size: 80%;
-    }
-    .error {
-      color:red;
-    }
-    .warn {
-      color:brown;
-    }
-    .info {
-      color:gray;
-    }
-    .debug{
-      color:gray;
-    }
-    .failed {
-      font-size:80%;
-      background-color: red;
-      color:#FFFFFF;
-      font-weight: bold
-    }
-    .complete {
-      font-size:80%;
-      background-color: #525D76;
-      color:#FFFFFF;
-      font-weight: bold
-    }
-    .a td { 
-      background: #efefef;
-    }
-    .b td { 
-      background: #fff;
-    }
-    th, td {
-      text-align: left;
-      vertical-align: top;
-    }
-    th {
-      background: #ccc;
-      color: black;
-    }
-    table, th, td {
-      border: none
-    }
-    h3 {
-      font:bold 80% arial,helvetica,sanserif;
-      background: #525D76;
-      color: white;
-      text-decoration: none;
-      padding: 5px;
-      margin-right: 2px;
-      margin-left: 2px;
-      margin-bottom: 0;
-    }
-    </style>
-  </head>
-  <body>
-    <!-- jakarta logo -->
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-    <tr>
-      <td valign="top" class="bannercell">
-        <a href="http://jakarta.apache.org/">
-        <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
-        </a>
-      </td>
-      <td style="text-align:right;vertical-align:bottom">
-        <a href="htp://jakarta.apache.org/ant">Jakarta Ant</a>
-      </td>
-    </tr>
-    </table>
-      
-    <table border="0" width="100%">
-    <tr><td><hr noshade="yes" size="1"/></td></tr>
-    </table>
-
-    <xsl:apply-templates select="build"/>
-
-    <!-- FOOTER -->
-    <table width="100%">
-      <tr><td><hr noshade="yes" size="1"/></td></tr>
-      <tr><td>
-      <div align="center"><font color="#525D76" size="-1"><em>
-      Copyright &#169; 2000-2002, Apache Software Foundation
-      </em></font></div>
-      </td></tr>
-    </table>
-  </body>
-</html>
-</xsl:template>
-
-<xsl:template match="build">
-  <!-- build status -->
-  <table width="100%">
-    <xsl:attribute name="class">
-      <xsl:if test="@error">failed</xsl:if>
-      <xsl:if test="not(@error)">complete</xsl:if>
-    </xsl:attribute>
-    <tr>
-      <xsl:if test="@error">
-        <td nowrap="yes">Build Failed</td> 
-      </xsl:if>
-      <xsl:if test="not(@error)">
-        <td nowrap="yes">Build Complete</td>
-      </xsl:if>
-        <td style="text-align:right" nowrap="yes">Total Time: <xsl:value-of select="@time"/></td>
-    </tr>
-    <tr>
-      <td colspan="2">
-        <xsl:if test="@error">
-          <tt><xsl:value-of select="@error"/></tt><br/>
-          <i style="font-size:80%">See the <a href="#stacktrace" alt="Click for details">stacktrace</a>.</i>
-        </xsl:if>
-      </td>
-    </tr>
-  </table>
-  <table border="1" cellspacing="2" cellpadding="3" width="100%" style="font-size:80%">
-    <tr class="a"><td width="1">ant.file</td><td><xsl:value-of select="substring-after(message[contains(text(),'ant.file')], '->')"/></td></tr>
-    <tr class="b"><td width="1">ant.version</td><td><xsl:value-of select="substring-after(message[contains(text(),'ant.version')], '->')"/></td></tr>
-    <tr class="a"><td width="1">java.version</td><td><xsl:value-of select="substring-after(message[contains(text(),'java.vm.version')], '->')"/></td></tr>
-    <tr class="b"><td width="1">os.name</td><td><xsl:value-of select="substring-after(message[contains(text(),'os.name')], '->')"/></td></tr>
-  </table>
-  <!-- build information -->
-  <h3>Build events</h3>
-  <table class="log" border="1" cellspacing="2" cellpadding="3" width="100%">
-  <tr>
-    <th nowrap="yes" align="left" width="1%">target</th>
-    <th nowrap="yes" align="left" width="1%">task</th>
-    <th nowrap="yes" align="left">message</th>
-  </tr>
-  <xsl:apply-templates select=".//message[@priority != 'debug']"/>
-  </table>
-  <p>
-  <!-- stacktrace -->
-  <xsl:if test="stacktrace">
-  <a name="stacktrace"/>
-  <h3>Error details</h3>
-  <table width="100%">
-    <tr><td>
-      <pre><xsl:value-of select="stacktrace"/></pre>
-    </td></tr>
-  </table>
-  </xsl:if>
-  </p>
-</xsl:template>
-
-<!-- report every message but those with debug priority -->
-<xsl:template match="message[@priority!='debug']">
-  <tr valign="top">
-    <!-- alternated row style -->
-    <xsl:attribute name="class">
-      <xsl:if test="position() mod 2 = 1">a</xsl:if>
-      <xsl:if test="position() mod 2 = 0">b</xsl:if>
-    </xsl:attribute>
-    <td nowrap="yes" width="1%"><xsl:value-of select="../../@name"/></td>
-    <td nowrap="yes" style="text-align:right" width="1%">[ <xsl:value-of select="../@name"/> ]</td>
-    <td class="{@priority}" nowrap="yes">
-            <xsl:value-of select="text()"/>
-    </td>
-  </tr>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/tools/antipede/resources/stylesheets/module.css b/tools/antipede/resources/stylesheets/module.css
deleted file mode 100644 (file)
index f08e3a7..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-module {
-   display:block
-   content: attr(name);
-}
-
-description
-{   display:block; 
-    text-align: justify; 
-    font-weight:plain;
-    padding: 0px;
-    background-color: #414681; 
-    color: #ffffff; 
-    margin: 5px 0px 5px 0px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-}
-
-detailed, why, todo, changes, project, package
-{   display:block; 
-    text-align: justify; 
-    font-weight:plain;
-    padding: 0px;
-    background-color: #cfcdc6; 
-    color: #000000; 
-    margin: 5px 0px 5px 0px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-}
-
-what {display:block; 
-      list-style-type:disc;
-      text-align: left; 
-      font-weight:plain;
-      padding: 0px;
-      background-color: #FFFFFF; 
-      color: #000000; 
-      margin: 0px 0px 0px 40px; 
-      font-size: 12px; 
-      font-family: Verdana, Arial, Helvetica, sans-serif
-    }
-    
-goal {display:list-item;   font-weight:plain;}
-
-
-actions {
-    display:block; 
-    list-style-type:decimal; 
-    counter-reset: item;
-    text-align: left; 
-    font-weight:plain;
-    padding: 0px;
-    background-color: #ffe3a6; 
-    color: #000000; 
-    margin: 0px 0px 0px 40px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-  }
-
-
-release {
-    display:block; 
-    list-style-type:decimal; 
-    counter-reset: item;
-    text-align: left; 
-    font-weight:plain;
-    padding: 0px;
-    background-color: #b6aaff; 
-    color: #000000; 
-    margin: 0px 0px 0px 40px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-  }
-  
-action {display:list-item; }
-
-release {display:block; margin-left:40px;
-  list-style-type:decimal; counter-reset: item;}
-
-
-licence {  display:block; 
-    text-align: left; 
-    font-weight:bold;
-    font-style:italic;
-    padding: 0px;
-    background-color: #ffffff; 
-    color: #000000; 
-    margin: 5px 0px 5px 0px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-    }
-credits {  display:block; 
-    text-align: left; 
-    font-weight:bold;
-    padding: 0px;
-    background-color: #FFFFFF; 
-    color: #000000; 
-    margin: 5px 0px 5px 0px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-    }
diff --git a/tools/antipede/resources/stylesheets/module.xsl b/tools/antipede/resources/stylesheets/module.xsl
deleted file mode 100644 (file)
index ca71228..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       <xsl:output method = "html" encoding="Windows-1252" />
-       
-       <xsl:template match="/">        
-               <html>
-                       <head>
-                         <title>Gump descriptor of module <xsl:value-of select="module/@name" /></title>
-                       </head>
-                       <body>
-                       
-                        <h1><xsl:value-of select="module/@name" /></h1>
-
-                        <p>website:<a><xsl:attribute  name = "href" >
-                               <xsl:value-of select="module/url/@href" />
-                              </xsl:attribute><xsl:value-of select="module/url/@href" /></a>  
-                        <br/>cvs repository: <xsl:value-of select="module/cvs/@repository" />
-                        <xsl:for-each select = "module/mailing-lists/mailing-list">
-                        <br/><xsl:value-of select="@user" />&#160;mailing list:&#160; 
-                             <a><xsl:attribute  name = "href" >mailto:<xsl:value-of select="@mail" /></xsl:attribute>
-                                <xsl:value-of select="@mail" /></a>
-                             <a><xsl:attribute  name = "href" >mailto:<xsl:value-of select="@subscribe" /></xsl:attribute>
-                                Subscribe</a>  
-                  <a><xsl:attribute  name = "href" >mailto:<xsl:value-of select="@unsubscribe" /></xsl:attribute>
-                     Unsubscribe</a>                            
-                                                
-                        </xsl:for-each>
-             </p>
-                                                
-                        <h2>Description</h2>
-                        <p><xsl:value-of select="module/description" /></p>
-                        <p><xsl:value-of select="module/detailed" /></p>
-
-                        <h2>Reasons</h2>
-                        <p><xsl:value-of select="module/why" /></p>
-                        
-                        <h2>Goals</h2>                         
-                        <ul>
-                        <xsl:for-each select = "module/what/goal">
-                        <li><xsl:value-of select="." /></li>                    
-                        </xsl:for-each>
-                        </ul>
-
-                        <h2>License</h2>
-                        <p><b><xsl:value-of select="module/licence" /></b></p>
-                        
-                        <h2>Credits</h2>                               
-                        <ul>
-                        <xsl:for-each select = "module/credits/credit">
-                        <li><xsl:value-of select="." /></li>                    
-                        </xsl:for-each>
-                        </ul>                   
-
-                        </body>
-               </html>
-       </xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/tools/antipede/resources/stylesheets/properties.xsl b/tools/antipede/resources/stylesheets/properties.xsl
deleted file mode 100644 (file)
index 05e57c3..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-   
-   <xsl:output indent="yes" method="html"/>
-
-   <xsl:template match="/">
-      <html>
-         <head>
-           <title>Project properties</title>
-           <style><![CDATA[
-   <!--
-
-td.block
-{   display:block; 
-    text-align: justify; 
-    font-weight:plain;
-    padding: 0px;
-    background-color: #414681; 
-    color: #ffffff; 
-    margin: 5px 0px 5px 0px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-}
-
-td.comment
-{   display:block; 
-    text-align: justify; 
-    font-weight:plain;
-    font-style:italic;   
-    padding: 0px;
-    background-color: #cfcdc6; 
-    color: #000000; 
-    margin: 5px 0px 5px 0px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-}
-
-td.name {display:block; 
-      list-style-type:disc;
-      text-align: left; 
-      font-weight:plain;
-      padding: 0px;
-      background-color: #FFFFFF; 
-      color: #000000; 
-      margin: 0px 0px 0px 40px; 
-      font-size: 12px; 
-      font-family: Verdana, Arial, Helvetica, sans-serif
-    }
-    
-
-td.value {
-    display:block; 
-    text-align: left; 
-    font-weight:plain;
-    padding: 0px;
-    background-color: #ffe3a6; 
-    color: #000000; 
-    margin: 0px 0px 0px 40px; 
-    font-size: 12px; 
-    font-family: Verdana, Arial, Helvetica, sans-serif
-  }
-
-
-     //-->]]>
-
-           </style>
-         </head>
-         <body>
-           <table><tr><td>
-            <xsl:apply-templates/>
-           </td></tr></table> 
-         </body>
-      </html>
-   </xsl:template>
-
-   <xsl:template match="@*">
-   </xsl:template>
-
-   <xsl:template match="text()">
-      <xsl:value-of select="."/>
-   </xsl:template>
-
-   <xsl:template match="comment()">
-     <table><tr><td class="comment"><pre>
-      <xsl:value-of select="."/>
-     </pre></td></tr></table>
-   </xsl:template>
-
-   <xsl:template match="*">
-     <table><tr><td class="block">
-     <xsl:value-of select="name(.)"/>
-     <table>
-     <xsl:for-each select="@*">
-      <tr>
-        <td class="name"><xsl:value-of select="name(.)"/></td>
-        <td class="value">=<xsl:value-of select="."/></td>
-      </tr>      
-     </xsl:for-each>
-     </table> 
-     </td></tr></table>        
-   </xsl:template>
-
-   <xsl:template match="*[node()]">
-     <table><tr><td class="block">
-     <xsl:value-of select="name(.)"/>
-     </td></tr></table> 
-    
-     <table><tr>
-     <td width="20px"></td>
-     <td class="name">     
-     <xsl:apply-templates/>
-     </td></tr></table> 
-     
-   </xsl:template>
-
-   <xsl:template match="*[text() and not (comment() or processing-instruction())]">
-      <br/><xsl:value-of select="name(.)"/>
-      <xsl:apply-templates select="@*"/>
-      <xsl:value-of select="."/>
-   </xsl:template>
-
-   <xsl:template name="nbsp-ref">
-      <xsl:text>&#160;</xsl:text>
-   </xsl:template>
-
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/tools/antipede/resources/stylesheets/status.xsl b/tools/antipede/resources/stylesheets/status.xsl
deleted file mode 100644 (file)
index f86349a..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       <xsl:output method = "html" encoding="Windows-1252" />
-       
-       <xsl:template match="status">   
-                        <h1>Project Status</h1>        
-
-                       
-                        <h2>Developers</h2>                            
-                        <table>
-                        <xsl:for-each select = "developers/person">
-                        <tr><td><xsl:value-of select="@name" /></td>
-                            <td><xsl:value-of select="@email" /></td>
-                            <td>[<xsl:value-of select="@id" />]</td></tr>                       
-                        </xsl:for-each>
-                        </table>
-
-
-                        <h2>To do</h2>                         
-                        <xsl:for-each select = "todo/actions">
-                        <h3><xsl:value-of select = "@priority"/>&#160;priority</h3>
-                        <table>
-                        <tr><th>context</th><th>what</th><th>assigned to</th></tr>
-                        <xsl:for-each select = "action">
-                        <tr><td><xsl:value-of select="@context" /></td>
-                            <td><xsl:value-of select="." /></td>
-                            <td>[<xsl:value-of select="@assigned-to" />]</td></tr>                      
-                        </xsl:for-each>
-                        </table>
-                        </xsl:for-each>
-
-                        <h2>Changes</h2>                               
-                        <xsl:for-each select = "changes/release">
-                        <h3>release&#160;<xsl:value-of select = "@version"/>&#160;
-                            of date&#160;<xsl:value-of select = "@date"/></h3>
-                        <table>
-                        <tr><th>type</th><th>what</th><th>developer</th></tr>
-                        <xsl:for-each select = "action">
-                        <tr><td><xsl:value-of select="@type" /></td>
-                            <td><xsl:value-of select="." /></td>
-                            <td>[<xsl:value-of select="@dev" />]</td></tr>                      
-                        </xsl:for-each>
-                        </table>
-                        </xsl:for-each>        
-       
-               </xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/tools/antipede/resources/stylesheets/xml.xsl b/tools/antipede/resources/stylesheets/xml.xsl
deleted file mode 100644 (file)
index b6158e1..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
-<!--
- |
- | XSLT REC Compliant Version of IE5 Default Stylesheet
- |
- | Original version by Jonathan Marsh (jmarsh@microsoft.com)
- | http://msdn.microsoft.com/xml/samples/defaultss/defaultss.xsl
- |
- | Conversion to XSLT 1.0 REC Syntax by Steve Muench (smuench@oracle.com)
- |
- +-->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-   <xsl:output indent="no" method="html"/>
-
-   <xsl:template match="/">
-      <HTML>
-         <HEAD>
-            <SCRIPT>
-               <xsl:comment><![CDATA[
-                  function f(e){
-                     if (e.className=="ci") {
-                       if (e.children(0).innerText.indexOf("\n")>0) fix(e,"cb");
-                     }
-                     if (e.className=="di") {
-                       if (e.children(0).innerText.indexOf("\n")>0) fix(e,"db");
-                     } e.id="";
-                  }
-                  function fix(e,cl){
-                    e.className=cl;
-                    e.style.display="block";
-                    j=e.parentElement.children(0);
-                    j.className="c";
-                    k=j.children(0);
-                    k.style.visibility="visible";
-                    k.href="#";
-                  }
-                  function ch(e) {
-                    mark=e.children(0).children(0);
-                    if (mark.innerText=="+") {
-                      mark.innerText="-";
-                      for (var i=1;i<e.children.length;i++) {
-                        e.children(i).style.display="block";
-                      }
-                    }
-                    else if (mark.innerText=="-") {
-                      mark.innerText="+";
-                      for (var i=1;i<e.children.length;i++) {
-                        e.children(i).style.display="none";
-                      }
-                    }
-                  }
-                  function ch2(e) {
-                    mark=e.children(0).children(0);
-                    contents=e.children(1);
-                    if (mark.innerText=="+") {
-                      mark.innerText="-";
-                      if (contents.className=="db"||contents.className=="cb") {
-                        contents.style.display="block";
-                      }
-                      else {
-                        contents.style.display="inline";
-                      }
-                    }
-                    else if (mark.innerText=="-") {
-                      mark.innerText="+";
-                      contents.style.display="none";
-                    }
-                  }
-                  function cl() {
-                    e=window.event.srcElement;
-                    if (e.className!="c") {
-                      e=e.parentElement;
-                      if (e.className!="c") {
-                        return;
-                      }
-                    }
-                    e=e.parentElement;
-                    if (e.className=="e") {
-                      ch(e);
-                    }
-                    if (e.className=="k") {
-                      ch2(e);
-                    }
-                  }
-                  function ex(){}
-                  function h(){window.status=" ";}
-                  document.onclick=cl;
-              ]]>
-              </xsl:comment>
-            </SCRIPT>
-            <STYLE>
-              BODY {font:x-small 'Verdana'; margin-right:1.5em}
-                .c  {cursor:hand}
-                .b  {color:red; font-family:'Courier New'; font-weight:bold;
-                     text-decoration:none}
-                .e  {margin-left:1em; text-indent:-1em; margin-right:1em}
-                .k  {margin-left:1em; text-indent:-1em; margin-right:1em}
-                .t  {color:#990000}
-                .xt {color:#990099}
-                .ns {color:red}
-                .dt {color:green}
-                .m  {color:blue}
-                .tx {font-weight:bold}
-                .db {text-indent:0px; margin-left:1em; margin-top:0px;
-                     margin-bottom:0px;padding-left:.3em;
-                     border-left:1px solid #CCCCCC; font:small Courier}
-                .di {font:small Courier}
-                .d  {color:blue}
-                .pi {color:blue}
-                .cb {text-indent:0px; margin-left:1em; margin-top:0px;
-                     margin-bottom:0px;padding-left:.3em; font:small Courier;
-                     color:#888888}
-                .ci {font:small Courier; color:#888888}
-                PRE {margin:0px; display:inline}
-           </STYLE>
-         </HEAD>
-         <BODY class="st">
-            <xsl:apply-templates/>
-         </BODY>
-      </HTML>
-   </xsl:template>
-
-   <xsl:template match="processing-instruction()">
-      <DIV class="e">
-         <SPAN class="b">
-                       <xsl:call-template name="nbsp-ref"/>
-         </SPAN>
-         <SPAN class="m">
-            <xsl:text>&lt;?</xsl:text>
-         </SPAN>
-         <SPAN class="pi">
-            <xsl:value-of select="name(.)"/>
-            <xsl:value-of select="."/>
-         </SPAN>
-         <SPAN class="m">
-            <xsl:text>?></xsl:text>
-         </SPAN>
-      </DIV>
-   </xsl:template>
-
-   <xsl:template match="processing-instruction('xml')">
-      <DIV class="e">
-         <SPAN class="b">
-            <xsl:call-template name="nbsp-ref"/>
-         </SPAN>
-         <SPAN class="m">
-            <xsl:text>&lt;?</xsl:text>
-         </SPAN>
-         <SPAN class="pi">
-            <xsl:text>xml </xsl:text>
-            <xsl:for-each select="@*">
-               <xsl:value-of select="name(.)"/>
-               <xsl:text>="</xsl:text>
-               <xsl:value-of select="."/>
-               <xsl:text>" </xsl:text>
-            </xsl:for-each>
-         </SPAN>
-         <SPAN class="m">
-            <xsl:text>?></xsl:text>
-         </SPAN>
-      </DIV>
-   </xsl:template>
-
-   <xsl:template match="@*">
-      <SPAN>
-         <xsl:attribute name="class">
-            <xsl:if test="xsl:*/@*">
-              <xsl:text>x</xsl:text>
-            </xsl:if>
-            <xsl:text>t</xsl:text>
-         </xsl:attribute>
-         <xsl:value-of select="name(.)"/>
-      </SPAN>
-      <SPAN class="m">="</SPAN>
-      <B>
-         <xsl:value-of select="."/>
-      </B>
-      <SPAN class="m">"</SPAN>
-   </xsl:template>
-
-   <xsl:template match="text()">
-      <DIV class="e">
-         <SPAN class="b"> </SPAN>
-         <SPAN class="tx">
-            <xsl:value-of select="."/>
-         </SPAN>
-      </DIV>
-   </xsl:template>
-
-   <xsl:template match="comment()">
-      <DIV class="k">
-         <SPAN>
-            <A STYLE="visibility:hidden" class="b" onclick="return false" onfocus="h()">-</A>
-            <SPAN class="m">
-               <xsl:text>&lt;!--</xsl:text>
-            </SPAN>
-         </SPAN>
-         <SPAN class="ci" id="clean">
-            <PRE>
-               <xsl:value-of select="."/>
-            </PRE>
-         </SPAN>
-         <SPAN class="b">
-            <xsl:call-template name="nbsp-ref"/>
-         </SPAN>
-         <SPAN class="m">
-            <xsl:text>--></xsl:text>
-         </SPAN>
-         <SCRIPT>f(clean);</SCRIPT>
-      </DIV>
-   </xsl:template>
-
-   <xsl:template match="*">
-      <DIV class="e">
-         <DIV STYLE="margin-left:1em;text-indent:-2em">
-            <SPAN class="b">
-                       <xsl:call-template name="nbsp-ref"/>
-            </SPAN>
-            <SPAN class="m">&lt;</SPAN>
-            <SPAN>
-               <xsl:attribute name="class">
-                  <xsl:if test="xsl:*">
-                     <xsl:text>x</xsl:text>
-                  </xsl:if>
-                  <xsl:text>t</xsl:text>
-               </xsl:attribute>
-               <xsl:value-of select="name(.)"/>
-               <xsl:if test="@*">
-                  <xsl:text> </xsl:text>
-               </xsl:if>
-            </SPAN>
-            <xsl:apply-templates select="@*"/>
-            <SPAN class="m">
-               <xsl:text>/></xsl:text>
-            </SPAN>
-         </DIV>
-      </DIV>
-   </xsl:template>
-
-   <xsl:template match="*[node()]">
-      <DIV class="e">
-         <DIV class="c">
-            <A class="b" href="#" onclick="return false" onfocus="h()">-</A>
-            <SPAN class="m">&lt;</SPAN>
-            <SPAN>
-               <xsl:attribute name="class">
-                  <xsl:if test="xsl:*">
-                     <xsl:text>x</xsl:text>
-                  </xsl:if>
-                  <xsl:text>t</xsl:text>
-               </xsl:attribute>
-               <xsl:value-of select="name(.)"/>
-               <xsl:if test="@*">
-                  <xsl:text> </xsl:text>
-               </xsl:if>
-            </SPAN>
-            <xsl:apply-templates select="@*"/>
-            <SPAN class="m">
-               <xsl:text>></xsl:text>
-            </SPAN>
-         </DIV>
-         <DIV>
-            <xsl:apply-templates/>
-            <DIV>
-               <SPAN class="b">
-                               <xsl:call-template name="nbsp-ref"/>
-               </SPAN>
-               <SPAN class="m">
-                  <xsl:text>&lt;/</xsl:text>
-               </SPAN>
-               <SPAN>
-                  <xsl:attribute name="class">
-                     <xsl:if test="xsl:*">
-                        <xsl:text>x</xsl:text>
-                     </xsl:if>
-                     <xsl:text>t</xsl:text>
-                  </xsl:attribute>
-                  <xsl:value-of select="name(.)"/>
-               </SPAN>
-               <SPAN class="m">
-                  <xsl:text>></xsl:text>
-               </SPAN>
-            </DIV>
-         </DIV>
-      </DIV>
-   </xsl:template>
-
-   <xsl:template match="*[text() and not (comment() or processing-instruction())]">
-      <DIV class="e">
-         <DIV STYLE="margin-left:1em;text-indent:-2em">
-            <SPAN class="b">
-                       <xsl:call-template name="nbsp-ref"/>
-            </SPAN>
-            <SPAN class="m">
-               <xsl:text>&lt;</xsl:text>
-            </SPAN>
-            <SPAN>
-               <xsl:attribute name="class">
-                  <xsl:if test="xsl:*">
-                     <xsl:text>x</xsl:text>
-                  </xsl:if>
-                  <xsl:text>t</xsl:text>
-               </xsl:attribute>
-               <xsl:value-of select="name(.)"/>
-               <xsl:if test="@*">
-                  <xsl:text> </xsl:text>
-               </xsl:if>
-            </SPAN>
-            <xsl:apply-templates select="@*"/>
-            <SPAN class="m">
-               <xsl:text>></xsl:text>
-            </SPAN>
-            <SPAN class="tx">
-               <xsl:value-of select="."/>
-            </SPAN>
-            <SPAN class="m">&lt;/</SPAN>
-            <SPAN>
-               <xsl:attribute name="class">
-                  <xsl:if test="xsl:*">
-                     <xsl:text>x</xsl:text>
-                  </xsl:if>
-                  <xsl:text>t</xsl:text>
-               </xsl:attribute>
-               <xsl:value-of select="name(.)"/>
-            </SPAN>
-            <SPAN class="m">
-               <xsl:text>></xsl:text>
-            </SPAN>
-         </DIV>
-      </DIV>
-   </xsl:template>
-
-   <xsl:template match="*[*]" priority="20">
-      <DIV class="e">
-         <DIV STYLE="margin-left:1em;text-indent:-2em" class="c">
-            <A class="b" href="#" onclick="return false" onfocus="h()">-</A>
-            <SPAN class="m">&lt;</SPAN>
-            <SPAN>
-               <xsl:attribute name="class">
-                  <xsl:if test="xsl:*">
-                     <xsl:text>x</xsl:text>
-                  </xsl:if>
-                  <xsl:text>t</xsl:text>
-               </xsl:attribute>
-               <xsl:value-of select="name(.)"/>
-               <xsl:if test="@*">
-                  <xsl:text> </xsl:text>
-               </xsl:if>
-            </SPAN>
-            <xsl:apply-templates select="@*"/>
-            <SPAN class="m">
-               <xsl:text>></xsl:text>
-            </SPAN>
-         </DIV>
-         <DIV>
-            <xsl:apply-templates/>
-            <DIV>
-               <SPAN class="b">
-                               <xsl:call-template name="nbsp-ref"/>
-               </SPAN>
-               <SPAN class="m">
-                  <xsl:text>&lt;/</xsl:text>
-               </SPAN>
-               <SPAN>
-                  <xsl:attribute name="class">
-                     <xsl:if test="xsl:*">
-                        <xsl:text>x</xsl:text>
-                     </xsl:if>
-                     <xsl:text>t</xsl:text>
-                  </xsl:attribute>
-                  <xsl:value-of select="name(.)"/>
-               </SPAN>
-               <SPAN class="m">
-                  <xsl:text>></xsl:text>
-               </SPAN>
-            </DIV>
-         </DIV>
-      </DIV>
-   </xsl:template>
-
-   <xsl:template name="nbsp-ref">
-      <xsl:text>&#160;</xsl:text>
-   </xsl:template>
-
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/tools/antipede/tasks.properties b/tools/antipede/tasks.properties
deleted file mode 100644 (file)
index 05ffcfe..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-
-#Antipede tasks
-antipede-foreach=net.sf.antcontrib.logic.ForEach
-antipede-if=net.sf.antcontrib.logic.IfTask
-antipede-propertycopy=net.sf.antcontrib.property.PropertyCopy
-antipede-switch=net.sf.antcontrib.logic.Switch
-antipede-trycatch=net.sf.antcontrib.logic.TryCatchTask
-
-antipede-jjar=org.apache.commons.jjar.JJARTask
-
-#centipede-user-input=org.krysalis.centipede.ant.task.UserInputTask
-#centipede-xml-property=org.krysalis.centipede.ant.task.XmlPropertyTask
-#centipede-class-available=org.krysalis.centipede.ant.task.ClassAvailableTask
-
-
-xmlproperty=org.apache.tools.ant.taskdefs.XmlProperty
-
-
-
diff --git a/tools/cents/.cvsignore b/tools/cents/.cvsignore
deleted file mode 100644 (file)
index 0b8e755..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-*.cent
-META-INF
diff --git a/tools/cents/automagic.cent.jar b/tools/cents/automagic.cent.jar
deleted file mode 100644 (file)
index 9e2cf69..0000000
Binary files a/tools/cents/automagic.cent.jar and /dev/null differ
diff --git a/tools/cents/centipede.cent.jar b/tools/cents/centipede.cent.jar
deleted file mode 100644 (file)
index 3cc7996..0000000
Binary files a/tools/cents/centipede.cent.jar and /dev/null differ
diff --git a/tools/cents/forrest.cent.jar b/tools/cents/forrest.cent.jar
deleted file mode 100644 (file)
index c675f53..0000000
Binary files a/tools/cents/forrest.cent.jar and /dev/null differ
diff --git a/tools/cents/javasrc.cent.jar b/tools/cents/javasrc.cent.jar
deleted file mode 100644 (file)
index aba1bef..0000000
Binary files a/tools/cents/javasrc.cent.jar and /dev/null differ
diff --git a/tools/cents/jdepend.cent.jar b/tools/cents/jdepend.cent.jar
deleted file mode 100644 (file)
index e58e5de..0000000
Binary files a/tools/cents/jdepend.cent.jar and /dev/null differ
diff --git a/tools/cents/junit.cent.jar b/tools/cents/junit.cent.jar
deleted file mode 100644 (file)
index 2538002..0000000
Binary files a/tools/cents/junit.cent.jar and /dev/null differ
diff --git a/tools/cents/umldoclet.cent.jar b/tools/cents/umldoclet.cent.jar
deleted file mode 100644 (file)
index 9ff0f4e..0000000
Binary files a/tools/cents/umldoclet.cent.jar and /dev/null differ