Major landing of the following changes:

1) Full implementation of UnicodeStrings
2) exposure of RichText strings to the usermodel
3) Modification to SSTRecord to support duplicates. Fixes a few bugs
4) RecordInputStream *smart* ?? handeling of continue records!

Phew This took 6 months on and off to put together. Just happy to commit somethig

Report any problems!


git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353769 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jason Height 2005-08-18 07:06:44 +00:00
parent d9c74c316c
commit 07f76e4bb6
265 changed files with 3915 additions and 5345 deletions

View File

@ -355,6 +355,7 @@
<exclude name="**/AllTests.java"/>
<exclude name="**/TestEmptyDocument.java"/>
<exclude name="**/TestUnfixedBugs.java"/>
<exclude name="**/TestcaseRecordInputStream.java"/>
</fileset>
</batchtest>
</junit>

View File

@ -90,64 +90,27 @@ public class BiffViewer {
public static Record[] createRecords(InputStream in, boolean dump)
throws RecordFormatException {
ArrayList records = new ArrayList();
// Record last_record = null;
int loc = 0;
RecordDetails activeRecord = null;
try {
// long offset = 0;
short rectype = 0;
do {
rectype = LittleEndian.readShort(in);
int startloc = loc;
loc += 2;
if (rectype != 0) {
short recsize = LittleEndian.readShort(in);
loc += 2;
byte[] data = new byte[(int) recsize];
in.read(data);
loc += recsize;
Record record = createRecord(rectype, recsize, data );
// if (record.getSid() == DrawingGroupRecord.sid)
// {
// if (activeRecord.getRecord().getSid() == DrawingGroupRecord.sid)
// {
// DrawingGroupRecord dg = (DrawingGroupRecord) activeRecord.getRecord();
// System.out.println( "Joined" );
// dg.join( (AbstractEscherHolderRecord) record );
// }
// else
// {
// records.add(record);
// if (activeRecord != null)
// activeRecord.dump();
// activeRecord = new RecordDetails(rectype, recsize, startloc, data, record);
// }
// }
// else
BiffviewRecordInputStream recStream = new BiffviewRecordInputStream(in);
while (recStream.hasNextRecord()) {
recStream.nextRecord();
if (recStream.getSid() != 0) {
Record record = createRecord (recStream);
if (record.getSid() != ContinueRecord.sid)
{
records.add(record);
if (activeRecord != null)
activeRecord.dump();
activeRecord = new RecordDetails(rectype, recsize, startloc, data, record);
}
else
{
activeRecord.getRecord().processContinueRecord(data);
activeRecord = new RecordDetails(recStream.getSid(), recStream.getLength(), (int)recStream.getPos(), record);
}
if (dump) {
dumpRaw(rectype, recsize, data);
recStream.dumpBytes();
}
}
}
} while (rectype != 0);
activeRecord.dump();
} catch (IOException e) {
throw new RecordFormatException("Error reading bytes");
}
@ -165,454 +128,383 @@ public class BiffViewer {
}
private static void dumpContinueRecord(Record last_record, boolean dump, byte[] data) throws IOException {
if (last_record == null) {
throw new RecordFormatException(
"First record is a ContinueRecord??");
}
if (dump) {
System.out.println(
"-----PRECONTINUED LAST RECORD WOULD SERIALIZE LIKE:");
byte[] lr = last_record.serialize();
if (lr != null) {
HexDump.dump(last_record.serialize(),
0, System.out, 0);
}
System.out.println();
System.out.println(
"-----PRECONTINUED----------------------------------");
}
last_record.processContinueRecord(data);
if (dump) {
System.out.println(
"-----CONTINUED LAST RECORD WOULD SERIALIZE LIKE:");
HexDump.dump(last_record.serialize(), 0,
System.out, 0);
System.out.println();
System.out.println(
"-----CONTINUED----------------------------------");
}
}
private static void dumpUnknownRecord(byte[] data) throws IOException {
// record hex dump it!
System.out.println(
"-----UNKNOWN----------------------------------");
if (data.length > 0) {
HexDump.dump(data, 0, System.out, 0);
} else {
System.out.print("**NO RECORD DATA**");
}
System.out.println();
System.out.println(
"-----UNKNOWN----------------------------------");
}
private static void dumpRaw( short rectype, short recsize, byte[] data ) throws IOException
{
// System.out
// .println("fixing to recordize the following");
System.out.println("============================================");
System.out.print( "rectype = 0x"
+ Integer.toHexString( rectype ) );
System.out.println( ", recsize = 0x"
+ Integer.toHexString( recsize ) );
System.out.println(
"-BEGIN DUMP---------------------------------" );
if ( data.length > 0 )
{
HexDump.dump( data, 0, System.out, 0 );
}
else
{
System.out.println( "**NO RECORD DATA**" );
}
// System.out.println();
System.out.println(
"-END DUMP-----------------------------------" );
}
/**
* Essentially a duplicate of RecordFactory. Kept seperate as not to screw
* up non-debug operations.
*
*/
private static Record createRecord( short rectype, short size,
byte[] data )
private static Record createRecord( RecordInputStream in )
{
Record retval = null;
switch ( rectype )
switch ( in.getSid() )
{
case ChartRecord.sid:
retval = new ChartRecord( rectype, size, data );
retval = new ChartRecord( in );
break;
case ChartFormatRecord.sid:
retval = new ChartFormatRecord( rectype, size, data );
retval = new ChartFormatRecord( in );
break;
case SeriesRecord.sid:
retval = new SeriesRecord( rectype, size, data );
retval = new SeriesRecord( in );
break;
case BeginRecord.sid:
retval = new BeginRecord( rectype, size, data );
retval = new BeginRecord( in );
break;
case EndRecord.sid:
retval = new EndRecord( rectype, size, data );
retval = new EndRecord( in );
break;
case BOFRecord.sid:
retval = new BOFRecord( rectype, size, data );
retval = new BOFRecord( in );
break;
case InterfaceHdrRecord.sid:
retval = new InterfaceHdrRecord( rectype, size, data );
retval = new InterfaceHdrRecord( in );
break;
case MMSRecord.sid:
retval = new MMSRecord( rectype, size, data );
retval = new MMSRecord( in );
break;
case InterfaceEndRecord.sid:
retval = new InterfaceEndRecord( rectype, size, data );
retval = new InterfaceEndRecord( in );
break;
case WriteAccessRecord.sid:
retval = new WriteAccessRecord( rectype, size, data );
retval = new WriteAccessRecord( in );
break;
case CodepageRecord.sid:
retval = new CodepageRecord( rectype, size, data );
retval = new CodepageRecord( in );
break;
case DSFRecord.sid:
retval = new DSFRecord( rectype, size, data );
retval = new DSFRecord( in );
break;
case TabIdRecord.sid:
retval = new TabIdRecord( rectype, size, data );
retval = new TabIdRecord( in );
break;
case FnGroupCountRecord.sid:
retval = new FnGroupCountRecord( rectype, size, data );
retval = new FnGroupCountRecord( in );
break;
case WindowProtectRecord.sid:
retval = new WindowProtectRecord( rectype, size, data );
retval = new WindowProtectRecord( in );
break;
case ProtectRecord.sid:
retval = new ProtectRecord( rectype, size, data );
retval = new ProtectRecord( in );
break;
case PasswordRecord.sid:
retval = new PasswordRecord( rectype, size, data );
retval = new PasswordRecord( in );
break;
case ProtectionRev4Record.sid:
retval = new ProtectionRev4Record( rectype, size, data );
retval = new ProtectionRev4Record( in );
break;
case PasswordRev4Record.sid:
retval = new PasswordRev4Record( rectype, size, data );
retval = new PasswordRev4Record( in );
break;
case WindowOneRecord.sid:
retval = new WindowOneRecord( rectype, size, data );
retval = new WindowOneRecord( in );
break;
case BackupRecord.sid:
retval = new BackupRecord( rectype, size, data );
retval = new BackupRecord( in );
break;
case HideObjRecord.sid:
retval = new HideObjRecord( rectype, size, data );
retval = new HideObjRecord( in );
break;
case DateWindow1904Record.sid:
retval = new DateWindow1904Record( rectype, size, data );
retval = new DateWindow1904Record( in );
break;
case PrecisionRecord.sid:
retval = new PrecisionRecord( rectype, size, data );
retval = new PrecisionRecord( in );
break;
case RefreshAllRecord.sid:
retval = new RefreshAllRecord( rectype, size, data );
retval = new RefreshAllRecord( in );
break;
case BookBoolRecord.sid:
retval = new BookBoolRecord( rectype, size, data );
retval = new BookBoolRecord( in );
break;
case FontRecord.sid:
retval = new FontRecord( rectype, size, data );
retval = new FontRecord( in );
break;
case FormatRecord.sid:
retval = new FormatRecord( rectype, size, data );
retval = new FormatRecord( in );
break;
case ExtendedFormatRecord.sid:
retval = new ExtendedFormatRecord( rectype, size, data );
retval = new ExtendedFormatRecord( in );
break;
case StyleRecord.sid:
retval = new StyleRecord( rectype, size, data );
retval = new StyleRecord( in );
break;
case UseSelFSRecord.sid:
retval = new UseSelFSRecord( rectype, size, data );
retval = new UseSelFSRecord( in );
break;
case BoundSheetRecord.sid:
retval = new BoundSheetRecord( rectype, size, data );
retval = new BoundSheetRecord( in );
break;
case CountryRecord.sid:
retval = new CountryRecord( rectype, size, data );
retval = new CountryRecord( in );
break;
case SSTRecord.sid:
retval = new SSTRecord( rectype, size, data );
retval = new SSTRecord( in );
break;
case ExtSSTRecord.sid:
retval = new ExtSSTRecord( rectype, size, data );
retval = new ExtSSTRecord( in );
break;
case EOFRecord.sid:
retval = new EOFRecord( rectype, size, data );
retval = new EOFRecord( in );
break;
case IndexRecord.sid:
retval = new IndexRecord( rectype, size, data );
retval = new IndexRecord( in );
break;
case CalcModeRecord.sid:
retval = new CalcModeRecord( rectype, size, data );
retval = new CalcModeRecord( in );
break;
case CalcCountRecord.sid:
retval = new CalcCountRecord( rectype, size, data );
retval = new CalcCountRecord( in );
break;
case RefModeRecord.sid:
retval = new RefModeRecord( rectype, size, data );
retval = new RefModeRecord( in );
break;
case IterationRecord.sid:
retval = new IterationRecord( rectype, size, data );
retval = new IterationRecord( in );
break;
case DeltaRecord.sid:
retval = new DeltaRecord( rectype, size, data );
retval = new DeltaRecord( in );
break;
case SaveRecalcRecord.sid:
retval = new SaveRecalcRecord( rectype, size, data );
retval = new SaveRecalcRecord( in );
break;
case PrintHeadersRecord.sid:
retval = new PrintHeadersRecord( rectype, size, data );
retval = new PrintHeadersRecord( in );
break;
case PrintGridlinesRecord.sid:
retval = new PrintGridlinesRecord( rectype, size, data );
retval = new PrintGridlinesRecord( in );
break;
case GridsetRecord.sid:
retval = new GridsetRecord( rectype, size, data );
retval = new GridsetRecord( in );
break;
case DrawingGroupRecord.sid:
retval = new DrawingGroupRecord( rectype, size, data );
retval = new DrawingGroupRecord( in );
break;
case DrawingRecordForBiffViewer.sid:
retval = new DrawingRecordForBiffViewer( rectype, size, data );
retval = new DrawingRecordForBiffViewer( in );
break;
case DrawingSelectionRecord.sid:
retval = new DrawingSelectionRecord( rectype, size, data );
retval = new DrawingSelectionRecord( in );
break;
case GutsRecord.sid:
retval = new GutsRecord( rectype, size, data );
retval = new GutsRecord( in );
break;
case DefaultRowHeightRecord.sid:
retval = new DefaultRowHeightRecord( rectype, size, data );
retval = new DefaultRowHeightRecord( in );
break;
case WSBoolRecord.sid:
retval = new WSBoolRecord( rectype, size, data );
retval = new WSBoolRecord( in );
break;
case HeaderRecord.sid:
retval = new HeaderRecord( rectype, size, data );
retval = new HeaderRecord( in );
break;
case FooterRecord.sid:
retval = new FooterRecord( rectype, size, data );
retval = new FooterRecord( in );
break;
case HCenterRecord.sid:
retval = new HCenterRecord( rectype, size, data );
retval = new HCenterRecord( in );
break;
case VCenterRecord.sid:
retval = new VCenterRecord( rectype, size, data );
retval = new VCenterRecord( in );
break;
case PrintSetupRecord.sid:
retval = new PrintSetupRecord( rectype, size, data );
retval = new PrintSetupRecord( in );
break;
case DefaultColWidthRecord.sid:
retval = new DefaultColWidthRecord( rectype, size, data );
retval = new DefaultColWidthRecord( in );
break;
case DimensionsRecord.sid:
retval = new DimensionsRecord( rectype, size, data );
retval = new DimensionsRecord( in );
break;
case RowRecord.sid:
retval = new RowRecord( rectype, size, data );
retval = new RowRecord( in );
break;
case LabelSSTRecord.sid:
retval = new LabelSSTRecord( rectype, size, data );
retval = new LabelSSTRecord( in );
break;
case RKRecord.sid:
retval = new RKRecord( rectype, size, data );
retval = new RKRecord( in );
break;
case NumberRecord.sid:
retval = new NumberRecord( rectype, size, data );
retval = new NumberRecord( in );
break;
case DBCellRecord.sid:
retval = new DBCellRecord( rectype, size, data );
retval = new DBCellRecord( in );
break;
case WindowTwoRecord.sid:
retval = new WindowTwoRecord( rectype, size, data );
retval = new WindowTwoRecord( in );
break;
case SelectionRecord.sid:
retval = new SelectionRecord( rectype, size, data );
retval = new SelectionRecord( in );
break;
case ContinueRecord.sid:
retval = new ContinueRecord( rectype, size, data );
retval = new ContinueRecord( in );
break;
case LabelRecord.sid:
retval = new LabelRecord( rectype, size, data );
retval = new LabelRecord( in );
break;
case MulRKRecord.sid:
retval = new MulRKRecord( rectype, size, data );
retval = new MulRKRecord( in );
break;
case MulBlankRecord.sid:
retval = new MulBlankRecord( rectype, size, data );
retval = new MulBlankRecord( in );
break;
case BlankRecord.sid:
retval = new BlankRecord( rectype, size, data );
retval = new BlankRecord( in );
break;
case BoolErrRecord.sid:
retval = new BoolErrRecord( rectype, size, data );
retval = new BoolErrRecord( in );
break;
case ColumnInfoRecord.sid:
retval = new ColumnInfoRecord( rectype, size, data );
retval = new ColumnInfoRecord( in );
break;
case MergeCellsRecord.sid:
retval = new MergeCellsRecord( rectype, size, data );
retval = new MergeCellsRecord( in );
break;
case AreaRecord.sid:
retval = new AreaRecord( rectype, size, data );
retval = new AreaRecord( in );
break;
case DataFormatRecord.sid:
retval = new DataFormatRecord( rectype, size, data );
retval = new DataFormatRecord( in );
break;
case BarRecord.sid:
retval = new BarRecord( rectype, size, data );
retval = new BarRecord( in );
break;
case DatRecord.sid:
retval = new DatRecord( rectype, size, data );
retval = new DatRecord( in );
break;
case PlotGrowthRecord.sid:
retval = new PlotGrowthRecord( rectype, size, data );
retval = new PlotGrowthRecord( in );
break;
case UnitsRecord.sid:
retval = new UnitsRecord( rectype, size, data );
retval = new UnitsRecord( in );
break;
case FrameRecord.sid:
retval = new FrameRecord( rectype, size, data );
retval = new FrameRecord( in );
break;
case ValueRangeRecord.sid:
retval = new ValueRangeRecord( rectype, size, data );
retval = new ValueRangeRecord( in );
break;
case SeriesListRecord.sid:
retval = new SeriesListRecord( rectype, size, data );
retval = new SeriesListRecord( in );
break;
case FontBasisRecord.sid:
retval = new FontBasisRecord( rectype, size, data );
retval = new FontBasisRecord( in );
break;
case FontIndexRecord.sid:
retval = new FontIndexRecord( rectype, size, data );
retval = new FontIndexRecord( in );
break;
case LineFormatRecord.sid:
retval = new LineFormatRecord( rectype, size, data );
retval = new LineFormatRecord( in );
break;
case AreaFormatRecord.sid:
retval = new AreaFormatRecord( rectype, size, data );
retval = new AreaFormatRecord( in );
break;
case LinkedDataRecord.sid:
retval = new LinkedDataRecord( rectype, size, data );
retval = new LinkedDataRecord( in );
break;
case FormulaRecord.sid:
retval = new FormulaRecord( rectype, size, data );
retval = new FormulaRecord( in );
break;
case SheetPropertiesRecord.sid:
retval = new SheetPropertiesRecord( rectype, size, data );
retval = new SheetPropertiesRecord( in );
break;
case DefaultDataLabelTextPropertiesRecord.sid:
retval = new DefaultDataLabelTextPropertiesRecord( rectype, size, data );
retval = new DefaultDataLabelTextPropertiesRecord( in );
break;
case TextRecord.sid:
retval = new TextRecord( rectype, size, data );
retval = new TextRecord( in );
break;
case AxisParentRecord.sid:
retval = new AxisParentRecord( rectype, size, data );
retval = new AxisParentRecord( in );
break;
case AxisLineFormatRecord.sid:
retval = new AxisLineFormatRecord( rectype, size, data );
retval = new AxisLineFormatRecord( in );
break;
case SupBookRecord.sid:
retval = new SupBookRecord( rectype, size, data );
retval = new SupBookRecord( in );
break;
case ExternSheetRecord.sid:
retval = new ExternSheetRecord( rectype, size, data );
retval = new ExternSheetRecord( in );
break;
case SCLRecord.sid:
retval = new SCLRecord( rectype, size, data );
retval = new SCLRecord( in );
break;
case SeriesToChartGroupRecord.sid:
retval = new SeriesToChartGroupRecord( rectype, size, data );
retval = new SeriesToChartGroupRecord( in );
break;
case AxisUsedRecord.sid:
retval = new AxisUsedRecord( rectype, size, data );
retval = new AxisUsedRecord( in );
break;
case AxisRecord.sid:
retval = new AxisRecord( rectype, size, data );
retval = new AxisRecord( in );
break;
case CategorySeriesAxisRecord.sid:
retval = new CategorySeriesAxisRecord( rectype, size, data );
retval = new CategorySeriesAxisRecord( in );
break;
case AxisOptionsRecord.sid:
retval = new AxisOptionsRecord( rectype, size, data );
retval = new AxisOptionsRecord( in );
break;
case TickRecord.sid:
retval = new TickRecord( rectype, size, data );
retval = new TickRecord( in );
break;
case SeriesTextRecord.sid:
retval = new SeriesTextRecord( rectype, size, data );
retval = new SeriesTextRecord( in );
break;
case ObjectLinkRecord.sid:
retval = new ObjectLinkRecord( rectype, size, data );
retval = new ObjectLinkRecord( in );
break;
case PlotAreaRecord.sid:
retval = new PlotAreaRecord( rectype, size, data );
retval = new PlotAreaRecord( in );
break;
case SeriesIndexRecord.sid:
retval = new SeriesIndexRecord( rectype, size, data );
retval = new SeriesIndexRecord( in );
break;
case LegendRecord.sid:
retval = new LegendRecord( rectype, size, data );
retval = new LegendRecord( in );
break;
case LeftMarginRecord.sid:
retval = new LeftMarginRecord( rectype, size, data );
retval = new LeftMarginRecord( in );
break;
case RightMarginRecord.sid:
retval = new RightMarginRecord( rectype, size, data );
retval = new RightMarginRecord( in );
break;
case TopMarginRecord.sid:
retval = new TopMarginRecord( rectype, size, data );
retval = new TopMarginRecord( in );
break;
case BottomMarginRecord.sid:
retval = new BottomMarginRecord( rectype, size, data );
retval = new BottomMarginRecord( in );
break;
case PaletteRecord.sid:
retval = new PaletteRecord( rectype, size, data );
retval = new PaletteRecord( in );
break;
case StringRecord.sid:
retval = new StringRecord( rectype, size, data );
retval = new StringRecord( in );
break;
case NameRecord.sid:
retval = new NameRecord( rectype, size, data );
retval = new NameRecord( in );
break;
case PaneRecord.sid:
retval = new PaneRecord( rectype, size, data );
retval = new PaneRecord( in );
break;
case SharedFormulaRecord.sid:
retval = new SharedFormulaRecord( rectype, size, data);
retval = new SharedFormulaRecord( in);
break;
case ObjRecord.sid:
retval = new ObjRecord( rectype, size, data);
retval = new ObjRecord( in);
break;
case TextObjectRecord.sid:
retval = new TextObjectRecord( rectype, size, data);
retval = new TextObjectRecord( in);
break;
case HorizontalPageBreakRecord.sid:
retval = new HorizontalPageBreakRecord( rectype, size, data);
retval = new HorizontalPageBreakRecord( in);
break;
case VerticalPageBreakRecord.sid:
retval = new VerticalPageBreakRecord( rectype, size, data);
retval = new VerticalPageBreakRecord( in);
break;
default:
retval = new UnknownRecord( rectype, size, data );
retval = new UnknownRecord( in );
}
return retval;
}
@ -684,15 +576,13 @@ public class BiffViewer {
{
short rectype, recsize;
int startloc;
byte[] data;
Record record;
public RecordDetails( short rectype, short recsize, int startloc, byte[] data, Record record )
public RecordDetails( short rectype, short recsize, int startloc, Record record )
{
this.rectype = rectype;
this.recsize = recsize;
this.startloc = startloc;
this.data = data;
this.record = record;
}
@ -706,11 +596,6 @@ public class BiffViewer {
return recsize;
}
public byte[] getData()
{
return data;
}
public Record getRecord()
{
return record;
@ -718,12 +603,18 @@ public class BiffViewer {
public void dump() throws IOException
{
if (record instanceof UnknownRecord)
dumpUnknownRecord(data);
else
dumpNormal(record, startloc, rectype, recsize);
}
}
static class BiffviewRecordInputStream extends RecordInputStream {
public BiffviewRecordInputStream(InputStream in) {
super(in);
}
public void dumpBytes() {
HexDump.dump(this.data, 0, this.currentLength);
}
}
}

View File

@ -36,159 +36,159 @@ import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
* Event Factory version of HSSF test class.
* @author andy
*/
public class EFHSSF
{
String infile;
String outfile;
HSSFWorkbook workbook = null;
HSSFSheet cursheet = null;
/** Creates a new instance of EFHSSF */
public EFHSSF()
{
}
public void setInputFile(String infile)
{
this.infile = infile;
}
public void setOutputFile(String outfile)
{
this.outfile = outfile;
}
public void run()
throws IOException
{
FileInputStream fin = new FileInputStream(infile);
POIFSFileSystem poifs = new POIFSFileSystem(fin);
InputStream din = poifs.createDocumentInputStream("Workbook");
HSSFRequest req = new HSSFRequest();
req.addListenerForAllRecords(new EFHSSFListener(this));
HSSFEventFactory factory = new HSSFEventFactory();
factory.processEvents(req, din);
fin.close();
din.close();
FileOutputStream fout = new FileOutputStream(outfile);
workbook.write(fout);
fout.close();
System.out.println("done.");
}
public void recordHandler(Record record)
{
HSSFRow row = null;
HSSFCell cell = null;
int sheetnum = -1;
switch (record.getSid())
{
case BOFRecord.sid :
BOFRecord bof = ( BOFRecord ) record;
if (bof.getType() == bof.TYPE_WORKBOOK)
{
workbook = new HSSFWorkbook();
}
else if (bof.getType() == bof.TYPE_WORKSHEET)
{
sheetnum++;
cursheet = workbook.getSheetAt(sheetnum);
}
break;
case BoundSheetRecord.sid :
BoundSheetRecord bsr = ( BoundSheetRecord ) record;
workbook.createSheet(bsr.getSheetname());
break;
case RowRecord.sid :
RowRecord rowrec = ( RowRecord ) record;
cursheet.createRow(rowrec.getRowNumber());
break;
case NumberRecord.sid :
NumberRecord numrec = ( NumberRecord ) record;
row = cursheet.getRow(numrec.getRow());
cell = row.createCell(numrec.getColumn(),
HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(numrec.getValue());
break;
case SSTRecord.sid :
SSTRecord sstrec = ( SSTRecord ) record;
for (int k = 0; k < sstrec.getNumUniqueStrings(); k++)
{
workbook.addSSTString(sstrec.getString(k));
}
break;
case LabelSSTRecord.sid :
LabelSSTRecord lrec = ( LabelSSTRecord ) record;
row = cursheet.getRow(lrec.getRow());
cell = row.createCell(lrec.getColumn(),
HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(workbook.getSSTString(lrec.getSSTIndex()));
break;
}
}
public static void main(String [] args)
{
if ((args.length < 2) || !args[ 0 ].equals("--help"))
{
try
{
EFHSSF viewer = new EFHSSF();
viewer.setInputFile(args[ 0 ]);
viewer.setOutputFile(args[ 1 ]);
viewer.run();
}
catch (IOException e)
{
e.printStackTrace();
}
}
else
{
System.out.println("EFHSSF");
System.out.println(
"General testbed for HSSFEventFactory based testing and "
+ "Code examples");
System.out.println("Usage: java org.apache.poi.hssf.dev.EFHSSF "
+ "file1 file2");
System.out.println(
" --will rewrite the file reading with the event api");
System.out.println("and writing with the standard API");
}
}
}
class EFHSSFListener
implements HSSFListener
{
EFHSSF efhssf;
public EFHSSFListener(EFHSSF efhssf)
{
this.efhssf = efhssf;
}
public void processRecord(Record record)
{
efhssf.recordHandler(record);
}
}
//JMH
//public class EFHSSF
//{
// String infile;
// String outfile;
// HSSFWorkbook workbook = null;
// HSSFSheet cursheet = null;
//
// /** Creates a new instance of EFHSSF */
//
// public EFHSSF()
// {
// }
//
// public void setInputFile(String infile)
// {
// this.infile = infile;
// }
//
// public void setOutputFile(String outfile)
// {
// this.outfile = outfile;
// }
//
// public void run()
// throws IOException
// {
// FileInputStream fin = new FileInputStream(infile);
// POIFSFileSystem poifs = new POIFSFileSystem(fin);
// InputStream din = poifs.createDocumentInputStream("Workbook");
// HSSFRequest req = new HSSFRequest();
//
// req.addListenerForAllRecords(new EFHSSFListener(this));
// HSSFEventFactory factory = new HSSFEventFactory();
//
// factory.processEvents(req, din);
// fin.close();
// din.close();
// FileOutputStream fout = new FileOutputStream(outfile);
//
// workbook.write(fout);
// fout.close();
// System.out.println("done.");
// }
//
// public void recordHandler(Record record)
// {
// HSSFRow row = null;
// HSSFCell cell = null;
// int sheetnum = -1;
//
// switch (record.getSid())
// {
//
// case BOFRecord.sid :
// BOFRecord bof = ( BOFRecord ) record;
//
// if (bof.getType() == bof.TYPE_WORKBOOK)
// {
// workbook = new HSSFWorkbook();
// }
// else if (bof.getType() == bof.TYPE_WORKSHEET)
// {
// sheetnum++;
// cursheet = workbook.getSheetAt(sheetnum);
// }
// break;
//
// case BoundSheetRecord.sid :
// BoundSheetRecord bsr = ( BoundSheetRecord ) record;
//
// workbook.createSheet(bsr.getSheetname());
// break;
//
// case RowRecord.sid :
// RowRecord rowrec = ( RowRecord ) record;
//
// cursheet.createRow(rowrec.getRowNumber());
// break;
//
// case NumberRecord.sid :
// NumberRecord numrec = ( NumberRecord ) record;
//
// row = cursheet.getRow(numrec.getRow());
// cell = row.createCell(numrec.getColumn(),
// HSSFCell.CELL_TYPE_NUMERIC);
// cell.setCellValue(numrec.getValue());
// break;
//
// case SSTRecord.sid :
// SSTRecord sstrec = ( SSTRecord ) record;
//
// for (int k = 0; k < sstrec.getNumUniqueStrings(); k++)
// {
// workbook.addSSTString(new UnicodeString(sstrec.getString(k)));
// }
// break;
//
// case LabelSSTRecord.sid :
// LabelSSTRecord lrec = ( LabelSSTRecord ) record;
//
// row = cursheet.getRow(lrec.getRow());
// cell = row.createCell(lrec.getColumn(),
// HSSFCell.CELL_TYPE_STRING);
// cell.setCellValue(workbook.getSSTString(lrec.getSSTIndex()));
// break;
// }
// }
//
// public static void main(String [] args)
// {
// if ((args.length < 2) || !args[ 0 ].equals("--help"))
// {
// try
// {
// EFHSSF viewer = new EFHSSF();
//
// viewer.setInputFile(args[ 0 ]);
// viewer.setOutputFile(args[ 1 ]);
// viewer.run();
// }
// catch (IOException e)
// {
// e.printStackTrace();
// }
// }
// else
// {
// System.out.println("EFHSSF");
// System.out.println(
// "General testbed for HSSFEventFactory based testing and "
// + "Code examples");
// System.out.println("Usage: java org.apache.poi.hssf.dev.EFHSSF "
// + "file1 file2");
// System.out.println(
// " --will rewrite the file reading with the event api");
// System.out.println("and writing with the standard API");
// }
// }
//}
//
//class EFHSSFListener
// implements HSSFListener
//{
// EFHSSF efhssf;
//
// public EFHSSFListener(EFHSSF efhssf)
// {
// this.efhssf = efhssf;
// }
//
// public void processRecord(Record record)
// {
// efhssf.recordHandler(record);
// }
//}

View File

@ -83,6 +83,7 @@ import org.apache.poi.hssf.record.ProtectionRev4Record;
import org.apache.poi.hssf.record.RKRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.RecordFormatException;
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.hssf.record.RefModeRecord;
import org.apache.poi.hssf.record.RefreshAllRecord;
import org.apache.poi.hssf.record.RightMarginRecord;
@ -262,22 +263,11 @@ public class EventRecordFactory
{
Record last_record = null;
try
{
short rectype = 0;
do
{
rectype = LittleEndian.readShort(in);
if (rectype != 0)
{
short recsize = LittleEndian.readShort(in);
byte[] data = new byte[ ( int ) recsize ];
in.read(data);
Record[] recs = createRecord(rectype, recsize,
data); // handle MulRK records
RecordInputStream recStream = new RecordInputStream(in);
while (recStream.hasNextRecord()) {
recStream.nextRecord();
Record[] recs = createRecord(recStream); // handle MulRK records
if (recs.length > 1)
{
for (int k = 0; k < recs.length; k++)
@ -288,8 +278,6 @@ public class EventRecordFactory
break;
}
}
// records.add(
// recs[ k ]); // these will be number records
last_record =
recs[ k ]; // do to keep the algorythm homogenous...you can't
} // actually continue a number record anyhow.
@ -299,19 +287,6 @@ public class EventRecordFactory
Record record = recs[ 0 ];
if (record != null)
{
if (rectype == ContinueRecord.sid &&
! (last_record instanceof ContinueRecord) && // include continuation records after
! (last_record instanceof UnknownRecord) ) // unknown records or previous continuation records
{
if (last_record == null)
{
throw new RecordFormatException(
"First record is a ContinueRecord??");
}
last_record.processContinueRecord(data);
}
else
{
if (last_record != null) {
if (throwRecordEvent(last_record) == false && abortable == true) {
@ -321,35 +296,21 @@ public class EventRecordFactory
}
last_record = record;
}
}
}
//records.add(record);
}
}
}
}
}
while (rectype != 0);
if (last_record != null) {
throwRecordEvent(last_record);
}
}
catch (IOException e)
{
throw new RecordFormatException("Error reading bytes");
}
// Record[] retval = new Record[ records.size() ];
// retval = ( Record [] ) records.toArray(retval);
}
/**
* create a record, if there are MUL records than multiple records
* are returned digested into the non-mul form.
*/
public static Record [] createRecord(short rectype, short size,
byte [] data)
public static Record [] createRecord(RecordInputStream in)
{
Record retval = null;
Record[] realretval = null;
@ -357,18 +318,18 @@ public class EventRecordFactory
try
{
Constructor constructor =
( Constructor ) recordsMap.get(new Short(rectype));
( Constructor ) recordsMap.get(new Short(in.getSid()));
if (constructor != null)
{
retval = ( Record ) constructor.newInstance(new Object[]
{
new Short(rectype), new Short(size), data
in
});
}
else
{
retval = new UnknownRecord(rectype, size, data);
retval = new UnknownRecord(in);
}
}
catch (Exception introspectionException)
@ -470,7 +431,7 @@ public class EventRecordFactory
sid = record.getField("sid").getShort(null);
constructor = record.getConstructor(new Class[]
{
short.class, short.class, byte [].class
RecordInputStream.class
});
}
catch (Exception illegalArgumentException)

View File

@ -24,6 +24,7 @@ import org.apache.poi.util.LittleEndian;
import org.apache.poi.hssf.eventusermodel.HSSFUserException;
import org.apache.poi.hssf.record.RecordFormatException;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.hssf.record.RecordFactory;
import org.apache.poi.hssf.record.ContinueRecord;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
@ -98,7 +99,7 @@ public class HSSFEventFactory
{
try
{
genericProcessEvents(req, in);
genericProcessEvents(req, new RecordInputStream(in));
}
catch (HSSFUserException hue)
{/*If an HSSFUserException user exception is thrown, ignore it.*/ }
@ -117,7 +118,7 @@ public class HSSFEventFactory
public short abortableProcessEvents(HSSFRequest req, InputStream in)
throws IOException, HSSFUserException
{
return genericProcessEvents(req, in);
return genericProcessEvents(req, new RecordInputStream(in));
}
/**
@ -129,23 +130,22 @@ public class HSSFEventFactory
* @return numeric user-specified result code.
*/
protected short genericProcessEvents(HSSFRequest req, InputStream in)
protected short genericProcessEvents(HSSFRequest req, RecordInputStream in)
throws IOException, HSSFUserException
{
short userCode = 0;
short sid = 0;
process:
try
{
byte[] sidbytes = new byte[ 2 ];
int bytesread = in.read(sidbytes);
Record rec = null;
while (bytesread > 0)
while (in.hasNextRecord())
{
in.nextRecord();
sid = LittleEndian.getShort(sidbytes);
sid = in.getSid();;
//
// for some reasons we have to make the workbook to be at least 4096 bytes
@ -171,16 +171,8 @@ public class HSSFEventFactory
}
if (sid != ContinueRecord.sid)
{
short size = LittleEndian.readShort(in);
byte[] data = new byte[ size ];
if (data.length > 0)
{
in.read(data);
}
//System.out.println("creating "+sid);
Record[] recs = RecordFactory.createRecord(sid, size,
data);
Record[] recs = RecordFactory.createRecord(in);
if (recs.length > 1)
{ // we know that the multiple
@ -199,17 +191,9 @@ public class HSSFEventFactory
// records, it will go here too.
}
else
{ // we do have a continue record
short size = LittleEndian.readShort(in);
byte[] data = new byte[ size ];
if (data.length > 0)
{
in.read(data);
throw new RecordFormatException("Records should handle ContinueRecord internally. Should not see this exception");
}
rec.processContinueRecord(data);
}
bytesread = in.read(sidbytes); // read next record sid
}
if (rec != null)
{
@ -217,11 +201,7 @@ public class HSSFEventFactory
if (userCode != 0) break process;
}
}
catch (IOException e)
{
throw new RecordFormatException("Error reading bytes" +
"while processing record sid="+sid);
}
return userCode;
// Record[] retval = new Record[ records.size() ];

View File

@ -609,7 +609,7 @@ public class Sheet implements Model
records.remove(k);
LabelSSTRecord newrec = new LabelSSTRecord();
int stringid =
wb.addSSTString(oldrec.getValue());
wb.addSSTString(new UnicodeString(oldrec.getValue()));
newrec.setRow(oldrec.getRow());
newrec.setColumn(oldrec.getColumn());

View File

@ -623,25 +623,6 @@ public class Workbook implements Model
return xf;
}
/**
* Adds a string to the SST table and returns its index (if its a duplicate
* just returns its index and update the counts)
*
* @param string the string to be added to the SSTRecord
* @param use16bits whether to use utf 16 or false for compressed unicode
* @return index of the string within the SSTRecord
*/
public int addSSTString(String string, boolean use16bits) {
if (log.check( POILogger.DEBUG ))
log.log(DEBUG, "insert to sst string='", string, "' and use16bits= ",
new Boolean(use16bits));
if (sst == null) {
insertSST();
}
return sst.addString(string, use16bits);
}
/**
* Adds a string to the SST table and returns its index (if its a duplicate
* just returns its index and update the counts) ASSUMES compressed unicode
@ -652,8 +633,13 @@ public class Workbook implements Model
* @return index of the string within the SSTRecord
*/
public int addSSTString(String string) {
return addSSTString(string, false);
public int addSSTString(UnicodeString string) {
if (log.check( POILogger.DEBUG ))
log.log(DEBUG, "insert to sst string='", string);
if (sst == null) {
insertSST();
}
return sst.addString(string);
}
/**
@ -661,11 +647,11 @@ public class Workbook implements Model
* @return String containing the SST String
*/
public String getSSTString(int str) {
public UnicodeString getSSTString(int str) {
if (sst == null) {
insertSST();
}
String retval = sst.getString(str);
UnicodeString retval = sst.getString(str);
if (log.check( POILogger.DEBUG ))
log.log(DEBUG, "Returning SST for index=", new Integer(str),
@ -1631,7 +1617,7 @@ public class Workbook implements Model
*/
protected PaletteRecord createPalette()
{
return new PaletteRecord(PaletteRecord.sid);
return new PaletteRecord();
}
/**

View File

@ -57,25 +57,9 @@ public abstract class AbstractEscherHolderRecord
* @param data data of the record (should not contain sid/len)
*/
public AbstractEscherHolderRecord(short id, short size, byte [] data)
public AbstractEscherHolderRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Bar record and sets its fields appropriately.
*
* @param id id must be 0x1017 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 AbstractEscherHolderRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -92,17 +76,17 @@ public abstract class AbstractEscherHolderRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
escherRecords = new ArrayList();
if (! DESERIALISE )
{
rawData = new byte[size];
System.arraycopy(data, offset, rawData, 0, size);
rawData = in.readRemainder();
}
else
{
convertToEscherRecords( offset, size, data );
byte[] data = in.readAllContinuedRemainder();
convertToEscherRecords( 0, data.length, data );
}
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -58,25 +57,9 @@ public class AreaFormatRecord
* @param data data of the record (should not contain sid/len)
*/
public AreaFormatRecord(short id, short size, byte [] data)
public AreaFormatRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a AreaFormat record and sets its fields appropriately.
*
* @param id id must be 0x100a 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 AreaFormatRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -93,16 +76,16 @@ public class AreaFormatRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_foregroundColor = LittleEndian.getInt(data, pos + 0x0 + offset);
field_2_backgroundColor = LittleEndian.getInt(data, pos + 0x4 + offset);
field_3_pattern = LittleEndian.getShort(data, pos + 0x8 + offset);
field_4_formatFlags = LittleEndian.getShort(data, pos + 0xa + offset);
field_5_forecolorIndex = LittleEndian.getShort(data, pos + 0xc + offset);
field_6_backcolorIndex = LittleEndian.getShort(data, pos + 0xe + offset);
field_1_foregroundColor = in.readInt();
field_2_backgroundColor = in.readInt();
field_3_pattern = in.readShort();
field_4_formatFlags = in.readShort();
field_5_forecolorIndex = in.readShort();
field_6_backcolorIndex = in.readShort();
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -54,25 +53,9 @@ public class AreaRecord
* @param data data of the record (should not contain sid/len)
*/
public AreaRecord(short id, short size, byte [] data)
public AreaRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Area record and sets its fields appropriately.
*
* @param id id must be 0x101A 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 AreaRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -89,11 +72,11 @@ public class AreaRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_formatFlags = LittleEndian.getShort(data, pos + 0x0 + offset);
field_1_formatFlags = in.readShort();
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -55,25 +54,9 @@ public class AxisLineFormatRecord
* @param data data of the record (should not contain sid/len)
*/
public AxisLineFormatRecord(short id, short size, byte [] data)
public AxisLineFormatRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a AxisLineFormat record and sets its fields appropriately.
*
* @param id id must be 0x1021 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 AxisLineFormatRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -90,11 +73,11 @@ public class AxisLineFormatRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_axisType = LittleEndian.getShort(data, pos + 0x0 + offset);
field_1_axisType = in.readShort();
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -67,25 +66,9 @@ public class AxisOptionsRecord
* @param data data of the record (should not contain sid/len)
*/
public AxisOptionsRecord(short id, short size, byte [] data)
public AxisOptionsRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a AxisOptions record and sets its fields appropriately.
*
* @param id id must be 0x1062 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 AxisOptionsRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -102,19 +85,19 @@ public class AxisOptionsRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_minimumCategory = LittleEndian.getShort(data, pos + 0x0 + offset);
field_2_maximumCategory = LittleEndian.getShort(data, pos + 0x2 + offset);
field_3_majorUnitValue = LittleEndian.getShort(data, pos + 0x4 + offset);
field_4_majorUnit = LittleEndian.getShort(data, pos + 0x6 + offset);
field_5_minorUnitValue = LittleEndian.getShort(data, pos + 0x8 + offset);
field_6_minorUnit = LittleEndian.getShort(data, pos + 0xa + offset);
field_7_baseUnit = LittleEndian.getShort(data, pos + 0xc + offset);
field_8_crossingPoint = LittleEndian.getShort(data, pos + 0xe + offset);
field_9_options = LittleEndian.getShort(data, pos + 0x10 + offset);
field_1_minimumCategory = in.readShort();
field_2_maximumCategory = in.readShort();
field_3_majorUnitValue = in.readShort();
field_4_majorUnit = in.readShort();
field_5_minorUnitValue = in.readShort();
field_6_minorUnit = in.readShort();
field_7_baseUnit = in.readShort();
field_8_crossingPoint = in.readShort();
field_9_options = in.readShort();
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -57,25 +56,9 @@ public class AxisParentRecord
* @param data data of the record (should not contain sid/len)
*/
public AxisParentRecord(short id, short size, byte [] data)
public AxisParentRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a AxisParent record and sets its fields appropriately.
*
* @param id id must be 0x1041 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 AxisParentRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -92,15 +75,15 @@ public class AxisParentRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_axisType = LittleEndian.getShort(data, pos + 0x0 + offset);
field_2_x = LittleEndian.getInt(data, pos + 0x2 + offset);
field_3_y = LittleEndian.getInt(data, pos + 0x6 + offset);
field_4_width = LittleEndian.getInt(data, pos + 0xa + offset);
field_5_height = LittleEndian.getInt(data, pos + 0xe + offset);
field_1_axisType = in.readShort();
field_2_x = in.readInt();
field_3_y = in.readInt();
field_4_width = in.readInt();
field_5_height = in.readInt();
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -58,25 +57,9 @@ public class AxisRecord
* @param data data of the record (should not contain sid/len)
*/
public AxisRecord(short id, short size, byte [] data)
public AxisRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Axis record and sets its fields appropriately.
*
* @param id id must be 0x101d 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 AxisRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -93,15 +76,15 @@ public class AxisRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_axisType = LittleEndian.getShort(data, pos + 0x0 + offset);
field_2_reserved1 = LittleEndian.getInt(data, pos + 0x2 + offset);
field_3_reserved2 = LittleEndian.getInt(data, pos + 0x6 + offset);
field_4_reserved3 = LittleEndian.getInt(data, pos + 0xa + offset);
field_5_reserved4 = LittleEndian.getInt(data, pos + 0xe + offset);
field_1_axisType = in.readShort();
field_2_reserved1 = in.readInt();
field_3_reserved2 = in.readInt();
field_4_reserved3 = in.readInt();
field_5_reserved4 = in.readInt();
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -51,25 +50,9 @@ public class AxisUsedRecord
* @param data data of the record (should not contain sid/len)
*/
public AxisUsedRecord(short id, short size, byte [] data)
public AxisUsedRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a AxisUsed record and sets its fields appropriately.
*
* @param id id must be 0x1046 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 AxisUsedRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -86,11 +69,11 @@ public class AxisUsedRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_numAxis = LittleEndian.getShort(data, pos + 0x0 + offset);
field_1_numAxis = in.readShort();
}

View File

@ -93,25 +93,9 @@ public class BOFRecord
* @param data data of the record (should not contain sid/len)
*/
public BOFRecord(short id, short size, byte [] data)
public BOFRecord(RecordInputStream in)
{
super(id, size, data);
// fillFields(data,size);
}
/**
* Constructs a BOFRecord and sets its fields appropriately
*
* @param id id must be 0x809 or an exception will be throw upon validation
* @param size the size of the data area of the record
* @param data data of the record (should not contain sid/len)
* @param offset the offset of the record's data
*/
public BOFRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
// fillFields(data,size);
}
@ -124,14 +108,14 @@ public class BOFRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_version = LittleEndian.getShort(data, 0 + offset);
field_2_type = LittleEndian.getShort(data, 2 + offset);
field_3_build = LittleEndian.getShort(data, 4 + offset);
field_4_year = LittleEndian.getShort(data, 6 + offset);
field_5_history = LittleEndian.getInt(data, 8 + offset);
field_6_rversion = LittleEndian.getInt(data, 12 + offset);
field_1_version = in.readShort();
field_2_type = in.readShort();
field_3_build = in.readShort();
field_4_year = in.readShort();
field_5_history = in.readInt();
field_6_rversion = in.readInt();
}
/**

View File

@ -47,23 +47,9 @@ public class BackupRecord
* @param data data of the record (should not contain sid/len)
*/
public BackupRecord(short id, short size, byte [] data)
public BackupRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a BackupRecord and sets its fields appropriately
*
* @param id id must be 0x40 or an exception will be throw upon validation
* @param 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 start of the record's data
*/
public BackupRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -74,9 +60,9 @@ public class BackupRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_backup = LittleEndian.getShort(data, 0 + offset);
field_1_backup = in.readShort();
}
/**

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -57,25 +56,9 @@ public class BarRecord
* @param data data of the record (should not contain sid/len)
*/
public BarRecord(short id, short size, byte [] data)
public BarRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Bar record and sets its fields appropriately.
*
* @param id id must be 0x1017 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 BarRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -92,13 +75,13 @@ public class BarRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_barSpace = LittleEndian.getShort(data, pos + 0x0 + offset);
field_2_categorySpace = LittleEndian.getShort(data, pos + 0x2 + offset);
field_3_formatFlags = LittleEndian.getShort(data, pos + 0x4 + offset);
field_1_barSpace = in.readShort();
field_2_categorySpace = in.readShort();
field_3_formatFlags = in.readShort();
}

View File

@ -46,23 +46,9 @@ public class BeginRecord
* @param data data of the record (should not contain sid/len)
*/
public BeginRecord(short id, short size, byte [] data)
public BeginRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a BeginRecord record and sets its fields appropriately.
*
* @param id id must be 0x1033 or an exception will be throw upon validation
* @param 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 BeginRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -73,7 +59,7 @@ public class BeginRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
}

View File

@ -58,31 +58,17 @@ public class BlankRecord
* @param data data of the record (should not contain sid/len)
*/
public BlankRecord(short id, short size, byte [] data)
public BlankRecord(RecordInputStream in)
{
super(id, size, data);
super(in);
}
/**
* Constructs a BlankRecord and sets its fields appropriately
*
* @param id id must be 0x201 or an exception will be throw upon validation
* @param 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 BlankRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
//field_1_row = LittleEndian.getShort(data, 0 + offset);
field_1_row = LittleEndian.getUShort(data, 0 + offset);
field_2_col = LittleEndian.getShort(data, 2 + offset);
field_3_xf = LittleEndian.getShort(data, 4 + offset);
field_1_row = in.readUShort();
field_2_col = in.readShort();
field_3_xf = in.readShort();
}
/**

View File

@ -47,23 +47,9 @@ public class BookBoolRecord
* @param data data of the record (should not contain sid/len)
*/
public BookBoolRecord(short id, short size, byte [] data)
public BookBoolRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a BookBoolRecord and sets its fields appropriately
*
* @param id id must be 0xDA or an exception will be throw upon validation
* @param 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 BookBoolRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -74,9 +60,9 @@ public class BookBoolRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_save_link_values = LittleEndian.getShort(data, 0 + offset);
field_1_save_link_values = in.readShort();
}
/**

View File

@ -59,23 +59,9 @@ public class BoolErrRecord
* @param data data of the record (should not contain sid/len)
*/
public BoolErrRecord(short id, short size, byte [] data)
public BoolErrRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a BoolErr record and sets its fields appropriately.
*
* @param id id must be 0x205 or an exception will be throw upon validation
* @param 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
*/
public BoolErrRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
/**
@ -86,14 +72,14 @@ public class BoolErrRecord
* @param size size of data
*/
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
//field_1_row = LittleEndian.getShort(data, 0 + offset);
field_1_row = LittleEndian.getUShort(data, 0 + offset);
field_2_column = LittleEndian.getShort(data, 2 + offset);
field_3_xf_index = LittleEndian.getShort(data, 4 + offset);
field_4_bBoolErr = data[ 6 + offset ];
field_5_fError = data[ 7 + offset ];
field_1_row = in.readUShort();
field_2_column = in.readShort();
field_3_xf_index = in.readShort();
field_4_bBoolErr = in.readByte();
field_5_fError = in.readByte();
}
//public void setRow(short row)

View File

@ -46,23 +46,9 @@ public class BottomMarginRecord
* @param size size the size of the data area of the record
* @param data data of the record (should not contain sid/len)
*/
public BottomMarginRecord( short id, short size, byte[] data )
public BottomMarginRecord( RecordInputStream in )
{
super( id, size, data );
}
/**
* Constructs a BottomMargin record and sets its fields appropriately.
*
* @param id id must be 0x29 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 BottomMarginRecord( short id, short size, byte[] data, int offset )
{
super( id, size, data, offset );
super( in );
}
/**
@ -78,9 +64,9 @@ public class BottomMarginRecord
}
}
protected void fillFields( byte[] data, short size, int offset )
protected void fillFields( RecordInputStream in )
{
field_1_margin = LittleEndian.getDouble( data, 0x0 + offset );
field_1_margin = in.readDouble();
}
public String toString()

View File

@ -54,23 +54,9 @@ public class BoundSheetRecord
* @param data data of the record (should not contain sid/len)
*/
public BoundSheetRecord( short id, short size, byte[] data )
public BoundSheetRecord( RecordInputStream in )
{
super( id, size, data );
}
/**
* Constructs a BoundSheetRecord and sets its fields appropriately
*
* @param id id must be 0x85 or an exception will be throw upon validation
* @param 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 BoundSheetRecord( short id, short size, byte[] data, int offset )
{
super( id, size, data, offset );
super( in );
}
protected void validateSid( short id )
@ -92,21 +78,21 @@ public class BoundSheetRecord
*
*/
protected void fillFields( byte[] data, short size, int offset )
protected void fillFields( RecordInputStream in )
{
field_1_position_of_BOF = LittleEndian.getInt( data, 0 + offset ); // bof
field_2_option_flags = LittleEndian.getShort( data, 4 + offset ); // flags
field_3_sheetname_length = data[6 + offset]; // len(str)
field_4_compressed_unicode_flag = data[7 + offset]; // unicode
field_1_position_of_BOF = in.readInt(); // bof
field_2_option_flags = in.readShort(); // flags
field_3_sheetname_length = in.readByte(); // len(str)
field_4_compressed_unicode_flag = in.readByte(); // unicode
int nameLength = LittleEndian.ubyteToInt( field_3_sheetname_length );
if ( ( field_4_compressed_unicode_flag & 0x01 ) == 1 )
{
field_5_sheetname = StringUtil.getFromUnicodeLE( data, 8 + offset, nameLength );
field_5_sheetname = in.readUnicodeLEString(nameLength);
}
else
{
field_5_sheetname = StringUtil.getFromCompressedUnicode( data, 8 + offset, nameLength );
field_5_sheetname = in.readCompressedUnicode(nameLength);
}
}
@ -158,7 +144,11 @@ public class BoundSheetRecord
/**
* Set the sheetname for this sheet. (this appears in the tabs at the bottom)
* @param sheetname the name of the sheet
<<<<<<< BoundSheetRecord.java
* @thows IllegalArgumentException if sheet name will cause excel to crash.
=======
* @throws IllegalArgumentException if sheet name will cause excel to crash.
>>>>>>> 1.14
*/
public void setSheetname( String sheetname )

View File

@ -53,23 +53,9 @@ public class CalcCountRecord
*
*/
public CalcCountRecord(short id, short size, byte [] data)
public CalcCountRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a CalcCountRecord and sets its fields appropriately
*
* @param id id must be 0xC or an exception will be throw upon validation
* @param 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 CalcCountRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -80,9 +66,9 @@ public class CalcCountRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_iterations = LittleEndian.getShort(data, 0 + offset);
field_1_iterations = in.readShort();
}
/**

View File

@ -68,23 +68,9 @@ public class CalcModeRecord
* @param data data of the record (should not contain sid/len)
*/
public CalcModeRecord(short id, short size, byte [] data)
public CalcModeRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a CalcModeRecord and sets its fields appropriately
*
* @param id id must be 0xD or an exception will be throw upon validation
* @param 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 start data
*/
public CalcModeRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -95,9 +81,9 @@ public class CalcModeRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_calcmode = LittleEndian.getShort(data, 0 + offset);
field_1_calcmode = in.readShort();
}
/**

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -57,25 +56,9 @@ public class CategorySeriesAxisRecord
* @param data data of the record (should not contain sid/len)
*/
public CategorySeriesAxisRecord(short id, short size, byte [] data)
public CategorySeriesAxisRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a CategorySeriesAxis record and sets its fields appropriately.
*
* @param id id must be 0x1020 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 CategorySeriesAxisRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -92,14 +75,14 @@ public class CategorySeriesAxisRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_crossingPoint = LittleEndian.getShort(data, pos + 0x0 + offset);
field_2_labelFrequency = LittleEndian.getShort(data, pos + 0x2 + offset);
field_3_tickMarkFrequency = LittleEndian.getShort(data, pos + 0x4 + offset);
field_4_options = LittleEndian.getShort(data, pos + 0x6 + offset);
field_1_crossingPoint = in.readShort();
field_2_labelFrequency = in.readShort();
field_3_tickMarkFrequency = in.readShort();
field_4_options = in.readShort();
}

View File

@ -54,23 +54,9 @@ public class ChartFormatRecord
* @param data data of the record (should not contain sid/len)
*/
public ChartFormatRecord(short id, short size, byte [] data)
public ChartFormatRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a ChartFormatRecord record and sets its fields appropriately.
*
* @param id id must equal the sid or an exception will be throw upon validation
* @param 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 ChartFormatRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -81,13 +67,13 @@ public class ChartFormatRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field1_x_position = LittleEndian.getInt(data, 0 + offset);
field2_y_position = LittleEndian.getInt(data, 4 + offset);
field3_width = LittleEndian.getInt(data, 8 + offset);
field4_height = LittleEndian.getInt(data, 12 + offset);
field5_grbit = LittleEndian.getShort(data, 16 + offset);
field1_x_position = in.readInt();
field2_y_position = in.readInt();
field3_width = in.readInt();
field4_height = in.readInt();
field5_grbit = in.readShort();
}
public String toString()

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -54,25 +53,9 @@ public class ChartRecord
* @param data data of the record (should not contain sid/len)
*/
public ChartRecord(short id, short size, byte [] data)
public ChartRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Chart record and sets its fields appropriately.
*
* @param id id must be 0x1002 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 ChartRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -89,14 +72,14 @@ public class ChartRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_x = LittleEndian.getInt(data, pos + 0x0 + offset);
field_2_y = LittleEndian.getInt(data, pos + 0x4 + offset);
field_3_width = LittleEndian.getInt(data, pos + 0x8 + offset);
field_4_height = LittleEndian.getInt(data, pos + 0xc + offset);
field_1_x = in.readInt();
field_2_y = in.readInt();
field_3_width = in.readInt();
field_4_height = in.readInt();
}

View File

@ -54,23 +54,9 @@ public class CodepageRecord
* @param data data of the record (should not contain sid/len)
*/
public CodepageRecord(short id, short size, byte [] data)
public CodepageRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a CodepageRecord and sets its fields appropriately
*
* @param id id must be 0x42 or an exception will be throw upon validation
* @param size the size of the data area of the record
* @param data data of the record (should not contain sid/len)
* @param offset offset of the record
*/
public CodepageRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -81,9 +67,9 @@ public class CodepageRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_codepage = LittleEndian.getShort(data, 0 + offset);
field_1_codepage = in.readShort();
}
/**

View File

@ -60,33 +60,19 @@ public class ColumnInfoRecord
* @param data data of the record (should not contain sid/len)
*/
public ColumnInfoRecord(short id, short size, byte [] data)
public ColumnInfoRecord(RecordInputStream in)
{
super(id, size, data);
super(in);
}
/**
* Constructs a ColumnInfo record and sets its fields appropriately
*
* @param id id must be 0x7d or an exception will be throw upon validation
* @param 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 ColumnInfoRecord(short id, short size, byte [] data, int offset)
protected void fillFields(RecordInputStream in)
{
super(id, size, data);
}
protected void fillFields(byte [] data, short size, int offset)
{
field_1_first_col = LittleEndian.getShort(data, 0 + offset);
field_2_last_col = LittleEndian.getShort(data, 2 + offset);
field_3_col_width = LittleEndian.getShort(data, 4 + offset);
field_4_xf_index = LittleEndian.getShort(data, 6 + offset);
field_5_options = LittleEndian.getShort(data, 8 + offset);
field_6_reserved = data[ 10 + offset ];
field_1_first_col = in.readShort();
field_2_last_col = in.readShort();
field_3_col_width = in.readShort();
field_4_xf_index = in.readShort();
field_5_options = in.readShort();
field_6_reserved = in.readShort();
}
protected void validateSid(short id)

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -91,26 +90,9 @@ public class CommonObjectDataSubRecord
* @param data data of the record (should not contain sid/len)
*/
public CommonObjectDataSubRecord(short id, short size, byte [] data)
public CommonObjectDataSubRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a CommonObjectData record and sets its fields appropriately.
*
* @param id id must be 0x15 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 CommonObjectDataSubRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
/**
@ -126,16 +108,16 @@ public class CommonObjectDataSubRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_objectType = LittleEndian.getShort(data, pos + 0x0 + offset);
field_2_objectId = LittleEndian.getShort(data, pos + 0x2 + offset);
field_3_option = LittleEndian.getShort(data, pos + 0x4 + offset);
field_4_reserved1 = LittleEndian.getInt(data, pos + 0x6 + offset);
field_5_reserved2 = LittleEndian.getInt(data, pos + 0xa + offset);
field_6_reserved3 = LittleEndian.getInt(data, pos + 0xe + offset);
field_1_objectType = in.readShort();
field_2_objectId = in.readShort();
field_3_option = in.readShort();
field_4_reserved1 = in.readInt();
field_5_reserved2 = in.readInt();
field_6_reserved3 = in.readInt();
}

View File

@ -54,23 +54,9 @@ public class ContinueRecord
* @param data raw data
*/
public ContinueRecord(short id, short size, byte [] data)
public ContinueRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Main constructor -- kinda dummy because we don't validate or fill fields
*
* @param id record id
* @param size record size
* @param data raw data
* @param offset of the record's data
*/
public ContinueRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
/**
@ -115,74 +101,6 @@ public class ContinueRecord
return field_1_data;
}
/**
* Use to serialize records that are too big for their britches (>8228..why 8228 and
* not 8192 aka 8k? Those folks in washington don't ususally make sense...
* or at least to anyone outside fo marketing...
* @deprecated handle this within the record...this didn't actualyl work out
*/
public static byte [] processContinue(byte [] data)
{ // could do this recursively but that seems hard to debug
// how many continue records do we need
// System.out.println("In ProcessContinue");
int records = (data.length / 8214); // we've a 1 offset but we're also off by one due to rounding...so it balances out
int offset = 8214;
// System.out.println("we have "+records+" continue records to process");
ArrayList crs = new ArrayList(records);
int totalsize = 8214;
byte[] retval = null;
for (int cr = 0; cr < records; cr++)
{
ContinueRecord contrec = new ContinueRecord();
int arraysize = Math.min((8214 - 4), (data.length - offset));
byte[] crdata = new byte[ arraysize ];
System.arraycopy(data, offset, crdata, 0, arraysize);
// System.out.println("arraycopy(data,"+offset+",crdata,"+0+","+arraysize+");");
offset += crdata.length;
contrec.setData(crdata);
crs.add(contrec.serialize());
}
for (int cr = 0; cr < records; cr++)
{
totalsize += (( byte [] ) crs.get(cr)).length;
}
// System.out.println("totalsize="+totalsize);
retval = new byte[ totalsize ];
offset = 8214;
System.arraycopy(data, 0, retval, 0, 8214);
for (int cr = 0; cr < records; cr++)
{
byte[] src = ( byte [] ) crs.get(cr);
System.arraycopy(src, 0, retval, offset, src.length);
// System.out.println("arraycopy(src,"+0+",retval,"+offset+","+src.length+");");
offset += src.length;
}
return retval;
}
/**
* Fill the fields. Only thing is, this record has no fields --
*
* @param ignored_parm1 Ignored
* @param ignored_parm2 Ignored
*/
protected void fillFields(byte [] ignored_parm1, short ignored_parm2)
{
this.field_1_data = ignored_parm1;
// throw new RecordFormatException("Are you crazy? Don't fill a continue record");
// do nothing
}
/**
* Make sure we have a good id
*
@ -227,8 +145,9 @@ public class ContinueRecord
* @param ignored_parm3 Ignored
*/
protected void fillFields(byte [] ignored_parm1, short ignored_parm2, int ignored_parm3)
protected void fillFields(RecordInputStream in)
{
field_1_data = in.readRemainder();
}
/**

View File

@ -51,23 +51,9 @@ public class CountryRecord
* @param data data of the record (should not contain sid/len)
*/
public CountryRecord(short id, short size, byte [] data)
public CountryRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a CountryRecord and sets its fields appropriately
*
* @param id id must be 0x8c or an exception will be throw upon validation
* @param 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 CountryRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -78,10 +64,10 @@ public class CountryRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_default_country = LittleEndian.getShort(data, 0 + offset);
field_2_current_country = LittleEndian.getShort(data, 2 + offset);
field_1_default_country = in.readShort();
field_2_current_country = in.readShort();
}
/**

View File

@ -32,7 +32,7 @@ public interface CustomField
* @param offset of the record's data (provided a big array of the file)
* @return the number of bytes read.
*/
int fillField(byte [] data, short size, int offset);
int fillField(RecordInputStream in);
/**
* Appends the string representation of this field to the supplied

View File

@ -49,23 +49,9 @@ public class DBCellRecord
* @param data data of the record (should not contain sid/len)
*/
public DBCellRecord(short id, short size, byte [] data)
public DBCellRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a DBCellRecord and sets its fields appropriately
*
* @param id id must be 0xd7 or an exception will be throw upon validation
* @param 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 DBCellRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -76,16 +62,15 @@ public class DBCellRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_row_offset = LittleEndian.getUShort(data, 0 + offset);
field_2_cell_offsets = new short[ (size - 4) / 2 ];
int element = 0;
field_1_row_offset = in.readUShort();
int size = in.remaining();
field_2_cell_offsets = new short[ size / 2 ];
for (int k = 4; k < data.length; k += 2)
for (int i=0;i<field_2_cell_offsets.length;i++)
{
field_2_cell_offsets[ element++ ] = LittleEndian.getShort(data,
k + offset);
field_2_cell_offsets[ i ] = in.readShort();
}
}

View File

@ -47,23 +47,9 @@ public class DSFRecord
* @param data data of the record (should not contain sid/len)
*/
public DSFRecord(short id, short size, byte [] data)
public DSFRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a DBCellRecord and sets its fields appropriately.
*
* @param id id must be 0x161 or an exception will be throw upon validation
* @param 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 DSFRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -74,9 +60,9 @@ public class DSFRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_dsf = LittleEndian.getShort(data, 0 + offset);
field_1_dsf = in.readShort();
}
/**

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -55,25 +54,9 @@ public class DatRecord
* @param data data of the record (should not contain sid/len)
*/
public DatRecord(short id, short size, byte [] data)
public DatRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Dat record and sets its fields appropriately.
*
* @param id id must be 0x1063 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 DatRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -90,11 +73,11 @@ public class DatRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_options = LittleEndian.getShort(data, pos + 0x0 + offset);
field_1_options = in.readShort();
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -55,25 +54,9 @@ public class DataFormatRecord
* @param data data of the record (should not contain sid/len)
*/
public DataFormatRecord(short id, short size, byte [] data)
public DataFormatRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a DataFormat record and sets its fields appropriately.
*
* @param id id must be 0x1006 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 DataFormatRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -90,14 +73,14 @@ public class DataFormatRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_pointNumber = LittleEndian.getShort(data, pos + 0x0 + offset);
field_2_seriesIndex = LittleEndian.getShort(data, pos + 0x2 + offset);
field_3_seriesNumber = LittleEndian.getShort(data, pos + 0x4 + offset);
field_4_formatFlags = LittleEndian.getShort(data, pos + 0x6 + offset);
field_1_pointNumber = in.readShort();
field_2_seriesIndex = in.readShort();
field_3_seriesNumber = in.readShort();
field_4_formatFlags = in.readShort();
}

View File

@ -47,24 +47,9 @@ public class DateWindow1904Record
* @param data data of the record (should not contain sid/len)
*/
public DateWindow1904Record(short id, short size, byte [] data)
public DateWindow1904Record(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a DateWindow1904 record and sets its fields appropriately.
*
* @param id id must be 0x22 or an exception will be throw upon validation
* @param 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 DateWindow1904Record(short id, short size, byte [] data,
int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -75,9 +60,9 @@ public class DateWindow1904Record
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_window = LittleEndian.getShort(data, 0 + offset);
field_1_window = in.readShort();
}
/**

View File

@ -48,24 +48,9 @@ public class DefaultColWidthRecord
* @param data data of the record (should not contain sid/len)
*/
public DefaultColWidthRecord(short id, short size, byte [] data)
public DefaultColWidthRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a DefaultColumnWidth record and sets its fields appropriately.
*
* @param id id must be 0x55 or an exception will be throw upon validation
* @param 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 DefaultColWidthRecord(short id, short size, byte [] data,
int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -76,9 +61,9 @@ public class DefaultColWidthRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_col_width = LittleEndian.getShort(data, 0 + offset);
field_1_col_width = in.readShort();
}
/**

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -54,25 +53,9 @@ public class DefaultDataLabelTextPropertiesRecord
* @param data data of the record (should not contain sid/len)
*/
public DefaultDataLabelTextPropertiesRecord(short id, short size, byte [] data)
public DefaultDataLabelTextPropertiesRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a DefaultDataLabelTextProperties record and sets its fields appropriately.
*
* @param id id must be 0x1024 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 DefaultDataLabelTextPropertiesRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -89,11 +72,11 @@ public class DefaultDataLabelTextPropertiesRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_categoryDataType = LittleEndian.getShort(data, pos + 0x0 + offset);
field_1_categoryDataType = in.readShort();
}

View File

@ -49,24 +49,9 @@ public class DefaultRowHeightRecord
* @param data data of the record (should not contain sid/len)
*/
public DefaultRowHeightRecord(short id, short size, byte [] data)
public DefaultRowHeightRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a DefaultRowHeight record and sets its fields appropriately.
*
* @param id id must be 0x225 or an exception will be throw upon validation
* @param 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 records data
*/
public DefaultRowHeightRecord(short id, short size, byte [] data,
int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -77,10 +62,10 @@ public class DefaultRowHeightRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_option_flags = LittleEndian.getShort(data, 0 + offset);
field_2_row_height = LittleEndian.getShort(data, 2 + offset);
field_1_option_flags = in.readShort();
field_2_row_height = in.readShort();
}
/**

View File

@ -51,23 +51,9 @@ public class DeltaRecord
* @param data data of the record (should not contain sid/len)
*/
public DeltaRecord(short id, short size, byte [] data)
public DeltaRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Delta record and sets its fields appropriately.
*
* @param id id must be 0x10 or an exception will be throw upon validation
* @param size the size of the data area of the record
* @param data data of the record (should not contain sid/len)
* @param offset of record data
*/
public DeltaRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -78,9 +64,9 @@ public class DeltaRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_max_change = LittleEndian.getDouble(data, 0 + offset);
field_1_max_change = in.readDouble();
}
/**

View File

@ -52,23 +52,9 @@ public class DimensionsRecord
* @param data data of the record (should not contain sid/len)
*/
public DimensionsRecord(short id, short size, byte [] data)
public DimensionsRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Dimensions record and sets its fields appropriately.
*
* @param id id must be 0x200 or an exception will be throw upon validation
* @param 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 DimensionsRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -79,13 +65,13 @@ public class DimensionsRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_first_row = LittleEndian.getInt(data, 0 + offset);
field_2_last_row = LittleEndian.getInt(data, 4 + offset);
field_3_first_col = LittleEndian.getShort(data, 8 + offset);
field_4_last_col = LittleEndian.getShort(data, 10 + offset);
field_5_zero = LittleEndian.getShort(data, 12 + offset);
field_1_first_row = in.readInt();
field_2_last_row = in.readInt();
field_3_first_col = in.readShort();
field_4_last_col = in.readShort();
field_5_zero = in.readShort();
}
/**

View File

@ -36,14 +36,9 @@ public class DrawingGroupRecord extends AbstractEscherHolderRecord
{
}
public DrawingGroupRecord( short id, short size, byte[] data )
public DrawingGroupRecord( RecordInputStream in )
{
super( id, size, data );
}
public DrawingGroupRecord( short id, short size, byte[] data, int offset )
{
super( id, size, data, offset );
super( in );
}
protected String getRecordName()

View File

@ -27,14 +27,9 @@ public class DrawingRecord extends Record
{
}
public DrawingRecord( short id, short size, byte[] data )
public DrawingRecord( RecordInputStream in )
{
super( id, size, data );
}
public DrawingRecord( short id, short size, byte[] data, int offset )
{
super( id, size, data, offset );
super( in );
}
/**
@ -50,22 +45,9 @@ public class DrawingRecord extends Record
}
}
protected void fillFields( byte[] data, short size, int offset )
protected void fillFields( RecordInputStream in )
{
if (offset == 0 && size == data.length)
{
recordData = data;
}
else
{
recordData = new byte[size];
System.arraycopy(data, offset, recordData, 0, size);
}
}
protected void fillFields( byte[] data, short size )
{
recordData = data;
recordData = in.readRemainder();
}
public void processContinueRecord( byte[] record )

View File

@ -29,14 +29,9 @@ public class DrawingRecordForBiffViewer
{
}
public DrawingRecordForBiffViewer( short id, short size, byte[] data )
public DrawingRecordForBiffViewer( RecordInputStream in)
{
super( id, size, data );
}
public DrawingRecordForBiffViewer( short id, short size, byte[] data, int offset )
{
super( id, size, data, offset );
super(in);
}
protected String getRecordName()

View File

@ -24,14 +24,9 @@ public class DrawingSelectionRecord extends AbstractEscherHolderRecord
{
}
public DrawingSelectionRecord( short id, short size, byte[] data )
public DrawingSelectionRecord( RecordInputStream in )
{
super( id, size, data );
}
public DrawingSelectionRecord( short id, short size, byte[] data, int offset )
{
super( id, size, data, offset );
super( in );
}
protected String getRecordName()

View File

@ -48,23 +48,9 @@ public class EOFRecord
* @param data data of the record (should not contain sid/len)
*/
public EOFRecord(short id, short size, byte [] data)
public EOFRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a EOFRecord record and sets its fields appropriately.
*
* @param id id must be 0x0A or an exception will be throw upon validation
* @param 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 EOFRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -75,7 +61,7 @@ public class EOFRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
}

View File

@ -46,24 +46,11 @@ public class EndRecord
* @param data data of the record (should not contain sid/len)
*/
public EndRecord(short id, short size, byte [] data)
public EndRecord(RecordInputStream in)
{
super(id, size, data);
super(in);
}
/**
* Constructs a EndRecord record and sets its fields appropriately.
*
* @param id id must be 0x1034 or an exception will be throw upon validation
* @param 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 EndRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
}
protected void validateSid(short id)
{
@ -73,7 +60,7 @@ public class EndRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -50,25 +49,9 @@ public class EndSubRecord
* @param data data of the record (should not contain sid/len)
*/
public EndSubRecord(short id, short size, byte [] data)
public EndSubRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a End record and sets its fields appropriately.
*
* @param id id must be 0x00 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 EndSubRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -85,7 +68,7 @@ public class EndSubRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;

View File

@ -49,14 +49,9 @@ public class ExtSSTInfoSubRecord
{
}
public ExtSSTInfoSubRecord(short id, short size, byte [] data)
public ExtSSTInfoSubRecord(RecordInputStream in)
{
super(id, size, data);
}
public ExtSSTInfoSubRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -65,11 +60,11 @@ public class ExtSSTInfoSubRecord
// do nothing
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_stream_pos = LittleEndian.getInt(data, 0 + offset);
field_2_bucket_sst_offset = LittleEndian.getShort(data, 4 + offset);
field_3_zero = LittleEndian.getShort(data, 6 + offset);
field_1_stream_pos = in.readInt();
field_2_bucket_sst_offset = in.readShort();
field_3_zero = in.readShort();
}
public void setStreamPos(int pos)

View File

@ -60,23 +60,9 @@ public class ExtSSTRecord
* @param data data of the record (should not contain sid/len)
*/
public ExtSSTRecord(short id, short size, byte [] data)
public ExtSSTRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a EOFRecord record and sets its fields appropriately.
*
* @param id id must be 0xff or an exception will be throw upon validation
* @param 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 ExtSSTRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -87,17 +73,12 @@ public class ExtSSTRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_2_sst_info = new ArrayList();
field_1_strings_per_bucket = LittleEndian.getShort(data, 0 + offset);
for (int k = 2; k < (size-offset); k += 8)
{
byte[] tempdata = new byte[ 8 + offset ];
System.arraycopy(data, k, tempdata, 0, 8);
ExtSSTInfoSubRecord rec = new ExtSSTInfoSubRecord(( short ) 0,
( short ) 8, tempdata);
field_1_strings_per_bucket = in.readShort();
while (in.remaining() > 0) {
ExtSSTInfoSubRecord rec = new ExtSSTInfoSubRecord(in);
field_2_sst_info.add(rec);
}

View File

@ -201,23 +201,9 @@ public class ExtendedFormatRecord
* @param data data of the record (should not contain sid/len)
*/
public ExtendedFormatRecord(short id, short size, byte [] data)
public ExtendedFormatRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs an ExtendedFormat record and sets its fields appropriately.
*
* @param id id must be 0xE0 or an exception will be throw upon validation
* @param 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 ExtendedFormatRecord(short id, short size, byte [] data,
int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -228,25 +214,17 @@ public class ExtendedFormatRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_font_index = LittleEndian.getShort(data,
0 + offset);
field_2_format_index = LittleEndian.getShort(data,
2 + offset);
field_3_cell_options = LittleEndian.getShort(data,
4 + offset);
field_4_alignment_options = LittleEndian.getShort(data,
6 + offset);
field_5_indention_options = LittleEndian.getShort(data,
8 + offset);
field_6_border_options = LittleEndian.getShort(data,
10 + offset);
field_7_palette_options = LittleEndian.getShort(data,
12 + offset);
field_8_adtl_palette_options = LittleEndian.getInt(data, 14 + offset);
field_9_fill_palette_options = LittleEndian.getShort(data,
18 + offset);
field_1_font_index = in.readShort();
field_2_format_index = in.readShort();
field_3_cell_options = in.readShort();
field_4_alignment_options = in.readShort();
field_5_indention_options = in.readShort();
field_6_border_options = in.readShort();
field_7_palette_options = in.readShort();
field_8_adtl_palette_options = in.readInt();
field_9_fill_palette_options = in.readShort();
}
/**

View File

@ -47,20 +47,8 @@ public class ExternSheetRecord extends Record {
* @param data data of the record (should not contain sid/len)
*/
public ExternSheetRecord(short id, short size, byte[] data) {
super(id, size, data);
}
/**
* Constructs a Extern Sheet record and sets its fields appropriately.
*
* @param id id must be 0x16 or an exception will be throw upon validation
* @param 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 ExternSheetRecord(short id, short size, byte[] data, int offset) {
super(id, size, data, offset);
public ExternSheetRecord(RecordInputStream in) {
super(in);
}
/**
@ -83,16 +71,13 @@ public class ExternSheetRecord extends Record {
* @param size size of data
* @param offset of the record's data (provided a big array of the file)
*/
protected void fillFields(byte [] data, short size, int offset) {
protected void fillFields(RecordInputStream in) {
field_2_REF_structures = new ArrayList();
field_1_number_of_REF_sturcutres = LittleEndian.getShort(data, 0 + offset);
field_1_number_of_REF_sturcutres = in.readShort();
int pos = 2 + offset;
for (int i = 0 ; i < field_1_number_of_REF_sturcutres ; ++i) {
ExternSheetSubRecord rec = new ExternSheetSubRecord((short)0, (short)6 , data , pos);
pos += 6;
ExternSheetSubRecord rec = new ExternSheetSubRecord(in);
field_2_REF_structures.add( rec);
}

View File

@ -47,21 +47,10 @@ public class ExternSheetSubRecord extends Record {
* @param size the size of the data area of the record
* @param data data of the record (should not contain sid/len)
*/
public ExternSheetSubRecord(short id, short size, byte[] data) {
super(id, size, data);
public ExternSheetSubRecord(RecordInputStream in) {
super(in);
}
/**
* Constructs a Extern Sheet Sub Record record and sets its fields appropriately.
*
* @param id id must be 0x18 or an exception will be throw upon validation
* @param 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 ExternSheetSubRecord(short id, short size, byte[] data, int offset) {
super(id, size, data, offset);
}
/** Sets the Index to the sup book
* @param index sup book index
@ -123,10 +112,10 @@ public class ExternSheetSubRecord extends Record {
* @param size size of data
* @param offset of the record's data (provided a big array of the file)
*/
protected void fillFields(byte [] data, short size, int offset) {
field_1_index_to_supbook = LittleEndian.getShort(data, 0 + offset);
field_2_index_to_first_supbook_sheet = LittleEndian.getShort(data, 2 + offset);
field_3_index_to_last_supbook_sheet = LittleEndian.getShort(data, 4 + offset);
protected void fillFields(RecordInputStream in) {
field_1_index_to_supbook = in.readShort();
field_2_index_to_first_supbook_sheet = in.readShort();
field_3_index_to_last_supbook_sheet = in.readShort();
}

View File

@ -53,23 +53,9 @@ public class FnGroupCountRecord
* @param data data of the record (should not contain sid/len)
*/
public FnGroupCountRecord(short id, short size, byte [] data)
public FnGroupCountRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a FnGroupCount record and sets its fields appropriately.
*
* @param id id must be 0x9c or an exception will be throw upon validation
* @param 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 FnGroupCountRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -80,9 +66,9 @@ public class FnGroupCountRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_count = LittleEndian.getShort(data, 0 + offset);
field_1_count = in.readShort();
}
/**

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -55,25 +54,9 @@ public class FontBasisRecord
* @param data data of the record (should not contain sid/len)
*/
public FontBasisRecord(short id, short size, byte [] data)
public FontBasisRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a FontBasis record and sets its fields appropriately.
*
* @param id id must be 0x1060 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 FontBasisRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -90,15 +73,15 @@ public class FontBasisRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_xBasis = LittleEndian.getShort(data, pos + 0x0 + offset);
field_2_yBasis = LittleEndian.getShort(data, pos + 0x2 + offset);
field_3_heightBasis = LittleEndian.getShort(data, pos + 0x4 + offset);
field_4_scale = LittleEndian.getShort(data, pos + 0x6 + offset);
field_5_indexToFontTable = LittleEndian.getShort(data, pos + 0x8 + offset);
field_1_xBasis = in.readShort();
field_2_yBasis = in.readShort();
field_3_heightBasis = in.readShort();
field_4_scale = in.readShort();
field_5_indexToFontTable = in.readShort();
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -51,25 +50,9 @@ public class FontIndexRecord
* @param data data of the record (should not contain sid/len)
*/
public FontIndexRecord(short id, short size, byte [] data)
public FontIndexRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a FontIndex record and sets its fields appropriately.
*
* @param id id must be 0x1026 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 FontIndexRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -86,11 +69,11 @@ public class FontIndexRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_fontIndex = LittleEndian.getShort(data, pos + 0x0 + offset);
field_1_fontIndex = in.readShort();
}

View File

@ -83,24 +83,9 @@ public class FontRecord
* @param data data of the record (should not contain sid/len)
*/
public FontRecord(short id, short size, byte [] data)
public FontRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Font record and sets its fields appropriately.
*
* @param id id must be 0x31 (NOT 0x231 see MSKB #Q184647 for an "explanation of
* this bug in the documentation) or an exception will be throw upon validation
* @param 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 FontRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -111,29 +96,27 @@ public class FontRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_font_height = LittleEndian.getShort(data, 0 + offset);
field_2_attributes = LittleEndian.getShort(data, 2 + offset);
field_3_color_palette_index = LittleEndian.getShort(data, 4 + offset);
field_4_bold_weight = LittleEndian.getShort(data, 6 + offset);
field_5_super_sub_script = LittleEndian.getShort(data, 8 + offset);
field_6_underline = data[ 10 + offset ];
field_7_family = data[ 11 + offset ];
field_8_charset = data[ 12 + offset ];
field_9_zero = data[ 13 + offset ];
field_10_font_name_len = data[ 14 + offset ];
field_1_font_height = in.readShort();
field_2_attributes = in.readShort();
field_3_color_palette_index = in.readShort();
field_4_bold_weight = in.readShort();
field_5_super_sub_script = in.readShort();
field_6_underline = in.readByte();
field_7_family = in.readByte();
field_8_charset = in.readByte();
field_9_zero = in.readByte();
field_10_font_name_len = in.readByte();
if (field_10_font_name_len > 0)
{
if (data[ 15 ] == 0)
if (in.readByte() == 0)
{ // is compressed unicode
field_11_font_name = StringUtil.getFromCompressedUnicode(data, 16,
LittleEndian.ubyteToInt(field_10_font_name_len));
field_11_font_name = in.readCompressedUnicode(LittleEndian.ubyteToInt(field_10_font_name_len));
}
else
{ // is not compressed unicode
field_11_font_name = StringUtil.getFromUnicodeLE(data, 16,
field_10_font_name_len);
field_11_font_name = in.readUnicodeLEString(field_10_font_name_len);
}
}
}

View File

@ -36,8 +36,9 @@ public class FooterRecord
{
public final static short sid = 0x15;
private byte field_1_footer_len;
private byte field_2_unicode_flag;
private String field_3_footer;
private byte field_2_reserved;
private byte field_3_unicode_flag;
private String field_4_footer;
public FooterRecord()
{
@ -51,23 +52,9 @@ public class FooterRecord
* @param data data of the record (should not contain sid/len)
*/
public FooterRecord(short id, short size, byte [] data)
public FooterRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a FooterRecord record and sets its fields appropriately.
*
* @param id id must be 0x15 or an exception will be throw upon validation
* @param 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 FooterRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -78,21 +65,22 @@ public class FooterRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
if (size > 0)
if (in.remaining() > 0)
{
field_1_footer_len = data[ 0 + offset ];
field_2_unicode_flag = data[ 2 + offset ];
field_1_footer_len = in.readByte();
/** These two fields are a bit odd. They are not documented*/
field_2_reserved = in.readByte();
field_3_unicode_flag = in.readByte(); // unicode
if(isMultibyte())
{
field_3_footer = StringUtil.getFromUnicodeLE(
data,3 + offset,LittleEndian.ubyteToInt(field_1_footer_len));
field_4_footer = in.readUnicodeLEString(LittleEndian.ubyteToInt( field_1_footer_len));
}
else
{
field_3_footer = new String(data, 3 + offset, // [Shawn] Changed 1 to 3 for offset of string
LittleEndian.ubyteToInt( field_1_footer_len) );
field_4_footer = in.readCompressedUnicode(LittleEndian.ubyteToInt( field_1_footer_len));
}
}
}
@ -104,7 +92,7 @@ public class FooterRecord
* true:footer string has at least one multibyte character
*/
public boolean isMultibyte() {
return ((field_2_unicode_flag & 0xFF) == 1);
return ((field_3_unicode_flag & 0xFF) == 1);
}
@ -129,9 +117,9 @@ public class FooterRecord
public void setFooter(String footer)
{
field_3_footer = footer;
field_2_unicode_flag =
(byte) (StringUtil.hasMultibyte(field_3_footer) ? 1 : 0);
field_4_footer = footer;
field_3_unicode_flag =
(byte) (StringUtil.hasMultibyte(field_4_footer) ? 1 : 0);
}
/**
@ -155,7 +143,7 @@ public class FooterRecord
public String getFooter()
{
return field_3_footer;
return field_4_footer;
}
public String toString()
@ -187,7 +175,7 @@ public class FooterRecord
if (getFooterLength() > 0)
{
data[ 4 + offset ] = (byte)getFooterLength();
data[ 6 + offset ] = field_2_unicode_flag;
data[ 6 + offset ] = field_3_unicode_flag;
if(isMultibyte())
{
StringUtil.putUnicodeLE(getFooter(), data, 7 + offset);
@ -220,8 +208,9 @@ public class FooterRecord
public Object clone() {
FooterRecord rec = new FooterRecord();
rec.field_1_footer_len = field_1_footer_len;
rec.field_2_unicode_flag = field_2_unicode_flag;
rec.field_3_footer = field_3_footer;
rec.field_2_reserved = field_2_reserved;
rec.field_3_unicode_flag = field_3_unicode_flag;
rec.field_4_footer = field_4_footer;
return rec;
}
}

View File

@ -53,23 +53,9 @@ public class FormatRecord
* @param data data of the record (should not contain sid/len)
*/
public FormatRecord(short id, short size, byte [] data)
public FormatRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Format record and sets its fields appropriately.
*
* @param id id must be 0x41e or an exception will be throw upon validation
* @param 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 FormatRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -80,22 +66,19 @@ public class FormatRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_index_code = LittleEndian.getShort(data, 0 + offset);
// field_2_formatstring_len = data[ 2 + offset ];
field_3_unicode_len = LittleEndian.getShort( data, 2 + offset );
field_3_unicode_flag = ( data[ 4 + offset ] & (byte)0x01 ) != 0;
field_1_index_code = in.readShort();
field_3_unicode_len = in.readShort();
field_3_unicode_flag = ( in.readByte() & (byte)0x01 ) != 0;
if ( field_3_unicode_flag ) {
// unicode
field_4_formatstring = StringUtil.getFromUnicodeLE( data, 5 + offset, field_3_unicode_len );
field_4_formatstring = in.readUnicodeLEString( field_3_unicode_len );
}
else {
// not unicode
field_4_formatstring = StringUtil.getFromCompressedUnicode(data, 5 + offset, field_3_unicode_len );
field_4_formatstring = in.readCompressedUnicode( field_3_unicode_len );
}
}

View File

@ -80,68 +80,40 @@ public class FormulaRecord
* @param data data of the record (should not contain sid/len)
*/
public FormulaRecord(short id, short size, byte [] data)
public FormulaRecord(RecordInputStream in)
{
super(id, size, data);
super(in);
}
/**
* Constructs a Formula record and sets its fields appropriately.
*
* @param id id must be 0x06 (NOT 0x406 see MSKB #Q184647 for an "explanation of
* this bug in the documentation) or an exception will be throw upon validation
* @param 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 FormulaRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
try {
//field_1_row = LittleEndian.getShort(data, 0 + offset);
field_1_row = LittleEndian.getUShort(data, 0 + offset);
field_2_column = LittleEndian.getShort(data, 2 + offset);
field_3_xf = LittleEndian.getShort(data, 4 + offset);
field_4_value = LittleEndian.getDouble(data, 6 + offset);
field_5_options = LittleEndian.getShort(data, 14 + offset);
field_1_row = in.readUShort();
field_2_column = in.readShort();
field_3_xf = in.readShort();
field_4_value = in.readDouble();
field_5_options = in.readShort();
if (Double.isNaN(field_4_value)) {
value_data = new byte[8];
System.arraycopy(data, offset+6, value_data, 0, 8);
value_data = in.getNANData();
}
field_6_zero = LittleEndian.getInt(data, 16 + offset);
field_7_expression_len = LittleEndian.getShort(data, 20 + offset);
field_8_parsed_expr = getParsedExpressionTokens(data, size,
22 + offset);
field_6_zero = in.readInt();
field_7_expression_len = in.readShort();
field_8_parsed_expr = getParsedExpressionTokens(in, field_7_expression_len);
} catch (java.lang.UnsupportedOperationException uoe) {
field_8_parsed_expr = null;
all_data = new byte[size+4];
LittleEndian.putShort(all_data,0,sid);
LittleEndian.putShort(all_data,2,size);
System.arraycopy(data,offset,all_data,4,size);
System.err.println("[WARNING] Unknown Ptg "
+ uoe.getMessage()
+ " at cell ("+field_1_row+","+field_2_column+")");
throw new RecordFormatException(uoe.toString());
}
}
}
private Stack getParsedExpressionTokens(byte [] data, short size,
int offset)
private Stack getParsedExpressionTokens(RecordInputStream in, short size)
{
Stack stack = new Stack();
int pos = offset;
int pos = 0;
while (pos < size)
{
Ptg ptg = Ptg.createPtg(data, pos);
Ptg ptg = Ptg.createPtg(in);
pos += ptg.getSize();
stack.push(ptg);
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -56,25 +55,9 @@ public class FrameRecord
* @param data data of the record (should not contain sid/len)
*/
public FrameRecord(short id, short size, byte [] data)
public FrameRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Frame record and sets its fields appropriately.
*
* @param id id must be 0x1032 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 FrameRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -91,12 +74,12 @@ public class FrameRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_borderType = LittleEndian.getShort(data, pos + 0x0 + offset);
field_2_options = LittleEndian.getShort(data, pos + 0x2 + offset);
field_1_borderType = in.readShort();
field_2_options = in.readShort();
}

View File

@ -51,23 +51,9 @@ public class GridsetRecord
* @param data data of the record (should not contain sid/len)
*/
public GridsetRecord(short id, short size, byte [] data)
public GridsetRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a GridSet record and sets its fields appropriately.
*
* @param id id must be 0x82 or an exception will be throw upon validation
* @param 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 GridsetRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -78,9 +64,9 @@ public class GridsetRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_gridset_flag = LittleEndian.getShort(data, 0 + offset);
field_1_gridset_flag = in.readShort();
}
/**

View File

@ -49,25 +49,9 @@ public class GroupMarkerSubRecord
* @param data data of the record (should not contain sid/len)
*/
public GroupMarkerSubRecord(short id, short size, byte [] data)
public GroupMarkerSubRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a group marker record and sets its fields appropriately.
*
* @param id id must be 0x00 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 GroupMarkerSubRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -84,11 +68,10 @@ public class GroupMarkerSubRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
// int pos = 0;
reserved = new byte[size];
System.arraycopy(data, offset, reserved, 0, size);
reserved = in.readRemainder();
}
public String toString()

View File

@ -50,23 +50,9 @@ public class GutsRecord
* @param data data of the record (should not contain sid/len)
*/
public GutsRecord(short id, short size, byte [] data)
public GutsRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Guts record and sets its fields appropriately.
*
* @param id id must be 0x80 or an exception will be throw upon validation
* @param 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 GutsRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -77,12 +63,12 @@ public class GutsRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_left_row_gutter = LittleEndian.getShort(data, 0 + offset);
field_2_top_col_gutter = LittleEndian.getShort(data, 2 + offset);
field_3_row_level_max = LittleEndian.getShort(data, 4 + offset);
field_4_col_level_max = LittleEndian.getShort(data, 6 + offset);
field_1_left_row_gutter = in.readShort();
field_2_top_col_gutter = in.readShort();
field_3_row_level_max = in.readShort();
field_4_col_level_max = in.readShort();
}
/**

View File

@ -47,23 +47,9 @@ public class HCenterRecord
* @param data data of the record (should not contain sid/len)
*/
public HCenterRecord(short id, short size, byte [] data)
public HCenterRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs an HCenter record and sets its fields appropriately.
*
* @param id id must be 0x83 or an exception will be throw upon validation
* @param 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 HCenterRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -74,9 +60,9 @@ public class HCenterRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_hcenter = LittleEndian.getShort(data, 0 + offset);
field_1_hcenter = in.readShort();
}
/**

View File

@ -36,8 +36,9 @@ public class HeaderRecord
{
public final static short sid = 0x14;
private byte field_1_header_len;
private byte field_2_unicode_flag;
private String field_3_header;
private byte field_2_reserved;
private byte field_3_unicode_flag;
private String field_4_header;
public HeaderRecord()
{
@ -51,23 +52,9 @@ public class HeaderRecord
* @param data data of the record (should not contain sid/len)
*/
public HeaderRecord(short id, short size, byte [] data)
public HeaderRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs an Header record and sets its fields appropriately.
*
* @param id id must be 0x14 or an exception will be throw upon validation
* @param 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 HeaderRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -78,21 +65,22 @@ public class HeaderRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
if (size > 0)
if (in.remaining() > 0)
{
field_1_header_len = data[ 0 + offset ];
field_2_unicode_flag = data[ 2 + offset ];
field_1_header_len = in.readByte();
/** These two fields are a bit odd. They are not documented*/
field_2_reserved = in.readByte();
field_3_unicode_flag = in.readByte(); // unicode
if(isMultibyte())
{
field_3_header = StringUtil.getFromUnicodeLE(
data,3 + offset,LittleEndian.ubyteToInt(field_1_header_len));
field_4_header = in.readUnicodeLEString(LittleEndian.ubyteToInt( field_1_header_len));
}
else
{
field_3_header = new String(data, 3 + offset, // [Shawn] Changed 1 to 3 for offset of string
LittleEndian.ubyteToInt( field_1_header_len) );
field_4_header = in.readCompressedUnicode(LittleEndian.ubyteToInt( field_1_header_len));
}
}
}
@ -104,7 +92,7 @@ public class HeaderRecord
* true:footer string has at least one multibyte character
*/
public boolean isMultibyte() {
return ((field_2_unicode_flag & 0xFF) == 1);
return ((field_3_unicode_flag & 0xFF) == 1);
}
/**
@ -128,9 +116,9 @@ public class HeaderRecord
public void setHeader(String header)
{
field_3_header = header;
field_2_unicode_flag =
(byte) (StringUtil.hasMultibyte(field_3_header) ? 1 : 0);
field_4_header = header;
field_3_unicode_flag =
(byte) (StringUtil.hasMultibyte(field_4_header) ? 1 : 0);
}
/**
@ -154,7 +142,7 @@ public class HeaderRecord
public String getHeader()
{
return field_3_header;
return field_4_header;
}
public String toString()
@ -187,7 +175,7 @@ public class HeaderRecord
if (getHeaderLength() > 0)
{
data[ 4 + offset ] = (byte)getHeaderLength();
data[ 6 + offset ] = field_2_unicode_flag;
data[ 6 + offset ] = field_3_unicode_flag;
if(isMultibyte())
{
StringUtil.putUnicodeLE(getHeader(), data, 7 + offset);
@ -220,8 +208,9 @@ public class HeaderRecord
public Object clone() {
HeaderRecord rec = new HeaderRecord();
rec.field_1_header_len = field_1_header_len;
rec.field_2_unicode_flag = field_2_unicode_flag;
rec.field_3_header = field_3_header;
rec.field_2_reserved = field_2_reserved;
rec.field_3_unicode_flag = field_3_unicode_flag;
rec.field_4_header = field_4_header;
return rec;
}
}

View File

@ -49,23 +49,9 @@ public class HideObjRecord
* @param data data of the record (should not contain sid/len)
*/
public HideObjRecord(short id, short size, byte [] data)
public HideObjRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs an HideObj record and sets its fields appropriately.
*
* @param id id must be 0x8d or an exception will be throw upon validation
* @param 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 HideObjRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -76,9 +62,9 @@ public class HideObjRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_hide_obj = LittleEndian.getShort(data, 0 + offset);
field_1_hide_obj = in.readShort();
}
/**

View File

@ -47,18 +47,8 @@ public class HorizontalPageBreakRecord extends PageBreakRecord {
* @param size
* @param data
*/
public HorizontalPageBreakRecord(short id, short size, byte[] data) {
super(id, size, data);
}
/**
* @param id
* @param size
* @param data
* @param offset
*/
public HorizontalPageBreakRecord(short id, short size, byte[] data, int offset) {
super(id, size, data, offset);
public HorizontalPageBreakRecord(RecordInputStream in) {
super(in);
}
/* (non-Javadoc)

View File

@ -55,23 +55,9 @@ public class IndexRecord
* @param data data of the record (should not contain sid/len)
*/
public IndexRecord(short id, short size, byte [] data)
public IndexRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs an Index record and sets its fields appropriately.
*
* @param id id must be 0x208 or an exception will be throw upon validation
* @param size the size of the data area of the record
* @param data data of the record (should not contain sid/len)
* @param offset of record data
*/
public IndexRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -82,19 +68,19 @@ public class IndexRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_5_dbcells =
new IntList(DBCELL_CAPACITY); // initial capacity of 30
field_1_zero = LittleEndian.getInt(data, 0 + offset);
field_2_first_row = LittleEndian.getInt(data, 4 + offset);
field_3_last_row_add1 = LittleEndian.getInt(data, 8 + offset);
field_4_zero = LittleEndian.getInt(data, 12 + offset);
for (int k = 16; k < size; k = k + 4)
field_1_zero = in.readInt();
field_2_first_row = in.readInt();
field_3_last_row_add1 = in.readInt();
field_4_zero = in.readInt();
while(in.remaining() > 0)
{
// System.out.println("getting " + k);
field_5_dbcells.add(LittleEndian.getInt(data, k + offset));
field_5_dbcells.add(in.readInt());
}
}

View File

@ -46,23 +46,9 @@ public class InterfaceEndRecord
* @param data data of the record (should not contain sid/len)
*/
public InterfaceEndRecord(short id, short size, byte [] data)
public InterfaceEndRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs an InterfaceEnd record and sets its fields appropriately.
*
* @param id id must be 0xe2 or an exception will be throw upon validation
* @param 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 data
*/
public InterfaceEndRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -73,7 +59,7 @@ public class InterfaceEndRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
}

View File

@ -52,23 +52,9 @@ public class InterfaceHdrRecord
* @param data data of the record (should not contain sid/len)
*/
public InterfaceHdrRecord(short id, short size, byte [] data)
public InterfaceHdrRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs an Codepage record and sets its fields appropriately.
*
* @param id id must be 0xe1 or an exception will be throw upon validation
* @param 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 InterfaceHdrRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -79,9 +65,9 @@ public class InterfaceHdrRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_codepage = LittleEndian.getShort(data, 0 + offset);
field_1_codepage = in.readShort();
}
/**

View File

@ -50,23 +50,9 @@ public class IterationRecord
* @param data data of the record (should not contain sid/len)
*/
public IterationRecord(short id, short size, byte [] data)
public IterationRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs an Iteration record and sets its fields appropriately.
*
* @param id id must be 0x11 or an exception will be throw upon validation
* @param 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 IterationRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -77,9 +63,9 @@ public class IterationRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_iteration = LittleEndian.getShort(data, 0 + offset);
field_1_iteration = in.readShort();
}
/**

View File

@ -63,23 +63,9 @@ public class LabelRecord
* @param data data of the record (should not contain sid/len)
*/
public LabelRecord(short id, short size, byte [] data)
public LabelRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs an Label record and sets its fields appropriately.
*
* @param id id must be 0x204 or an exception will be throw upon validation
* @param 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
*/
public LabelRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
/**
@ -105,22 +91,19 @@ public class LabelRecord
* @param size size of data
*/
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
//field_1_row = LittleEndian.getShort(data, 0 + offset);
field_1_row = LittleEndian.getUShort(data, 0 + offset);
field_2_column = LittleEndian.getShort(data, 2 + offset);
field_3_xf_index = LittleEndian.getShort(data, 4 + offset);
field_4_string_len = LittleEndian.getShort(data, 6 + offset);
field_5_unicode_flag = data[ 8 + offset ];
field_1_row = in.readUShort();
field_2_column = in.readShort();
field_3_xf_index = in.readShort();
field_4_string_len = in.readShort();
field_5_unicode_flag = in.readByte();
if (field_4_string_len > 0) {
if (isUnCompressedUnicode()) {
field_6_value = StringUtil.getFromUnicodeLE(data, 9 + offset,
field_4_string_len);
}
else {
field_6_value = StringUtil.getFromCompressedUnicode(data, 9 + offset,
getStringLength());
field_6_value = in.readUnicodeLEString(field_4_string_len);
} else {
field_6_value = in.readCompressedUnicode(field_4_string_len);
}
} else field_6_value = null;
}

View File

@ -53,24 +53,11 @@ public class LabelSSTRecord
* @param data data of the record (should not contain sid/len)
*/
public LabelSSTRecord(short id, short size, byte [] data)
public LabelSSTRecord(RecordInputStream in)
{
super(id, size, data);
super(in);
}
/**
* Constructs an LabelSST record and sets its fields appropriately.
*
* @param id id must be 0xfd or an exception will be throw upon validation
* @param 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 LabelSSTRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
}
protected void validateSid(short id)
{
@ -80,13 +67,13 @@ public class LabelSSTRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
//field_1_row = LittleEndian.getShort(data, 0 + offset);
field_1_row = LittleEndian.getUShort(data, 0 + offset);
field_2_column = LittleEndian.getShort(data, 2 + offset);
field_3_xf_index = LittleEndian.getShort(data, 4 + offset);
field_4_sst_index = LittleEndian.getInt(data, 6 + offset);
field_1_row = in.readUShort();
field_2_column = in.readShort();
field_3_xf_index = in.readShort();
field_4_sst_index = in.readInt();
}
//public void setRow(short row)

View File

@ -38,19 +38,8 @@ public class LeftMarginRecord extends Record implements Margin
* @param size size the size of the data area of the record
* @param data data of the record (should not contain sid/len)
*/
public LeftMarginRecord( short id, short size, byte[] data )
{ super( id, size, data ); }
/**
* Constructs a LeftMargin record and sets its fields appropriately.
* @param id id must be 0x26 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 LeftMarginRecord( short id, short size, byte[] data, int offset )
{ super( id, size, data, offset ); }
public LeftMarginRecord(RecordInputStream in)
{ super(in); }
/**
* Checks the sid matches the expected side for this record
@ -65,9 +54,9 @@ public class LeftMarginRecord extends Record implements Margin
}
}
protected void fillFields( byte[] data, short size, int offset )
protected void fillFields(RecordInputStream in)
{
field_1_margin = LittleEndian.getDouble( data, 0x0 + offset );
field_1_margin = in.readDouble();
}
public String toString()

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -72,25 +71,9 @@ public class LegendRecord
* @param data data of the record (should not contain sid/len)
*/
public LegendRecord(short id, short size, byte [] data)
public LegendRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Legend record and sets its fields appropriately.
*
* @param id id must be 0x1015 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 LegendRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -107,17 +90,17 @@ public class LegendRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_xAxisUpperLeft = LittleEndian.getInt(data, pos + 0x0 + offset);
field_2_yAxisUpperLeft = LittleEndian.getInt(data, pos + 0x4 + offset);
field_3_xSize = LittleEndian.getInt(data, pos + 0x8 + offset);
field_4_ySize = LittleEndian.getInt(data, pos + 0xc + offset);
field_5_type = data[ pos + 0x10 + offset ];
field_6_spacing = data[ pos + 0x11 + offset ];
field_7_options = LittleEndian.getShort(data, pos + 0x12 + offset);
field_1_xAxisUpperLeft = in.readInt();
field_2_yAxisUpperLeft = in.readInt();
field_3_xSize = in.readInt();
field_4_ySize = in.readInt();
field_5_type = in.readByte();
field_6_spacing = in.readByte();
field_7_options = in.readShort();
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -71,25 +70,9 @@ public class LineFormatRecord
* @param data data of the record (should not contain sid/len)
*/
public LineFormatRecord(short id, short size, byte [] data)
public LineFormatRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a LineFormat record and sets its fields appropriately.
*
* @param id id must be 0x1007 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 LineFormatRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -106,15 +89,15 @@ public class LineFormatRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_lineColor = LittleEndian.getInt(data, pos + 0x0 + offset);
field_2_linePattern = LittleEndian.getShort(data, pos + 0x4 + offset);
field_3_weight = LittleEndian.getShort(data, pos + 0x6 + offset);
field_4_format = LittleEndian.getShort(data, pos + 0x8 + offset);
field_5_colourPaletteIndex = LittleEndian.getShort(data, pos + 0xa + offset);
field_1_lineColor = in.readInt();
field_2_linePattern = in.readShort();
field_3_weight = in.readShort();
field_4_format = in.readShort();
field_5_colourPaletteIndex = in.readShort();
}

View File

@ -46,10 +46,10 @@ public class LinkedDataFormulaField
return size + 2;
}
public int fillField( byte[] data, short size, int offset )
public int fillField( RecordInputStream in )
{
short tokenSize = LittleEndian.getShort(data, offset);
formulaTokens = getParsedExpressionTokens(data, size, offset + 2);
short tokenSize = in.readShort();
formulaTokens = getParsedExpressionTokens(tokenSize, in);
return tokenSize + 2;
}
@ -103,15 +103,13 @@ public class LinkedDataFormulaField
}
}
private Stack getParsedExpressionTokens( byte[] data, short size,
int offset )
private Stack getParsedExpressionTokens(short size, RecordInputStream in )
{
Stack stack = new Stack();
int pos = offset;
int pos = 0;
while ( pos < size )
{
Ptg ptg = Ptg.createPtg( data, pos );
Ptg ptg = Ptg.createPtg( in );
pos += ptg.getSize();
stack.push( ptg );
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -64,25 +63,9 @@ public class LinkedDataRecord
* @param data data of the record (should not contain sid/len)
*/
public LinkedDataRecord(short id, short size, byte [] data)
public LinkedDataRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a LinkedData record and sets its fields appropriately.
*
* @param id id must be 0x1051 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 LinkedDataRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -99,17 +82,14 @@ public class LinkedDataRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_linkType = data[ pos + 0x0 + offset ];
field_2_referenceType = data[ pos + 0x1 + offset ];
field_3_options = LittleEndian.getShort(data, pos + 0x2 + offset);
field_4_indexNumberFmtRecord = LittleEndian.getShort(data, pos + 0x4 + offset);
field_1_linkType = in.readByte();
field_2_referenceType = in.readByte();
field_3_options = in.readShort();
field_4_indexNumberFmtRecord = in.readShort();
field_5_formulaOfLink = new org.apache.poi.hssf.record.LinkedDataFormulaField();
pos += field_5_formulaOfLink.fillField(data,size,pos + offset + 6);
field_5_formulaOfLink.fillField(in);
}
public String toString()

View File

@ -48,23 +48,9 @@ public class MMSRecord
* @param data data of the record (should not contain sid/len)
*/
public MMSRecord(short id, short size, byte [] data)
public MMSRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a MMS record and sets its fields appropriately.
*
* @param id id must be 0xc1 or an exception will be throw upon validation
* @param 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 data
*/
public MMSRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -75,10 +61,10 @@ public class MMSRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_addMenuCount = data[ 0 + offset ];
field_2_delMenuCount = data[ 1 + offset ];
field_1_addMenuCount = in.readByte();
field_2_delMenuCount = in.readByte();
}
/**

View File

@ -50,41 +50,22 @@ public class MergeCellsRecord
* @param data data of the record (should not contain sid/len)
*/
public MergeCellsRecord(short sid, short size, byte [] data)
public MergeCellsRecord(RecordInputStream in)
{
super(sid, size, data);
super(in);
}
/**
* Constructs a MergedCellsRecord and sets its fields appropriately
*
* @param sid id must be 0xe5 or an exception will be throw upon validation
* @param size the size of the data area of the record
* @param data data of the record (should not contain sid/len)
* @param offset the offset of the record's data
*/
public MergeCellsRecord(short sid, short size, byte [] data, int offset)
protected void fillFields(RecordInputStream in)
{
super(sid, size, data, offset);
}
protected void fillFields(byte [] data, short size, int offset)
{
short numAreas = LittleEndian.getShort(data, 0 + offset);
short numAreas = in.readShort();
field_2_regions = new ArrayList(numAreas + 10);
int pos = 2;
for (int k = 0; k < numAreas; k++)
{
MergedRegion region =
new MergedRegion(LittleEndian
.getShort(data, pos + offset), LittleEndian
.getShort(data, pos + 2 + offset), LittleEndian
.getShort(data, pos + 4 + offset), LittleEndian
.getShort(data, pos + 6 + offset));
new MergedRegion(in.readShort(), in.readShort(),
in.readShort(), in.readShort());
pos += 8;
field_2_regions.add(region);
}
}

View File

@ -62,23 +62,9 @@ public class MulBlankRecord
* @param data data of the record (should not contain sid/len)
*/
public MulBlankRecord(short id, short size, byte [] data)
public MulBlankRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a MulBlank record and sets its fields appropriately.
*
* @param id id must be 0xbe or an exception will be throw upon validation
* @param 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 MulBlankRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
/**
@ -142,31 +128,22 @@ public class MulBlankRecord
* @param size size of data
*/
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
//field_1_row = LittleEndian.getShort(data, 0 + offset);
field_1_row = LittleEndian.getUShort(data, 0 + offset);
field_2_first_col = LittleEndian.getShort(data, 2 + offset);
field_3_xfs = parseXFs(data, 4, offset, size);
field_4_last_col = LittleEndian.getShort(data,
(field_3_xfs.length * 2)
+ 4 + offset);
field_1_row = in.readUShort();
field_2_first_col = in.readShort();
field_3_xfs = parseXFs(in);
field_4_last_col = in.readShort();
}
private short [] parseXFs(byte [] data, int offset, int recoffset,
short size)
private short [] parseXFs(RecordInputStream in)
{
short[] retval = new short[ ((size - offset) - 2) / 2 ];
int idx = 0;
short[] retval = new short[ (in.remaining() - 2) / 2 ];
for (; offset < size - 2; )
for (int idx = 0; idx < retval.length;idx++)
{
short xf = 0;
xf = LittleEndian.getShort(data, offset + recoffset);
offset += 2;
retval[ idx ] = xf;
idx++;
retval[idx] = in.readShort();
}
return retval;
}

View File

@ -60,23 +60,9 @@ public class MulRKRecord
* @param data data of the record (should not contain sid/len)
*/
public MulRKRecord(short id, short size, byte [] data)
public MulRKRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a MulRK record and sets its fields appropriately.
*
* @param id id must be 0xbd or an exception will be throw upon validation
* @param size the size of the data area of the record
* @param data data of the record (should not contain sid/len)
* @param offset of data
*/
public MulRKRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
//public short getRow()
@ -143,30 +129,23 @@ public class MulRKRecord
* @param size size of data
*/
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
//field_1_row = LittleEndian.getShort(data, 0 + offset);
field_1_row = LittleEndian.getUShort(data, 0 + offset);
field_2_first_col = LittleEndian.getShort(data, 2 + offset);
field_3_rks = parseRKs(data, 4, offset, size);
field_4_last_col = LittleEndian.getShort(data,
(field_3_rks.size() * 6)
+ 4 + offset);
field_1_row = in.readUShort();
field_2_first_col = in.readShort();
field_3_rks = parseRKs(in);
field_4_last_col = in.readShort();
}
private ArrayList parseRKs(byte [] data, int offset, int recoffset,
short size)
private ArrayList parseRKs(RecordInputStream in)
{
ArrayList retval = new ArrayList();
for (; offset < size - 2; )
{
while ((in.remaining()-2) > 0) {
RkRec rec = new RkRec();
rec.xf = LittleEndian.getShort(data, offset + recoffset);
offset += 2;
rec.rk = LittleEndian.getInt(data, offset + recoffset);
offset += 4;
rec.xf = in.readShort();
rec.rk = in.readInt();
retval.add(rec);
}
return retval;

View File

@ -1,4 +1,3 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
@ -115,7 +114,6 @@ public class NameRecord extends Record {
private byte field_12_builtIn_name;
private String field_12_name_text;
private Stack field_13_name_definition;
private byte[] field_13_raw_name_definition; // raw data
private String field_14_custom_menu_text;
private String field_15_description_text;
private String field_16_help_topic_text;
@ -140,20 +138,8 @@ public class NameRecord extends Record {
* @param size the size of the data area of the record
* @param data data of the record (should not contain sid/len)
*/
public NameRecord(short id, short size, byte [] data) {
super(id, size, data);
}
/**
* Constructs a Name record and sets its fields appropriately.
*
* @param id id must be 0x18 or an exception will be throw upon validation
* @param 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 NameRecord(short id, short size, byte [] data, int offset) {
super(id, size, data, offset);
public NameRecord(RecordInputStream in) {
super(in);
}
/**
@ -553,15 +539,7 @@ public class NameRecord extends Record {
}
if ( this.field_13_name_definition != null )
{
serializePtgs( data, start_of_name_definition + offset );
}
else
{
System.arraycopy( field_13_raw_name_definition, 0, data
, start_of_name_definition + offset, field_13_raw_name_definition.length );
}
int start_of_custom_menu_text = start_of_name_definition + field_4_length_name_definition;
@ -731,97 +709,55 @@ public class NameRecord extends Record {
* @param size size of data
* @param offset of the record's data (provided a big array of the file)
*/
protected void fillFields(byte[] data, short size, int offset) {
field_1_option_flag = LittleEndian.getShort(data, 0 + offset);
field_2_keyboard_shortcut = data [2 + offset];
field_3_length_name_text = data [3 + offset];
field_4_length_name_definition = LittleEndian.getShort(data, 4 + offset);
field_5_index_to_sheet = LittleEndian.getShort(data, 6 + offset);
field_6_equals_to_index_to_sheet= LittleEndian.getShort(data, 8 + offset);
field_7_length_custom_menu = data [10 + offset];
field_8_length_description_text = data [11 + offset];
field_9_length_help_topic_text = data [12 + offset];
field_10_length_status_bar_text = data [13 + offset];
/*
temp: gjs
if (isBuiltInName()) {
// DEBUG
// System.out.println( "Built-in name" );
field_11_compressed_unicode_flag = data[ 14 + offset ];
field_12_builtIn_name = data[ 15 + offset ];
if ( (field_12_builtIn_name & (short)0x07) != 0 ) {
field_12_name_text = "Print_Titles";
// DEBUG
// System.out.println( field_12_name_text );
field_13_raw_name_definition = new byte[ field_4_length_name_definition ];
System.arraycopy( data, 16 + offset, field_13_raw_name_definition, 0, field_13_raw_name_definition.length );
// DEBUG
// System.out.println( HexDump.toHex( field_13_raw_name_definition ) );
}
}
else { */
field_11_compressed_unicode_flag= data [14 + offset];
protected void fillFields(RecordInputStream in) {
field_1_option_flag = in.readShort();
field_2_keyboard_shortcut = in.readByte();
field_3_length_name_text = in.readByte();
field_4_length_name_definition = in.readShort();
field_5_index_to_sheet = in.readShort();
field_6_equals_to_index_to_sheet= in.readShort();
field_7_length_custom_menu = in.readByte();
field_8_length_description_text = in.readByte();
field_9_length_help_topic_text = in.readByte();
field_10_length_status_bar_text = in.readByte();
//store the name in byte form if it's a builtin name
field_11_compressed_unicode_flag= in.readByte();
if (this.isBuiltInName()) {
field_12_builtIn_name = data[ 15 + offset ];
field_12_builtIn_name = in.readByte();
} else {
if (field_11_compressed_unicode_flag == 1) {
field_12_name_text = in.readCompressedUnicode(field_3_length_name_text);
} else {
field_12_name_text = in.readCompressedUnicode(field_3_length_name_text);
}
}
field_12_name_text = StringUtil.getFromCompressedUnicode(data, 15 + offset,
LittleEndian.ubyteToInt(field_3_length_name_text));
field_13_name_definition = getParsedExpressionTokens(in, field_4_length_name_definition);
int start_of_name_definition = 15 + field_3_length_name_text;
field_13_name_definition = getParsedExpressionTokens(data, field_4_length_name_definition,
offset, start_of_name_definition);
//Who says that this can only ever be compressed unicode???
field_14_custom_menu_text = in.readCompressedUnicode(LittleEndian.ubyteToInt(field_7_length_custom_menu));
int start_of_custom_menu_text = start_of_name_definition + field_4_length_name_definition;
field_14_custom_menu_text = StringUtil.getFromCompressedUnicode(data, start_of_custom_menu_text + offset,
LittleEndian.ubyteToInt(field_7_length_custom_menu));
field_15_description_text = in.readCompressedUnicode(LittleEndian.ubyteToInt(field_8_length_description_text));
int start_of_description_text = start_of_custom_menu_text + field_7_length_custom_menu;;
field_15_description_text = StringUtil.getFromCompressedUnicode(data, start_of_description_text + offset,
LittleEndian.ubyteToInt(field_8_length_description_text));
field_16_help_topic_text = in.readCompressedUnicode(LittleEndian.ubyteToInt(field_9_length_help_topic_text));
int start_of_help_topic_text = start_of_description_text + field_8_length_description_text;
field_16_help_topic_text = StringUtil.getFromCompressedUnicode(data, start_of_help_topic_text + offset,
LittleEndian.ubyteToInt(field_9_length_help_topic_text));
int start_of_status_bar_text = start_of_help_topic_text + field_9_length_help_topic_text;
field_17_status_bar_text = StringUtil.getFromCompressedUnicode(data, start_of_status_bar_text + offset,
LittleEndian.ubyteToInt(field_10_length_status_bar_text));
field_17_status_bar_text = in.readCompressedUnicode(LittleEndian.ubyteToInt(field_10_length_status_bar_text));
/*} */
}
private Stack getParsedExpressionTokens(byte [] data, short size,
int offset, int start_of_expression) {
private Stack getParsedExpressionTokens(RecordInputStream in, short size) {
Stack stack = new Stack();
int pos = start_of_expression + offset;
int sizeCounter = 0;
try {
while (sizeCounter < size) {
Ptg ptg = Ptg.createPtg(data, pos);
Ptg ptg = Ptg.createPtg(in);
pos += ptg.getSize();
sizeCounter += ptg.getSize();
stack.push(ptg);
field_13_raw_name_definition=new byte[size];
System.arraycopy(data,offset,field_13_raw_name_definition,0,size);
}
} catch (java.lang.UnsupportedOperationException uoe) {
System.err.println("[WARNING] Unknown Ptg "
+ uoe.getMessage() + "for named range: "+ field_12_name_text);
field_13_raw_name_definition=new byte[size];
System.arraycopy(data,offset,field_13_raw_name_definition,0,size);
return null;
throw new RecordFormatException(uoe.toString());
}
return stack;
}
@ -915,10 +851,6 @@ public class NameRecord extends Record {
.append("\n");
buffer.append(" .Name (Unicode text) = ").append( getNameText() )
.append("\n");
buffer.append(" .Formula data (RPN token array without size field) = ").append( HexDump.toHex(
((field_13_raw_name_definition != null) ? field_13_raw_name_definition : new byte[0] ) ) )
.append("\n");
buffer.append(" .Menu text (Unicode string without length field) = ").append( field_14_custom_menu_text )
.append("\n");
buffer.append(" .Description text (Unicode string without length field) = ").append( field_15_description_text )
@ -927,8 +859,6 @@ public class NameRecord extends Record {
.append("\n");
buffer.append(" .Status bar text (Unicode string without length field) = ").append( field_17_status_bar_text )
.append("\n");
if (field_13_raw_name_definition != null)
buffer.append(org.apache.poi.util.HexDump.dump(this.field_13_raw_name_definition,0,0));
buffer.append("[/NAME]\n");
return buffer.toString();
@ -958,6 +888,4 @@ public class NameRecord extends Record {
return "Unknown";
}
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -51,25 +50,9 @@ public class NumberFormatIndexRecord
* @param data data of the record (should not contain sid/len)
*/
public NumberFormatIndexRecord(short id, short size, byte [] data)
public NumberFormatIndexRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a NumberFormatIndex record and sets its fields appropriately.
*
* @param id id must be 0x104e 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 NumberFormatIndexRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -86,11 +69,11 @@ public class NumberFormatIndexRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_formatIndex = LittleEndian.getShort(data, pos + 0x0 + offset);
field_1_formatIndex = in.readShort();
}

View File

@ -58,23 +58,9 @@ public class NumberRecord
* @param data data of the record (should not contain sid/len)
*/
public NumberRecord(short id, short size, byte [] data)
public NumberRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Number record and sets its fields appropriately.
*
* @param id id must be 0x203 or an exception will be throw upon validation
* @param 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 data
*/
public NumberRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
/**
@ -85,13 +71,13 @@ public class NumberRecord
* @param size size of data
*/
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
//field_1_row = LittleEndian.getShort(data, 0 + offset);
field_1_row = LittleEndian.getUShort(data, 0 + offset);
field_2_col = LittleEndian.getShort(data, 2 + offset);
field_3_xf = LittleEndian.getShort(data, 4 + offset);
field_4_value = LittleEndian.getDouble(data, 6 + offset);
field_1_row = in.readUShort();
field_2_col = in.readShort();
field_3_xf = in.readShort();
field_4_value = in.readDouble();
}
//public void setRow(short row)

View File

@ -23,6 +23,7 @@ package org.apache.poi.hssf.record;
import org.apache.poi.util.*;
import java.io.ByteArrayInputStream;
import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;
@ -56,23 +57,9 @@ public class ObjRecord
* @param data data of the record (should not contain sid/len)
*/
public ObjRecord(short id, short size, byte [] data)
public ObjRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a obj record and sets its fields appropriately.
*
* @param id id must be 0x5D 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 ObjRecord(short id, short size, byte[] data, int offset)
{
super(id, size, data, offset);
super(in);
}
/**
@ -88,9 +75,20 @@ public class ObjRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
subrecords = new ArrayList();
//Check if this can be continued, if so then the
//following wont work properly
byte[] subRecordData = in.readRemainder();
RecordInputStream subRecStream = new RecordInputStream(new ByteArrayInputStream(subRecordData));
while(subRecStream.hasNextRecord()) {
subRecStream.nextRecord();
Record subRecord = SubRecord.createSubRecord(subRecStream);
subrecords.add(subRecord);
}
/* JMH the size present/not present in the code below
needs to be considered in the RecordInputStream??
int pos = offset;
while (pos - offset <= size-2) // atleast one "short" must be present
{
@ -102,7 +100,7 @@ public class ObjRecord
Record subRecord = SubRecord.createSubRecord(subRecordSid, subRecordSize, data, pos + 4);
subrecords.add(subRecord);
pos += subRecord.getRecordSize();
}
}*/
}
public String toString()
@ -175,14 +173,6 @@ public class ObjRecord
return subrecords.add( o );
}
// made public to satisfy biffviewer
/* protected */
public void processContinueRecord( byte[] record )
{
super.processContinueRecord( record );
}
public Object clone()
{
ObjRecord rec = new ObjRecord();

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -58,25 +57,9 @@ public class ObjectLinkRecord
* @param data data of the record (should not contain sid/len)
*/
public ObjectLinkRecord(short id, short size, byte [] data)
public ObjectLinkRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a ObjectLink record and sets its fields appropriately.
*
* @param id id must be 0x1027 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 ObjectLinkRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -93,13 +76,13 @@ public class ObjectLinkRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_anchorId = LittleEndian.getShort(data, pos + 0x0 + offset);
field_2_link1 = LittleEndian.getShort(data, pos + 0x2 + offset);
field_3_link2 = LittleEndian.getShort(data, pos + 0x4 + offset);
field_1_anchorId = in.readShort();
field_2_link1 = in.readShort();
field_3_link2 = in.readShort();
}

View File

@ -34,8 +34,14 @@ import org.apache.poi.util.LittleEndian;
* <p>REFERENCE: Microsoft Excel SDK page 322 and 420</p>
*
* @see HorizontalPageBreakRecord
<<<<<<< PageBreakRecord.java
* @see VerticalPageBreakREcord
*
* REFERENCE: Microsoft Excel SDK page 322 and 420
=======
* @see VerticalPageBreakRecord
*
>>>>>>> 1.5
* @author Danny Mui (dmui at apache dot org)
*/
public class PageBreakRecord extends Record {
@ -82,27 +88,19 @@ public class PageBreakRecord extends Record {
this.sid = sid;
}
public PageBreakRecord(short id, short size, byte data[])
public PageBreakRecord(RecordInputStream in)
{
super(id, size, data);
this.sid = id;
super(in);
this.sid = in.getSid();
}
public PageBreakRecord(short id, short size, byte data[], int offset)
protected void fillFields(RecordInputStream in)
{
super(id, size, data, offset);
this.sid = id;
}
protected void fillFields(byte data[], short size, int offset)
{
short loadedBreaks = LittleEndian.getShort(data, 0 + offset);
short loadedBreaks = in.readShort();
setNumBreaks(loadedBreaks);
int pos = 2;
for(int k = 0; k < loadedBreaks; k++)
{
addBreak((short)(LittleEndian.getShort(data, pos + offset) - 1), LittleEndian.getShort(data, pos + 2 + offset), LittleEndian.getShort(data, pos + 4 + offset));
pos += 6;
addBreak((short)(in.readShort()-1), in.readShort(), in.readShort());
}
}

View File

@ -44,14 +44,7 @@ public class PaletteRecord
public PaletteRecord()
{
}
/**
* Constructs a custom palette with the default set of colors
*/
public PaletteRecord(short id)
{
super(id, STANDARD_PALETTE_SIZE, getDefaultData());
createDefaultPalette();
}
/**
@ -62,23 +55,9 @@ public class PaletteRecord
* @param data data of the record (should not contain sid/len)
*/
public PaletteRecord(short id, short size, byte [] data)
public PaletteRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a PaletteRecord record and sets its fields appropriately.
*
* @param id id must be 0x0A or an exception will be throw upon validation
* @param 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 PaletteRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -89,17 +68,19 @@ public class PaletteRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_numcolors = LittleEndian.getShort(data,offset+0);
field_1_numcolors = in.readShort();
field_2_colors = new ArrayList(field_1_numcolors);
for (int k = 0; k < field_1_numcolors; k++) {
field_2_colors.add(new PColor(
data[2+ offset+(k * 4) +0],
data[2+ offset+(k * 4) +1],
data[2+ offset+(k * 4) +2]
in.readByte(),
in.readByte(),
in.readByte()
)
);
//Read unused byte.
in.readByte();
}
}
@ -187,15 +168,16 @@ public class PaletteRecord
}
/**
* Returns the default palette as PaletteRecord binary data
* Creates the default palette as PaletteRecord binary data
*
* @see org.apache.poi.hssf.model.Workbook#createPalette
*/
public static byte[] getDefaultData()
private void createDefaultPalette()
{
return new byte[]
field_1_numcolors = STANDARD_PALETTE_SIZE;
field_2_colors = new ArrayList(field_1_numcolors);
byte[] palette = new byte[]
{
STANDARD_PALETTE_SIZE, (byte) 0,
(byte) 0, (byte) 0, (byte) 0, (byte) 0, //color 0...
(byte) 255, (byte) 255, (byte) 255, (byte) 0,
(byte) 255, (byte) 0, (byte) 0, (byte) 0,
@ -253,6 +235,16 @@ public class PaletteRecord
(byte) 51, (byte) 51, (byte) 153, (byte) 0,
(byte) 51, (byte) 51, (byte) 51, (byte) 0
};
for (int k = 0; k < field_1_numcolors; k++) {
field_2_colors.add(new PColor(
palette[k*4],
palette[k*4+1],
palette[k*4+2]
)
);
}
}
}

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -59,25 +58,9 @@ public class PaneRecord
* @param data data of the record (should not contain sid/len)
*/
public PaneRecord(short id, short size, byte [] data)
public PaneRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Pane record and sets its fields appropriately.
*
* @param id id must be 0x41 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 PaneRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -94,15 +77,15 @@ public class PaneRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_x = LittleEndian.getShort(data, pos + 0x0 + offset);
field_2_y = LittleEndian.getShort(data, pos + 0x2 + offset);
field_3_topRow = LittleEndian.getShort(data, pos + 0x4 + offset);
field_4_leftColumn = LittleEndian.getShort(data, pos + 0x6 + offset);
field_5_activePane = LittleEndian.getShort(data, pos + 0x8 + offset);
field_1_x = in.readShort();
field_2_y = in.readShort();
field_3_topRow = in.readShort();
field_4_leftColumn = in.readShort();
field_5_activePane = in.readShort();
}

View File

@ -46,23 +46,9 @@ public class PasswordRecord
* @param data data of the record (should not contain sid/len)
*/
public PasswordRecord(short id, short size, byte [] data)
public PasswordRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Password record and sets its fields appropriately.
*
* @param id id must be 0x13 or an exception will be throw upon validation
* @param 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 data
*/
public PasswordRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -73,9 +59,9 @@ public class PasswordRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_password = LittleEndian.getShort(data, 0 + offset);
field_1_password = in.readShort();
}
/**

View File

@ -47,23 +47,9 @@ public class PasswordRev4Record
* @param data data of the record (should not contain sid/len)
*/
public PasswordRev4Record(short id, short size, byte [] data)
public PasswordRev4Record(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a PasswordRev4 (PROT4REVPASS) record and sets its fields appropriately.
*
* @param id id must be 0x1bc or an exception will be throw upon validation
* @param 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 data
*/
public PasswordRev4Record(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -74,9 +60,9 @@ public class PasswordRev4Record
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_password = LittleEndian.getShort(data, 0 + offset);
field_1_password = in.readShort();
}
/**

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -50,25 +49,9 @@ public class PlotAreaRecord
* @param data data of the record (should not contain sid/len)
*/
public PlotAreaRecord(short id, short size, byte [] data)
public PlotAreaRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a PlotArea record and sets its fields appropriately.
*
* @param id id must be 0x1035 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 PlotAreaRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -85,7 +68,7 @@ public class PlotAreaRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;

View File

@ -1,6 +1,6 @@
/* ====================================================================
Copyright 2002-2004 Apache Software Foundation
Copyright 2003-2004 Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.hssf.record;
@ -52,25 +51,9 @@ public class PlotGrowthRecord
* @param data data of the record (should not contain sid/len)
*/
public PlotGrowthRecord(short id, short size, byte [] data)
public PlotGrowthRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a PlotGrowth record and sets its fields appropriately.
*
* @param id id must be 0x1064 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 PlotGrowthRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
@ -87,12 +70,12 @@ public class PlotGrowthRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
int pos = 0;
field_1_horizontalScale = LittleEndian.getInt(data, pos + 0x0 + offset);
field_2_verticalScale = LittleEndian.getInt(data, pos + 0x4 + offset);
field_1_horizontalScale = in.readInt();
field_2_verticalScale = in.readInt();
}

View File

@ -47,23 +47,9 @@ public class PrecisionRecord
* @param data data of the record (should not contain sid/len)
*/
public PrecisionRecord(short id, short size, byte [] data)
public PrecisionRecord(RecordInputStream in)
{
super(id, size, data);
}
/**
* Constructs a Precision record and sets its fields appropriately.
*
* @param id id must be 0xe or an exception will be throw upon validation
* @param 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
*/
public PrecisionRecord(short id, short size, byte [] data, int offset)
{
super(id, size, data, offset);
super(in);
}
protected void validateSid(short id)
@ -74,9 +60,9 @@ public class PrecisionRecord
}
}
protected void fillFields(byte [] data, short size, int offset)
protected void fillFields(RecordInputStream in)
{
field_1_precision = LittleEndian.getShort(data, 0 + offset);
field_1_precision = in.readShort();
}
/**

Some files were not shown because too many files have changed in this diff Show More