diff options
author | Glen Stampoultzis <glens@apache.org> | 2002-02-10 04:32:07 +0000 |
---|---|---|
committer | Glen Stampoultzis <glens@apache.org> | 2002-02-10 04:32:07 +0000 |
commit | 35ed88b7c1318ec48989247acee98086dd564389 (patch) | |
tree | 420ef73622e3157d6511cff4c1bb9e1a764895de /src/records | |
parent | e8bdf9d9596a5e4c603a501ad3f979140bb0b31a (diff) | |
download | poi-35ed88b7c1318ec48989247acee98086dd564389.tar.gz poi-35ed88b7c1318ec48989247acee98086dd564389.zip |
Added support for automatic record generation
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352078 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/records')
-rw-r--r-- | src/records/definitions/area_record.xml | 11 | ||||
-rw-r--r-- | src/records/definitions/bar_record.xml | 14 | ||||
-rw-r--r-- | src/records/definitions/dat_record.xml | 12 | ||||
-rw-r--r-- | src/records/definitions/dataformat_record.xml | 12 | ||||
-rw-r--r-- | src/records/definitions/font_example.xml | 32 | ||||
-rw-r--r-- | src/records/definitions/frame_record.xml | 14 | ||||
-rw-r--r-- | src/records/definitions/legend_record.xml | 31 | ||||
-rw-r--r-- | src/records/definitions/series_record.xml | 27 | ||||
-rw-r--r-- | src/records/styles/record.xsl | 263 | ||||
-rw-r--r-- | src/records/styles/record_document.xsl | 51 | ||||
-rw-r--r-- | src/records/styles/record_test.xsl | 130 |
11 files changed, 597 insertions, 0 deletions
diff --git a/src/records/definitions/area_record.xml b/src/records/definitions/area_record.xml new file mode 100644 index 0000000000..efb3239262 --- /dev/null +++ b/src/records/definitions/area_record.xml @@ -0,0 +1,11 @@ +<record id="0x101A" name="Area" package="org.apache.poi.hssf.record"> + <description>The area record is used to define a area chart.</description> + <author>Glen Stampoultzis (gstamp at iprimus dot com dot au)</author> + <fields> + <field type="int" size="2" name="format flags"> + <bit number="0" name="stacked" description="series is stacked"/> + <bit number="1" name="display as percentage" description="results displayed as percentages"/> + <bit number="2" name="shadow" description="display a shadow for the chart"/> + </field> + </fields> +</record> diff --git a/src/records/definitions/bar_record.xml b/src/records/definitions/bar_record.xml new file mode 100644 index 0000000000..41aff58aba --- /dev/null +++ b/src/records/definitions/bar_record.xml @@ -0,0 +1,14 @@ +<record id="0x1017" name="Bar" package="org.apache.poi.hssf.record"> + <description>The bar record is used to define a bar chart.</description> + <author>Glen Stampoultzis (gstamp at iprimus dot com dot au)</author> + <fields> + <field type="int" size="2" name="bar space" description="space between bars"/> + <field type="int" size="2" name="category space" default="50" description="space between categories"/> + <field type="int" size="2" name="format flags"> + <bit number="0" name="horizontal" description="true to display horizontal bar charts, false for vertical"/> + <bit number="1" name="stacked" description="stack displayed values"/> + <bit number="2" name="display as percentage" description="display chart values as a percentage"/> + <bit number="3" name="shadow" description="display a shadow for the chart"/> + </field> + </fields> +</record> diff --git a/src/records/definitions/dat_record.xml b/src/records/definitions/dat_record.xml new file mode 100644 index 0000000000..2497eca851 --- /dev/null +++ b/src/records/definitions/dat_record.xml @@ -0,0 +1,12 @@ +<record id="0x1063" name="Dat" package="org.apache.poi.hssf.record"> + <description>The dat record is used to store options for the chart.</description> + <author>Glen Stampoultzis (gstamp at iprimus dot com dot au)</author> + <fields> + <field type="int" size="2" name="options"> + <bit number="0" name="horizontal border" description="has a horizontal border"/> + <bit number="1" name="vertical border" description="has vertical border"/> + <bit number="2" name="border" description="data table has a border"/> + <bit number="3" name="show series key" description="shows the series key"/> + </field> + </fields> +</record> diff --git a/src/records/definitions/dataformat_record.xml b/src/records/definitions/dataformat_record.xml new file mode 100644 index 0000000000..a56f6102b7 --- /dev/null +++ b/src/records/definitions/dataformat_record.xml @@ -0,0 +1,12 @@ +<record id="0x1006" name="DataFormat" package="org.apache.poi.hssf.record"> + <description>The data format record is used to index into a series.</description> + <author>Glen Stampoultzis (gstamp at iprimus dot com dot au)</author> + <fields> + <field type="int" size="2" name="point number" description="0xFFFF for entire series"/> + <field type="int" size="2" name="series index" description="relative index"/> + <field type="int" size="2" name="series number" description="series number (which can be different from series index when series order is changed)"/> + <field type="int" size="2" name="format flags"> + <bit number="0" name="use excel 4 colors" description="set true to use excel 4 colors."/> + </field> + </fields> +</record> diff --git a/src/records/definitions/font_example.xml b/src/records/definitions/font_example.xml new file mode 100644 index 0000000000..f077ac9739 --- /dev/null +++ b/src/records/definitions/font_example.xml @@ -0,0 +1,32 @@ +<record id="0x31" name="Font" package="org.apache.poi.hssf.records"> + <description>Describes a font record. In Excel a font belongs in the font table.</description> + <author>Glen Stampoultzis (gstamp at iprimus dot com dot au)</author> + <fields> + <field type="int" size="2" name="font height"/> + <field type="bits" size="2" name="attributes"> + <bit number="1" name="italic" description="Indicates whether a font has an italic appearance"/> + <bit number="3" name="struck out" description="Indicates whether a font has a line through the middle."/> + </field> + <field type="int" size="2" name="colour palette index"/> + <field type="int" size="2" name="bold weight"> + <const name="normal text" value="400" description="Sets text to normal appearance"/> + <const name="bold text" value="700" description="Redenders a font bold"/> + </field> + <field type="int" size="2" name="super sub script"> + <const name="none" value="0"/> + <const name="super script" value="1"/> + <const name="subscript" value="2"/> + </field> + <field type="int" size="1" name="underline"> + <const name="none" value="0"/> + <const name="single" value="1"/> + <const name="double" value="2"/> + <const name="single accounting" value="3"/> + <const name="double accounting" value="4"/> + </field> + <field type="int" size="1" name="font family"/> + <field type="int" size="1" name="character set"/> + <field type="int" size="1" name="reserved"/> + <field type="string" size="var" name="font name"/> + </fields> +</record> diff --git a/src/records/definitions/frame_record.xml b/src/records/definitions/frame_record.xml new file mode 100644 index 0000000000..b7a63c41e0 --- /dev/null +++ b/src/records/definitions/frame_record.xml @@ -0,0 +1,14 @@ +<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 (gstamp at iprimus dot com dot au)</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> diff --git a/src/records/definitions/legend_record.xml b/src/records/definitions/legend_record.xml new file mode 100644 index 0000000000..732f6f35dc --- /dev/null +++ b/src/records/definitions/legend_record.xml @@ -0,0 +1,31 @@ +<record id="0x1015" name="Legend" package="org.apache.poi.hssf.record"> + <description>The legend record specifies the location of legend on a chart and it's overall size.</description> + <author>Glen Stampoultzis (gstamp at iprimus dot com dot au)</author> + <fields> + <field type="int" size="4" name="x position"/> + <field type="int" size="4" name="y position"/> + <field type="int" size="4" name="x size"/> + <field type="int" size="4" name="y size"/> + <field type="int" size="1" name="type"> + <const name="bottom" value="0"/> + <const name="corner" value="1"/>? + <const name="top" value="2"/> + <const name="right" value="3"/> + <const name="left" value="4"/> + <const name="not docked" value="7"/> + </field> + <field type="int" size="1" name="spacing"> + <const name="close" value="0"/> + <const name="medium" value="1"/> + <const name="open" value="2"/> + </field> + <field type="int" size="2" name="options"> + <bit number="0" name="auto position" description="set to true if legend is docked"/> + <bit number="1" name="auto series" description="automatic series distribution"/> + <bit number="2" name="auto pos x" description="x positioning is done automatically"/> + <bit number="3" name="auto pos y" description="y positioning is done automatically"/> + <bit number="4" name="vert" description="if true legend is vertical (otherwise it's horizonal)"/> + <bit number="5" name="contains data table" description="true if the chart contains the data table"/> + </field> + </fields> +</record> diff --git a/src/records/definitions/series_record.xml b/src/records/definitions/series_record.xml new file mode 100644 index 0000000000..eccf92c3eb --- /dev/null +++ b/src/records/definitions/series_record.xml @@ -0,0 +1,27 @@ +<record id="0x1003" name="Series" package="org.apache.poi.hssf.record"> + <description>The series record describes the overall data for a series.</description> + <author>Glen Stampoultzis (gstamp at iprimus dot com dot au)</author> + <fields> + <field type="int" size="2" name="category data type"> + <const name="dates" value="0"/> + <const name="numeric" value="1"/> + <const name="sequence" value="2"/> + <const name="text" value="3"/> + </field> + <field type="int" size="2" name="values data type"> + <const name="dates" value="0"/> + <const name="numeric" value="1"/> + <const name="sequence" value="2"/> + <const name="text" value="3"/> + </field> + <field type="int" size="2" name="num categories"/> + <field type="int" size="2" name="num values"/> + <field type="int" size="2" name="bubble series type"> + <const name="dates" value="0"/> + <const name="numeric" value="1"/> + <const name="sequence" value="2"/> + <const name="text" value="3"/> + </field> + <field type="int" size="2" name="num bubble values"/> + </fields> +</record> diff --git a/src/records/styles/record.xsl b/src/records/styles/record.xsl new file mode 100644 index 0000000000..4a5964d63f --- /dev/null +++ b/src/records/styles/record.xsl @@ -0,0 +1,263 @@ +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:recutil="org.apache.poi.generator.RecordUtil" + xmlns:field="org.apache.poi.generator.FieldIterator" + xmlns:java="java" > + +<xsl:template match="record"> +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + */ + +<xsl:if test="@package"> +package <xsl:value-of select="@package"/>; +</xsl:if> + + +import org.apache.poi.util.BitField; +import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.StringUtil; +import org.apache.poi.util.HexDump; + +/** + * <xsl:value-of select="/record/description"/> + * NOTE: This source is automatically generated please do not modify this file. Either subclass or + * remove the record in src/records/definitions. +<xsl:apply-templates select="author"/> + */ +public class <xsl:value-of select="@name"/>Record + extends Record +{ + public final static short sid = <xsl:value-of select="@id"/>; +<xsl:for-each select="//fields/field"> private <xsl:value-of select="recutil:getType(@size,@type,10)"/><xsl:text> </xsl:text><xsl:value-of select="recutil:getFieldName(position(),@name,0)"/>; +<xsl:apply-templates select="./bit|./const"/> +</xsl:for-each> + + public <xsl:value-of select="@name"/>Record() + { +<xsl:for-each select="//fields/field"><xsl:if test="@default"> +<xsl:text> </xsl:text> +<xsl:value-of select="recutil:getFieldName(position(),@name,0)"/> = <xsl:value-of select="@default"/>; +</xsl:if></xsl:for-each> + } + + /** + * Constructs a <xsl:value-of select="@name"/> record and sets its fields appropriately. + * + * @param id id must be <xsl:value-of select="@id"/> or an exception + * will be throw upon validation + * @param size size the size of the data area of the record + * @param data data of the record (should not contain sid/len) + */ + + public <xsl:value-of select="@name"/>Record(short id, short size, byte [] data) + { + super(id, size, data); + } + + /** + * Constructs a <xsl:value-of select="@name"/> record and sets its fields appropriately. + * + * @param id id must be <xsl:value-of select="@id"/> or an exception + * will be throw upon validation + * @param size size the size of the data area of the record + * @param data data of the record (should not contain sid/len) + * @param offset of the record's data + */ + + public <xsl:value-of select="@name"/>Record(short id, short size, byte [] data, int offset) + { + super(id, size, data, offset); + } + + /** + * Checks the sid matches the expected side for this record + * + * @param id the expected sid. + */ + protected void validateSid(short id) + { + if (id != sid) + { + throw new RecordFormatException("Not a <xsl:value-of select="@name"/> record"); + } + } + + protected void fillFields(byte [] data, short size, int offset) + { +<xsl:variable name="fieldIterator" select="field:new()"/> +<xsl:for-each select="//fields/field"> +<xsl:text> </xsl:text><xsl:value-of select="recutil:getFieldName(position(),@name,30)"/> = <xsl:value-of select="field:fillDecoder($fieldIterator,@size,@type)"/>; +</xsl:for-each> + } + + public String toString() + { + StringBuffer buffer = new StringBuffer(); + + buffer.append("[<xsl:value-of select="@name"/>]\n"); +<xsl:apply-templates select="//field" mode="tostring"/> + buffer.append("[/<xsl:value-of select="@name"/>]\n"); + return buffer.toString(); + } + + public int serialize(int offset, byte[] data) + { + LittleEndian.putShort(data, 0 + offset, sid); + LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4)); +<xsl:variable name="fieldIterator" select="field:new()"/> +<xsl:for-each select="//fields/field"><xsl:text> + </xsl:text><xsl:value-of select="field:serialiseEncoder($fieldIterator,position(),@name,@size,@type)"/> +</xsl:for-each> + + return getRecordSize(); + } + + /** + * Size of record (exluding 4 byte header) + */ + public int getRecordSize() + { +<xsl:variable name="fieldIterator" select="field:new()"/> +<xsl:text> return 4 + </xsl:text> +<xsl:for-each select="//fields/field"> + <xsl:value-of select="field:calcSize($fieldIterator,position(),@name,@size,@type)"/> +</xsl:for-each>; + } + + public short getSid() + { + return this.sid; + } + +<xsl:apply-templates select="//field" mode="getset"/> +<xsl:apply-templates select="//field" mode="bits"/> + +} // END OF CLASS + + + + +</xsl:template> + +<xsl:template match = "field" mode="bits"> +<xsl:variable name="fieldNum" select="position()"/> +<xsl:for-each select="bit"> + /** + * Sets the <xsl:value-of select="@name"/> field value. + * <xsl:value-of select="@description"/> + */ + public void set<xsl:value-of select="recutil:getFieldName1stCap(@name,0)"/>(boolean value) + { + <xsl:value-of select="recutil:getFieldName($fieldNum,../@name,0)"/> = <xsl:value-of select="recutil:getFieldName(@name,0)"/>.set<xsl:value-of select="recutil:getType1stCap(../@size,../@type,0)"/>Boolean(<xsl:value-of select="recutil:getFieldName($fieldNum,../@name,0)"/>, value); + } + + /** + * <xsl:value-of select="@description"/> + * @return the <xsl:value-of select="@name"/> field value. + */ + public boolean is<xsl:value-of select="recutil:getFieldName1stCap(@name,0)"/>() + { + return <xsl:value-of select="recutil:getFieldName(@name,0)"/>.isSet(<xsl:value-of select="recutil:getFieldName($fieldNum,../@name,0)"/>); + } +</xsl:for-each> +</xsl:template> + +<xsl:template match = "bit" > private BitField <xsl:value-of select="recutil:getFieldName(@name,42)"/> = new BitField(<xsl:value-of select="recutil:getMask(@number)"/>); +</xsl:template> +<xsl:template match = "const"> public final static <xsl:value-of select="recutil:getType(../@size,../@type,10)"/><xsl:text> </xsl:text><xsl:value-of select="recutil:getConstName(../@name,@name,30)"/> = <xsl:value-of select="@value"/>; +</xsl:template> + +<xsl:template match = "const" mode="listconsts"> +<xsl:text> + * </xsl:text> +<xsl:value-of select="recutil:getConstName(../@name,@name,0)"/></xsl:template> +<xsl:template match="field" mode="getset"> + /** + * Get the <xsl:value-of select="@name"/> field for the <xsl:value-of select="../../@name"/> record.<xsl:if test="./const"> + * + * @return One of <xsl:apply-templates select="./const" mode="listconsts"/></xsl:if> + */ + public <xsl:value-of select="recutil:getType(@size,@type,0)"/> get<xsl:value-of select="recutil:getFieldName1stCap(@name,0)"/>() + { + return <xsl:value-of select="recutil:getFieldName(position(),@name,0)"/>; + } + + /** + * Set the <xsl:value-of select="@name"/> field for the <xsl:value-of select="../../@name"/> record.<xsl:if test="./const"> + * + * @param <xsl:value-of select="recutil:getFieldName(position(),@name,0)"/> + * One of <xsl:apply-templates select="./const" mode="listconsts"/></xsl:if> + */ + public void set<xsl:value-of select="recutil:getFieldName1stCap(@name,0)"/>(<xsl:value-of select="recutil:getType(@size,@type,0)"/><xsl:text> </xsl:text><xsl:value-of select="recutil:getFieldName(position(),@name,0)"/>) + { + this.<xsl:value-of select="recutil:getFieldName(position(),@name,0)"/> = <xsl:value-of select="recutil:getFieldName(position(),@name,0)"/>; + } +</xsl:template> + +<xsl:template match="field" mode="tostring"> + buffer.append(" .<xsl:value-of select="recutil:getFieldName(@name,20)"/> = ")<xsl:if test="@type != 'string'"> + .append("0x") + .append(HexDump.toHex((<xsl:value-of select="recutil:getType(@size,@type,00)"/>)get<xsl:value-of select="recutil:getFieldName1stCap(@name,0)"/>()))</xsl:if> + .append(" (").append(get<xsl:value-of select="recutil:getFieldName1stCap(@name,0)"/>()).append(" )\n"); +<xsl:apply-templates select="bit" mode="bittostring"/> +</xsl:template> + +<xsl:template match="bit" mode="bittostring"> buffer.append(" .<xsl:value-of select="recutil:getFieldName(@name,20)"/> = ").append(is<xsl:value-of select="recutil:getFieldName1stCap(@name,20)"/>()).append('\n'); +</xsl:template> + +<xsl:template match="author"> + * @author <xsl:value-of select="."/> +</xsl:template> + +</xsl:stylesheet> diff --git a/src/records/styles/record_document.xsl b/src/records/styles/record_document.xsl new file mode 100644 index 0000000000..a54bea8be4 --- /dev/null +++ b/src/records/styles/record_document.xsl @@ -0,0 +1,51 @@ +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:recutil="org.apache.poi.generator.RecordUtil" + xmlns:field="org.apache.poi.generator.FieldIterator" + xmlns:java="java" > + +<xsl:template match="record"> +<document> + <header> + <title><xsl:value-of select="@name"/> Record Documentation</title> + </header> + + <body> + <s1 title="Record Description"> + <p><xsl:value-of select="/record/description"/> + </p> + </s1> + <s1 title="Fields"> + <table> + <tr> + <th colspan="1" rowspan="1">Name</th> + <th colspan="1" rowspan="1">Size</th> + <th colspan="1" rowspan="1">Offset</th> + <th colspan="1" rowspan="1">Description</th> + <th colspan="1" rowspan="1">Default Value</th> + </tr> + <xsl:apply-templates select="//field"/> + </table> + </s1> + </body> + <footer> + <legal> + Copyright (c) @year@ The Poi Project All rights reserved. + $Revision$ $Date$ + </legal> + </footer> + +</document> +</xsl:template> + +<xsl:template match="field"> + <tr> + <td><xsl:value-of select="@name"/></td> + <td><xsl:value-of select="@size"/></td> + <td> </td> + <td><xsl:value-of select="@description"/></td> + <td><xsl:value-of select="@default"/></td> + </tr> +</xsl:template> + +</xsl:stylesheet>
\ No newline at end of file diff --git a/src/records/styles/record_test.xsl b/src/records/styles/record_test.xsl new file mode 100644 index 0000000000..3b4c94b386 --- /dev/null +++ b/src/records/styles/record_test.xsl @@ -0,0 +1,130 @@ +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:recutil="org.apache.poi.generator.RecordUtil" + xmlns:field="org.apache.poi.generator.FieldIterator" + xmlns:java="java" > + +<xsl:template match="record"> +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache POI" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache POI", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + */ + +<xsl:if test="@package"> +package <xsl:value-of select="@package"/>; +</xsl:if> + +import junit.framework.TestCase; + +/** + * Tests the serialization and deserialization of the <xsl:value-of select="@name"/>Record + * class works correctly. Test data taken directly from a real + * Excel file. + * +<xsl:apply-templates select="author"/> + */ +public class Test<xsl:value-of select="@name"/>Record + extends TestCase +{ + byte[] data = new byte[] { + // PASTE DATA HERE + }; + + public Test<xsl:value-of select="@name"/>Record(String name) + { + super(name); + } + + public void testLoad() + throws Exception + { + + <xsl:value-of select="@name"/>Record record = new <xsl:value-of select="@name"/>Record((short)<xsl:value-of select="@id"/>, (short)data.length, data); +<xsl:for-each select="//fields/field"> assertEquals( XXX, record.get<xsl:value-of select="recutil:getFieldName1stCap(@name,0)"/>()); +<xsl:apply-templates select="./bit" mode="get"/> +</xsl:for-each> + + assertEquals( XXX, record.getRecordSize() ); + + record.validateSid((short)<xsl:value-of select="@id"/>); + } + + public void testStore() + { + <xsl:value-of select="@name"/>Record record = new <xsl:value-of select="@name"/>Record(); +<xsl:for-each select="//fields/field"> record.set<xsl:value-of select="recutil:getFieldName1stCap(@name,0)"/>( XXXX ); +<xsl:apply-templates select="./bit" mode="set"/> +</xsl:for-each> + + byte [] recordBytes = record.serialize(); + assertEquals(recordBytes.length - 4, data.length); + for (int i = 0; i < data.length; i++) + assertEquals("At offset " + i, data[i], recordBytes[i+4]); + } +} +</xsl:template> + +<xsl:template match="author"> + * @author <xsl:value-of select="."/> +</xsl:template> + +<xsl:template match="bit" mode="get"> +<xsl:text> </xsl:text>assertEquals( XXX, record.is<xsl:value-of select="recutil:getFieldName1stCap(@name,0)"/>() );<xsl:text> +</xsl:text> +</xsl:template> + +<xsl:template match="bit" mode="set"> +<xsl:text> </xsl:text>record.set<xsl:value-of select="recutil:getFieldName1stCap(@name,0)"/>( XXX );<xsl:text> +</xsl:text> +</xsl:template> + +</xsl:stylesheet>
\ No newline at end of file |