diff --git a/src/java/org/apache/poi/dev/RecordGenerator.java b/src/java/org/apache/poi/dev/RecordGenerator.java
index 2c57189a1..f2eba6d3b 100644
--- a/src/java/org/apache/poi/dev/RecordGenerator.java
+++ b/src/java/org/apache/poi/dev/RecordGenerator.java
@@ -56,8 +56,6 @@ package org.apache.poi.dev;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -66,14 +64,16 @@ import java.io.File;
public class RecordGenerator
{
public static void main(String[] args)
- throws Exception
+ throws Exception
{
+ // Force load so that we don't start generating records and realise this hasn't compiled yet.
+ Class.forName("org.apache.poi.generator.FieldIterator");
+
if (args.length != 4)
{
System.out.println("Usage:");
System.out.println(" java org.apache.poi.hssf.util.RecordGenerator RECORD_DEFINTIONS RECORD_STYLES DEST_SRC_PATH TEST_SRC_PATH");
- }
- else
+ } else
{
generateRecords(args[0], args[1], args[2], args[3]);
}
@@ -87,11 +87,11 @@ public class RecordGenerator
for (int i = 0; i < definitionsFile.listFiles().length; i++)
{
File file = definitionsFile.listFiles()[i];
- if (file.isFile() &&
- (file.getName().endsWith("_record.xml") ||
- file.getName().endsWith("_type.xml")
- )
- )
+ if (file.isFile() &&
+ (file.getName().endsWith("_record.xml") ||
+ file.getName().endsWith("_type.xml")
+ )
+ )
{
// Get record name and package
DocumentBuilderFactory factory =
@@ -103,36 +103,35 @@ public class RecordGenerator
String suffix = record.getElementsByTagName("suffix").item(0).getFirstChild().getNodeValue();
String recordName = record.getAttributes().getNamedItem("name").getNodeValue();
String packageName = record.getAttributes().getNamedItem("package").getNodeValue();
- packageName = packageName.replace('.','/');
+ packageName = packageName.replace('.', '/');
// Generate record
- String destinationPath = destSrcPathDir + "/" + packageName ;
+ String destinationPath = destSrcPathDir + "/" + packageName;
File destinationPathFile = new File(destinationPath);
destinationPathFile.mkdirs();
- String destinationFilepath = destinationPath + "/" + recordName + suffix+".java";
- String args[] = new String [] { "-in", file.getAbsolutePath(), "-xsl", recordStyleDir + "/" + extendstg.toLowerCase() + ".xsl",
- "-out", destinationFilepath,
- "-TEXT"};
+ String destinationFilepath = destinationPath + "/" + recordName + suffix + ".java";
+ String args[] = new String[]{"-in", file.getAbsolutePath(), "-xsl", recordStyleDir + "/" + extendstg.toLowerCase() + ".xsl",
+ "-out", destinationFilepath,
+ "-TEXT"};
- org.apache.xalan.xslt.Process.main( args );
- System.out.println("Generated "+suffix+": " + destinationFilepath);
+ org.apache.xalan.xslt.Process.main(args);
+ System.out.println("Generated " + suffix + ": " + destinationFilepath);
// Generate test (if not already generated)
- destinationPath = testSrcPathDir + "/" + packageName ;
+ destinationPath = testSrcPathDir + "/" + packageName;
destinationPathFile = new File(destinationPath);
destinationPathFile.mkdirs();
- destinationFilepath = destinationPath + "/Test" + recordName + suffix+".java";
+ destinationFilepath = destinationPath + "/Test" + recordName + suffix + ".java";
if (new File(destinationFilepath).exists() == false)
{
- String temp = (recordStyleDir + "/" + extendstg.toLowerCase() + "_test.xsl");
- args = new String [] { "-in", file.getAbsolutePath(), "-xsl",
- temp,
- "-out", destinationFilepath,
- "-TEXT"};
- org.apache.xalan.xslt.Process.main( args );
+ String temp = (recordStyleDir + "/" + extendstg.toLowerCase() + "_test.xsl");
+ args = new String[]{"-in", file.getAbsolutePath(), "-xsl",
+ temp,
+ "-out", destinationFilepath,
+ "-TEXT"};
+ org.apache.xalan.xslt.Process.main(args);
System.out.println("Generated test: " + destinationFilepath);
- }
- else
+ } else
{
System.out.println("Skipped test generation: " + destinationFilepath);
}
diff --git a/src/java/org/apache/poi/hssf/record/SeriesChartGroupIndexRecord.java b/src/java/org/apache/poi/hssf/record/SeriesChartGroupIndexRecord.java
new file mode 100644
index 000000000..9ed180b62
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/SeriesChartGroupIndexRecord.java
@@ -0,0 +1,193 @@
+
+/* ====================================================================
+ * 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
+ * .
+ */
+
+
+package org.apache.poi.hssf.record;
+
+
+
+import org.apache.poi.util.BitField;
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.StringUtil;
+import org.apache.poi.util.HexDump;
+
+/**
+ * The series chart group index record stores the index to the CHARTFORMAT record (0 based).
+ * NOTE: This source is automatically generated please do not modify this file. Either subclass or
+ * remove the record in src/records/definitions.
+
+ * @author Glen Stampoultzis (glens at apache.org)
+ */
+public class SeriesChartGroupIndexRecord
+ extends Record
+{
+ public final static short sid = 0x1045;
+ private short field_1_chartGroupIndex;
+
+
+ public SeriesChartGroupIndexRecord()
+ {
+
+ }
+
+ /**
+ * Constructs a SeriesChartGroupIndex 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 SeriesChartGroupIndexRecord(short id, short size, byte [] data)
+ {
+ super(id, size, data);
+ }
+
+ /**
+ * Constructs a SeriesChartGroupIndex 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 SeriesChartGroupIndexRecord(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 SeriesChartGroupIndex 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("[SeriesChartGroupIndex]\n");
+
+ buffer.append(" .chartGroupIndex = ")
+ .append("0x")
+ .append(HexDump.toHex((short)getChartGroupIndex()))
+ .append(" (").append(getChartGroupIndex()).append(" )\n");
+
+ buffer.append("[/SeriesChartGroupIndex]\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 SeriesChartGroupIndex record.
+ */
+ public short getChartGroupIndex()
+ {
+ return field_1_chartGroupIndex;
+ }
+
+ /**
+ * Set the chart group index field for the SeriesChartGroupIndex record.
+ */
+ public void setChartGroupIndex(short field_1_chartGroupIndex)
+ {
+ this.field_1_chartGroupIndex = field_1_chartGroupIndex;
+ }
+
+
+} // END OF CLASS
+
+
+
+
diff --git a/src/records/definitions/series_chart_group_record.xml b/src/records/definitions/series_chart_group_record.xml
new file mode 100644
index 000000000..f7a259536
--- /dev/null
+++ b/src/records/definitions/series_chart_group_record.xml
@@ -0,0 +1,9 @@
+
+ Record
+ Record
+ The series chart group index record stores the index to the CHARTFORMAT record (0 based).
+ Glen Stampoultzis (glens at apache.org)
+
+
+
+
diff --git a/src/testcases/org/apache/poi/hssf/record/TestSeriesChartGroupIndexRecord.java b/src/testcases/org/apache/poi/hssf/record/TestSeriesChartGroupIndexRecord.java
new file mode 100644
index 000000000..840daa7f6
--- /dev/null
+++ b/src/testcases/org/apache/poi/hssf/record/TestSeriesChartGroupIndexRecord.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
+ * .
+ */
+
+
+package org.apache.poi.hssf.record;
+
+
+import junit.framework.TestCase;
+
+/**
+ * Tests the serialization and deserialization of the SeriesChartGroupIndexRecord
+ * class works correctly. Test data taken directly from a real
+ * Excel file.
+ *
+ * @author Glen Stampoultzis (glens at apache.org)
+ */
+public class TestSeriesChartGroupIndexRecord
+ extends TestCase
+{
+ byte[] data = new byte[] {
+ (byte)0x00,(byte)0x00
+ };
+
+ public TestSeriesChartGroupIndexRecord(String name)
+ {
+ super(name);
+ }
+
+ public void testLoad()
+ throws Exception
+ {
+ SeriesChartGroupIndexRecord record = new SeriesChartGroupIndexRecord((short)0x1045, (short)data.length, data);
+ assertEquals( 0, record.getChartGroupIndex());
+
+
+ assertEquals( 6, record.getRecordSize() );
+
+ record.validateSid((short)0x1045);
+
+ }
+
+ public void testStore()
+ {
+ SeriesChartGroupIndexRecord record = new SeriesChartGroupIndexRecord();
+ record.setChartGroupIndex( (short)0 );
+
+
+ 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]);
+ }
+}