glens 2002/10/19 23:16:34
Modified: src/java/org/apache/poi/hssf/record FormulaRecord.java
LinkedDataFormulaField.java LinkedDataRecord.java
src/java/org/apache/poi/hssf/record/formula Area3DPtg.java
src/scratchpad/src/org/apache/poi/generator
FieldIterator.java RecordUtil.java
src/testcases/org/apache/poi/hssf/record
TestLinkedDataRecord.java
Log:
'AI' record support.
Revision Changes Path
1.16 +4 -4
jakarta-poi/src/java/org/apache/poi/hssf/record/FormulaRecord.java
Index: FormulaRecord.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/FormulaRecord.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- FormulaRecord.java 5 Sep 2002 00:26:22 -0000 1.15
+++ FormulaRecord.java 20 Oct 2002 06:16:34 -0000 1.16
@@ -145,7 +145,7 @@
field_6_zero = LittleEndian.getInt(data, 16 + offset);
field_7_expression_len = LittleEndian.getShort(data, 20 + offset);
field_8_parsed_expr = getParsedExpressionTokens(data, size,
- offset);
+ 22 + offset);
} catch (java.lang.UnsupportedOperationException uoe) {
field_8_parsed_expr = null;
@@ -164,7 +164,7 @@
int offset)
{
Stack stack = new Stack();
- int pos = 22 + offset;
+ int pos = offset;
while (pos < size)
{
@@ -329,7 +329,7 @@
public List getParsedExpression()
{
- return ( List ) field_8_parsed_expr;
+ return field_8_parsed_expr;
}
/**
@@ -555,7 +555,7 @@
buffer.append("Formula ")
.append(k)
.append("=")
- .append(((Ptg)field_8_parsed_expr.get(k)).toString())
+ .append(field_8_parsed_expr.get(k).toString())
.append("\n")
.append(((Ptg)field_8_parsed_expr.get(k)).toDebugString())
.append("\n");
1.2 +75 -6
jakarta-poi/src/java/org/apache/poi/hssf/record/LinkedDataFormulaField.java
Index: LinkedDataFormulaField.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/LinkedDataFormulaField.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LinkedDataFormulaField.java 9 Oct 2002 00:05:52 -0000 1.1
+++ LinkedDataFormulaField.java 20 Oct 2002 06:16:34 -0000 1.2
@@ -54,6 +54,12 @@
package org.apache.poi.hssf.record;
+import org.apache.poi.hssf.record.formula.Ptg;
+import org.apache.poi.util.LittleEndian;
+
+import java.util.Stack;
+import java.util.Iterator;
+
/**
* Not implemented yet. May commit it anyway just so people can see
* where I'm heading.
@@ -63,29 +69,92 @@
public class LinkedDataFormulaField
implements CustomField
{
+ Stack formulaTokens = new Stack();
+
public int getSize()
{
- return 2;
+ int size = 0;
+ for ( Iterator iterator = formulaTokens.iterator(); iterator.hasNext(); )
+ {
+ Ptg token = (Ptg) iterator.next();
+ size += token.getSize();
+ }
+ return size + 2;
}
public int fillField( byte[] data, short size, int offset )
{
- return 0;
+ short tokenSize = LittleEndian.getShort(data, offset);
+ formulaTokens = getParsedExpressionTokens(data, size, offset + 2);
+
+ return tokenSize + 2;
}
- public void toString( StringBuffer str )
+ public void toString( StringBuffer buffer )
{
- str.append("todo");
+ for ( int k = 0; k < formulaTokens.size(); k++ )
+ {
+ buffer.append( "Formula " )
+ .append( k )
+ .append( "=" )
+ .append( formulaTokens.get( k ).toString() )
+ .append( "\n" )
+ .append( ( (Ptg) formulaTokens.get( k ) ).toDebugString() )
+ .append( "\n" );
+ }
}
public int serializeField( int offset, byte[] data )
{
- return 0;
+ int size = getSize();
+ LittleEndian.putShort(data, offset, (short)(size - 2));
+ int pos = offset + 2;
+ for ( Iterator iterator = formulaTokens.iterator(); iterator.hasNext(); )
+ {
+ Ptg ptg = (Ptg) iterator.next();
+ ptg.writeBytes(data, pos);
+ pos += ptg.getSize();
+ }
+ return size;
}
public Object clone()
{
- return this;
+ try
+ {
+ // todo: clone tokens? or are they immutable?
+ return super.clone();
+ }
+ catch ( CloneNotSupportedException e )
+ {
+ // should not happen
+ return null;
+ }
+ }
+
+ private Stack getParsedExpressionTokens( byte[] data, short size,
+ int offset )
+ {
+ Stack stack = new Stack();
+ int pos = offset;
+
+ while ( pos < size )
+ {
+ Ptg ptg = Ptg.createPtg( data, pos );
+ pos += ptg.getSize();
+ stack.push( ptg );
+ }
+ return stack;
+ }
+
+ public void setFormulaTokens( Stack formulaTokens )
+ {
+ this.formulaTokens = (Stack) formulaTokens.clone();
+ }
+
+ public Stack getFormulaTokens()
+ {
+ return (Stack)this.formulaTokens.clone();
}
}
1.5 +3 -3
jakarta-poi/src/java/org/apache/poi/hssf/record/LinkedDataRecord.java
Index: LinkedDataRecord.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/LinkedDataRecord.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- LinkedDataRecord.java 9 Oct 2002 00:05:52 -0000 1.4
+++ LinkedDataRecord.java 20 Oct 2002 06:16:34 -0000 1.5
@@ -84,7 +84,7 @@
private short field_3_options;
private BitField customNumberFormat = new
BitField(0x1);
private short field_4_indexNumberFmtRecord;
- private LinkedDataFormulaField field_5_formulaOfLink = new
org.apache.poi.hssf.record.LinkedDataFormulaField();
+ private LinkedDataFormulaField field_5_formulaOfLink;
public LinkedDataRecord()
@@ -145,7 +145,7 @@
field_3_options = LittleEndian.getShort(data, pos + 0x2 +
offset);
field_4_indexNumberFmtRecord = LittleEndian.getShort(data, pos + 0x4 +
offset);
field_5_formulaOfLink = new
org.apache.poi.hssf.record.LinkedDataFormulaField();
- pos += field_5_formulaOfLink.fillField(data,size,pos + 6);
+ pos += field_5_formulaOfLink.fillField(data,size,pos + offset + 6);
}
@@ -190,7 +190,7 @@
data[ 5 + offset + pos ] = field_2_referenceType;
LittleEndian.putShort(data, 6 + offset + pos, field_3_options);
LittleEndian.putShort(data, 8 + offset + pos, field_4_indexNumberFmtRecord);
- pos += field_5_formulaOfLink.serializeField( pos + offset, data );
+ pos += field_5_formulaOfLink.serializeField( pos + 10 + offset, data );
return getRecordSize();
}
1.11 +152 -109
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java
Index: Area3DPtg.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- Area3DPtg.java 5 Sep 2002 00:26:26 -0000 1.10
+++ Area3DPtg.java 20 Oct 2002 06:16:34 -0000 1.11
@@ -1,4 +1,3 @@
-
/* ====================================================================
* The Apache Software License, Version 1.1
*
@@ -76,71 +75,75 @@
public class Area3DPtg extends Ptg
{
- public final static byte sid = 0x3b;
- private final static int SIZE = 11; // 10 + 1 for Ptg
- private short field_1_index_extern_sheet;
- private short field_2_first_row;
- private short field_3_last_row;
- private short field_4_first_column;
- private short field_5_last_column;
-
- private BitField rowRelative = new BitField(0x8000);
- private BitField colRelative = new BitField(0x4000);
+ public final static byte sid = 0x3b;
+ private final static int SIZE = 11; // 10 + 1 for Ptg
+ private short field_1_index_extern_sheet;
+ private short field_2_first_row;
+ private short field_3_last_row;
+ private short field_4_first_column;
+ private short field_5_last_column;
+
+ private BitField rowRelative = new BitField( 0x8000 );
+ private BitField colRelative = new BitField( 0x4000 );
/** Creates new AreaPtg */
- public Area3DPtg() {}
-
- public Area3DPtg(String arearef, short externIdx) {
- AreaReference ar = new AreaReference(arearef);
-
- setFirstRow((short)ar.getCells()[0].getRow());
- setFirstColumn((short)ar.getCells()[0].getCol());
- setLastRow((short)ar.getCells()[1].getRow());
- setLastColumn((short)ar.getCells()[1].getCol());
- setFirstColRelative(!ar.getCells()[0].isColAbsolute());
- setLastColRelative(!ar.getCells()[1].isColAbsolute());
- setFirstRowRelative(!ar.getCells()[0].isRowAbsolute());
- setLastRowRelative(!ar.getCells()[1].isRowAbsolute());
- setExternSheetIndex(externIdx);
-
+ public Area3DPtg()
+ {
}
- public Area3DPtg(byte[] data, int offset)
+
+ public Area3DPtg( String arearef, short externIdx )
+ {
+ AreaReference ar = new AreaReference( arearef );
+
+ setFirstRow( (short) ar.getCells()[0].getRow() );
+ setFirstColumn( (short) ar.getCells()[0].getCol() );
+ setLastRow( (short) ar.getCells()[1].getRow() );
+ setLastColumn( (short) ar.getCells()[1].getCol() );
+ setFirstColRelative( !ar.getCells()[0].isColAbsolute() );
+ setLastColRelative( !ar.getCells()[1].isColAbsolute() );
+ setFirstRowRelative( !ar.getCells()[0].isRowAbsolute() );
+ setLastRowRelative( !ar.getCells()[1].isRowAbsolute() );
+ setExternSheetIndex( externIdx );
+
+ }
+
+ public Area3DPtg( byte[] data, int offset )
{
offset++;
- field_1_index_extern_sheet = LittleEndian.getShort(data, 0 + offset);
- field_2_first_row = LittleEndian.getShort(data, 2 + offset);
- field_3_last_row = LittleEndian.getShort(data, 4 + offset);
- field_4_first_column = LittleEndian.getShort(data, 6 + offset);
- field_5_last_column = LittleEndian.getShort(data, 8 + offset);
+ field_1_index_extern_sheet = LittleEndian.getShort( data, 0 + offset );
+ field_2_first_row = LittleEndian.getShort( data, 2 + offset );
+ field_3_last_row = LittleEndian.getShort( data, 4 + offset );
+ field_4_first_column = LittleEndian.getShort( data, 6 + offset );
+ field_5_last_column = LittleEndian.getShort( data, 8 + offset );
}
public String toString()
{
StringBuffer buffer = new StringBuffer();
- buffer.append("AreaPtg\n");
- buffer.append("Index to Extern Sheet = " +
getExternSheetIndex()).append("\n");
- buffer.append("firstRow = " + getFirstRow()).append("\n");
- buffer.append("lastRow = " + getLastRow()).append("\n");
- buffer.append("firstCol = " + getFirstColumn()).append("\n");
- buffer.append("lastCol = " + getLastColumn()).append("\n");
- buffer.append("firstColRel= "
- + isFirstRowRelative()).append("\n");
- buffer.append("lastColRowRel = "
- + isLastRowRelative()).append("\n");
- buffer.append("firstColRel = " + isFirstColRelative()).append("\n");
- buffer.append("lastColRel = " + isLastColRelative()).append("\n");
+ buffer.append( "AreaPtg\n" );
+ buffer.append( "Index to Extern Sheet = " + getExternSheetIndex() ).append(
"\n" );
+ buffer.append( "firstRow = " + getFirstRow() ).append( "\n" );
+ buffer.append( "lastRow = " + getLastRow() ).append( "\n" );
+ buffer.append( "firstCol = " + getFirstColumn() ).append( "\n" );
+ buffer.append( "lastCol = " + getLastColumn() ).append( "\n" );
+ buffer.append( "firstColRel= "
+ + isFirstRowRelative() ).append( "\n" );
+ buffer.append( "lastColRowRel = "
+ + isLastRowRelative() ).append( "\n" );
+ buffer.append( "firstColRel = " + isFirstColRelative() ).append( "\n" );
+ buffer.append( "lastColRel = " + isLastColRelative() ).append( "\n" );
return buffer.toString();
}
- public void writeBytes(byte [] array, int offset)
+ public void writeBytes( byte[] array, int offset )
{
- array[ 0 + offset ] = (byte) (sid + ptgClass);
- LittleEndian.putShort(array, 1 + offset , getExternSheetIndex());
- LittleEndian.putShort(array, 3 + offset , getFirstRow());
- LittleEndian.putShort(array, 5 + offset , getLastRow());
- LittleEndian.putShort(array, 7 + offset , getFirstColumnRaw());
- LittleEndian.putShort(array, 9 + offset , getLastColumnRaw());
+ array[0 + offset] = (byte) ( sid + ptgClass );
+ LittleEndian.putShort( array, 1 + offset, getExternSheetIndex() );
+ LittleEndian.putShort( array, 3 + offset, getFirstRow() );
+ LittleEndian.putShort( array, 5 + offset, getLastRow() );
+ LittleEndian.putShort( array, 7 + offset, getFirstColumnRaw() );
+ LittleEndian.putShort( array, 9 + offset, getLastColumnRaw() );
}
public int getSize()
@@ -148,11 +151,13 @@
return SIZE;
}
- public short getExternSheetIndex(){
+ public short getExternSheetIndex()
+ {
return field_1_index_extern_sheet;
}
- public void setExternSheetIndex(short index){
+ public void setExternSheetIndex( short index )
+ {
field_1_index_extern_sheet = index;
}
@@ -161,7 +166,7 @@
return field_2_first_row;
}
- public void setFirstRow(short row)
+ public void setFirstRow( short row )
{
field_2_first_row = row;
}
@@ -171,14 +176,14 @@
return field_3_last_row;
}
- public void setLastRow(short row)
+ public void setLastRow( short row )
{
field_3_last_row = row;
}
public short getFirstColumn()
{
- return ( short ) (field_4_first_column & 0xFF);
+ return (short) ( field_4_first_column & 0xFF );
}
public short getFirstColumnRaw()
@@ -188,28 +193,28 @@
public boolean isFirstRowRelative()
{
- return rowRelative.isSet(field_4_first_column);
+ return rowRelative.isSet( field_4_first_column );
}
-
+
public boolean isFirstColRelative()
{
- return colRelative.isSet(field_4_first_column);
+ return colRelative.isSet( field_4_first_column );
}
- public void setFirstColumn(short column)
+ public void setFirstColumn( short column )
{
field_4_first_column &= 0xFF00;
field_4_first_column |= column & 0xFF;
}
- public void setFirstColumnRaw(short column)
+ public void setFirstColumnRaw( short column )
{
field_4_first_column = column;
}
public short getLastColumn()
{
- return ( short ) (field_5_last_column & 0xFF);
+ return (short) ( field_5_last_column & 0xFF );
}
public short getLastColumnRaw()
@@ -217,56 +222,61 @@
return field_5_last_column;
}
- public boolean isLastRowRelative()
+ public boolean isLastRowRelative()
{
- return rowRelative.isSet(field_5_last_column);
+ return rowRelative.isSet( field_5_last_column );
}
+
public boolean isLastColRelative()
{
- return colRelative.isSet(field_5_last_column);
+ return colRelative.isSet( field_5_last_column );
}
-
- public void setLastColumn(short column)
+
+ public void setLastColumn( short column )
{
field_5_last_column &= 0xFF00;
field_5_last_column |= column & 0xFF;
}
- public void setLastColumnRaw(short column)
+ public void setLastColumnRaw( short column )
{
field_5_last_column = column;
}
-
- /**
+
+ /**
* sets the first row to relative or not
* @param isRelative or not.
*/
- public void setFirstRowRelative(boolean rel) {
- field_4_first_column=rowRelative.setShortBoolean(field_4_first_column,rel);
+ public void setFirstRowRelative( boolean rel )
+ {
+ field_4_first_column = rowRelative.setShortBoolean( field_4_first_column,
rel );
}
/**
- * set whether the first column is relative
+ * set whether the first column is relative
*/
- public void setFirstColRelative(boolean rel) {
- field_4_first_column=colRelative.setShortBoolean(field_4_first_column,rel);
+ public void setFirstColRelative( boolean rel )
+ {
+ field_4_first_column = colRelative.setShortBoolean( field_4_first_column,
rel );
}
-
+
/**
* set whether the last row is relative or not
* @param last row relative
*/
- public void setLastRowRelative(boolean rel) {
- field_5_last_column=rowRelative.setShortBoolean(field_5_last_column,rel);
+ public void setLastRowRelative( boolean rel )
+ {
+ field_5_last_column = rowRelative.setShortBoolean( field_5_last_column, rel
);
}
-
+
/**
* set whether the last column should be relative or not
*/
- public void setLastColRelative(boolean rel) {
- field_5_last_column=colRelative.setShortBoolean(field_5_last_column,rel);
+ public void setLastColRelative( boolean rel )
+ {
+ field_5_last_column = colRelative.setShortBoolean( field_5_last_column, rel
);
}
-
+
/*public String getArea(){
RangeAddress ra = new RangeAddress( getFirstColumn(),getFirstRow() + 1,
getLastColumn(), getLastRow() + 1);
@@ -275,44 +285,77 @@
return result;
}*/
- public void setArea(String ref){
- RangeAddress ra = new RangeAddress(ref);
+ public void setArea( String ref )
+ {
+ RangeAddress ra = new RangeAddress( ref );
String from = ra.getFromCell();
- String to = ra.getToCell();
+ String to = ra.getToCell();
- setFirstColumn((short) (ra.getXPosition(from) -1));
- setFirstRow((short) (ra.getYPosition(from) -1));
- setLastColumn((short) (ra.getXPosition(to) -1));
- setLastRow((short) (ra.getYPosition(to) -1));
+ setFirstColumn( (short) ( ra.getXPosition( from ) - 1 ) );
+ setFirstRow( (short) ( ra.getYPosition( from ) - 1 ) );
+ setLastColumn( (short) ( ra.getXPosition( to ) - 1 ) );
+ setLastRow( (short) ( ra.getYPosition( to ) - 1 ) );
}
- public String toFormulaString(SheetReferences refs)
+ public String toFormulaString( SheetReferences refs )
{
StringBuffer retval = new StringBuffer();
- if (refs != null) {
- retval.append(refs.getSheetName(this.field_1_index_extern_sheet));
- retval.append('!');
+ if ( refs != null )
+ {
+ retval.append( refs.getSheetName( this.field_1_index_extern_sheet ) );
+ retval.append( '!' );
}
- retval.append((new
CellReference(getFirstRow(),getFirstColumn(),!isFirstRowRelative(),!isFirstColRelative())).toString());
- retval.append(':');
- retval.append((new
CellReference(getLastRow(),getLastColumn(),!isLastRowRelative(),!isLastColRelative())).toString());
+ retval.append( ( new CellReference( getFirstRow(), getFirstColumn(),
!isFirstRowRelative(), !isFirstColRelative() ) ).toString() );
+ retval.append( ':' );
+ retval.append( ( new CellReference( getLastRow(), getLastColumn(),
!isLastRowRelative(), !isLastColRelative() ) ).toString() );
return retval.toString();
}
- public byte getDefaultOperandClass() {
- return Ptg.CLASS_REF;
- }
-
- public Object clone() {
- Area3DPtg ptg = new Area3DPtg();
- ptg.field_1_index_extern_sheet = field_1_index_extern_sheet;
- ptg.field_2_first_row = field_2_first_row;
- ptg.field_3_last_row = field_3_last_row;
- ptg.field_4_first_column = field_4_first_column;
- ptg.field_5_last_column = field_5_last_column;
- return ptg;
- }
+ public byte getDefaultOperandClass()
+ {
+ return Ptg.CLASS_REF;
+ }
+
+ public Object clone()
+ {
+ Area3DPtg ptg = new Area3DPtg();
+ ptg.field_1_index_extern_sheet = field_1_index_extern_sheet;
+ ptg.field_2_first_row = field_2_first_row;
+ ptg.field_3_last_row = field_3_last_row;
+ ptg.field_4_first_column = field_4_first_column;
+ ptg.field_5_last_column = field_5_last_column;
+ return ptg;
+ }
+
+
+ public boolean equals( Object o )
+ {
+ if ( this == o ) return true;
+ if ( !( o instanceof Area3DPtg ) ) return false;
+
+ final Area3DPtg area3DPtg = (Area3DPtg) o;
+
+ if ( field_1_index_extern_sheet != area3DPtg.field_1_index_extern_sheet )
return false;
+ if ( field_2_first_row != area3DPtg.field_2_first_row ) return false;
+ if ( field_3_last_row != area3DPtg.field_3_last_row ) return false;
+ if ( field_4_first_column != area3DPtg.field_4_first_column ) return false;
+ if ( field_5_last_column != area3DPtg.field_5_last_column ) return false;
+
+ return true;
+ }
+
+ public int hashCode()
+ {
+ int result;
+ result = (int) field_1_index_extern_sheet;
+ result = 29 * result + (int) field_2_first_row;
+ result = 29 * result + (int) field_3_last_row;
+ result = 29 * result + (int) field_4_first_column;
+ result = 29 * result + (int) field_5_last_column;
+ return result;
+ }
+
}
1.11 +2 -2
jakarta-poi/src/scratchpad/src/org/apache/poi/generator/FieldIterator.java
Index: FieldIterator.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/scratchpad/src/org/apache/poi/generator/FieldIterator.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- FieldIterator.java 9 Oct 2002 00:05:55 -0000 1.10
+++ FieldIterator.java 20 Oct 2002 06:16:34 -0000 1.11
@@ -122,7 +122,7 @@
result.append( "();\n");
result.append( " pos += " );
result.append(RecordUtil.getFieldName(position, name, 0))
- .append(".fillField(data,size,pos + ")
+ .append(".fillField(data,size,pos + offset + ")
.append(offset)
.append(")");
return result.toString();
@@ -143,7 +143,7 @@
String result = "";
if (type.startsWith("custom:"))
- result = "pos += " + javaFieldName + ".serializeField( pos + offset,
data );";
+ result = "pos += " + javaFieldName + ".serializeField( pos + " +
(offset+4) + " + offset, data );";
else if (javaType.equals("short"))
result = "LittleEndian.putShort(data, " + (offset+4) + " + offset +
pos, " + javaFieldName + ");";
else if (javaType.equals("short[]"))
1.13 +11 -9
jakarta-poi/src/scratchpad/src/org/apache/poi/generator/RecordUtil.java
Index: RecordUtil.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/scratchpad/src/org/apache/poi/generator/RecordUtil.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- RecordUtil.java 9 Oct 2002 00:05:55 -0000 1.12
+++ RecordUtil.java 20 Oct 2002 06:16:34 -0000 1.13
@@ -120,15 +120,17 @@
public static String initializeText(String size, String type)
{
- if (type.startsWith("custom:"))
- {
- String javaType = type.substring( 7 );
- return " = new " + javaType + "()";
- }
- else
- {
- return "";
- }
+ // Removed because of wierdo initialization sequence in constructors.
+// if (type.startsWith("custom:"))
+// {
+// String javaType = type.substring( 7 );
+// return " = new " + javaType + "()";
+// }
+// else
+// {
+// return "";
+// }
+ return "";
}
private static void toIdentifier(String name, StringBuffer fieldName)
1.3 +82 -13
jakarta-poi/src/testcases/org/apache/poi/hssf/record/TestLinkedDataRecord.java
Index: TestLinkedDataRecord.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/record/TestLinkedDataRecord.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TestLinkedDataRecord.java 9 Oct 2002 00:05:55 -0000 1.2
+++ TestLinkedDataRecord.java 20 Oct 2002 06:16:34 -0000 1.3
@@ -58,6 +58,9 @@
import junit.framework.TestCase;
+import org.apache.poi.hssf.record.formula.Area3DPtg;
+
+import java.util.Stack;
/**
* Tests the serialization and deserialization of the LinkedDataRecord
@@ -71,12 +74,14 @@
{
/*
- Records that would appear in a simple bar chart
+ The records below are records that would appear in a simple bar chart
The first record links to the series title (linkType = 0). It's
reference type is 1 which means that it links directly to data entered
into the forumula bar. There seems to be no reference to any data
- however. The formulaOfLink field contains two 0 bytes.
+ however. The formulaOfLink field contains two 0 bytes. This probably
+ means that there is no particular heading set.
+
============================================
Offset 0xf9c (3996)
@@ -94,6 +99,20 @@
.formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@95fd19 )
[/AI]
+
+ The second record links to the series data (linkType=1). The
+ referenceType = 2 which means it's linked to the worksheet.
+ It links using a formula. The formula value is
+ 0B 00 3B 00 00 00 00 1E 00 01 00 01 00.
+
+ 0B 00 11 bytes length
+ 3B (tArea3d) Rectangular area
+ 00 00 index to REF entry in extern sheet
+ 00 00 index to first row
+ 1E 00 index to last row
+ 01 00 index to first column and relative flags
+ 01 00 index to last column and relative flags
+
============================================
Offset 0xfa8 (4008)
rectype = 0x1051, recsize = 0x13
@@ -111,6 +130,20 @@
.formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@11b9fb1
)
[/AI]
+ The third record links to the series categories (linkType=2). The
+ reference type of 2 means that it's linked to the worksheet.
+ It links using a formula. The formula value is
+ 0B 00 3B 00 00 00 00 1E 00 01 00 01 00
+
+ 0B 00 11 bytes in length
+ 3B (tArea3d) Rectangular area
+ 00 00 index to REF entry in extern sheet
+ 00 00 index to first row
+ 00 1F index to last row
+ 00 00 index to first column and relative flags
+ 00 00 index to last column and relative flags
+
+
============================================
Offset 0xfbf (4031)
rectype = 0x1051, recsize = 0x13
@@ -128,6 +161,9 @@
.formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@913fe2 )
[/AI]
+This third link type does not seem to be documented and does not appear to
+contain any useful information anyway.
+
============================================
Offset 0xfd6 (4054)
rectype = 0x1051, recsize = 0x8
@@ -147,11 +183,17 @@
*/
byte[] data = new byte[]{
- (byte) 0x00,
- (byte) 0x01,
- (byte) 0x00, (byte) 0x00,
- (byte)0x00,(byte)0x00,
- (byte)0x00,(byte)0x00 // not supported
+ (byte)0x01, // link type
+ (byte)0x02, // reference type
+ (byte)0x00,(byte)0x00, // options
+ (byte)0x00,(byte)0x00, // index number format record
+ (byte)0x0B,(byte)0x00, // 11 bytes length
+ (byte)0x3B, // formula of link
+ (byte)0x00,(byte)0x00, // index to ref entry in extern sheet
+ (byte)0x00,(byte)0x00, // index to first row
+ (byte)0x00,(byte)0x1F, // index to last row
+ (byte)0x00,(byte)0x00, // index to first column and relative flags
+ (byte)0x00,(byte)0x00, // index to last column and relative flags
};
public TestLinkedDataRecord(String name)
@@ -164,14 +206,27 @@
{
LinkedDataRecord record = new LinkedDataRecord((short)0x1051,
(short)data.length, data);
- assertEquals( LinkedDataRecord.LINK_TYPE_TITLE_OR_TEXT,
record.getLinkType());
- assertEquals( LinkedDataRecord.REFERENCE_TYPE_DIRECT,
record.getReferenceType());
+ assertEquals( LinkedDataRecord.LINK_TYPE_VALUES, record.getLinkType());
+ assertEquals( LinkedDataRecord.REFERENCE_TYPE_WORKSHEET,
record.getReferenceType());
assertEquals( 0, record.getOptions());
assertEquals( false, record.isCustomNumberFormat() );
assertEquals( 0, record.getIndexNumberFmtRecord());
+ Area3DPtg ptg = new Area3DPtg();
+ ptg.setExternSheetIndex((short)0);
+ ptg.setFirstColumn((short)0);
+ ptg.setLastColumn((short)0);
+ ptg.setFirstRow((short)0);
+ ptg.setLastRow((short)7936);
+ ptg.setFirstColRelative(false);
+ ptg.setLastColRelative(false);
+ ptg.setFirstRowRelative(false);
+ ptg.setLastRowRelative(false);
+ Stack s = new Stack();
+ s.push(ptg);
+ assertEquals( s, record.getFormulaOfLink().getFormulaTokens() );
- assertEquals( 12, record.getRecordSize() );
+ assertEquals( data.length + 4, record.getRecordSize() );
record.validateSid((short)0x1051);
@@ -180,12 +235,26 @@
public void testStore()
{
LinkedDataRecord record = new LinkedDataRecord();
- record.setLinkType( LinkedDataRecord.LINK_TYPE_TITLE_OR_TEXT );
- record.setReferenceType( LinkedDataRecord.REFERENCE_TYPE_DIRECT );
+ record.setLinkType( LinkedDataRecord.LINK_TYPE_VALUES );
+ record.setReferenceType( LinkedDataRecord.REFERENCE_TYPE_WORKSHEET );
record.setOptions( (short)0 );
record.setCustomNumberFormat( false );
record.setIndexNumberFmtRecord( (short)0 );
-
+ Area3DPtg ptg = new Area3DPtg();
+ ptg.setExternSheetIndex((short)0);
+ ptg.setFirstColumn((short)0);
+ ptg.setLastColumn((short)0);
+ ptg.setFirstRow((short)0);
+ ptg.setLastRow((short)7936);
+ ptg.setFirstColRelative(false);
+ ptg.setLastColRelative(false);
+ ptg.setFirstRowRelative(false);
+ ptg.setLastRowRelative(false);
+ Stack s = new Stack();
+ s.push(ptg);
+ LinkedDataFormulaField formulaOfLink = new LinkedDataFormulaField();
+ formulaOfLink.setFormulaTokens(s);
+ record.setFormulaOfLink(formulaOfLink );
byte [] recordBytes = record.serialize();
assertEquals(recordBytes.length - 4, data.length);
--
To unsubscribe, e-mail: <mailto:poi-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:poi-dev-help@;jakarta.apache.org>