diff options
author | Andrew C. Oliver <acoliver@apache.org> | 2002-05-08 01:46:11 +0000 |
---|---|---|
committer | Andrew C. Oliver <acoliver@apache.org> | 2002-05-08 01:46:11 +0000 |
commit | a99c98933ea919dc937ca79e2da8805708b0689c (patch) | |
tree | 93ebfceba2acdda1128989987f81502c21331987 /src | |
parent | dbb46a91809d63823b357635460ae5d672e14944 (diff) | |
download | poi-a99c98933ea919dc937ca79e2da8805708b0689c.tar.gz poi-a99c98933ea919dc937ca79e2da8805708b0689c.zip |
New record for charts and corresponding BIFFViewer and unit test
PR:
Obtained from:
Submitted by:
Reviewed by:
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352606 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
4 files changed, 312 insertions, 0 deletions
diff --git a/src/java/org/apache/poi/hssf/dev/BiffViewer.java b/src/java/org/apache/poi/hssf/dev/BiffViewer.java index 03e41f5cba..7ed22efa7f 100644 --- a/src/java/org/apache/poi/hssf/dev/BiffViewer.java +++ b/src/java/org/apache/poi/hssf/dev/BiffViewer.java @@ -663,6 +663,14 @@ public class BiffViewer retval = new ExternSheetRecord(rectype, size, data); break; + case SCLRecord.sid: + retval = new SCLRecord(rectype, size, data); + break; + + case SeriesToChartGroupRecord.sid: + retval = new SeriesToChartGroupRecord(rectype, size, data); + break; + default : retval = new UnknownRecord(rectype, size, data); diff --git a/src/java/org/apache/poi/hssf/record/SeriesToChartGroupRecord.java b/src/java/org/apache/poi/hssf/record/SeriesToChartGroupRecord.java new file mode 100644 index 0000000000..ad5cdf58a3 --- /dev/null +++ b/src/java/org/apache/poi/hssf/record/SeriesToChartGroupRecord.java @@ -0,0 +1,190 @@ + +/* ==================================================================== + * 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/>. + */ + + +package org.apache.poi.hssf.record; + + + +import org.apache.poi.util.*; + +/** + * Indicates the chart-group index for a series. The order probably defines the mapping. So the 0th record probably means the 0th series. The only field in this of course defines which chart group the 0th series (for instance) would map to. Confusing? Well thats because it is. (p 522 BCG) + * NOTE: This source is automatically generated please do not modify this file. Either subclass or + * remove the record in src/records/definitions. + + * @author Andrew C. Oliver (acoliver at apache.org) + */ +public class SeriesToChartGroupRecord + extends Record +{ + public final static short sid = 0x1045; + private short field_1_chartGroupIndex; + + + public SeriesToChartGroupRecord() + { + + } + + /** + * Constructs a SeriesToChartGroup record and sets its fields appropriately. + * + * @param id id must be 0x1045 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 SeriesToChartGroupRecord(short id, short size, byte [] data) + { + super(id, size, data); + } + + /** + * Constructs a SeriesToChartGroup record and sets its fields appropriately. + * + * @param id id must be 0x1045 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 SeriesToChartGroupRecord(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 SeriesToChartGroup record"); + } + } + + protected void fillFields(byte [] data, short size, int offset) + { + field_1_chartGroupIndex = LittleEndian.getShort(data, 0x0 + offset); + + } + + public String toString() + { + StringBuffer buffer = new StringBuffer(); + + buffer.append("[SeriesToChartGroup]\n"); + + buffer.append(" .chartGroupIndex = ") + .append("0x") + .append(HexDump.toHex((short)getChartGroupIndex())) + .append(" (").append(getChartGroupIndex()).append(" )\n"); + + buffer.append("[/SeriesToChartGroup]\n"); + return buffer.toString(); + } + + public int serialize(int offset, byte[] data) + { + LittleEndian.putShort(data, 0 + offset, sid); + LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4)); + + LittleEndian.putShort(data, 4 + offset, field_1_chartGroupIndex); + + return getRecordSize(); + } + + /** + * Size of record (exluding 4 byte header) + */ + public int getRecordSize() + { + return 4 + 2; + } + + public short getSid() + { + return this.sid; + } + + + /** + * Get the chart group index field for the SeriesToChartGroup record. + */ + public short getChartGroupIndex() + { + return field_1_chartGroupIndex; + } + + /** + * Set the chart group index field for the SeriesToChartGroup record. + */ + public void setChartGroupIndex(short field_1_chartGroupIndex) + { + this.field_1_chartGroupIndex = field_1_chartGroupIndex; + } + + +} // END OF CLASS + + + + diff --git a/src/records/definitions/sertocrt_record.xml b/src/records/definitions/sertocrt_record.xml new file mode 100644 index 0000000000..0d74f73aeb --- /dev/null +++ b/src/records/definitions/sertocrt_record.xml @@ -0,0 +1,9 @@ +<record id="0x1045" name="SeriesToChartGroup" package="org.apache.poi.hssf.record"> + <suffix>Record</suffix> + <extends>Record</extends> + <description>Indicates the chart-group index for a series. The order probably defines the mapping. So the 0th record probably means the 0th series. The only field in this of course defines which chart group the 0th series (for instance) would map to. Confusing? Well thats because it is. (p 522 BCG)</description> + <author>Andrew C. Oliver (acoliver at apache.org)</author> + <fields> + <field type="int" size="2" name="chart group index" description="index to the chart group for this series"/> + </fields> +</record> diff --git a/src/testcases/org/apache/poi/hssf/record/TestSeriesToChartGroupRecord.java b/src/testcases/org/apache/poi/hssf/record/TestSeriesToChartGroupRecord.java new file mode 100644 index 0000000000..051b6845dd --- /dev/null +++ b/src/testcases/org/apache/poi/hssf/record/TestSeriesToChartGroupRecord.java @@ -0,0 +1,105 @@ + +/* ==================================================================== + * 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/>. + */ + + +package org.apache.poi.hssf.record; + + +import junit.framework.TestCase; + +/** + * Tests the serialization and deserialization of the SeriesToChartGroupRecord + * class works correctly. Test data taken directly from a real + * Excel file. + * + + * @author Andrew C. Oliver (acoliver at apache.org) + */ +public class TestSeriesToChartGroupRecord + extends TestCase +{ + byte[] data = new byte[] { + (byte)0x0, (byte)0x0 + }; + + public TestSeriesToChartGroupRecord(String name) + { + super(name); + } + + public void testLoad() + throws Exception + { + SeriesToChartGroupRecord record = new SeriesToChartGroupRecord((short)0x1045, (short)data.length, data); + assertEquals( 0x0, record.getChartGroupIndex()); + + + assertEquals( 0x6, record.getRecordSize() ); + + record.validateSid((short)0x1045); + } + + public void testStore() + { + SeriesToChartGroupRecord record = new SeriesToChartGroupRecord(); + record.setChartGroupIndex( (short)0x0 ); + + + 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]); + } +} |