You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2008/05/05 16:20:41 UTC

svn commit: r653490 [1/3] - in /poi/tags/REL_3_1_BETA2: ./ ooxml-lib/ src/documentation/ src/documentation/content/xdocs/ src/java/org/apache/poi/ddf/ src/java/org/apache/poi/hssf/model/ src/java/org/apache/poi/hssf/record/ src/java/org/apache/poi/hssf...

Author: yegor
Date: Mon May  5 07:20:39 2008
New Revision: 653490

URL: http://svn.apache.org/viewvc?rev=653490&view=rev
Log:
merged with trunk r653489

Added:
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/record/TextRulerAtom.java
      - copied unchanged from r653488, poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/TextRulerAtom.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/testcases/org/apache/poi/hslf/record/TestTextRulerAtom.java
      - copied unchanged from r653488, poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/record/TestTextRulerAtom.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/ddf/TestEscherBlipRecord.java
      - copied unchanged from r653488, poi/trunk/src/testcases/org/apache/poi/ddf/TestEscherBlipRecord.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/ddf/data/
      - copied from r653488, poi/trunk/src/testcases/org/apache/poi/ddf/data/
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/ddf/data/Container.dat
      - copied unchanged from r653488, poi/trunk/src/testcases/org/apache/poi/ddf/data/Container.dat
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/data/44840.xls
      - copied unchanged from r653488, poi/trunk/src/testcases/org/apache/poi/hssf/data/44840.xls
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/data/44861.xls
      - copied unchanged from r653488, poi/trunk/src/testcases/org/apache/poi/hssf/data/44861.xls
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/data/44891.xls
      - copied unchanged from r653488, poi/trunk/src/testcases/org/apache/poi/hssf/data/44891.xls
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/data/ex44921-21902.xls
      - copied unchanged from r653488, poi/trunk/src/testcases/org/apache/poi/hssf/data/ex44921-21902.xls
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/record/formula/TestFuncVarPtg.java
      - copied unchanged from r653488, poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestFuncVarPtg.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPatriarch.java
      - copied unchanged from r653488, poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPatriarch.java
Removed:
    poi/tags/REL_3_1_BETA2/ooxml-lib/
    poi/tags/REL_3_1_BETA2/src/scratchpad/ooxml-src/
    poi/tags/REL_3_1_BETA2/src/scratchpad/ooxml-testcases/
Modified:
    poi/tags/REL_3_1_BETA2/build.xml
    poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/changes.xml
    poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/index.xml
    poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/status.xml
    poi/tags/REL_3_1_BETA2/src/documentation/release-guide.txt
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/ddf/EscherDggRecord.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/ddf/EscherMetafileBlip.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/model/FormulaParser.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/model/Workbook.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/FileSharingRecord.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/FormulaRecord.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNAPtg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNPtg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNVPtg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/Ptg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/RefNAPtg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/RefNPtg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/RefNVPtg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/function/FunctionDataBuilder.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/function/FunctionMetadata.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/function/FunctionMetadataReader.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/usermodel/HSSFPictureData.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
    poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/AutoShapes.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/Freeform.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/MasterSheet.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/Shape.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/ShapeGroup.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/SlideMaster.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/TextPainter.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/model/TextShape.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/record/PPDrawing.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/record/RecordTypes.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/usermodel/RichTextRun.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/testcases/org/apache/poi/hslf/model/TestFreeform.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java
    poi/tags/REL_3_1_BETA2/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/ddf/AllPOIDDFTests.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/ddf/TestEscherContainerRecord.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/HSSFTestDataSamples.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/record/formula/AllFormulaTests.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/record/formula/TestReferencePtg.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java
    poi/tags/REL_3_1_BETA2/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java

Modified: poi/tags/REL_3_1_BETA2/build.xml
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/build.xml?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/build.xml (original)
+++ poi/tags/REL_3_1_BETA2/build.xml Mon May  5 07:20:39 2008
@@ -74,7 +74,6 @@
   <property name="main.output.dir" location="build/classes"/>
   <property name="main.output.test.dir" location="build/test-classes"/>
   <property name="main.lib" location="lib"/>
-  <property name="ooxml.lib" location="ooxml-lib"/>
   <property name="main.reports.test" location="build/test-results"/>
   <property name="main.jar1.dir" location="${main.lib}/commons-logging-1.1.jar"/>
   <property name="main.jar1.url" value="${repository}/commons-logging/jars/commons-logging-1.1.jar"/>
@@ -124,33 +123,6 @@
   <property name="examples.jar3.url" value="${repository}/commons-lang/jars/commons-lang-2.1.jar"/>
   <property name="examples.testokfile" location="build/examples-testokfile.txt"/>
 
-  <!-- Experimental OOXML support: -->
-  <property name="ooxml.src" location="src/scratchpad/ooxml-src"/>
-  <property name="ooxml.src.test" location="src/scratchpad/ooxml-testcases"/>
-  <property name="ooxml.reports.test" location="build/ooxml-test-results"/>
-  <property name="ooxml.output.dir" location="build/ooxml-classes"/>
-  <property name="ooxml.output.test.dir" location="build/ooxml-test-classes"/>
-  <property name="ooxml.testokfile" location="build/ooxml-testokfile.txt"/>
-
-  <property name="ooxml.jar1.dir" location="${ooxml.lib}/dom4j-1.6.1.jar"/>
-  <property name="ooxml.jar1.url" value="${repository}/dom4j/jars/dom4j-1.6.1.jar"/>
-  <property name="ooxml.jar2.dir" location="${ooxml.lib}/jaxen-1.1.jar"/>
-  <property name="ooxml.jar2.url" value="${repository}/jaxen/jars/jaxen-1.1.jar"/>
-  <property name="ooxml.jar3.dir" location="${ooxml.lib}/xmlbeans-2.3.0.jar"/>
-  <property name="ooxml.jar3.url" value="${repository}/org.apache.xmlbeans/jars/xmlbeans-2.3.0.jar"/>
-  <property name="ooxml.jar4.dir" location="${ooxml.lib}/jsr173_1.0_api.jar"/>
-  <property name="ooxml.jar4.url" value="${repository}/xmlbeans/jars/jsr173_1.0_api.jar"/>
-  <!-- No official release of openxml4j yet -->
-  <property name="ooxml.jar5.dir" location="${ooxml.lib}/openxml4j-bin-alpha-080124.jar"/>
-  <property name="ooxml.jar5.url" value="http://people.apache.org/~nick/openxml4j-bin-prealpha-071224.jar"/>
-
-  <!-- See http://www.ecma-international.org/publications/standards/Ecma-376.htm -->
-  <!-- "Copy these file(s), free of charge" -->
-  <property name="ooxml.xsds.ozip" location="${ooxml.lib}/OfficeOpenXML-Part4.zip"/>
-  <property name="ooxml.xsds.izip" location="${ooxml.lib}/OfficeOpenXML-XMLSchema.zip"/>
-  <property name="ooxml.xsds.url" value="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%20Part%204%20(DOCX).zip" />
-  <property name="ooxml.xsds.jar" location="${ooxml.lib}/ooxml-schemas.jar"/>
-
   <property name="build.site" location="build/tmp/site/build/site"/>
   <property name="build.site.src" location="build/tmp/site"/>
   <property name="junit.report.dir" location="${build.site}/junit"/>
@@ -163,7 +135,7 @@
   <property name="mavendist.poi.dir" location="build/maven-dist/poi"/>
   <property name="mavendist.oap.dir" location="build/maven-dist/org.apache.poi"/>
   <property name="jar.name" value="poi"/>
-  <property name="version.id" value="3.1-beta1"/>
+  <property name="version.id" value="3.1-beta2"/>
   <property name="halt.on.test.failure" value="true"/>
   <property name="jdk.version.source" value="1.3"
     description="JDK version of source code"/>
@@ -195,15 +167,6 @@
         <pathelement location="${contrib.output.test.dir}"/>
     </path>
 
-    <path id="ooxml.classpath">
-        <path refid="main.classpath"/>
-        <path refid="scratchpad.classpath"/>
-        <fileset dir="${ooxml.lib}">
-			<include name="*.jar" />
-		</fileset>
-    </path>
-
-
   <path id="examples.classpath">
     <path refid="main.classpath"/>
     <pathelement location="${main.output.dir}"/>
@@ -268,15 +231,12 @@
         <mkdir dir="${scratchpad.output.dir}"/>
         <mkdir dir="${contrib.output.dir}"/>
         <mkdir dir="${examples.output.dir}"/>
-        <mkdir dir="${ooxml.output.dir}"/>
         <mkdir dir="${main.output.test.dir}"/>
         <mkdir dir="${contrib.output.test.dir}"/>
         <mkdir dir="${scratchpad.output.test.dir}"/>
-        <mkdir dir="${ooxml.output.test.dir}"/>
         <mkdir dir="${main.reports.test}"/>
         <mkdir dir="${scratchpad.reports.test}"/>
         <mkdir dir="${contrib.reports.test}"/>
-        <mkdir dir="${ooxml.reports.test}"/>
         <mkdir dir="${junit.report.dir}"/>
         <mkdir dir="${jdepend.report.dir}"/>
         <mkdir dir="${jdepend.report.out.dir}"/>
@@ -311,11 +271,6 @@
                     <available file="${contrib.jar2.dir}"/>
                     <available file="${contrib.jar3.dir}"/>
                     <available file="${junit.jar1.dir}"/>
-                    <available file="${ooxml.jar1.dir}"/>
-                    <available file="${ooxml.jar2.dir}"/>
-                    <available file="${ooxml.jar3.dir}"/>
-                    <available file="${ooxml.jar4.dir}"/>
-                    <available file="${ooxml.jar5.dir}"/>
                 </and>
                 <isset property="disconnected"/>
             </or>
@@ -330,67 +285,8 @@
         <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}"/>
-
-        <get src="${ooxml.jar1.url}" dest="${ooxml.jar1.dir}"/>
-        <get src="${ooxml.jar2.url}" dest="${ooxml.jar2.dir}"/>
-        <get src="${ooxml.jar3.url}" dest="${ooxml.jar3.dir}"/>
-        <get src="${ooxml.jar4.url}" dest="${ooxml.jar4.dir}"/>
-        <get src="${ooxml.jar5.url}" dest="${ooxml.jar5.dir}"/>
     </target>
 
-	<target name="check-ooxml-xsds">
-        <condition property="ooxml-xsds.present">
-            <or>
-                <and>
-                    <available file="${ooxml.xsds.izip}"/>
-                </and>
-                <isset property="disconnected"/>
-            </or>
-        </condition>
-	</target>
-    <target name="fetch-ooxml-xsds" unless="ooxml-xsds.present"
-     description="Fetches needed OOXML xsd files from the Internet">
-        <get src="${ooxml.xsds.url}" dest="${ooxml.xsds.ozip}"/>
-		<unzip src="${ooxml.xsds.ozip}" dest="${ooxml.lib}">
-			<patternset>
-				<include name="OfficeOpenXML-XMLSchema.zip" />
-			</patternset>
-		</unzip>
-	</target>
-	<target name="check-compiled-ooxml-xsds">
-        <condition property="ooxml-compiled-xsds.present">
-            <or>
-                <and>
-                    <available file="${ooxml.xsds.jar}"/>
-                </and>
-                <isset property="disconnected"/>
-            </or>
-        </condition>
-	</target>
-	<target name="compile-ooxml-xsds" unless="ooxml-compiled-xsds.present"
-	 depends="check-jars,fetch-jars,check-ooxml-xsds,fetch-ooxml-xsds,check-compiled-ooxml-xsds"
-	 description="Unpacks the OOXML xsd files, and compiles them into XmlBeans">
-		<taskdef name="xmlbean"
-			classname="org.apache.xmlbeans.impl.tool.XMLBean"
-			classpath="${ooxml.jar3.dir}:${ooxml.jar4.dir}" />
-
-		<unzip src="${ooxml.xsds.izip}" dest="build/ooxml-xsds/" />
-		<!--
-			schema="build/ooxml-xsds/"
-			schema="build/ooxml-xsds/sml-workbook.xsd"
-		-->
-		<xmlbean
-			schema="build/ooxml-xsds/"
-			destfile="${ooxml.xsds.jar}"
-			javasource="1.4"
-			failonerror="false"
-			fork="true"
-			memoryMaximumSize="512m"
-		>
-			<classpath refid="ooxml.classpath"/>
-		</xmlbean>
-	</target>
-
   <target name="compile" depends="init, compile-main, compile-scratchpad,
     compile-contrib, compile-examples"
     description="Compiles the POI main classes, scratchpad, contrib, and examples"/>
@@ -473,24 +369,6 @@
     </javac>
   </target>
 
-  <target name="compile-ooxml" depends="init, check-ooxml-xsds, fetch-ooxml-xsds, compile-ooxml-xsds, compile-main">
-	<!-- openxml4j requires java 1.5, so so must we, for now -->
-    <javac target="1.5" source="1.5"
-      destdir="${ooxml.output.dir}" debug="on" srcdir="${ooxml.src}">
-      <classpath refid="ooxml.classpath"/>
-    </javac>
-
-    <javac target="1.5" source="1.5"
-      failonerror="true" destdir="${ooxml.output.test.dir}" debug="on"
-      fork="yes" srcdir="${ooxml.src.test}">
-      <classpath>
-        <path refid="ooxml.classpath"/>
-        <pathelement location="${ooxml.output.dir}"/>
-        <pathelement location="${junit.jar1.dir}"/>
-      </classpath>
-    </javac>
-  </target>
-
   <target name="test" depends="test-main,test-scratchpad,test-contrib"
     description="Tests main, contrib and scratchpad"/>
 
@@ -523,6 +401,8 @@
         file="${main.src.test}/org/apache/poi/hpsf/data"/> 
       <sysproperty key="POIFS.testdata.path"
         file="${main.src.test}/org/apache/poi/poifs/data"/> 
+      <sysproperty key="DDF.testdata.path"
+        file="${main.src.test}/org/apache/poi/ddf/data"/> 
       <sysproperty key="java.awt.headless" value="true"/>
       <formatter type="plain"/>
       <formatter type="xml"/>
@@ -725,43 +605,6 @@
         <echo file="${contrib.testokfile}" append="false" message="testok"/>
     </target>
 
-    <target name="-test-ooxml-check">
-        <uptodate property="ooxml.test.notRequired" targetfile="${ooxml.testokfile}">
-            <srcfiles dir="${ooxml.src}"/>
-            <srcfiles dir="${ooxml.src.test}"/>
-        </uptodate>
-    </target>
-
-    <target name="test-ooxml" depends="compile-main,compile-ooxml,-test-ooxml-check" unless="ooxml.test.notRequired">
-        <junit printsummary="yes" fork="no" haltonfailure="${halt.on.test.failure}" failureproperty="ooxml.test.failed">
-            <classpath>
-                <path refid="ooxml.classpath"/>
-                <pathelement location="${main.output.dir}"/>
-                <pathelement location="${ooxml.output.dir}"/>
-                <pathelement location="${ooxml.output.test.dir}"/>
-                <pathelement location="${junit.jar1.dir}"/>
-            </classpath>
-            <sysproperty key="HSSF.testdata.path" file="${main.src.test}/org/apache/poi/hssf/data"/>
-            <sysproperty key="HWPF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hwpf/data"/>
-            <sysproperty key="HSLF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hslf/data"/>
-            <sysproperty key="java.awt.headless" value="true"/>
-            <formatter type="plain"/>
-            <formatter type="xml"/>
-            <batchtest todir="${ooxml.reports.test}">
-                <fileset dir="${ooxml.src.test}">
-                    <include name="**/Test*.java"/>
-                    <exclude name="**/AllTests.java"/>
-                </fileset>
-            </batchtest>
-        </junit>
-        <delete file="${ooxml.testokfile}"/>
-        <antcall target="-test-ooxml-write-testfile"/>
-    </target>
-
-    <target name="-test-ooxml-write-testfile" unless="ooxml.test.failed">
-        <echo file="${ooxml.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}"/>
@@ -1148,21 +991,6 @@
             </manifest>        
         </jar>
     </target>
-    <target name="jar-ooxml" depends="compile-ooxml" description="Creates the ooxml jar files for distribution">
-        <jar destfile="${dist.dir}/${jar.name}-ooxml-${version.id}-${DSTAMP}.jar">
-			<fileset dir="${ooxml.output.dir}" />
-			<fileset dir="legal/" />
-            <manifest>
-                <attribute name="Built-By" value="${user.name}"/>
-                <attribute name="Specification-Title" value="Apache POI"/>
-                <attribute name="Specification-Version" value="${version.id}-${DSTAMP}"/>
-                <attribute name="Specification-Vendor" value="Apache"/>
-                <attribute name="Implementation-Title" value="Apache POI"/>
-                <attribute name="Implementation-Version" value="${version.id}-${DSTAMP}"/>
-                <attribute name="Implementation-Vendor" value="Apache"/>
-            </manifest>        
-        </jar>
-    </target>
 
   <target name="dist" depends="clean, fail-unless-tools-are-available, compile, site, jar"
     description="Creates the entire distribution into build/dist, from scratch">
@@ -1171,6 +999,7 @@
 
     <zip destfile="${dist.dir}/${jar.name}-bin-${version.id}-${DSTAMP}.zip">
       <zipfileset dir="legal/" prefix="${zipdir}" />
+      <zipfileset dir="lib/" prefix="${zipdir}/lib" />
       <zipfileset dir="${build.site}" prefix="${zipdir}/docs"/>
       <zipfileset file="${dist.dir}/${jar.name}-${version.id}-${DSTAMP}.jar" prefix="${zipdir}" />
       <zipfileset file="${dist.dir}/${jar.name}-contrib-${version.id}-${DSTAMP}.jar" prefix="${zipdir}" />
@@ -1193,6 +1022,7 @@
     <tar destfile="${dist.dir}/${jar.name}-bin-${version.id}-${DSTAMP}.tar.gz"
       compression="gzip">
       <tarfileset dir="legal/" prefix="${zipdir}" />
+      <tarfileset dir="lib/" prefix="${zipdir}/lib" />
       <tarfileset dir="${build.site}" prefix="${zipdir}/docs"/>
       <tarfileset file="${dist.dir}/${jar.name}-${version.id}-${DSTAMP}.jar" prefix="${zipdir}" />
       <tarfileset file="${dist.dir}/${jar.name}-contrib-${version.id}-${DSTAMP}.jar" prefix="${zipdir}" />

Modified: poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/changes.xml?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/changes.xml (original)
+++ poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/changes.xml Mon May  5 07:20:39 2008
@@ -36,7 +36,17 @@
     </devs>
 
 		<!-- Don't forget to update status.xml too! -->
-        <release version="3.1-beta1" date="2008-04-??">
+        <release version="3.1-beta2" date="2008-05-??">
+           <action dev="POI-DEVELOPERS" type="fix">44929 - Improved error handling in HSSFWorkbook when attempting to read a BIFF5 file</action>
+           <action dev="POI-DEVELOPERS" type="fix">44675 - Parameter operand classes (function metadata) required to encode SUM() etc properly. Added parse validation for number of parameters</action>
+           <action dev="POI-DEVELOPERS" type="fix">44921 - allow Ptg.writeBytes() to be called on relative ref Ptgs (RefN* and AreaN*)</action>
+           <action dev="POI-DEVELOPERS" type="fix">44914 - Fix/suppress warning message "WARN. Unread n bytes of record 0xNN"</action>
+           <action dev="POI-DEVELOPERS" type="fix">44892 - made HSSFWorkbook.getSheet(String) case insensitive</action>
+           <action dev="POI-DEVELOPERS" type="fix">44886] - Correctly process PICT metafile in EscherMetafileBlip</action>
+           <action dev="POI-DEVELOPERS" type="fix">44893 - Take into account indentation in HSSFSheet.autoSizeColumn</action>
+        </release>
+        <release version="3.1-beta1" date="2008-04-28">
+           <action dev="POI-DEVELOPERS" type="fix">44857 - Avoid OOM on unknown escher records when EscherMetafileBlip is incorrect</action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Support for getting embedded sounds from slide show </action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Initial support for rendering slides into images</action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Support for getting OLE object data from slide show </action>

Modified: poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/index.xml
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/index.xml?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/index.xml (original)
+++ poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/index.xml Mon May  5 07:20:39 2008
@@ -31,6 +31,23 @@
   </header>
 
   <body>
+    <section><title>POI 3.1-BETA1 Released (2008-04028)</title>
+      <p>
+        The POI team is pleased to announce the release of 3.1 BETA1 which is one of the final steps before 3.1 FINAL.
+        The status of this release is a beta, meaning that we encourage users to try it out.
+        If you find any bugs, please report them to the POI <link href="https://issues.apache.org/bugzilla/buglist.cgi?product=POI">bug database</link> or to
+        the <link href="./mailinglists.html">POI Developer List</link>.
+        </p><p>  A full list of changes	is available in
+      <link href="./changes.html">the changelog</link>, and 
+		<link href="http://www.apache.org/dyn/closer.cgi/poi/dev/">download</link>
+		the source and binaries from your
+    <link href="http://www.apache.org/dyn/closer.cgi/poi/dev/">local mirror</link>.
+      </p>
+      <p>
+        The release is also available from the central Maven repository 
+        under Group ID "org.apache.poi" and Version "3.1-beta1".
+      </p>  
+    </section>
     <section><title>POI 3.0.2 Released</title>
       <p>The POI team is pleased to announce POI 3.0.2, the latest release of Apache POI.
         There have been many important bug fixes since the 3.0.1 release and a lot of new features.  A full list of changes	is available in 

Modified: poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/status.xml?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/status.xml (original)
+++ poi/tags/REL_3_1_BETA2/src/documentation/content/xdocs/status.xml Mon May  5 07:20:39 2008
@@ -33,7 +33,17 @@
 
 	<!-- Don't forget to update changes.xml too! -->
     <changes>
-        <release version="3.1-beta1" date="2008-04-??">
+        <release version="3.1-beta2" date="2008-05-??">
+           <action dev="POI-DEVELOPERS" type="fix">44929 - Improved error handling in HSSFWorkbook when attempting to read a BIFF5 file</action>
+           <action dev="POI-DEVELOPERS" type="fix">44675 - Parameter operand classes (function metadata) required to encode SUM() etc properly. Added parse validation for number of parameters</action>
+           <action dev="POI-DEVELOPERS" type="fix">44921 - allow Ptg.writeBytes() to be called on relative ref Ptgs (RefN* and AreaN*)</action>
+           <action dev="POI-DEVELOPERS" type="fix">44914 - Fix/suppress warning message "WARN. Unread n bytes of record 0xNN"</action>
+           <action dev="POI-DEVELOPERS" type="fix">44892 - made HSSFWorkbook.getSheet(String) case insensitive</action>
+           <action dev="POI-DEVELOPERS" type="fix">44886] - Correctly process PICT metafile in EscherMetafileBlip</action>
+           <action dev="POI-DEVELOPERS" type="fix">44893 - Take into account indentation in HSSFSheet.autoSizeColumn</action>
+        </release>
+        <release version="3.1-beta1" date="2008-04-28">
+           <action dev="POI-DEVELOPERS" type="fix">44857 - Avoid OOM on unknown escher records when EscherMetafileBlip is incorrect</action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Support for getting embedded sounds from slide show </action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Initial support for rendering slides into images</action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Support for getting OLE object data from slide show </action>

Modified: poi/tags/REL_3_1_BETA2/src/documentation/release-guide.txt
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/documentation/release-guide.txt?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/documentation/release-guide.txt (original)
+++ poi/tags/REL_3_1_BETA2/src/documentation/release-guide.txt Mon May  5 07:20:39 2008
@@ -19,7 +19,11 @@
   POI 3.0.2 and 3.1 were built using Ant 1.6.2 and Forrest 0.5
 
 (II) Making release artefacts
-  1. Update version id in build.xml. 
+  1. Update version id in build.xml
+{code:xml}
+  <property name="version.id" value="3.1-beta1"/>
+{code}
+
   2. Tag current version. Include the current revision number in the comment
 
 {code}
@@ -46,7 +50,7 @@
 
   5. Start a new section in sites.xml and status.xml. 
 
-  6. Build as if the vote had passed. The buid date must be +7 days from current.
+  6. Build as if the vote had passed. The build date must be +7 days from current.
 {code}
 ant build
 {code}
@@ -109,27 +113,68 @@
 
 1. Go to ~/POI-3.1-BETA1
 
+zap previous version first.
+
+{code}
 cd ~/POI-3.1-BETA1/main
+{code}
 
 BETA and ALPHA releases:
+
+{code}
 cp *-src-* /www/www.apache.org/dist/poi/dev/src
 cp *-bin-* /www/www.apache.org/dist/poi/dev/bin
+{code}
 
 FINAL release:
+{code}
 cp *-src-* /www/www.apache.org/dist/poi/release/src
 cp *-bin-* /www/www.apache.org/dist/poi/release/bin
+{code}
 
+{code}
 cd ~/POI-3.1-BETA1/maven
-
 cp -r org.apache.poi /www/people.apache.org/repo/m1-ibiblio-rsync-repository/
 cp -r poi/poms      /www/people.apache.org/repo/m1-ibiblio-rsync-repository/poi
-
+{code}
 
 2. Make sure that the files are owned by the unix group apcvs and that they are writable by this group. 
 
 3. Wait for the distributions to appear on your favourite mirror
 
-4. Send announcements:
+4. test maven
+create a simple project and make sure the release artifacts are accessible by maven:
+
+{code}
+$ mvn archetype:create -DgroupId=org.apache.poi.scratchpad -DartifactId=maven-test
+cd maven-test
+{code}
+edit pom.xml and add the release artefacts to the project dependencies: 
+
+{code:xml}
+    <dependency>
+      <groupId>org.apache.poi</groupId>
+      <artifactId>poi</artifactId>
+      <version>3.1-beta1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.poi</groupId>
+      <artifactId>poi-scratchpad</artifactId>
+      <version>3.1-beta1</version>
+    </dependency>
+{code}
+
+{code}
+mvn compile 
+{code}
+
+You should see [INFO] BUILD SUCCESSFUL in the end.
+
+5. Don't forget to upload the latest version of the site and javadocs
+
+6. Send announcements:
  - to poi-user and poi-dev lists
- - send announcements to announcement@apache.org, announcements@jakarta.apache.org
+ - to announcement@apache.org, announcements@jakarta.apache.org
+
+Note, announcements should be sent from your @apache.org e-mail address.
 

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/ddf/EscherDggRecord.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/ddf/EscherDggRecord.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/ddf/EscherDggRecord.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/ddf/EscherDggRecord.java Mon May  5 07:20:39 2008
@@ -38,6 +38,7 @@
     private int field_3_numShapesSaved;
     private int field_4_drawingsSaved;
     private FileIdCluster[] field_5_fileIdClusters;
+    private int maxDgId;
 
     public static class FileIdCluster
     {
@@ -87,6 +88,7 @@
         for (int i = 0; i < field_5_fileIdClusters.length; i++)
         {
             field_5_fileIdClusters[i] = new FileIdCluster(LittleEndian.getInt( data, pos + size ), LittleEndian.getInt( data, pos + size + 4 ));
+            maxDgId = Math.max(maxDgId, field_5_fileIdClusters[i].getDrawingGroupId());
             size += 8;
         }
         bytesRemaining         -= size;
@@ -229,7 +231,14 @@
         this.field_4_drawingsSaved = field_4_drawingsSaved;
     }
 
-    public FileIdCluster[] getFileIdClusters()
+    /**
+     * @return The maximum drawing group ID
+     */
+    public int getMaxDrawingGroupId(){
+        return maxDgId;
+    }
+
+     public FileIdCluster[] getFileIdClusters()
     {
         return field_5_fileIdClusters;
     }
@@ -241,9 +250,22 @@
 
     public void addCluster( int dgId, int numShapedUsed )
     {
+        addCluster(dgId, numShapedUsed, true);
+    }
+
+    /**
+     * Add a new cluster
+     *
+     * @param dgId  id of the drawing group (stored in the record options)
+     * @param numShapedUsed initial value of the numShapedUsed field
+     * @param sort if true then sort clusters by drawing group id.(
+     *  In Excel the clusters are sorted but in PPT they are not)
+     */
+    public void addCluster( int dgId, int numShapedUsed, boolean sort )
+    {
         List clusters = new ArrayList(Arrays.asList(field_5_fileIdClusters));
         clusters.add(new FileIdCluster(dgId, numShapedUsed));
-        Collections.sort(clusters, new Comparator()
+        if(sort) Collections.sort(clusters, new Comparator()
         {
             public int compare( Object o1, Object o2 )
             {
@@ -257,6 +279,7 @@
                     return +1;
             }
         } );
+        maxDgId = Math.min(maxDgId, dgId);
         field_5_fileIdClusters = (FileIdCluster[]) clusters.toArray( new FileIdCluster[clusters.size()] );
     }
 }

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/ddf/EscherMetafileBlip.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/ddf/EscherMetafileBlip.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/ddf/EscherMetafileBlip.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/ddf/EscherMetafileBlip.java Mon May  5 07:20:39 2008
@@ -41,9 +41,20 @@
     public static final short RECORD_ID_WMF = (short) 0xF018 + 3;
     public static final short RECORD_ID_PICT = (short) 0xF018 + 4;
 
+    /**
+     * BLIP signatures as defined in the escher spec
+     */
+    public static final short SIGNATURE_EMF  = 0x3D40;
+    public static final short SIGNATURE_WMF  = 0x2160;
+    public static final short SIGNATURE_PICT = 0x5420;
+
     private static final int HEADER_SIZE = 8;
 
     private byte[] field_1_UID;
+    /**
+     * The primary UID is only saved to disk if (blip_instance ^ blip_signature == 1)
+     */
+    private byte[] field_2_UID;
     private int field_2_cb;
     private int field_3_rcBounds_x1;
     private int field_3_rcBounds_y1;
@@ -72,6 +83,12 @@
 
         field_1_UID = new byte[16];
         System.arraycopy( data, pos, field_1_UID, 0, 16 ); pos += 16;
+
+        if((getOptions() ^ getSignature()) == 0x10){
+            field_2_UID = new byte[16];
+            System.arraycopy( data, pos, field_2_UID, 0, 16 ); pos += 16;
+        }
+
         field_2_cb = LittleEndian.getInt( data, pos ); pos += 4;
         field_3_rcBounds_x1 = LittleEndian.getInt( data, pos ); pos += 4;
         field_3_rcBounds_y1 = LittleEndian.getInt( data, pos ); pos += 4;
@@ -118,9 +135,12 @@
         int pos = offset;
         LittleEndian.putShort( data, pos, getOptions() ); pos += 2;
         LittleEndian.putShort( data, pos, getRecordId() ); pos += 2;
-        LittleEndian.putInt( data, getRecordSize() - HEADER_SIZE ); pos += 4;
+        LittleEndian.putInt( data, pos, getRecordSize() - HEADER_SIZE ); pos += 4;
 
-        System.arraycopy( field_1_UID, 0, data, pos, 16 ); pos += 16;
+        System.arraycopy( field_1_UID, 0, data, pos, field_1_UID.length ); pos += field_1_UID.length;
+        if((getOptions() ^ getSignature()) == 0x10){
+            System.arraycopy( field_2_UID, 0, data, pos, field_2_UID.length ); pos += field_2_UID.length;
+        }
         LittleEndian.putInt( data, pos, field_2_cb ); pos += 4;
         LittleEndian.putInt( data, pos, field_3_rcBounds_x1 ); pos += 4;
         LittleEndian.putInt( data, pos, field_3_rcBounds_y1 ); pos += 4;
@@ -135,7 +155,7 @@
         System.arraycopy( raw_pictureData, 0, data, pos, raw_pictureData.length );
 
         listener.afterRecordSerialize(offset + getRecordSize(), getRecordId(), getRecordSize(), this);
-        return HEADER_SIZE + 16 + 1 + raw_pictureData.length;
+        return getRecordSize();
     }
 
     /**
@@ -161,7 +181,7 @@
         }
         catch ( IOException e )
         {
-            log.log(POILogger.INFO, "Possibly corrupt compression or non-compressed data", e);
+            log.log(POILogger.WARN, "Possibly corrupt compression or non-compressed data", e);
             return data;
         }
     }
@@ -173,7 +193,11 @@
      */
     public int getRecordSize()
     {
-        return 8 + 50 + raw_pictureData.length;
+        int size = 8 + 50 + raw_pictureData.length;
+        if((getOptions() ^ getSignature()) == 0x10){
+            size += field_2_UID.length;
+        }
+        return size;
     }
 
     public byte[] getUID()
@@ -186,6 +210,16 @@
         this.field_1_UID = field_1_UID;
     }
 
+    public byte[] getPrimaryUID()
+    {
+        return field_2_UID;
+    }
+
+    public void setPrimaryUID( byte[] field_2_UID )
+    {
+        this.field_2_UID = field_2_UID;
+    }
+
     public int getUncompressedSize()
     {
         return field_2_cb;
@@ -264,6 +298,7 @@
                 "  RecordId: 0x" + HexDump.toHex( getRecordId() ) + nl +
                 "  Options: 0x" + HexDump.toHex( getOptions() ) + nl +
                 "  UID: 0x" + HexDump.toHex( field_1_UID ) + nl +
+                (field_2_UID == null ? "" : ("  UID2: 0x" + HexDump.toHex( field_2_UID ) + nl)) +
                 "  Uncompressed Size: " + HexDump.toHex( field_2_cb ) + nl +
                 "  Bounds: " + getBounds() + nl +
                 "  Size in EMU: " + getSizeEMU() + nl +
@@ -273,4 +308,19 @@
                 "  Extra Data:" + nl + extraData;
     }
 
+    /**
+     * Return the blip signature
+     *
+     * @return the blip signature
+     */
+    public short getSignature(){
+        short sig = 0;
+        switch(getRecordId()){
+            case RECORD_ID_EMF: sig = SIGNATURE_EMF; break;
+            case RECORD_ID_WMF: sig = SIGNATURE_WMF; break;
+            case RECORD_ID_PICT: sig = SIGNATURE_PICT; break;
+            default: log.log(POILogger.WARN, "Unknown metafile: " + getRecordId()); break;
+        }
+        return sig;
+    }
 }

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/model/FormulaParser.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/model/FormulaParser.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/model/FormulaParser.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/model/FormulaParser.java Mon May  5 07:20:39 2008
@@ -380,12 +380,13 @@
         } else {
             isVarArgs = !fm.hasFixedArgsLength();
             funcIx = fm.getIndex();
+            validateNumArgs(numArgs, fm);
         }
         AbstractFunctionPtg retval;
         if(isVarArgs) {
             retval = new FuncVarPtg(name, (byte)numArgs);
         } else {
-            retval = new FuncPtg(funcIx, (byte)numArgs);
+            retval = new FuncPtg(funcIx);
         }
         if (!name.equals(AbstractFunctionPtg.FUNCTION_NAME_IF)) {
             // early return for everything else besides IF()
@@ -447,6 +448,29 @@
         return retval;
     }
 
+    private void validateNumArgs(int numArgs, FunctionMetadata fm) {
+        if(numArgs < fm.getMinParams()) {
+            String msg = "Too few arguments to function '" + fm.getName() + "'. ";
+            if(fm.hasFixedArgsLength()) {
+                msg += "Expected " + fm.getMinParams();
+            } else {
+                msg += "At least " + fm.getMinParams() + " were expected";
+            }
+            msg += " but got " + numArgs + ".";
+            throw new FormulaParseException(msg);
+         }
+        if(numArgs > fm.getMaxParams()) {
+            String msg = "Too many arguments to function '" + fm.getName() + "'. ";
+            if(fm.hasFixedArgsLength()) {
+                msg += "Expected " + fm.getMaxParams();
+            } else {
+                msg += "At most " + fm.getMaxParams() + " were expected";
+            }
+            msg += " but got " + numArgs + ".";
+            throw new FormulaParseException(msg);
+       }
+    }
+
     private static boolean isArgumentDelimiter(char ch) {
         return ch ==  ',' || ch == ')';
     }

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/model/Workbook.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/model/Workbook.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/model/Workbook.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/model/Workbook.java Mon May  5 07:20:39 2008
@@ -476,9 +476,9 @@
     }
 
     /**
-     * Determines whether a workbook contains the privided sheet name.
+     * Determines whether a workbook contains the provided sheet name.
      *
-     * @param name the name to test
+     * @param name the name to test (case insensitive match)
      * @param excludeSheetIdx the sheet to exclude from the check or -1 to include all sheets in the check.
      * @return true if the sheet contains the name, false otherwise.
      */
@@ -487,7 +487,7 @@
         for ( int i = 0; i < boundsheets.size(); i++ )
         {
             BoundSheetRecord boundSheetRecord = (BoundSheetRecord) boundsheets.get( i );
-            if (excludeSheetIdx != i && name.equals(boundSheetRecord.getSheetname()))
+            if (excludeSheetIdx != i && name.equalsIgnoreCase(boundSheetRecord.getSheetname()))
                 return true;
         }
         return false;

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java Mon May  5 07:20:39 2008
@@ -1,4 +1,3 @@
-
 /* ====================================================================
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
@@ -15,13 +14,7 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
-        
 
-/*
- * ColumnInfoRecord.java
- *
- * Created on December 8, 2001, 8:44 AM
- */
 package org.apache.poi.hssf.record;
 
 import org.apache.poi.util.LittleEndian;
@@ -29,29 +22,28 @@
 import org.apache.poi.util.BitFieldFactory;
 
 /**
- * Title: ColumnInfo Record<P>
- * Description:  Defines with width and formatting for a range of columns<P>
- * REFERENCE:  PG 293 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
+ * Title: COLINFO Record<p/>
+ * Description:  Defines with width and formatting for a range of columns<p/>
+ * REFERENCE:  PG 293 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<p/>
  * @author Andrew C. Oliver (acoliver at apache dot org)
  * @version 2.0-pre
  */
-
-public class ColumnInfoRecord
-    extends Record
-{
+public final class ColumnInfoRecord extends Record {
     public static final short     sid = 0x7d;
     private short                 field_1_first_col;
     private short                 field_2_last_col;
     private short                 field_3_col_width;
     private short                 field_4_xf_index;
     private short                 field_5_options;
-    static final private BitField hidden    = BitFieldFactory.getInstance(0x01);
-    static final private BitField outlevel  = BitFieldFactory.getInstance(0x0700);
-    static final private BitField collapsed = BitFieldFactory.getInstance(0x1000);
+    private static final BitField hidden    = BitFieldFactory.getInstance(0x01);
+    private static final BitField outlevel  = BitFieldFactory.getInstance(0x0700);
+    private static final BitField collapsed = BitFieldFactory.getInstance(0x1000);
+    // Excel seems write values 2, 10, and 260, even though spec says "must be zero"
     private short                 field_6_reserved;
 
     public ColumnInfoRecord()
     {
+        field_6_reserved = 2; // seems to be the most common value
     }
 
     /**
@@ -71,7 +63,18 @@
         field_3_col_width = in.readShort();
         field_4_xf_index  = in.readShort();
         field_5_options   = in.readShort();
-        field_6_reserved  = in.readShort();
+        switch(in.remaining()) {
+            case 2: // usual case
+                field_6_reserved  = in.readShort();
+                break;
+            case 1:
+                // often COLINFO gets encoded 1 byte short
+                // shouldn't matter because this field is unused
+                field_6_reserved  = in.readByte(); 
+                break;
+            default:
+                throw new RuntimeException("Unusual record size remaining=(" + in.remaining() + ")");
+        }
     }
 
     protected void validateSid(short id)

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/FileSharingRecord.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/FileSharingRecord.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/FileSharingRecord.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/FileSharingRecord.java Mon May  5 07:20:39 2008
@@ -14,31 +14,26 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
-        
 
 package org.apache.poi.hssf.record;
 
 import org.apache.poi.util.LittleEndian;
-import org.apache.poi.util.POILogFactory;
-import org.apache.poi.util.POILogger;
 import org.apache.poi.util.StringUtil;
 
 /**
- * Title:        FileSharing<P>
+ * Title:        FILESHARING<P>
  * Description:  stores the encrypted readonly for a workbook (write protect) 
- * REFERENCE:  PG 314 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
+ * This functionality is accessed from the options dialog box available when performing 'Save As'.<p/>
+ * REFERENCE:  PG 314 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<p/>
  * @author Andrew C. Oliver (acoliver at apache dot org)
  */
+public final class FileSharingRecord extends Record {
 
-public class FileSharingRecord extends Record {
-    private static POILogger logger = POILogFactory.getLogger(FileSharingRecord.class);
-    	
     public final static short sid = 0x5b;
     private short             field_1_readonly;
     private short             field_2_password;
-    private byte              field_3_username_length;
-    private short             field_4_unknown; // not documented
-    private String            field_5_username;
+    private byte              field_3_username_unicode_options;
+    private String            field_3_username_value;
 
     public FileSharingRecord() {}
     
@@ -61,23 +56,15 @@
     protected void fillFields(RecordInputStream in) {
         field_1_readonly = in.readShort();
         field_2_password = in.readShort();
-        field_3_username_length = in.readByte();
         
-        // Is this really correct? The latest docs
-        //  seem to hint there's nothing between the
-        //  username length and the username string
-        field_4_unknown = in.readShort();
+        int nameLen = in.readShort();
         
-        // Ensure we don't try to read more data than
-        //  there actually is
-        if(field_3_username_length > in.remaining()) {
-        	logger.log(POILogger.WARN, "FileSharingRecord defined a username of length " + field_3_username_length + ", but only " + in.remaining() + " bytes were left, truncating");
-        	field_3_username_length = (byte)in.remaining();
-        }
-        if(field_3_username_length > 0) {
-        	field_5_username = in.readCompressedUnicode(field_3_username_length);
+        if(nameLen > 0) {
+            // TODO - Current examples(3) from junits only have zero length username. 
+            field_3_username_unicode_options = in.readByte();
+            field_3_username_value = in.readCompressedUnicode(nameLen);
         } else {
-        	field_5_username = "";
+            field_3_username_value = "";
         }
     }
 
@@ -135,45 +122,24 @@
     /**
      * @returns byte representing the length of the username field
      */
-    public byte getUsernameLength() {
-        return field_3_username_length ;
-    }
-
-    /**
-     * @param byte representing the length of the username field
-     */
-    public void setUsernameLength(byte length) {
-        this.field_3_username_length = length;
+    public short getUsernameLength() {
+        return (short) field_3_username_value.length();
     }
 
     /**
      * @returns username of the user that created the file
      */
     public String getUsername() {
-        return this.field_5_username;
+        return field_3_username_value;
     }
 
     /**
      * @param username of the user that created the file
      */
     public void setUsername(String username) {
-        this.field_5_username = username;
-        this.field_3_username_length = (byte)username.length();
-    }
-
-    /**
-     * @return short value of a "bonus field" in Excel that was not doc'd
-     */
-    public short getUnknown() {
-        return field_4_unknown;
+        field_3_username_value = username;
     }
 
-    /**
-     * @param unknown field value to set (bonus field that is not doc'd)
-     */
-    public void setUnknown(short unk) {
-        field_4_unknown = unk;
-    }
 
     public String toString() {
         StringBuffer buffer = new StringBuffer();
@@ -183,10 +149,6 @@
             .append(getReadOnly() == 1 ? "true" : "false").append("\n");
         buffer.append("    .password       = ")
             .append(Integer.toHexString(getPassword())).append("\n");
-        buffer.append("    .userlen        = ")
-            .append(Integer.toHexString(getUsernameLength())).append("\n");
-        buffer.append("    .unknown        = ")
-            .append(Integer.toHexString(getUnknown())).append("\n");
         buffer.append("    .username       = ")
             .append(getUsername()).append("\n");
         buffer.append("[/FILESHARING]\n");
@@ -194,18 +156,25 @@
     }
 
     public int serialize(int offset, byte [] data) {
+        // TODO - junit
         LittleEndian.putShort(data, 0 + offset, sid);
         LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize()-4));
         LittleEndian.putShort(data, 4 + offset, getReadOnly());
         LittleEndian.putShort(data, 6 + offset, getPassword());
-        data[ 8 + offset ] =  getUsernameLength();
-        LittleEndian.putShort(data, 9 + offset, getUnknown());
-        StringUtil.putCompressedUnicode( getUsername(), data, 11 + offset );
+        LittleEndian.putShort(data, 8 + offset, getUsernameLength());
+        if(getUsernameLength() > 0) {
+            LittleEndian.putByte(data, 10 + offset, field_3_username_unicode_options);
+            StringUtil.putCompressedUnicode( getUsername(), data, 11 + offset );
+        }
         return getRecordSize();
     }
 
     public int getRecordSize() {
-        return 11+getUsernameLength();
+        short nameLen = getUsernameLength();
+        if (nameLen < 1) {
+            return 10;
+        }
+        return 11+nameLen;
     }
 
     public short getSid() {
@@ -219,10 +188,7 @@
       FileSharingRecord clone = new FileSharingRecord();
       clone.setReadOnly(field_1_readonly);
       clone.setPassword(field_2_password);
-      clone.setUsernameLength(field_3_username_length);
-      clone.setUnknown(field_4_unknown);
-      clone.setUsername(field_5_username);
+      clone.setUsername(field_3_username_value);
       return clone;
     }
-
 }

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/FormulaRecord.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/FormulaRecord.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/FormulaRecord.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/FormulaRecord.java Mon May  5 07:20:39 2008
@@ -40,7 +40,7 @@
  * @version 2.0-pre
  */
 
-public class FormulaRecord
+public final class FormulaRecord
     extends Record
     implements CellValueRecordInterface, Comparable
 {
@@ -108,6 +108,11 @@
         } catch (java.lang.UnsupportedOperationException uoe)  {
           throw new RecordFormatException(uoe);
         }
+        if (in.remaining() == 10) {
+            // TODO - this seems to occur when IntersectionPtg is present
+            // 10 extra bytes are just 0x01 and 0x00
+            // This causes POI stderr: "WARN. Unread 10 bytes of record 0x6"
+        }
     }
 
     //public void setRow(short row)

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java Mon May  5 07:20:39 2008
@@ -33,7 +33,7 @@
  * @author Danny Mui at apache dot org
  */
 public final class SharedFormulaRecord extends Record {
-	 public final static short   sid = 0x4BC;
+    public final static short   sid = 0x4BC;
     
     private int               field_1_first_row;
     private int               field_2_last_row;
@@ -186,6 +186,16 @@
      * counter part
      */
     protected static Stack convertSharedFormulas(Stack ptgs, int formulaRow, int formulaColumn) {
+        if(false) {
+            /*
+             * TODO - (May-2008) Stop converting relative ref Ptgs in shared formula records. 
+             * If/when POI writes out the workbook, this conversion makes an unnecessary diff in the BIFF records.
+             * Disabling this code breaks one existing junit.
+             * Some fix-up will be required to make Ptg.toFormulaString(HSSFWorkbook) work properly.
+             * That method will need 2 extra params: rowIx and colIx.
+             */
+            return ptgs;
+        }
         Stack newPtgStack = new Stack();
 
         if (ptgs != null)
@@ -265,7 +275,7 @@
         throw new RuntimeException("Shared Formula Conversion: Coding Error");
       }
     }
-    
+
     private static int fixupRelativeColumn(int currentcolumn, int column, boolean relative) {
         if(relative) {
             // mask out upper bits to produce 'wrapping' at column 256 ("IV")

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java Mon May  5 07:20:39 2008
@@ -147,10 +147,12 @@
     }
 
     public byte getParameterClass(int index) {
-        try {
-            return paramClass[index];
-        } catch (ArrayIndexOutOfBoundsException aioobe) {
+        if (index >= paramClass.length) {
+            // For var-arg (and other?) functions, the metadata does not list all the parameter
+            // operand classes.  In these cases, all extra parameters are assumed to have the 
+            // same operand class as the last one specified.
             return paramClass[paramClass.length - 1];
         }
+        return paramClass[index];
     }
 }

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNAPtg.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNAPtg.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNAPtg.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNAPtg.java Mon May  5 07:20:39 2008
@@ -1,4 +1,3 @@
-
 /* ====================================================================
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
@@ -16,19 +15,9 @@
    limitations under the License.
 ==================================================================== */
 
-/*
- * AreaPtg.java
- *
- * Created on November 17, 2001, 9:30 PM
- */
 package org.apache.poi.hssf.record.formula;
 
-import org.apache.poi.util.LittleEndian;
-import org.apache.poi.util.BitField;
-
 import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.hssf.util.AreaReference;
-import org.apache.poi.hssf.util.CellReference;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 
 /**
@@ -36,8 +25,7 @@
  * @author Jason Height (jheight at chariot dot net dot au)
  */
 
-public class AreaNAPtg
-    extends AreaPtg
+public final class AreaNAPtg extends AreaPtg
 {
     public final static short sid  = 0x6D;
 
@@ -50,20 +38,16 @@
       super(in);
     }
 
-    public void writeBytes(byte [] array, int offset) {
-      throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
-    }
-
     public String getAreaPtgName() {
       return "AreaNAPtg";
     }
 
     public String toFormulaString(HSSFWorkbook book)
     {
-      throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+      throw notImplemented();
     }
 
     public Object clone() {
-      throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+      throw notImplemented();
     }
 }

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNPtg.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNPtg.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNPtg.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNPtg.java Mon May  5 07:20:39 2008
@@ -36,8 +36,7 @@
  * @author Jason Height (jheight at chariot dot net dot au)
  */
 
-public class AreaNPtg
-    extends AreaPtg
+public final class AreaNPtg extends AreaPtg
 {
   public final static short sid  = 0x2D;
 
@@ -50,23 +49,16 @@
     super(in);
   }
 
-  public void writeBytes(byte [] array, int offset) {
-    super.writeBytes(array,offset);
-    //this should be a warning...there doesn't seem to be any rationale to throwing an exception here...
-    //this excpeiton appears to break user defined named ranges...
-    //throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
-  }
-
   public String getAreaPtgName() {
     return "AreaNPtg";
   }
 
   public String toFormulaString(HSSFWorkbook book)
   {
-    throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+    throw notImplemented();
   }
 
   public Object clone() {
-    throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+    throw notImplemented();
   }
 }

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNVPtg.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNVPtg.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNVPtg.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaNVPtg.java Mon May  5 07:20:39 2008
@@ -1,4 +1,3 @@
-
 /* ====================================================================
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
@@ -16,19 +15,9 @@
    limitations under the License.
 ==================================================================== */
 
-/*
- * AreaPtg.java
- *
- * Created on November 17, 2001, 9:30 PM
- */
 package org.apache.poi.hssf.record.formula;
 
-import org.apache.poi.util.LittleEndian;
-import org.apache.poi.util.BitField;
-
 import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.hssf.util.AreaReference;
-import org.apache.poi.hssf.util.CellReference;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 
 /**
@@ -36,10 +25,7 @@
  * @author  andy
  * @author Jason Height (jheight at chariot dot net dot au)
  */
-
-public class AreaNVPtg
-    extends AreaPtg
-{
+public final class AreaNVPtg extends AreaPtg {
   public final static short sid  = 0x4D;
 
   protected AreaNVPtg() {
@@ -51,20 +37,16 @@
     super(in);
   }
 
-  public void writeBytes(byte [] array, int offset) {
-    throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
-  }
-
   public String getAreaPtgName() {
     return "AreaNVPtg";
   }
 
   public String toFormulaString(HSSFWorkbook book)
   {
-    throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+    throw notImplemented();
   }
 
   public Object clone() {
-    throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+    throw notImplemented();
   }
 }

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java Mon May  5 07:20:39 2008
@@ -15,7 +15,6 @@
    limitations under the License.
 ==================================================================== */
 
-
 package org.apache.poi.hssf.record.formula;
 
 import org.apache.poi.util.LittleEndian;
@@ -32,10 +31,15 @@
  * @author  andy
  * @author Jason Height (jheight at chariot dot net dot au)
  */
+public class AreaPtg extends Ptg implements AreaI {
+    /**
+     * TODO - (May-2008) fix subclasses of AreaPtg 'AreaN~' which are used in shared formulas.
+     * see similar comment in ReferencePtg
+     */
+    protected final RuntimeException notImplemented() {
+          return new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+    }
 
-public class AreaPtg
-    extends Ptg implements AreaI
-{
     public final static short sid  = 0x25;
     private final static int  SIZE = 9;
     /** zero based, unsigned 16 bit */

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java Mon May  5 07:20:39 2008
@@ -57,10 +57,12 @@
         }
         numParams = fm.getMinParams();
     }
-    public FuncPtg(int functionIndex, int numberOfParameters) {
+    public FuncPtg(int functionIndex) {
         field_2_fnc_index = (short) functionIndex;
-        numParams = numberOfParameters;
-        paramClass = new byte[] { Ptg.CLASS_VALUE, }; // TODO
+        FunctionMetadata fm = FunctionMetadataRegistry.getFunctionByIndex(functionIndex);
+        numParams = fm.getMinParams(); // same as max since these are not var-arg funcs
+        returnClass = fm.getReturnClassCode();
+        paramClass = fm.getParameterClassCodes();
     }
 
     public void writeBytes(byte[] array, int offset) {

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java Mon May  5 07:20:39 2008
@@ -54,8 +54,8 @@
             returnClass = Ptg.CLASS_VALUE;
             paramClass = new byte[] {Ptg.CLASS_VALUE};
         } else {
-            returnClass = Ptg.CLASS_VALUE;
-            paramClass = new byte[] {Ptg.CLASS_VALUE};
+            returnClass = fm.getReturnClassCode();
+            paramClass = fm.getParameterClassCodes();
         }
     }
 

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/Ptg.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/Ptg.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/Ptg.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/Ptg.java Mon May  5 07:20:39 2008
@@ -30,24 +30,23 @@
  * @author avik
  * @author Jason Height (jheight at chariot dot net dot au)
  */
-
 public abstract class Ptg
 {
 
-        
+
     /* convert infix order ptg list to rpn order ptg list
      * @return List ptgs in RPN order
      * @param infixPtgs List of ptgs in infix order
      */
-    
+
     /* DO NOT REMOVE
      *we keep this method in case we wish to change the way we parse
      *It needs a getPrecedence in OperationsPtg
-    
+
     public static List ptgsToRpn(List infixPtgs) {
         java.util.Stack operands = new java.util.Stack();
         java.util.List retval = new java.util.Stack();
-        
+
         java.util.ListIterator i = infixPtgs.listIterator();
         Object p;
         OperationPtg o ;
@@ -61,13 +60,13 @@
                         weHaveABracket = true;
                     } else {
                         o = (OperationPtg) operands.pop();
-                        while (!(o instanceof ParenthesisPtg)) { 
+                        while (!(o instanceof ParenthesisPtg)) {
                             retval.add(o);
                         }
                         weHaveABracket = false;
                     }
                 } else {
-                    
+
                     while  (!operands.isEmpty() && ((OperationPtg) operands.peek()).getPrecedence() >= ((OperationPtg) p).getPrecedence() ) { //TODO handle ^ since it is right associative
                         retval.add(operands.pop());
                     }
@@ -82,12 +81,16 @@
                 //throw some error
             } else {
                 retval.add(operands.pop());
-            }   
+            }
         }
         return retval;
     }
     */
 
+    /**
+     * Reads <tt>size</tt> bytes of the input stream, to create an array of <tt>Ptg</tt>s.
+     * Extra data (beyond <tt>size</tt>) may be read if and <tt>ArrayPtg</tt>s are present.
+     */
     public static Stack createParsedExpressionTokens(short size,  RecordInputStream in )
     {
         Stack stack = new Stack();
@@ -97,22 +100,25 @@
         {
             Ptg ptg = Ptg.createPtg( in );
             if (ptg instanceof ArrayPtg) {
-            	if (arrayPtgs == null)
-            		arrayPtgs = new ArrayList(5);
-            	arrayPtgs.add(ptg);
-            	pos += 8;
+                if (arrayPtgs == null)
+                    arrayPtgs = new ArrayList(5);
+                arrayPtgs.add(ptg);
+                pos += 8;
             } else pos += ptg.getSize();
             stack.push( ptg );
         }
+        if(pos != size) {
+            throw new RuntimeException("Ptg array size mismatch");
+        }
         if (arrayPtgs != null) {
-        	for (int i=0;i<arrayPtgs.size();i++) {
-        		ArrayPtg p = (ArrayPtg)arrayPtgs.get(i);
-        		p.readTokenValues(in);
-        	}
+            for (int i=0;i<arrayPtgs.size();i++) {
+                ArrayPtg p = (ArrayPtg)arrayPtgs.get(i);
+                p.readTokenValues(in);
+            }
         }
         return stack;
     }
-    
+
     public static Ptg createPtg(RecordInputStream in)
     {
         byte id     = in.readByte();
@@ -123,142 +129,142 @@
              case ExpPtg.sid :                  // 0x01
                  retval = new ExpPtg(in);
                  break;
- 
+
              case AddPtg.sid :                  // 0x03
                  retval = new AddPtg(in);
                  break;
-       	  
+
              case SubtractPtg.sid :             // 0x04
                  retval = new SubtractPtg(in);
                  break;
-      	  
+
              case MultiplyPtg.sid :             // 0x05
                  retval = new MultiplyPtg(in);
                  break;
-        	  
+
              case DividePtg.sid :               // 0x06
-        	      retval = new DividePtg(in);
-        	      break;
-        	  
+                  retval = new DividePtg(in);
+                  break;
+
              case PowerPtg.sid :                // 0x07
                  retval = new PowerPtg(in);
                  break;
-       	  
+
              case ConcatPtg.sid :               // 0x08
                  retval = new ConcatPtg(in);
-        	                  break;
- 
+                              break;
+
              case LessThanPtg.sid:              // 0x09
                  retval = new LessThanPtg(in);
-        	                  break;
- 
+                              break;
+
               case LessEqualPtg.sid :            // 0x0a
                  retval = new LessEqualPtg(in);
-        	                  break;
- 
+                              break;
+
              case EqualPtg.sid :                // 0x0b
                  retval = new EqualPtg(in);
-        	                  break;
-        	  
+                              break;
+
              case GreaterEqualPtg.sid :         // 0x0c
                  retval = new GreaterEqualPtg(in);
-        	                  break;
-        	  
+                              break;
+
              case GreaterThanPtg.sid :          // 0x0d
                  retval = new GreaterThanPtg(in);
-        	                  break;
- 
+                              break;
+
              case NotEqualPtg.sid :             // 0x0e
                  retval = new NotEqualPtg(in);
-        	                  break;
- 
+                              break;
+
              case IntersectionPtg.sid :         // 0x0f
                  retval = new IntersectionPtg(in);
-        	                  break;
+                              break;
               case UnionPtg.sid :                // 0x10
                  retval = new UnionPtg(in);
-        	                  break;
-        	  
+                              break;
+
              case RangePtg.sid :                // 0x11
                  retval = new RangePtg(in);
-        	                  break;
-        	  
+                              break;
+
              case UnaryPlusPtg.sid :            // 0x12
                  retval = new UnaryPlusPtg(in);
-        	                  break;
-        	  
+                              break;
+
              case UnaryMinusPtg.sid :           // 0x13
                  retval = new UnaryMinusPtg(in);
-        	                  break;
-        	  
+                              break;
+
              case PercentPtg.sid :              // 0x14
                  retval = new PercentPtg(in);
-        	                  break;
-        	  
+                              break;
+
              case ParenthesisPtg.sid :          // 0x15
                  retval = new ParenthesisPtg(in);
-        	                  break;
- 
+                              break;
+
              case MissingArgPtg.sid :           // 0x16
                  retval = new MissingArgPtg(in);
-        	                  break;
- 
+                              break;
+
              case StringPtg.sid :               // 0x17
                 retval = new StringPtg(in);
                 break;
- 
+
              case AttrPtg.sid :                 // 0x19
              case 0x1a :
                  retval = new AttrPtg(in);
-        	                  break;
-        	  
+                              break;
+
              case ErrPtg.sid :                  // 0x1c
                  retval = new ErrPtg(in);
-        	                  break;
- 
+                              break;
+
              case BoolPtg.sid :                 // 0x1d
                 retval = new BoolPtg(in);
                 break;
- 
+
              case IntPtg.sid :                  // 0x1e
                  retval = new IntPtg(in);
-        	                  break;
- 
+                              break;
+
              case NumberPtg.sid :               // 0x1f
-        	      retval = new NumberPtg(in);
-        	      break;
-        	  
+                  retval = new NumberPtg(in);
+                  break;
+
              case ArrayPtg.sid :                // 0x20
-             	retval = new ArrayPtg(in);
-             	break;
+                 retval = new ArrayPtg(in);
+                 break;
              case ArrayPtgV.sid :               // 0x40
-             	retval = new ArrayPtgV(in);
-             	break;
+                 retval = new ArrayPtgV(in);
+                 break;
              case ArrayPtgA.sid :               // 0x60
-             	retval = new ArrayPtgA(in);
-             	break;
-        	  
+                 retval = new ArrayPtgA(in);
+                 break;
+
              case FuncPtg.sid :                 // 0x21
              case FuncPtg.sid + 0x20 :          // 0x41
              case FuncPtg.sid + 0x40 :          // 0x61
                  retval = new FuncPtg(in);
                  break;
-        	  
+
              case FuncVarPtg.sid :              // 0x22
              case FuncVarPtg.sid + 0x20 :       // 0x42
              case FuncVarPtg.sid + 0x40 :       // 0x62
                  retval = new FuncVarPtg(in);
-        	                  break;
-        	  
-             case ReferencePtg.sid :            // 0x24  
+                              break;
+
+             case ReferencePtg.sid :            // 0x24
                  retval = new ReferencePtg(in);
-        	                  break;
+                              break;
              case RefAPtg.sid :                 // 0x64
                  retval = new RefAPtg(in);
-                 break;   
+                 break;
              case RefVPtg.sid :                 // 0x44
                  retval = new RefVPtg(in);
-                 break;   
+                 break;
              case RefNAPtg.sid :                // 0x6C
                  retval = new RefNAPtg(in);
                  break;
@@ -267,11 +273,11 @@
                  break;
              case RefNVPtg.sid :                // 0x4C
                  retval = new RefNVPtg(in);
-                 break;           	                  
-        	  
-             case AreaPtg.sid :                 // 0x25          
+                 break;
+
+             case AreaPtg.sid :                 // 0x25
                  retval = new AreaPtg(in);
-        	                  break;
+                              break;
              case AreaVPtg.sid:                 // 0x45
                  retval = new AreaVPtg(in);
                  break;
@@ -287,81 +293,81 @@
              case AreaNVPtg.sid :               // 0x4D
                 retval = new AreaNVPtg(in);
                 break;
-        	  
+
              case MemAreaPtg.sid :              // 0x26
              case MemAreaPtg.sid + 0x40 :       // 0x46
              case MemAreaPtg.sid + 0x20 :       // 0x66
                  retval = new MemAreaPtg(in);
                  break;
-        	  
+
              case MemErrPtg.sid :               // 0x27
              case MemErrPtg.sid + 0x20 :        // 0x47
              case MemErrPtg.sid + 0x40 :        // 0x67
                  retval = new MemErrPtg(in);
-        	                  break;
-        	  
+                              break;
+
              case MemFuncPtg.sid :              // 0x29
                  retval = new MemFuncPtg(in);
                  break;
-        	  
+
              case RefErrorPtg.sid :             // 0x2a
              case RefErrorPtg.sid + 0x20 :      // 0x4a
              case RefErrorPtg.sid + 0x40 :      // 0x6a
                  retval = new RefErrorPtg(in);
-        	                  break;
-        	  
+                              break;
+
              case AreaErrPtg.sid :              // 0x2b
              case AreaErrPtg.sid + 0x20 :       // 0x4b
              case AreaErrPtg.sid + 0x40 :       // 0x6b
                  retval = new AreaErrPtg(in);
-        	                  break;
-        	  
+                              break;
+
              case NamePtg.sid :                 // 0x23
              case NamePtg.sid + 0x20 :          // 0x43
              case NamePtg.sid + 0x40 :          // 0x63
                  retval = new NamePtg(in);
                  break;
-        	  
+
              case NameXPtg.sid :                // 0x39
              case NameXPtg.sid + 0x20 :         // 0x45
              case NameXPtg.sid + 0x40 :         // 0x79
                  retval = new NameXPtg(in);
-        	                  break;
- 
+                              break;
+
              case Area3DPtg.sid :               // 0x3b
              case Area3DPtg.sid + 0x20 :        // 0x5b
              case Area3DPtg.sid + 0x40 :        // 0x7b
                  retval = new Area3DPtg(in);
-        	                  break;
- 
+                              break;
+
              case Ref3DPtg.sid :                // 0x3a
              case Ref3DPtg.sid + 0x20:          // 0x5a
              case Ref3DPtg.sid + 0x40:          // 0x7a
                  retval = new Ref3DPtg(in);
-        	                  break;
- 
+                              break;
+
              case DeletedRef3DPtg.sid:          // 0x3c
              case DeletedRef3DPtg.sid + 0x20:   // 0x5c
              case DeletedRef3DPtg.sid + 0x40:   // 0x7c
                  retval = new DeletedRef3DPtg(in);
-        	                  break;
-        	  
+                              break;
+
              case DeletedArea3DPtg.sid :        // 0x3d
              case DeletedArea3DPtg.sid + 0x20 : // 0x5d
              case DeletedArea3DPtg.sid + 0x40 : // 0x7d
                  retval = new DeletedArea3DPtg(in);
                  break;
-                 
+
              case 0x00:
-            	 retval = new UnknownPtg();
-            	 break;
-                 
+                 retval = new UnknownPtg();
+                 break;
+
             default :
                  //retval = new UnknownPtg();
                  throw new java.lang.UnsupportedOperationException(" Unknown Ptg in Formula: 0x"+
                         Integer.toHexString(( int ) id) + " (" + ( int ) id + ")");
         }
-        
+
         if (id > 0x60) {
             retval.setClass(CLASS_ARRAY);
         } else if (id > 0x40) {
@@ -371,35 +377,35 @@
         }
 
        return retval;
-        
+
     }
-    
+
     public static int serializePtgStack(Stack expression, byte[] array, int offset) {
-    	int pos = 0;
-    	int size = 0;
-    	if (expression != null)
-    		size = expression.size();
-
-    	List arrayPtgs = null;
-    	
-    	for (int k = 0; k < size; k++) {
-    		Ptg ptg = ( Ptg ) expression.get(k);
-    		
-    		ptg.writeBytes(array, pos + offset);
-    		if (ptg instanceof ArrayPtg) {
-    		  if (arrayPtgs == null)
-    			  arrayPtgs = new ArrayList(5);
-    		  arrayPtgs.add(ptg);
-    		  pos += 8;
-    		} else pos += ptg.getSize();
-    	}
-    	if (arrayPtgs != null) {
-    		for (int i=0;i<arrayPtgs.size();i++) {
-    			ArrayPtg p = (ArrayPtg)arrayPtgs.get(i);
-    			pos += p.writeTokenValueBytes(array, pos + offset);
-    		}
-    	}
-    	return pos;
+        int pos = 0;
+        int size = 0;
+        if (expression != null)
+            size = expression.size();
+
+        List arrayPtgs = null;
+
+        for (int k = 0; k < size; k++) {
+            Ptg ptg = ( Ptg ) expression.get(k);
+
+            ptg.writeBytes(array, pos + offset);
+            if (ptg instanceof ArrayPtg) {
+              if (arrayPtgs == null)
+                  arrayPtgs = new ArrayList(5);
+              arrayPtgs.add(ptg);
+              pos += 8;
+            } else pos += ptg.getSize();
+        }
+        if (arrayPtgs != null) {
+            for (int i=0;i<arrayPtgs.size();i++) {
+                ArrayPtg p = (ArrayPtg)arrayPtgs.get(i);
+                pos += p.writeTokenValueBytes(array, pos + offset);
+            }
+        }
+        return pos;
     }
 
     public abstract int getSize();
@@ -414,7 +420,7 @@
     }
     /** write this Ptg to a byte array*/
     public abstract void writeBytes(byte [] array, int offset);
-    
+
     /**
      * return a string representation of this token alone
      */
@@ -425,7 +431,7 @@
     public String toDebugString() {
         byte[] ba = new byte[getSize()];
         String retval=null;
-        writeBytes(ba,0);        
+        writeBytes(ba,0);
         try {
             retval = org.apache.poi.util.HexDump.dump(ba,0,0);
         } catch (Exception e) {
@@ -433,7 +439,7 @@
         }
         return retval;
     }
-    
+
     /** Overridden toString method to ensure object hash is not printed.
      * This helps get rid of gratuitous diffs when comparing two dumps
      * Subclasses may output more relevant information by overriding this method
@@ -441,26 +447,26 @@
     public String toString(){
         return this.getClass().toString();
     }
-    
+
     public static final byte CLASS_REF = 0x00;
     public static final byte CLASS_VALUE = 0x20;
     public static final byte CLASS_ARRAY = 0x40;
-    
+
     protected byte ptgClass = CLASS_REF; //base ptg
-    
+
     public void setClass(byte thePtgClass) {
         ptgClass = thePtgClass;
     }
-    
+
     /** returns the class (REF/VALUE/ARRAY) for this Ptg */
     public byte getPtgClass() {
         return ptgClass;
     }
-    
+
     public abstract byte getDefaultOperandClass();
 
     public abstract Object clone();
 
-    
-    
+
+
 }

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/RefNAPtg.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/RefNAPtg.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/RefNAPtg.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/RefNAPtg.java Mon May  5 07:20:39 2008
@@ -1,4 +1,3 @@
-
 /* ====================================================================
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
@@ -16,26 +15,16 @@
    limitations under the License.
 ==================================================================== */
 
-/*
- * ValueReferencePtg.java
- *
- * Created on November 21, 2001, 5:27 PM
- */
 package org.apache.poi.hssf.record.formula;
 
-import org.apache.poi.util.LittleEndian;
-import org.apache.poi.util.BitField;
-
 import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.hssf.util.CellReference;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 
 /**
  * RefNAPtg
  * @author Jason Height (jheight at chariot dot net dot au)
  */
-
-public class RefNAPtg extends ReferencePtg
+public final class RefNAPtg extends ReferencePtg
 {
     public final static byte sid  = 0x6C;
 
@@ -48,21 +37,16 @@
       super(in);
     }
 
-    public void writeBytes(byte [] array, int offset)
-    {
-      throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
-    }
-
     public String getRefPtgName() {
       return "RefNAPtg";
     }
 
     public String toFormulaString(HSSFWorkbook book)
     {
-      throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+      throw notImplemented();
     }
 
     public Object clone() {
-      throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+        throw notImplemented();
     }
 }

Modified: poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/RefNPtg.java
URL: http://svn.apache.org/viewvc/poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/RefNPtg.java?rev=653490&r1=653489&r2=653490&view=diff
==============================================================================
--- poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/RefNPtg.java (original)
+++ poi/tags/REL_3_1_BETA2/src/java/org/apache/poi/hssf/record/formula/RefNPtg.java Mon May  5 07:20:39 2008
@@ -1,4 +1,3 @@
-
 /* ====================================================================
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
@@ -16,25 +15,16 @@
    limitations under the License.
 ==================================================================== */
 
-/*
- * RefNPtg.java
- *
- */
 package org.apache.poi.hssf.record.formula;
 
-import org.apache.poi.util.LittleEndian;
-import org.apache.poi.util.BitField;
-
 import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.hssf.util.CellReference;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 
 /**
  * RefNPtg
  * @author Jason Height (jheight at apache dot com)
  */
-
-public class RefNPtg extends ReferencePtg
+public final class RefNPtg extends ReferencePtg
 {
     public final static byte sid  = 0x2C;
 
@@ -49,21 +39,16 @@
       super(in);
     }
 
-    public void writeBytes(byte [] array, int offset)
-    {
-      throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
-    }
-
     public String getRefPtgName() {
       return "RefNPtg";
     }
 
     public String toFormulaString(HSSFWorkbook book)
     {
-      throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+        throw notImplemented();
     }
 
     public Object clone() {
-      throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+        throw notImplemented();
     }
 }



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