Refactored common CellValueRecordInterface code into a new superclass CellRecord

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@742785 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Josh Micich 2009-02-09 23:16:49 +00:00
parent b640a1ce98
commit 4b5616a6ca
6 changed files with 248 additions and 381 deletions

View File

@ -27,47 +27,25 @@ import org.apache.poi.util.LittleEndianOutput;
* @author Michael P. Harhen * @author Michael P. Harhen
* @author Jason Height (jheight at chariot dot net dot au) * @author Jason Height (jheight at chariot dot net dot au)
*/ */
public final class BoolErrRecord extends StandardRecord implements CellValueRecordInterface { public final class BoolErrRecord extends CellRecord {
public final static short sid = 0x0205; public final static short sid = 0x0205;
private int field_1_row;
private short field_2_column;
private short field_3_xf_index;
private byte field_4_bBoolErr; private byte field_4_bBoolErr;
private byte field_5_fError; private byte field_5_fError;
/** Creates new BoolErrRecord */ /** Creates new BoolErrRecord */
public BoolErrRecord() { public BoolErrRecord() {
// fields uninitialised
} }
/** /**
* @param in the RecordInputstream to read the record from * @param in the RecordInputstream to read the record from
*/ */
public BoolErrRecord(RecordInputStream in) { public BoolErrRecord(RecordInputStream in) {
field_1_row = in.readUShort(); super(in);
field_2_column = in.readShort();
field_3_xf_index = in.readShort();
field_4_bBoolErr = in.readByte(); field_4_bBoolErr = in.readByte();
field_5_fError = in.readByte(); field_5_fError = in.readByte();
} }
public void setRow(int row) {
field_1_row = row;
}
public void setColumn(short col) {
field_2_column = col;
}
/**
* set the index to the ExtendedFormat
* @see org.apache.poi.hssf.record.ExtendedFormatRecord
* @param xf index to the XF record
*/
public void setXFIndex(short xf) {
field_3_xf_index = xf;
}
/** /**
* set the boolean value for the cell * set the boolean value for the cell
* *
@ -101,23 +79,6 @@ public final class BoolErrRecord extends StandardRecord implements CellValueReco
throw new IllegalArgumentException("Error Value can only be 0,7,15,23,29,36 or 42. It cannot be "+value); throw new IllegalArgumentException("Error Value can only be 0,7,15,23,29,36 or 42. It cannot be "+value);
} }
public int getRow() {
return field_1_row;
}
public short getColumn() {
return field_2_column;
}
/**
* get the index to the ExtendedFormat
* @see org.apache.poi.hssf.record.ExtendedFormatRecord
* @return index to the XF record
*/
public short getXFIndex() {
return field_3_xf_index;
}
/** /**
* get the value for the cell * get the value for the cell
* *
@ -162,44 +123,39 @@ public final class BoolErrRecord extends StandardRecord implements CellValueReco
return field_5_fError != 0; return field_5_fError != 0;
} }
public String toString() { @Override
StringBuffer sb = new StringBuffer(); protected String getRecordName() {
return "BOOLERR";
sb.append("[BOOLERR]\n");
sb.append(" .row = ").append(HexDump.shortToHex(getRow())).append("\n");
sb.append(" .col = ").append(HexDump.shortToHex(getColumn())).append("\n");
sb.append(" .xfindex= ").append(HexDump.shortToHex(getXFIndex())).append("\n");
if (isBoolean()) {
sb.append(" .booleanValue = ").append(getBooleanValue()).append("\n");
} else {
sb.append(" .errorValue = ").append(getErrorValue()).append("\n");
}
sb.append("[/BOOLERR]\n");
return sb.toString();
} }
@Override
public void serialize(LittleEndianOutput out) { protected void appendValueText(StringBuilder sb) {
out.writeShort(getRow()); if (isBoolean()) {
out.writeShort(getColumn()); sb.append(" .boolVal = ");
out.writeShort(getXFIndex()); sb.append(getBooleanValue());
} else {
sb.append(" .errCode = ");
sb.append(ErrorConstants.getText(getErrorValue()));
sb.append(" (").append(HexDump.byteToHex(getErrorValue())).append(")");
}
}
@Override
protected void serializeValue(LittleEndianOutput out) {
out.writeByte(field_4_bBoolErr); out.writeByte(field_4_bBoolErr);
out.writeByte(field_5_fError); out.writeByte(field_5_fError);
} }
protected int getDataSize() { @Override
return 8; protected int getValueDataSize() {
return 2;
} }
public short getSid() public short getSid() {
{
return sid; return sid;
} }
public Object clone() { public Object clone() {
BoolErrRecord rec = new BoolErrRecord(); BoolErrRecord rec = new BoolErrRecord();
rec.field_1_row = field_1_row; copyBaseFields(rec);
rec.field_2_column = field_2_column;
rec.field_3_xf_index = field_3_xf_index;
rec.field_4_bBoolErr = field_4_bBoolErr; rec.field_4_bBoolErr = field_4_bBoolErr;
rec.field_5_fError = field_5_fError; rec.field_5_fError = field_5_fError;
return rec; return rec;

View File

@ -0,0 +1,132 @@
/* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
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.HexDump;
import org.apache.poi.util.LittleEndianOutput;
/**
* Base class for all cell value records (implementors of {@link CellValueRecordInterface}).
* Subclasses are expected to manage the cell data values (of various types).
*
* @author Josh Micich
*/
public abstract class CellRecord extends StandardRecord implements CellValueRecordInterface {
private int _rowIndex;
private int _columnIndex;
private int _formatIndex;
protected CellRecord() {
// fields uninitialised
}
protected CellRecord(RecordInputStream in) {
_rowIndex = in.readUShort();
_columnIndex = in.readUShort();
_formatIndex = in.readUShort();
}
public final void setRow(int row) {
_rowIndex = row;
}
public final void setColumn(short col) {
_columnIndex = col;
}
/**
* set the index to the ExtendedFormat
*
* @see org.apache.poi.hssf.record.ExtendedFormatRecord
* @param xf index to the XF record
*/
public final void setXFIndex(short xf) {
_formatIndex = xf;
}
public final int getRow() {
return _rowIndex;
}
public final short getColumn() {
return (short) _columnIndex;
}
/**
* get the index to the ExtendedFormat
*
* @see org.apache.poi.hssf.record.ExtendedFormatRecord
* @return index to the XF record
*/
public final short getXFIndex() {
return (short) _formatIndex;
}
public final String toString() {
StringBuilder sb = new StringBuilder();
String recordName = getRecordName();
sb.append("[").append(recordName).append("]\n");
sb.append(" .row = ").append(HexDump.shortToHex(getRow())).append("\n");
sb.append(" .col = ").append(HexDump.shortToHex(getColumn())).append("\n");
sb.append(" .xfindex= ").append(HexDump.shortToHex(getXFIndex())).append("\n");
appendValueText(sb);
sb.append("\n");
sb.append("[/NUMBER]\n");
return sb.toString();
}
/**
* Append specific debug info (used by {@link #toString()} for the value
* contained in this record. Trailing new-line should not be appended
* (superclass does that).
*/
protected abstract void appendValueText(StringBuilder sb);
/**
* Gets the debug info BIFF record type name (used by {@link #toString()}.
*/
protected abstract String getRecordName();
/**
* writes out the value data for this cell record
*/
protected abstract void serializeValue(LittleEndianOutput out);
/**
* @return the size (in bytes) of the value data for this cell record
*/
protected abstract int getValueDataSize();
public final void serialize(LittleEndianOutput out) {
out.writeShort(getRow());
out.writeShort(getColumn());
out.writeShort(getXFIndex());
serializeValue(out);
}
protected final int getDataSize() {
return 6 + getValueDataSize();
}
protected final void copyBaseFields(CellRecord rec) {
rec._rowIndex = _rowIndex;
rec._columnIndex = _columnIndex;
rec._formatIndex = _formatIndex;
}
}

View File

@ -24,7 +24,6 @@ import org.apache.poi.ss.formula.Formula;
import org.apache.poi.util.BitField; import org.apache.poi.util.BitField;
import org.apache.poi.util.BitFieldFactory; import org.apache.poi.util.BitFieldFactory;
import org.apache.poi.util.HexDump; import org.apache.poi.util.HexDump;
import org.apache.poi.util.LittleEndianByteArrayOutputStream;
import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianInput;
import org.apache.poi.util.LittleEndianOutput; import org.apache.poi.util.LittleEndianOutput;
@ -33,12 +32,11 @@ import org.apache.poi.util.LittleEndianOutput;
* REFERENCE: PG 317/444 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P> * REFERENCE: PG 317/444 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
* @author Andrew C. Oliver (acoliver at apache dot org) * @author Andrew C. Oliver (acoliver at apache dot org)
* @author Jason Height (jheight at chariot dot net dot au) * @author Jason Height (jheight at chariot dot net dot au)
* @version 2.0-pre
*/ */
public final class FormulaRecord extends StandardRecord implements CellValueRecordInterface { public final class FormulaRecord extends CellRecord {
public static final short sid = 0x0006; // docs say 406...because of a bug Microsoft support site article #Q184647) public static final short sid = 0x0006; // docs say 406...because of a bug Microsoft support site article #Q184647)
private static int FIXED_SIZE = 20; private static int FIXED_SIZE = 14; // double + short + int
private static final BitField alwaysCalc = BitFieldFactory.getInstance(0x0001); private static final BitField alwaysCalc = BitFieldFactory.getInstance(0x0001);
private static final BitField calcOnLoad = BitFieldFactory.getInstance(0x0002); private static final BitField calcOnLoad = BitFieldFactory.getInstance(0x0002);
@ -168,11 +166,6 @@ public final class FormulaRecord extends StandardRecord implements CellValueReco
} }
} }
private int field_1_row;
private short field_2_column;
private short field_3_xf;
private double field_4_value; private double field_4_value;
private short field_5_options; private short field_5_options;
/** /**
@ -195,10 +188,8 @@ public final class FormulaRecord extends StandardRecord implements CellValueReco
} }
public FormulaRecord(RecordInputStream ris) { public FormulaRecord(RecordInputStream ris) {
super(ris);
LittleEndianInput in = ris; LittleEndianInput in = ris;
field_1_row = in.readUShort();
field_2_column = in.readShort();
field_3_xf = in.readShort();
long valueLongBits = in.readLong(); long valueLongBits = in.readLong();
field_5_options = in.readShort(); field_5_options = in.readShort();
specialCachedValue = SpecialCachedValue.create(valueLongBits); specialCachedValue = SpecialCachedValue.create(valueLongBits);
@ -213,19 +204,6 @@ public final class FormulaRecord extends StandardRecord implements CellValueReco
field_8_parsed_expr = Formula.read(field_7_expression_len, in, nBytesAvailable); field_8_parsed_expr = Formula.read(field_7_expression_len, in, nBytesAvailable);
} }
public void setRow(int row) {
field_1_row = row;
}
public void setColumn(short column) {
field_2_column = column;
}
public void setXFIndex(short xf) {
field_3_xf = xf;
}
/** /**
* set the calculated value of the formula * set the calculated value of the formula
* *
@ -284,18 +262,6 @@ public final class FormulaRecord extends StandardRecord implements CellValueReco
field_5_options = options; field_5_options = options;
} }
public int getRow() {
return field_1_row;
}
public short getColumn() {
return field_2_column;
}
public short getXFIndex() {
return field_3_xf;
}
/** /**
* get the calculated value of the formula * get the calculated value of the formula
* *
@ -357,14 +323,12 @@ public final class FormulaRecord extends StandardRecord implements CellValueReco
return sid; return sid;
} }
protected int getDataSize() { @Override
protected int getValueDataSize() {
return FIXED_SIZE + field_8_parsed_expr.getEncodedSize(); return FIXED_SIZE + field_8_parsed_expr.getEncodedSize();
} }
public void serialize(LittleEndianOutput out) { @Override
protected void serializeValue(LittleEndianOutput out) {
out.writeShort(getRow());
out.writeShort(getColumn());
out.writeShort(getXFIndex());
if (specialCachedValue == null) { if (specialCachedValue == null) {
out.writeDouble(field_4_value); out.writeDouble(field_4_value);
@ -377,14 +341,14 @@ public final class FormulaRecord extends StandardRecord implements CellValueReco
out.writeInt(field_6_zero); // may as well write original data back so as to minimise differences from original out.writeInt(field_6_zero); // may as well write original data back so as to minimise differences from original
field_8_parsed_expr.serialize(out); field_8_parsed_expr.serialize(out);
} }
public String toString() { @Override
protected String getRecordName() {
StringBuffer sb = new StringBuffer(); return "FORMULA";
sb.append("[FORMULA]\n"); }
sb.append(" .row = ").append(HexDump.shortToHex(getRow())).append("\n");
sb.append(" .column = ").append(HexDump.shortToHex(getColumn())).append("\n"); @Override
sb.append(" .xf = ").append(HexDump.shortToHex(getXFIndex())).append("\n"); protected void appendValueText(StringBuilder sb) {
sb.append(" .value = "); sb.append(" .value = ");
if (specialCachedValue == null) { if (specialCachedValue == null) {
sb.append(field_4_value).append("\n"); sb.append(field_4_value).append("\n");
@ -395,23 +359,22 @@ public final class FormulaRecord extends StandardRecord implements CellValueReco
sb.append(" .alwaysCalc= ").append(isAlwaysCalc()).append("\n"); sb.append(" .alwaysCalc= ").append(isAlwaysCalc()).append("\n");
sb.append(" .calcOnLoad= ").append(isCalcOnLoad()).append("\n"); sb.append(" .calcOnLoad= ").append(isCalcOnLoad()).append("\n");
sb.append(" .shared = ").append(isSharedFormula()).append("\n"); sb.append(" .shared = ").append(isSharedFormula()).append("\n");
sb.append(" .zero = ").append(HexDump.intToHex(field_6_zero)).append("\n"); sb.append(" .zero = ").append(HexDump.intToHex(field_6_zero));
Ptg[] ptgs = field_8_parsed_expr.getTokens(); Ptg[] ptgs = field_8_parsed_expr.getTokens();
for (int k = 0; k < ptgs.length; k++ ) { for (int k = 0; k < ptgs.length; k++ ) {
if (k>0) {
sb.append("\n");
}
sb.append(" Ptg[").append(k).append("]="); sb.append(" Ptg[").append(k).append("]=");
Ptg ptg = ptgs[k]; Ptg ptg = ptgs[k];
sb.append(ptg.toString()).append(ptg.getRVAType()).append("\n"); sb.append(ptg.toString()).append(ptg.getRVAType());
} }
sb.append("[/FORMULA]\n");
return sb.toString();
} }
public Object clone() { public Object clone() {
FormulaRecord rec = new FormulaRecord(); FormulaRecord rec = new FormulaRecord();
rec.field_1_row = field_1_row; copyBaseFields(rec);
rec.field_2_column = field_2_column;
rec.field_3_xf = field_3_xf;
rec.field_4_value = field_4_value; rec.field_4_value = field_4_value;
rec.field_5_options = field_5_options; rec.field_5_options = field_5_options;
rec.field_6_zero = field_6_zero; rec.field_6_zero = field_6_zero;

View File

@ -27,82 +27,30 @@ import org.apache.poi.util.LittleEndianOutput;
* REFERENCE: PG 325 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P> * REFERENCE: PG 325 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
* @author Andrew C. Oliver (acoliver at apache dot org) * @author Andrew C. Oliver (acoliver at apache dot org)
* @author Jason Height (jheight at chariot dot net dot au) * @author Jason Height (jheight at chariot dot net dot au)
* @version 2.0-pre
*/ */
public final class LabelSSTRecord extends StandardRecord implements CellValueRecordInterface { public final class LabelSSTRecord extends CellRecord {
public final static short sid = 0xfd; public final static short sid = 0xfd;
private int field_1_row;
private int field_2_column;
private int field_3_xf_index;
private int field_4_sst_index; private int field_4_sst_index;
public LabelSSTRecord() public LabelSSTRecord() {
{ // fields uninitialised
} }
public LabelSSTRecord(RecordInputStream in) public LabelSSTRecord(RecordInputStream in) {
{ super(in);
field_1_row = in.readUShort();
field_2_column = in.readUShort();
field_3_xf_index = in.readUShort();
field_4_sst_index = in.readInt(); field_4_sst_index = in.readInt();
} }
public void setRow(int row)
{
field_1_row = row;
}
public void setColumn(short col)
{
field_2_column = col;
}
/**
* set the index to the extended format record
*
* @see org.apache.poi.hssf.record.ExtendedFormatRecord
* @param index - the index to the XF record
*/
public void setXFIndex(short index)
{
field_3_xf_index = index;
}
/** /**
* set the index to the string in the SSTRecord * set the index to the string in the SSTRecord
* *
* @param index - of string in the SST Table * @param index - of string in the SST Table
* @see org.apache.poi.hssf.record.SSTRecord * @see org.apache.poi.hssf.record.SSTRecord
*/ */
public void setSSTIndex(int index) {
public void setSSTIndex(int index)
{
field_4_sst_index = index; field_4_sst_index = index;
} }
public int getRow()
{
return field_1_row;
}
public short getColumn()
{
return (short)field_2_column;
}
/**
* get the index to the extended format record
*
* @see org.apache.poi.hssf.record.ExtendedFormatRecord
* @return the index to the XF record
*/
public short getXFIndex()
{
return (short)field_3_xf_index;
}
/** /**
* get the index to the string in the SSTRecord * get the index to the string in the SSTRecord
@ -110,46 +58,37 @@ public final class LabelSSTRecord extends StandardRecord implements CellValueRec
* @return index of string in the SST Table * @return index of string in the SST Table
* @see org.apache.poi.hssf.record.SSTRecord * @see org.apache.poi.hssf.record.SSTRecord
*/ */
public int getSSTIndex() {
public int getSSTIndex()
{
return field_4_sst_index; return field_4_sst_index;
} }
public String toString() @Override
{ protected String getRecordName() {
StringBuffer sb = new StringBuffer(); return "LABELSST";
sb.append("[LABELSST]\n");
sb.append(" .row = ").append(HexDump.shortToHex(getRow())).append("\n");
sb.append(" .column = ").append(HexDump.shortToHex(getColumn())).append("\n");
sb.append(" .xfindex = ").append(HexDump.shortToHex(getXFIndex())).append("\n");
sb.append(" .sstindex= ").append(HexDump.intToHex(getSSTIndex())).append("\n");
sb.append("[/LABELSST]\n");
return sb.toString();
} }
public void serialize(LittleEndianOutput out) { @Override
out.writeShort(getRow()); protected void appendValueText(StringBuilder sb) {
out.writeShort(getColumn()); sb.append(" .sstIndex = ");
out.writeShort(getXFIndex()); sb.append(HexDump.shortToHex(getXFIndex()));
}
@Override
protected void serializeValue(LittleEndianOutput out) {
out.writeInt(getSSTIndex()); out.writeInt(getSSTIndex());
} }
protected int getDataSize() { @Override
return 10; protected int getValueDataSize() {
return 4;
} }
public short getSid() public short getSid() {
{
return sid; return sid;
} }
public Object clone() { public Object clone() {
LabelSSTRecord rec = new LabelSSTRecord(); LabelSSTRecord rec = new LabelSSTRecord();
rec.field_1_row = field_1_row; copyBaseFields(rec);
rec.field_2_column = field_2_column;
rec.field_3_xf_index = field_3_xf_index;
rec.field_4_sst_index = field_4_sst_index; rec.field_4_sst_index = field_4_sst_index;
return rec; return rec;
} }

View File

@ -17,134 +17,77 @@
package org.apache.poi.hssf.record; package org.apache.poi.hssf.record;
import org.apache.poi.util.HexDump; import org.apache.poi.ss.util.NumberToTextConverter;
import org.apache.poi.util.LittleEndianOutput; import org.apache.poi.util.LittleEndianOutput;
import org.apache.poi.hssf.record.Record;
/** /**
* NUMBER (0x0203) Contains a numeric cell value. <P> * NUMBER (0x0203) Contains a numeric cell value. <P>
* REFERENCE: PG 334 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P> * REFERENCE: PG 334 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
* @author Andrew C. Oliver (acoliver at apache dot org) * @author Andrew C. Oliver (acoliver at apache dot org)
* @author Jason Height (jheight at chariot dot net dot au) * @author Jason Height (jheight at chariot dot net dot au)
* @version 2.0-pre
*/ */
public final class NumberRecord extends StandardRecord implements CellValueRecordInterface { public final class NumberRecord extends CellRecord {
public static final short sid = 0x0203; public static final short sid = 0x0203;
private int field_1_row;
private int field_2_col;
private int field_3_xf;
private double field_4_value; private double field_4_value;
/** Creates new NumberRecord */ /** Creates new NumberRecord */
public NumberRecord() public NumberRecord() {
{ // fields uninitialised
} }
/** /**
* @param in the RecordInputstream to read the record from * @param in the RecordInputstream to read the record from
*/ */
public NumberRecord(RecordInputStream in) public NumberRecord(RecordInputStream in) {
{ super(in);
field_1_row = in.readUShort();
field_2_col = in.readUShort();
field_3_xf = in.readUShort();
field_4_value = in.readDouble(); field_4_value = in.readDouble();
} }
public void setRow(int row)
{
field_1_row = row;
}
public void setColumn(short col)
{
field_2_col = col;
}
/**
* set the index to the ExtendedFormat
* @see org.apache.poi.hssf.record.ExtendedFormatRecord
* @param xf index to the XF record
*/
public void setXFIndex(short xf)
{
field_3_xf = xf;
}
/** /**
* set the value for the cell * set the value for the cell
* *
* @param value double representing the value * @param value double representing the value
*/ */
public void setValue(double value) public void setValue(double value){
{
field_4_value = value; field_4_value = value;
} }
public int getRow()
{
return field_1_row;
}
public short getColumn()
{
return (short)field_2_col;
}
/**
* get the index to the ExtendedFormat
* @see org.apache.poi.hssf.record.ExtendedFormatRecord
* @return index to the XF record
*/
public short getXFIndex()
{
return (short)field_3_xf;
}
/** /**
* get the value for the cell * get the value for the cell
* *
* @return double representing the value * @return double representing the value
*/ */
public double getValue() public double getValue(){
{
return field_4_value; return field_4_value;
} }
public String toString() @Override
{ protected String getRecordName() {
StringBuffer sb = new StringBuffer(); return "NUMBER";
sb.append("[NUMBER]\n");
sb.append(" .row = ").append(HexDump.shortToHex(getRow())).append("\n");
sb.append(" .col = ").append(HexDump.shortToHex(getColumn())).append("\n");
sb.append(" .xfindex= ").append(HexDump.shortToHex(getXFIndex())).append("\n");
sb.append(" .value = ").append(getValue()).append("\n");
sb.append("[/NUMBER]\n");
return sb.toString();
} }
public void serialize(LittleEndianOutput out) { @Override
out.writeShort(getRow()); protected void appendValueText(StringBuilder sb) {
out.writeShort(getColumn()); sb.append(" .value= ").append(NumberToTextConverter.toText(field_4_value));
out.writeShort(getXFIndex()); }
@Override
protected void serializeValue(LittleEndianOutput out) {
out.writeDouble(getValue()); out.writeDouble(getValue());
} }
protected int getDataSize() { @Override
return 14; protected int getValueDataSize() {
return 8;
} }
public short getSid() public short getSid() {
{
return sid; return sid;
} }
public Object clone() { public Object clone() {
NumberRecord rec = new NumberRecord(); NumberRecord rec = new NumberRecord();
rec.field_1_row = field_1_row; copyBaseFields(rec);
rec.field_2_col = field_2_col;
rec.field_3_xf = field_3_xf;
rec.field_4_value = field_4_value; rec.field_4_value = field_4_value;
return rec; return rec;
} }

View File

@ -18,7 +18,6 @@
package org.apache.poi.hssf.record; package org.apache.poi.hssf.record;
import org.apache.poi.hssf.util.RKUtil; import org.apache.poi.hssf.util.RKUtil;
import org.apache.poi.util.HexDump;
import org.apache.poi.util.LittleEndianOutput; import org.apache.poi.util.LittleEndianOutput;
/** /**
@ -37,65 +36,23 @@ import org.apache.poi.util.LittleEndianOutput;
* @author Jason Height (jheight at chariot dot net dot au) * @author Jason Height (jheight at chariot dot net dot au)
* @see org.apache.poi.hssf.record.NumberRecord * @see org.apache.poi.hssf.record.NumberRecord
*/ */
public final class RKRecord extends StandardRecord implements CellValueRecordInterface { public final class RKRecord extends CellRecord {
public final static short sid = 0x027E; public final static short sid = 0x027E;
public final static short RK_IEEE_NUMBER = 0; public final static short RK_IEEE_NUMBER = 0;
public final static short RK_IEEE_NUMBER_TIMES_100 = 1; public final static short RK_IEEE_NUMBER_TIMES_100 = 1;
public final static short RK_INTEGER = 2; public final static short RK_INTEGER = 2;
public final static short RK_INTEGER_TIMES_100 = 3; public final static short RK_INTEGER_TIMES_100 = 3;
private int field_1_row;
private int field_2_col;
private int field_3_xf_index;
private int field_4_rk_number; private int field_4_rk_number;
private RKRecord() private RKRecord() {
{ // fields uninitialised
} }
public RKRecord(RecordInputStream in) public RKRecord(RecordInputStream in) {
{ super(in);
field_1_row = in.readUShort();
field_2_col = in.readUShort();
field_3_xf_index = in.readUShort();
field_4_rk_number = in.readInt(); field_4_rk_number = in.readInt();
} }
public int getRow()
{
return field_1_row;
}
public short getColumn()
{
return (short) field_2_col;
}
public short getXFIndex()
{
return (short) field_3_xf_index;
}
public int getRKField()
{
return field_4_rk_number;
}
/**
* Get the type of the number
*
* @return one of these values:
* <OL START="0">
* <LI>RK_IEEE_NUMBER</LI>
* <LI>RK_IEEE_NUMBER_TIMES_100</LI>
* <LI>RK_INTEGER</LI>
* <LI>RK_INTEGER_TIMES_100</LI>
* </OL>
*/
public short getRKType()
{
return ( short ) (field_4_rk_number & 3);
}
/** /**
* Extract the value of the number * Extract the value of the number
* <P> * <P>
@ -113,60 +70,37 @@ public final class RKRecord extends StandardRecord implements CellValueRecordInt
* @return the value as a proper double (hey, it <B>could</B> * @return the value as a proper double (hey, it <B>could</B>
* happen) * happen)
*/ */
public double getRKNumber() public double getRKNumber() {
{
return RKUtil.decodeNumber(field_4_rk_number); return RKUtil.decodeNumber(field_4_rk_number);
} }
@Override
public String toString() protected String getRecordName() {
{ return "RK";
StringBuffer sb = new StringBuffer();
sb.append("[RK]\n");
sb.append(" .row = ").append(HexDump.shortToHex(getRow())).append("\n");
sb.append(" .col = ").append(HexDump.shortToHex(getColumn())).append("\n");
sb.append(" .xfindex = ").append(HexDump.shortToHex(getXFIndex())).append("\n");
sb.append(" .rknumber = ").append(HexDump.intToHex(getRKField())).append("\n");
sb.append(" .rktype = ").append(HexDump.byteToHex(getRKType())).append("\n");
sb.append(" .rknumber= ").append(getRKNumber()).append("\n");
sb.append("[/RK]\n");
return sb.toString();
} }
public void serialize(LittleEndianOutput out) { @Override
throw new RecordFormatException( "Sorry, you can't serialize RK in this release"); protected void appendValueText(StringBuilder sb) {
} sb.append(" .value= ").append(getRKNumber());
protected int getDataSize() { }
throw new RecordFormatException( "Sorry, you can't serialize RK in this release");
}
public short getSid() @Override
{ protected void serializeValue(LittleEndianOutput out) {
out.writeInt(field_4_rk_number);
}
@Override
protected int getValueDataSize() {
return 4;
}
public short getSid() {
return sid; return sid;
} }
public void setColumn(short col)
{
}
public void setRow(int row)
{
}
/**
* NO OP!
*/
public void setXFIndex(short xf)
{
}
public Object clone() { public Object clone() {
RKRecord rec = new RKRecord(); RKRecord rec = new RKRecord();
rec.field_1_row = field_1_row; copyBaseFields(rec);
rec.field_2_col = field_2_col;
rec.field_3_xf_index = field_3_xf_index;
rec.field_4_rk_number = field_4_rk_number; rec.field_4_rk_number = field_4_rk_number;
return rec; return rec;
} }