glens 2002/07/29 06:25:46
Modified: src/java/org/apache/poi/hssf/dev BiffViewer.java
src/java/org/apache/poi/hssf/model Workbook.java
src/java/org/apache/poi/hssf/record Record.java
RecordFactory.java
Added: src/java/org/apache/poi/hssf/record StringRecord.java
src/testcases/org/apache/poi/hssf/record
TestStringRecord.java
Log:
String record added
Revision Changes Path
1.25 +155 -144 jakarta-poi/src/java/org/apache/poi/hssf/dev/BiffViewer.java
Index: BiffViewer.java
===================================================================
RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/dev/BiffViewer.java,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- BiffViewer.java 25 Jul 2002 05:10:23 -0000 1.24
+++ BiffViewer.java 29 Jul 2002 13:25:46 -0000 1.25
@@ -74,7 +74,6 @@
*
*@author Andrew C. Oliver (acoliver at apache dot org)
*@author Glen Stampoultzis (glens at apache.org)
- *@created May 10, 2002
*@see #main
*/
@@ -256,23 +255,27 @@
*@param data Description of the Parameter
*@exception IOException Description of the Exception
*/
- private static void dump(short rectype, short recsize, byte[] data) throws
IOException {
-// System.out
-// .println("fixing to recordize the following");
- System.out.print("rectype = 0x"
- + Integer.toHexString(rectype));
- System.out.println(", recsize = 0x"
- + Integer.toHexString(recsize));
+ private static void dump( short rectype, short recsize, byte[] data ) throws
IOException
+ {
+ // System.out
+ // .println("fixing to recordize the following");
+ 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**");
+ "-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();
System.out.println(
- "-END DUMP-----------------------------------");
+ "-END DUMP-----------------------------------" );
}
@@ -286,353 +289,361 @@
*@return Description of the Return Value
*/
- private static Record[] createRecord(short rectype, short size,
- byte[] data) {
+ private static Record[] createRecord( short rectype, short size,
+ byte[] data )
+ {
Record retval = null;
Record[] realretval = null;
// int irectype = rectype;
- switch (rectype) {
+ switch ( rectype )
+ {
case ChartRecord.sid:
- retval = new ChartRecord(rectype, size, data);
+ retval = new ChartRecord( rectype, size, data );
break;
case ChartFormatRecord.sid:
- retval = new ChartFormatRecord(rectype, size, data);
+ retval = new ChartFormatRecord( rectype, size, data );
break;
case SeriesRecord.sid:
- retval = new SeriesRecord(rectype, size, data);
+ retval = new SeriesRecord( rectype, size, data );
break;
case BeginRecord.sid:
- retval = new BeginRecord(rectype, size, data);
+ retval = new BeginRecord( rectype, size, data );
break;
case EndRecord.sid:
- retval = new EndRecord(rectype, size, data);
+ retval = new EndRecord( rectype, size, data );
break;
case BOFRecord.sid:
- retval = new BOFRecord(rectype, size, data);
+ retval = new BOFRecord( rectype, size, data );
break;
case InterfaceHdrRecord.sid:
- retval = new InterfaceHdrRecord(rectype, size, data);
+ retval = new InterfaceHdrRecord( rectype, size, data );
break;
case MMSRecord.sid:
- retval = new MMSRecord(rectype, size, data);
+ retval = new MMSRecord( rectype, size, data );
break;
case InterfaceEndRecord.sid:
- retval = new InterfaceEndRecord(rectype, size, data);
+ retval = new InterfaceEndRecord( rectype, size, data );
break;
case WriteAccessRecord.sid:
- retval = new WriteAccessRecord(rectype, size, data);
+ retval = new WriteAccessRecord( rectype, size, data );
break;
case CodepageRecord.sid:
- retval = new CodepageRecord(rectype, size, data);
+ retval = new CodepageRecord( rectype, size, data );
break;
case DSFRecord.sid:
- retval = new DSFRecord(rectype, size, data);
+ retval = new DSFRecord( rectype, size, data );
break;
case TabIdRecord.sid:
- retval = new TabIdRecord(rectype, size, data);
+ retval = new TabIdRecord( rectype, size, data );
break;
case FnGroupCountRecord.sid:
- retval = new FnGroupCountRecord(rectype, size, data);
+ retval = new FnGroupCountRecord( rectype, size, data );
break;
case WindowProtectRecord.sid:
- retval = new WindowProtectRecord(rectype, size, data);
+ retval = new WindowProtectRecord( rectype, size, data );
break;
case ProtectRecord.sid:
- retval = new ProtectRecord(rectype, size, data);
+ retval = new ProtectRecord( rectype, size, data );
break;
case PasswordRecord.sid:
- retval = new PasswordRecord(rectype, size, data);
+ retval = new PasswordRecord( rectype, size, data );
break;
case ProtectionRev4Record.sid:
- retval = new ProtectionRev4Record(rectype, size, data);
+ retval = new ProtectionRev4Record( rectype, size, data );
break;
case PasswordRev4Record.sid:
- retval = new PasswordRev4Record(rectype, size, data);
+ retval = new PasswordRev4Record( rectype, size, data );
break;
case WindowOneRecord.sid:
- retval = new WindowOneRecord(rectype, size, data);
+ retval = new WindowOneRecord( rectype, size, data );
break;
case BackupRecord.sid:
- retval = new BackupRecord(rectype, size, data);
+ retval = new BackupRecord( rectype, size, data );
break;
case HideObjRecord.sid:
- retval = new HideObjRecord(rectype, size, data);
+ retval = new HideObjRecord( rectype, size, data );
break;
case DateWindow1904Record.sid:
- retval = new DateWindow1904Record(rectype, size, data);
+ retval = new DateWindow1904Record( rectype, size, data );
break;
case PrecisionRecord.sid:
- retval = new PrecisionRecord(rectype, size, data);
+ retval = new PrecisionRecord( rectype, size, data );
break;
case RefreshAllRecord.sid:
- retval = new RefreshAllRecord(rectype, size, data);
+ retval = new RefreshAllRecord( rectype, size, data );
break;
case BookBoolRecord.sid:
- retval = new BookBoolRecord(rectype, size, data);
+ retval = new BookBoolRecord( rectype, size, data );
break;
case FontRecord.sid:
- retval = new FontRecord(rectype, size, data);
+ retval = new FontRecord( rectype, size, data );
break;
case FormatRecord.sid:
- retval = new FormatRecord(rectype, size, data);
+ retval = new FormatRecord( rectype, size, data );
break;
case ExtendedFormatRecord.sid:
- retval = new ExtendedFormatRecord(rectype, size, data);
+ retval = new ExtendedFormatRecord( rectype, size, data );
break;
case StyleRecord.sid:
- retval = new StyleRecord(rectype, size, data);
+ retval = new StyleRecord( rectype, size, data );
break;
case UseSelFSRecord.sid:
- retval = new UseSelFSRecord(rectype, size, data);
+ retval = new UseSelFSRecord( rectype, size, data );
break;
case BoundSheetRecord.sid:
- retval = new BoundSheetRecord(rectype, size, data);
+ retval = new BoundSheetRecord( rectype, size, data );
break;
case CountryRecord.sid:
- retval = new CountryRecord(rectype, size, data);
+ retval = new CountryRecord( rectype, size, data );
break;
case SSTRecord.sid:
- retval = new SSTRecord(rectype, size, data);
+ retval = new SSTRecord( rectype, size, data );
break;
case ExtSSTRecord.sid:
- retval = new ExtSSTRecord(rectype, size, data);
+ retval = new ExtSSTRecord( rectype, size, data );
break;
case EOFRecord.sid:
- retval = new EOFRecord(rectype, size, data);
+ retval = new EOFRecord( rectype, size, data );
break;
case IndexRecord.sid:
- retval = new IndexRecord(rectype, size, data);
+ retval = new IndexRecord( rectype, size, data );
break;
case CalcModeRecord.sid:
- retval = new CalcModeRecord(rectype, size, data);
+ retval = new CalcModeRecord( rectype, size, data );
break;
case CalcCountRecord.sid:
- retval = new CalcCountRecord(rectype, size, data);
+ retval = new CalcCountRecord( rectype, size, data );
break;
case RefModeRecord.sid:
- retval = new RefModeRecord(rectype, size, data);
+ retval = new RefModeRecord( rectype, size, data );
break;
case IterationRecord.sid:
- retval = new IterationRecord(rectype, size, data);
+ retval = new IterationRecord( rectype, size, data );
break;
case DeltaRecord.sid:
- retval = new DeltaRecord(rectype, size, data);
+ retval = new DeltaRecord( rectype, size, data );
break;
case SaveRecalcRecord.sid:
- retval = new SaveRecalcRecord(rectype, size, data);
+ retval = new SaveRecalcRecord( rectype, size, data );
break;
case PrintHeadersRecord.sid:
- retval = new PrintHeadersRecord(rectype, size, data);
+ retval = new PrintHeadersRecord( rectype, size, data );
break;
case PrintGridlinesRecord.sid:
- retval = new PrintGridlinesRecord(rectype, size, data);
+ retval = new PrintGridlinesRecord( rectype, size, data );
break;
case GridsetRecord.sid:
- retval = new GridsetRecord(rectype, size, data);
+ retval = new GridsetRecord( rectype, size, data );
break;
case GutsRecord.sid:
- retval = new GutsRecord(rectype, size, data);
+ retval = new GutsRecord( rectype, size, data );
break;
case DefaultRowHeightRecord.sid:
- retval = new DefaultRowHeightRecord(rectype, size, data);
+ retval = new DefaultRowHeightRecord( rectype, size, data );
break;
case WSBoolRecord.sid:
- retval = new WSBoolRecord(rectype, size, data);
+ retval = new WSBoolRecord( rectype, size, data );
break;
case HeaderRecord.sid:
- retval = new HeaderRecord(rectype, size, data);
+ retval = new HeaderRecord( rectype, size, data );
break;
case FooterRecord.sid:
- retval = new FooterRecord(rectype, size, data);
+ retval = new FooterRecord( rectype, size, data );
break;
case HCenterRecord.sid:
- retval = new HCenterRecord(rectype, size, data);
+ retval = new HCenterRecord( rectype, size, data );
break;
case VCenterRecord.sid:
- retval = new VCenterRecord(rectype, size, data);
+ retval = new VCenterRecord( rectype, size, data );
break;
case PrintSetupRecord.sid:
- retval = new PrintSetupRecord(rectype, size, data);
+ retval = new PrintSetupRecord( rectype, size, data );
break;
case DefaultColWidthRecord.sid:
- retval = new DefaultColWidthRecord(rectype, size, data);
+ retval = new DefaultColWidthRecord( rectype, size, data );
break;
case DimensionsRecord.sid:
- retval = new DimensionsRecord(rectype, size, data);
+ retval = new DimensionsRecord( rectype, size, data );
break;
case RowRecord.sid:
- retval = new RowRecord(rectype, size, data);
+ retval = new RowRecord( rectype, size, data );
break;
case LabelSSTRecord.sid:
- retval = new LabelSSTRecord(rectype, size, data);
+ retval = new LabelSSTRecord( rectype, size, data );
break;
case RKRecord.sid:
- retval = new RKRecord(rectype, size, data);
+ retval = new RKRecord( rectype, size, data );
break;
case NumberRecord.sid:
- retval = new NumberRecord(rectype, size, data);
+ retval = new NumberRecord( rectype, size, data );
break;
case DBCellRecord.sid:
- retval = new DBCellRecord(rectype, size, data);
+ retval = new DBCellRecord( rectype, size, data );
break;
case WindowTwoRecord.sid:
- retval = new WindowTwoRecord(rectype, size, data);
+ retval = new WindowTwoRecord( rectype, size, data );
break;
case SelectionRecord.sid:
- retval = new SelectionRecord(rectype, size, data);
+ retval = new SelectionRecord( rectype, size, data );
break;
case ContinueRecord.sid:
- retval = new ContinueRecord(rectype, size, data);
+ retval = new ContinueRecord( rectype, size, data );
break;
case LabelRecord.sid:
- retval = new LabelRecord(rectype, size, data);
+ retval = new LabelRecord( rectype, size, data );
break;
case MulRKRecord.sid:
- retval = new MulRKRecord(rectype, size, data);
+ retval = new MulRKRecord( rectype, size, data );
break;
case MulBlankRecord.sid:
- retval = new MulBlankRecord(rectype, size, data);
+ retval = new MulBlankRecord( rectype, size, data );
break;
case BlankRecord.sid:
- retval = new BlankRecord(rectype, size, data);
+ retval = new BlankRecord( rectype, size, data );
break;
case BoolErrRecord.sid:
- retval = new BoolErrRecord(rectype, size, data);
+ retval = new BoolErrRecord( rectype, size, data );
break;
case ColumnInfoRecord.sid:
- retval = new ColumnInfoRecord(rectype, size, data);
+ retval = new ColumnInfoRecord( rectype, size, data );
break;
case MergeCellsRecord.sid:
- retval = new MergeCellsRecord(rectype, size, data);
+ retval = new MergeCellsRecord( rectype, size, data );
break;
case AreaRecord.sid:
- retval = new AreaRecord(rectype, size, data);
+ retval = new AreaRecord( rectype, size, data );
break;
case DataFormatRecord.sid:
- retval = new DataFormatRecord(rectype, size, data);
+ retval = new DataFormatRecord( rectype, size, data );
break;
case BarRecord.sid:
- retval = new BarRecord(rectype, size, data);
+ retval = new BarRecord( rectype, size, data );
break;
case DatRecord.sid:
- retval = new DatRecord(rectype, size, data);
+ retval = new DatRecord( rectype, size, data );
break;
case PlotGrowthRecord.sid:
- retval = new PlotGrowthRecord(rectype, size, data);
+ retval = new PlotGrowthRecord( rectype, size, data );
break;
case UnitsRecord.sid:
- retval = new UnitsRecord(rectype, size, data);
+ retval = new UnitsRecord( rectype, size, data );
break;
case FrameRecord.sid:
- retval = new FrameRecord(rectype, size, data);
+ retval = new FrameRecord( rectype, size, data );
break;
case ValueRangeRecord.sid:
- retval = new ValueRangeRecord(rectype, size, data);
+ retval = new ValueRangeRecord( rectype, size, data );
break;
case SeriesListRecord.sid:
- retval = new SeriesListRecord(rectype, size, data);
+ retval = new SeriesListRecord( rectype, size, data );
break;
case FontBasisRecord.sid:
- retval = new FontBasisRecord(rectype, size, data);
+ retval = new FontBasisRecord( rectype, size, data );
break;
case FontIndexRecord.sid:
- retval = new FontIndexRecord(rectype, size, data);
+ retval = new FontIndexRecord( rectype, size, data );
break;
case LineFormatRecord.sid:
- retval = new LineFormatRecord(rectype, size, data);
+ retval = new LineFormatRecord( rectype, size, data );
break;
case AreaFormatRecord.sid:
- retval = new AreaFormatRecord(rectype, size, data);
+ retval = new AreaFormatRecord( rectype, size, data );
break;
case LinkedDataRecord.sid:
- retval = new LinkedDataRecord(rectype, size, data);
+ retval = new LinkedDataRecord( rectype, size, data );
break;
case FormulaRecord.sid:
- retval = new FormulaRecord(rectype, size, data);
+ retval = new FormulaRecord( rectype, size, data );
break;
case SheetPropertiesRecord.sid:
- retval = new SheetPropertiesRecord(rectype, size, data);
+ retval = new SheetPropertiesRecord( rectype, size, data );
break;
case DefaultDataLabelTextPropertiesRecord.sid:
- retval = new DefaultDataLabelTextPropertiesRecord(rectype, size,
data);
+ retval = new DefaultDataLabelTextPropertiesRecord( rectype, size,
data );
break;
case TextRecord.sid:
- retval = new TextRecord(rectype, size, data);
+ retval = new TextRecord( rectype, size, data );
break;
case AxisParentRecord.sid:
- retval = new AxisParentRecord(rectype, size, data);
+ retval = new AxisParentRecord( rectype, size, data );
break;
case AxisLineFormatRecord.sid:
- retval = new AxisLineFormatRecord(rectype, size, data);
+ retval = new AxisLineFormatRecord( rectype, size, data );
break;
case SupBookRecord.sid:
- retval = new SupBookRecord(rectype, size, data);
+ retval = new SupBookRecord( rectype, size, data );
break;
case ExternSheetRecord.sid:
- retval = new ExternSheetRecord(rectype, size, data);
+ retval = new ExternSheetRecord( rectype, size, data );
break;
case SCLRecord.sid:
- retval = new SCLRecord(rectype, size, data);
+ retval = new SCLRecord( rectype, size, data );
break;
case SeriesToChartGroupRecord.sid:
- retval = new SeriesToChartGroupRecord(rectype, size, data);
+ retval = new SeriesToChartGroupRecord( rectype, size, data );
break;
case AxisUsedRecord.sid:
- retval = new AxisUsedRecord(rectype, size, data);
+ retval = new AxisUsedRecord( rectype, size, data );
break;
case AxisRecord.sid:
- retval = new AxisRecord(rectype, size, data);
+ retval = new AxisRecord( rectype, size, data );
break;
case CategorySeriesAxisRecord.sid:
- retval = new CategorySeriesAxisRecord(rectype, size, data);
- break;
+ retval = new CategorySeriesAxisRecord( rectype, size, data );
+ break;
case AxisOptionsRecord.sid:
- retval = new AxisOptionsRecord(rectype, size, data);
+ retval = new AxisOptionsRecord( rectype, size, data );
break;
case TickRecord.sid:
- retval = new TickRecord(rectype, size, data);
+ retval = new TickRecord( rectype, size, data );
break;
case SeriesTextRecord.sid:
- retval = new SeriesTextRecord(rectype, size, data);
+ retval = new SeriesTextRecord( rectype, size, data );
break;
case ObjectLinkRecord.sid:
- retval = new ObjectLinkRecord(rectype, size, data);
+ retval = new ObjectLinkRecord( rectype, size, data );
break;
case PlotAreaRecord.sid:
- retval = new PlotAreaRecord(rectype, size, data);
+ retval = new PlotAreaRecord( rectype, size, data );
break;
case SeriesIndexRecord.sid:
- retval = new SeriesIndexRecord(rectype, size, data);
+ retval = new SeriesIndexRecord( rectype, size, data );
break;
case LegendRecord.sid:
- retval = new LegendRecord(rectype, size, data);
+ retval = new LegendRecord( rectype, size, data );
+ break;
+ case LeftMarginRecord.sid:
+ retval = new LeftMarginRecord( rectype, size, data );
+ break;
+ case LeftMarginRecord.sid:
+ retval = new LeftMarginRecord( rectype, size, data );
+ break;
+ case RightMarginRecord.sid:
+ retval = new RightMarginRecord( rectype, size, data );
+ break;
+ case TopMarginRecord.sid:
+ retval = new TopMarginRecord( rectype, size, data );
+ break;
+ case BottomMarginRecord.sid:
+ retval = new BottomMarginRecord( rectype, size, data );
+ break;
+ case PaletteRecord.sid:
+ retval = new PaletteRecord( rectype, size, data );
+ break;
+ case StringRecord.sid:
+ retval = new StringRecord( rectype, size, data );
break;
- case LeftMarginRecord.sid:
- retval = new LeftMarginRecord(rectype, size, data);
- break;
- case RightMarginRecord.sid:
- retval = new RightMarginRecord(rectype, size, data);
- break;
- case TopMarginRecord.sid:
- retval = new TopMarginRecord(rectype, size, data);
- break;
- case BottomMarginRecord.sid:
- retval = new BottomMarginRecord(rectype, size, data);
- break;
- case PaletteRecord.sid:
- retval = new PaletteRecord(rectype, size, data);
- break;
-
default:
- retval = new UnknownRecord(rectype, size, data);
+ retval = new UnknownRecord( rectype, size, data );
}
- if (realretval == null) {
+ if ( realretval == null )
+ {
realretval = new Record[1];
realretval[0] = retval;
- System.out.println("recordid = 0x" + Integer.toHexString(rectype) + ",
size =" + size);
- System.out.println(realretval[0].toString());
+ System.out.println( "recordid = 0x" + Integer.toHexString( rectype ) +
", size =" + size );
+ System.out.println( realretval[0].toString() );
}
return realretval;
}
1.14 +271 -272 jakarta-poi/src/java/org/apache/poi/hssf/model/Workbook.java
Index: Workbook.java
===================================================================
RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/model/Workbook.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- Workbook.java 21 Jul 2002 03:03:57 -0000 1.13
+++ Workbook.java 29 Jul 2002 13:25:46 -0000 1.14
@@ -93,45 +93,45 @@
public class Workbook {
private static final int DEBUG = POILogger.DEBUG;
-
+
// public static Workbook currentBook = null;
-
+
/**
* constant used to set the "codepage" wherever "codepage" is set in records
* (which is duplciated in more than one record)
*/
-
+
private final static short CODEPAGE = ( short ) 0x4b0;
-
+
/**
* this contains the Worksheet record objects
*/
-
+
protected ArrayList records = null;
-
+
/**
* this contains a reference to the SSTRecord so that new stings can be added
* to it.
*/
-
+
protected SSTRecord sst = null;
-
+
/**
* Holds the Extern Sheet with references to bound sheets
*/
-
+
protected ExternSheetRecord externSheet= null;
-
+
/**
* holds the "boundsheet" records (aka bundlesheet) so that they can have their
* reference to their "BOF" marker
*/
-
-
+
+
protected ArrayList boundsheets = new ArrayList();
-
+
protected ArrayList names = new ArrayList();
-
+
protected int bspos =
0; // holds the position of the last bound sheet.
protected int tabpos =
@@ -150,18 +150,18 @@
0; // holds the position of last name record
private int supbookpos =
0; // holds the position of sup book
-
+
private static POILogger log =
POILogFactory.getLogger(Workbook.class);
-
+
/**
* Creates new Workbook with no intitialization --useless right now
* @see #createWorkbook(List)
*/
-
+
public Workbook() {
}
-
+
/**
* read support for low level
* API. Pass in an array of Record objects, A Workbook
@@ -174,51 +174,51 @@
* @param recs an array of Record objects
* @return Workbook object
*/
-
+
public static Workbook createWorkbook(List recs) {
log.log(DEBUG, "Workbook (readfile) created with reclen=",
new Integer(recs.size()));
Workbook retval = new Workbook();
ArrayList records = new ArrayList(recs.size() / 3);
-
+
for (int k = 0; k < recs.size(); k++) {
Record rec = ( Record ) recs.get(k);
-
+
if (rec.getSid() == EOFRecord.sid) {
records.add(rec);
log.log(DEBUG, "found workbook eof record at " + k);
break;
}
switch (rec.getSid()) {
-
+
case BoundSheetRecord.sid :
log.log(DEBUG, "found boundsheet record at " + k);
retval.boundsheets.add(rec);
retval.bspos = k;
break;
-
+
case SSTRecord.sid :
log.log(DEBUG, "found sst record at " + k);
retval.sst = ( SSTRecord ) rec;
break;
-
+
case FontRecord.sid :
log.log(DEBUG, "found font record at " + k);
retval.fontpos = k;
retval.numfonts++;
break;
-
+
case ExtendedFormatRecord.sid :
log.log(DEBUG, "found XF record at " + k);
retval.xfpos = k;
retval.numxfs++;
break;
-
+
case TabIdRecord.sid :
log.log(DEBUG, "found tabid record at " + k);
retval.tabpos = k;
break;
-
+
case BackupRecord.sid :
log.log(DEBUG, "found backup record at " + k);
retval.backuppos = k;
@@ -238,7 +238,7 @@
log.log(DEBUG, "found SupBook record at " + k);
retval.supbookpos = k;
break;
-
+
default :
}
records.add(rec);
@@ -248,22 +248,22 @@
retval.supbookpos = retval.bspos + 1;
retval.namepos = retval.supbookpos + 1;
}
-
+
retval.records = records;
log.log(DEBUG, "exit create workbook from existing file function");
return retval;
}
-
+
/**
* Creates an empty workbook object with three blank sheets and all the empty
* fields. Use this to create a workbook from scratch.
*/
-
+
public static Workbook createWorkbook() {
log.log(DEBUG, "creating new workbook from scratch");
Workbook retval = new Workbook();
ArrayList records = new ArrayList(30);
-
+
records.add(retval.createBOF());
records.add(retval.createInterfaceHdr());
records.add(retval.createMMS());
@@ -313,7 +313,7 @@
for (int k = 0; k < 1; k++) { // now just do 1
BoundSheetRecord bsr =
( BoundSheetRecord ) retval.createBoundSheet(k);
-
+
records.add(bsr);
retval.boundsheets.add(bsr);
retval.bspos = records.size() - 1;
@@ -322,18 +322,18 @@
retval.sst = ( SSTRecord ) retval.createSST();
records.add(retval.sst);
records.add(retval.createExtendedSST());
-
+
// TODO
records.add(retval.createEOF());
retval.records = records;
log.log(DEBUG, "exit create new workbook from scratch");
return retval;
}
-
+
public int getNumRecords() {
return records.size();
}
-
+
/**
* gets the font record at the given index in the font table. Remember
* "There is No Four" (someone at M$ must have gone to Rocky Horror one too
@@ -342,10 +342,10 @@
* @param idx the index to look at (0 or greater but NOT 4)
* @return FontRecord located at the given index
*/
-
+
public FontRecord getFontRecordAt(int idx) {
int index = idx;
-
+
if (index > 4) {
index -= 1; // adjust for "There is no 4"
}
@@ -356,10 +356,10 @@
}
FontRecord retval =
( FontRecord ) records.get((fontpos - (numfonts - 1)) + index);
-
+
return retval;
}
-
+
/**
* creates a new font record and adds it to the "font table". This causes the
* boundsheets to move down one, extended formats to move down (so this
function moves
@@ -367,10 +367,10 @@
*
* @return FontRecord that was just created
*/
-
+
public FontRecord createNewFont() {
FontRecord rec = ( FontRecord ) createFont();
-
+
++fontpos;
++bspos;
++xfpos;
@@ -378,24 +378,24 @@
numfonts++;
return rec;
}
-
+
/**
* gets the number of font records
*
* @return number of font records in the "font table"
*/
-
+
public int getNumberOfFontRecords() {
return numfonts;
}
-
+
/**
* Sets the BOF for a given sheet
*
* @param sheetnum the number of the sheet to set the positing of the bof for
* @param pos the actual bof position
*/
-
+
public void setSheetBof(int sheetnum, int pos) {
log.log(DEBUG, "setting bof for sheetnum =", new Integer(sheetnum),
" at pos=", new Integer(pos));
@@ -403,16 +403,16 @@
(( BoundSheetRecord ) boundsheets.get(sheetnum))
.setPositionOfBof(pos);
}
-
+
/**
* Returns the position of the backup record.
*/
-
+
public BackupRecord getBackupRecord() {
return ( BackupRecord ) records.get(backuppos);
}
-
-
+
+
/**
* sets the name for a given sheet. If the boundsheet record doesn't exist and
* its only one more than we have, go ahead and create it. If its > 1 more than
@@ -421,45 +421,44 @@
* @param sheetnum the sheet number (0 based)
* @param sheetname the name for the sheet
*/
-
+
// for compartibility
public void setSheetName(int sheetnum, String sheetname ) {
setSheetName( sheetnum, sheetname, (byte)0 );
}
-
+
public void setSheetName(int sheetnum, String sheetname, short encoding ) {
checkSheets(sheetnum);
-
BoundSheetRecord sheet = (BoundSheetRecord)boundsheets.get( sheetnum );
sheet.setSheetname(sheetname);
sheet.setSheetnameLength( (byte)sheetname.length() );
sheet.setCompressedUnicodeFlag( (byte)encoding );
}
-
+
/**
* gets the name for a given sheet.
*
* @param sheetnum the sheet number (0 based)
* @return sheetname the name for the sheet
*/
-
+
public String getSheetName(int sheetnum) {
return (( BoundSheetRecord ) boundsheets.get(sheetnum))
.getSheetname();
}
-
+
/**
* get the sheet's index
* @param name sheet name
* @return sheet index or -1 if it was not found.
*/
-
+
public int getSheetIndex(String name) {
int retval = -1;
-
+
for (int k = 0; k < boundsheets.size(); k++) {
String sheet = getSheetName(k);
-
+
if (sheet.equals(name)) {
retval = k;
break;
@@ -467,12 +466,12 @@
}
return retval;
}
-
+
/**
* if we're trying to address one more sheet than we have, go ahead and add it!
if we're
* trying to address >1 more than we have throw an exception!
*/
-
+
private void checkSheets(int sheetnum) {
if ((boundsheets.size()) <= sheetnum) { // if we're short one add
another..
if ((boundsheets.size() + 1) <= sheetnum) {
@@ -480,13 +479,13 @@
}
BoundSheetRecord bsr =
( BoundSheetRecord ) createBoundSheet(sheetnum);
-
+
records.add(++bspos, bsr);
boundsheets.add(bsr);
fixTabIdRecord();
}
}
-
+
public void removeSheet(int sheetnum) {
if (boundsheets.size() > sheetnum) {
records.remove(bspos - (boundsheets.size() - 1) + sheetnum);
@@ -495,78 +494,78 @@
fixTabIdRecord();
}
}
-
+
/**
* make the tabid record look like the current situation.
*
*/
-
+
private void fixTabIdRecord() {
TabIdRecord tir = ( TabIdRecord ) records.get(tabpos);
short[] tia = new short[ boundsheets.size() ];
-
+
for (short k = 0; k < tia.length; k++) {
tia[ k ] = k;
}
tir.setTabIdArray(tia);
}
-
+
/**
* returns the number of boundsheet objects contained in this workbook.
*
* @return number of BoundSheet records
*/
-
+
public int getNumSheets() {
log.log(DEBUG, "getNumSheets=", new Integer(boundsheets.size()));
return boundsheets.size();
}
-
+
/**
* get the number of ExtendedFormat records contained in this workbook.
*
* @return int count of ExtendedFormat records
*/
-
+
public int getNumExFormats() {
log.log(DEBUG, "getXF=", new Integer(boundsheets.size()));
return numxfs;
}
-
+
/**
* gets the ExtendedFormatRecord at the given 0-based index
*
* @param index of the Extended format record (0-based)
* @return ExtendedFormatRecord at the given index
*/
-
+
public ExtendedFormatRecord getExFormatAt(int index) {
int xfptr = xfpos - (numxfs - 1);
-
+
xfptr += index;
ExtendedFormatRecord retval =
( ExtendedFormatRecord ) records.get(xfptr);
-
+
return retval;
}
-
+
/**
* creates a new Cell-type Extneded Format Record and adds it to the end of
* ExtendedFormatRecords collection
*
* @return ExtendedFormatRecord that was created
*/
-
+
public ExtendedFormatRecord createCellXF() {
ExtendedFormatRecord xf = createExtendedFormat();
-
+
++xfpos;
++bspos;
records.add(xfpos, xf);
numxfs++;
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)
@@ -575,7 +574,7 @@
* @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) {
log.log(DEBUG, "insert to sst string='", string, "' and use16bits= ",
new Boolean(use16bits));
@@ -584,7 +583,7 @@
}
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
@@ -594,56 +593,56 @@
*
* @return index of the string within the SSTRecord
*/
-
+
public int addSSTString(String string) {
return addSSTString(string, false);
}
-
+
/**
* given an index into the SST table, this function returns the corresponding
String value
* @return String containing the SST String
*/
-
+
public String getSSTString(int str) {
if (sst == null) {
insertSST();
}
String retval = sst.getString(str);
-
+
log.log(DEBUG, "Returning SST for index=", new Integer(str),
" String= ", retval);
return retval;
}
-
+
/**
* use this function to add a Shared String Table to an existing sheet (say
* generated by a different java api) without an sst....
* @see #createSST()
* @see org.apache.poi.hssf.record.SSTRecord
*/
-
+
public void insertSST() {
log.log(DEBUG, "creating new SST via insertSST!");
sst = ( SSTRecord ) createSST();
records.add(records.size() - 1, createExtendedSST());
records.add(records.size() - 2, sst);
}
-
+
/**
* Serializes all records int the worksheet section into a big byte array. Use
* this to write the Workbook out.
*
* @return byte array containing the HSSF-only portions of the POIFS file.
*/
-
+
public byte [] serialize() {
log.log(DEBUG, "Serializing Workbook!");
byte[] retval = null;
-
+
// ArrayList bytes = new ArrayList(records.size());
int arraysize = getSize();
int pos = 0;
-
+
// for (int k = 0; k < records.size(); k++)
// {
// bytes.add((( Record ) records.get(k)).serialize());
@@ -654,7 +653,7 @@
// }
retval = new byte[ arraysize ];
for (int k = 0; k < records.size(); k++) {
-
+
// byte[] rec = (( byte [] ) bytes.get(k));
// System.arraycopy(rec, 0, retval, pos, rec.length);
pos += (( Record ) records.get(k)).serialize(pos,
@@ -663,14 +662,14 @@
log.log(DEBUG, "Exiting serialize workbook");
return retval;
}
-
+
/**
* Serializes all records int the worksheet section into a big byte array. Use
* this to write the Workbook out.
* @param offset of the data to be written
* @param data array of bytes to write this to
*/
-
+
public int serialize(int offset, byte [] data) {
log.log(DEBUG, "Serializing Workbook with offsets");
@@ -688,7 +687,7 @@
// arraysize += (( byte [] ) bytes.get(k)).length;
// }
for (int k = 0; k < records.size(); k++) {
-
+
// byte[] rec = (( byte [] ) bytes.get(k));
// System.arraycopy(rec, 0, data, offset + pos, rec.length);
pos += (( Record ) records.get(k)).serialize(pos + offset,
@@ -697,120 +696,120 @@
log.log(DEBUG, "Exiting serialize workbook");
return pos;
}
-
+
public int getSize() {
int retval = 0;
-
+
for (int k = 0; k < records.size(); k++) {
retval += (( Record ) records.get(k)).getRecordSize();
}
return retval;
}
-
+
/**
* creates the BOF record
* @see org.apache.poi.hssf.record.BOFRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a BOFRecord
*/
-
+
protected Record createBOF() {
BOFRecord retval = new BOFRecord();
-
+
retval.setVersion(( short ) 0x600);
retval.setType(( short ) 5);
retval.setBuild(( short ) 0x10d3);
-
+
// retval.setBuild((short)0x0dbb);
retval.setBuildYear(( short ) 1996);
retval.setHistoryBitMask(0x41); // was c1 before verify
retval.setRequiredVersion(0x6);
return retval;
}
-
+
/**
* creates the InterfaceHdr record
* @see org.apache.poi.hssf.record.InterfaceHdrRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a InterfaceHdrRecord
*/
-
+
protected Record createInterfaceHdr() {
InterfaceHdrRecord retval = new InterfaceHdrRecord();
-
+
retval.setCodepage(CODEPAGE);
return retval;
}
-
+
/**
* creates an MMS record
* @see org.apache.poi.hssf.record.MMSRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a MMSRecord
*/
-
+
protected Record createMMS() {
MMSRecord retval = new MMSRecord();
-
+
retval.setAddMenuCount(( byte ) 0);
retval.setDelMenuCount(( byte ) 0);
return retval;
}
-
+
/**
* creates the InterfaceEnd record
* @see org.apache.poi.hssf.record.InterfaceEndRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a InterfaceEndRecord
*/
-
+
protected Record createInterfaceEnd() {
return new InterfaceEndRecord();
}
-
+
/**
* creates the WriteAccess record containing the logged in user's name
* @see org.apache.poi.hssf.record.WriteAccessRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a WriteAccessRecord
*/
-
+
protected Record createWriteAccess() {
WriteAccessRecord retval = new WriteAccessRecord();
-
+
retval.setUsername(System.getProperty("user.name"));
return retval;
}
-
+
/**
* creates the Codepage record containing the constant stored in CODEPAGE
* @see org.apache.poi.hssf.record.CodepageRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a CodepageRecord
*/
-
+
protected Record createCodepage() {
CodepageRecord retval = new CodepageRecord();
-
+
retval.setCodepage(CODEPAGE);
return retval;
}
-
+
/**
* creates the DSF record containing a 0 since HSSF can't even create Dual
Stream Files
* @see org.apache.poi.hssf.record.DSFRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a DSFRecord
*/
-
+
protected Record createDSF() {
DSFRecord retval = new DSFRecord();
-
+
retval.setDsf(
( short ) 0); // we don't even support double stream files
return retval;
}
-
+
/**
* creates the TabId record containing an array of 0,1,2. This release of HSSF
* always has the default three sheets, no less, no more.
@@ -818,103 +817,103 @@
* @see org.apache.poi.hssf.record.Record
* @return record containing a TabIdRecord
*/
-
+
protected Record createTabId() {
TabIdRecord retval = new TabIdRecord();
short[] tabidarray = {
0
};
-
+
retval.setTabIdArray(tabidarray);
return retval;
}
-
+
/**
* creates the FnGroupCount record containing the Magic number constant of 14.
* @see org.apache.poi.hssf.record.FnGroupCountRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a FnGroupCountRecord
*/
-
+
protected Record createFnGroupCount() {
FnGroupCountRecord retval = new FnGroupCountRecord();
-
+
retval.setCount(( short ) 14);
return retval;
}
-
+
/**
* creates the WindowProtect record with protect set to false.
* @see org.apache.poi.hssf.record.WindowProtectRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a WindowProtectRecord
*/
-
+
protected Record createWindowProtect() {
WindowProtectRecord retval = new WindowProtectRecord();
-
+
retval.setProtect(
false); // by default even when we support it we won't
return retval; // want it to be protected
}
-
+
/**
* creates the Protect record with protect set to false.
* @see org.apache.poi.hssf.record.ProtectRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a ProtectRecord
*/
-
+
protected Record createProtect() {
ProtectRecord retval = new ProtectRecord();
-
+
retval.setProtect(
false); // by default even when we support it we won't
return retval; // want it to be protected
}
-
+
/**
* creates the Password record with password set to 0.
* @see org.apache.poi.hssf.record.PasswordRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a PasswordRecord
*/
-
+
protected Record createPassword() {
PasswordRecord retval = new PasswordRecord();
-
+
retval.setPassword(( short ) 0); // no password by default!
return retval;
}
-
+
/**
* creates the ProtectionRev4 record with protect set to false.
* @see org.apache.poi.hssf.record.ProtectionRev4Record
* @see org.apache.poi.hssf.record.Record
* @return record containing a ProtectionRev4Record
*/
-
+
protected Record createProtectionRev4() {
ProtectionRev4Record retval = new ProtectionRev4Record();
-
+
retval.setProtect(false);
return retval;
}
-
+
/**
* creates the PasswordRev4 record with password set to 0.
* @see org.apache.poi.hssf.record.PasswordRev4Record
* @see org.apache.poi.hssf.record.Record
* @return record containing a PasswordRev4Record
*/
-
+
protected Record createPasswordRev4() {
PasswordRev4Record retval = new PasswordRev4Record();
-
+
retval.setPassword(( short ) 0); // no password by default!
return retval;
}
-
+
/**
* creates the WindowOne record with the following magic values: <P>
* horizontal hold - 0x168 <P>
@@ -930,10 +929,10 @@
* @see org.apache.poi.hssf.record.Record
* @return record containing a WindowOneRecord
*/
-
+
protected Record createWindowOne() {
WindowOneRecord retval = new WindowOneRecord();
-
+
retval.setHorizontalHold(( short ) 0x168);
retval.setVerticalHold(( short ) 0x10e);
retval.setWidth(( short ) 0x3a5c);
@@ -945,94 +944,94 @@
retval.setTabWidthRatio(( short ) 0x258);
return retval;
}
-
+
/**
* creates the Backup record with backup set to 0. (loose the data, who cares)
* @see org.apache.poi.hssf.record.BackupRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a BackupRecord
*/
-
+
protected Record createBackup() {
BackupRecord retval = new BackupRecord();
-
+
retval.setBackup(
( short ) 0); // by default DONT save backups of files...just loose data
return retval;
}
-
+
/**
* creates the HideObj record with hide object set to 0. (don't hide)
* @see org.apache.poi.hssf.record.HideObjRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a HideObjRecord
*/
-
+
protected Record createHideObj() {
HideObjRecord retval = new HideObjRecord();
-
+
retval.setHideObj(( short ) 0); // by default set hide object off
return retval;
}
-
+
/**
* creates the DateWindow1904 record with windowing set to 0. (don't window)
* @see org.apache.poi.hssf.record.DateWindow1904Record
* @see org.apache.poi.hssf.record.Record
* @return record containing a DateWindow1904Record
*/
-
+
protected Record createDateWindow1904() {
DateWindow1904Record retval = new DateWindow1904Record();
-
+
retval.setWindowing(
( short ) 0); // don't EVER use 1904 date windowing...tick tock..
return retval;
}
-
+
/**
* creates the Precision record with precision set to true. (full precision)
* @see org.apache.poi.hssf.record.PrecisionRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a PrecisionRecord
*/
-
+
protected Record createPrecision() {
PrecisionRecord retval = new PrecisionRecord();
-
+
retval.setFullPrecision(
true); // always use real numbers in calculations!
return retval;
}
-
+
/**
* creates the RefreshAll record with refreshAll set to true. (refresh all
calcs)
* @see org.apache.poi.hssf.record.RefreshAllRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a RefreshAllRecord
*/
-
+
protected Record createRefreshAll() {
RefreshAllRecord retval = new RefreshAllRecord();
-
+
retval.setRefreshAll(false);
return retval;
}
-
+
/**
* creates the BookBool record with saveLinkValues set to 0. (don't save link
values)
* @see org.apache.poi.hssf.record.BookBoolRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a BookBoolRecord
*/
-
+
protected Record createBookBool() {
BookBoolRecord retval = new BookBoolRecord();
-
+
retval.setSaveLinkValues(( short ) 0);
return retval;
}
-
+
/**
* creates a Font record with the following magic values: <P>
* fontheight = 0xc8<P>
@@ -1046,10 +1045,10 @@
* @see org.apache.poi.hssf.record.Record
* @return record containing a FontRecord
*/
-
+
protected Record createFont() {
FontRecord retval = new FontRecord();
-
+
retval.setFontHeight(( short ) 0xc8);
retval.setAttributes(( short ) 0x0);
retval.setColorPaletteIndex(( short ) 0x7fff);
@@ -1058,7 +1057,7 @@
retval.setFontName("Arial");
return retval;
}
-
+
/**
* Creates a FormatRecord object
* @param id the number of the format record to create (meaning its position
in
@@ -1067,58 +1066,58 @@
* @see org.apache.poi.hssf.record.FormatRecord
* @see org.apache.poi.hssf.record.Record
*/
-
+
protected Record createFormat(int id) { // we'll need multiple editions for
FormatRecord retval = new FormatRecord(); // the differnt formats
-
+
switch (id) {
-
+
case 0 :
retval.setIndexCode(( short ) 5);
retval.setFormatStringLength(( byte ) 0x17);
retval.setFormatString("\"$\"#,##0_);\\(\"$\"#,##0\\)");
break;
-
+
case 1 :
retval.setIndexCode(( short ) 6);
retval.setFormatStringLength(( byte ) 0x1c);
retval.setFormatString("\"$\"#,##0_);[Red]\\(\"$\"#,##0\\)");
break;
-
+
case 2 :
retval.setIndexCode(( short ) 7);
retval.setFormatStringLength(( byte ) 0x1d);
retval.setFormatString("\"$\"#,##0.00_);\\(\"$\"#,##0.00\\)");
break;
-
+
case 3 :
retval.setIndexCode(( short ) 8);
retval.setFormatStringLength(( byte ) 0x22);
retval.setFormatString(
"\"$\"#,##0.00_);[Red]\\(\"$\"#,##0.00\\)");
break;
-
+
case 4 :
retval.setIndexCode(( short ) 0x2a);
retval.setFormatStringLength(( byte ) 0x32);
retval.setFormatString(
"_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)");
break;
-
+
case 5 :
retval.setIndexCode(( short ) 0x29);
retval.setFormatStringLength(( byte ) 0x29);
retval.setFormatString(
"_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)");
break;
-
+
case 6 :
retval.setIndexCode(( short ) 0x2c);
retval.setFormatStringLength(( byte ) 0x3a);
retval.setFormatString(
"_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"*
\"-\"??_);_(@_)");
break;
-
+
case 7 :
retval.setIndexCode(( short ) 0x2b);
retval.setFormatStringLength(( byte ) 0x31);
@@ -1128,7 +1127,7 @@
}
return retval;
}
-
+
/**
* Creates an ExtendedFormatRecord object
* @param id the number of the extended format record to create (meaning its
position in
@@ -1138,12 +1137,12 @@
* @see org.apache.poi.hssf.record.ExtendedFormatRecord
* @see org.apache.poi.hssf.record.Record
*/
-
+
protected Record createExtendedFormat(int id) { // we'll need multiple
editions
ExtendedFormatRecord retval = new ExtendedFormatRecord();
-
+
switch (id) {
-
+
case 0 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0);
@@ -1155,7 +1154,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 1 :
retval.setFontIndex(( short ) 1);
retval.setFormatIndex(( short ) 0);
@@ -1167,7 +1166,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 2 :
retval.setFontIndex(( short ) 1);
retval.setFormatIndex(( short ) 0);
@@ -1179,7 +1178,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 3 :
retval.setFontIndex(( short ) 2);
retval.setFormatIndex(( short ) 0);
@@ -1191,7 +1190,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 4 :
retval.setFontIndex(( short ) 2);
retval.setFormatIndex(( short ) 0);
@@ -1203,7 +1202,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 5 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0);
@@ -1215,7 +1214,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 6 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0);
@@ -1227,7 +1226,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 7 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0);
@@ -1239,7 +1238,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 8 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0);
@@ -1251,7 +1250,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 9 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0);
@@ -1263,7 +1262,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 10 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0);
@@ -1275,7 +1274,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 11 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0);
@@ -1287,7 +1286,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 12 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0);
@@ -1299,7 +1298,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 13 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0);
@@ -1311,7 +1310,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 14 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0);
@@ -1323,7 +1322,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
// cell records
case 15 :
retval.setFontIndex(( short ) 0);
@@ -1336,7 +1335,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
// style
case 16 :
retval.setFontIndex(( short ) 1);
@@ -1349,7 +1348,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 17 :
retval.setFontIndex(( short ) 1);
retval.setFormatIndex(( short ) 0x29);
@@ -1361,7 +1360,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 18 :
retval.setFontIndex(( short ) 1);
retval.setFormatIndex(( short ) 0x2c);
@@ -1373,7 +1372,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 19 :
retval.setFontIndex(( short ) 1);
retval.setFormatIndex(( short ) 0x2a);
@@ -1385,7 +1384,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 20 :
retval.setFontIndex(( short ) 1);
retval.setFormatIndex(( short ) 0x9);
@@ -1397,7 +1396,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
// unused from this point down
case 21 :
retval.setFontIndex(( short ) 5);
@@ -1410,7 +1409,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 22 :
retval.setFontIndex(( short ) 6);
retval.setFormatIndex(( short ) 0x0);
@@ -1422,7 +1421,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 23 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0x31);
@@ -1434,7 +1433,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 24 :
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0x8);
@@ -1446,7 +1445,7 @@
retval.setAdtlPaletteOptions(( short ) 0);
retval.setFillPaletteOptions(( short ) 0x20c0);
break;
-
+
case 25 :
retval.setFontIndex(( short ) 6);
retval.setFormatIndex(( short ) 0x8);
@@ -1461,15 +1460,15 @@
}
return retval;
}
-
+
/**
* creates an default cell type ExtendedFormatRecord object.
* @return ExtendedFormatRecord with intial defaults (cell-type)
*/
-
+
protected ExtendedFormatRecord createExtendedFormat() {
ExtendedFormatRecord retval = new ExtendedFormatRecord();
-
+
retval.setFontIndex(( short ) 0);
retval.setFormatIndex(( short ) 0x0);
retval.setCellOptions(( short ) 0x1);
@@ -1485,7 +1484,7 @@
retval.setRightBorderPaletteIdx(HSSFColor.BLACK.index);
return retval;
}
-
+
/**
* Creates a StyleRecord object
* @param id the number of the style record to create (meaning its
position in
@@ -1494,42 +1493,42 @@
* @see org.apache.poi.hssf.record.StyleRecord
* @see org.apache.poi.hssf.record.Record
*/
-
+
protected Record createStyle(int id) { // we'll need multiple editions
StyleRecord retval = new StyleRecord();
-
+
switch (id) {
-
+
case 0 :
retval.setIndex(( short ) 0xffff8010);
retval.setBuiltin(( byte ) 3);
retval.setOutlineStyleLevel(( byte ) 0xffffffff);
break;
-
+
case 1 :
retval.setIndex(( short ) 0xffff8011);
retval.setBuiltin(( byte ) 6);
retval.setOutlineStyleLevel(( byte ) 0xffffffff);
break;
-
+
case 2 :
retval.setIndex(( short ) 0xffff8012);
retval.setBuiltin(( byte ) 4);
retval.setOutlineStyleLevel(( byte ) 0xffffffff);
break;
-
+
case 3 :
retval.setIndex(( short ) 0xffff8013);
retval.setBuiltin(( byte ) 7);
retval.setOutlineStyleLevel(( byte ) 0xffffffff);
break;
-
+
case 4 :
retval.setIndex(( short ) 0xffff8000);
retval.setBuiltin(( byte ) 0);
retval.setOutlineStyleLevel(( byte ) 0xffffffff);
break;
-
+
case 5 :
retval.setIndex(( short ) 0xffff8014);
retval.setBuiltin(( byte ) 5);
@@ -1538,21 +1537,21 @@
}
return retval;
}
-
+
/**
* Creates the UseSelFS object with the use natural language flag set to 0
(false)
* @return record containing a UseSelFSRecord
* @see org.apache.poi.hssf.record.UseSelFSRecord
* @see org.apache.poi.hssf.record.Record
*/
-
+
protected Record createUseSelFS() {
UseSelFSRecord retval = new UseSelFSRecord();
-
+
retval.setFlag(( short ) 0);
return retval;
}
-
+
/**
* create a "bound sheet" or "bundlesheet" (depending who you ask) record
* Always sets the sheet's bof to 0. You'll need to set that yourself.
@@ -1561,12 +1560,12 @@
* @see org.apache.poi.hssf.record.BoundSheetRecord
* @see org.apache.poi.hssf.record.Record
*/
-
+
protected Record createBoundSheet(int id) { // 1,2,3 sheets
BoundSheetRecord retval = new BoundSheetRecord();
-
+
switch (id) {
-
+
case 0 :
retval.setPositionOfBof(0x0); // should be set later
retval.setOptionFlags(( short ) 0);
@@ -1574,7 +1573,7 @@
retval.setCompressedUnicodeFlag(( byte ) 0);
retval.setSheetname("Sheet1");
break;
-
+
case 1 :
retval.setPositionOfBof(0x0); // should be set later
retval.setOptionFlags(( short ) 0);
@@ -1582,7 +1581,7 @@
retval.setCompressedUnicodeFlag(( byte ) 0);
retval.setSheetname("Sheet2");
break;
-
+
case 2 :
retval.setPositionOfBof(0x0); // should be set later
retval.setOptionFlags(( short ) 0);
@@ -1593,7 +1592,7 @@
}
return retval;
}
-
+
/**
* Creates the Country record with the default country set to 1
* and current country set to 7 in case of russian locale ("ru_RU") and 1
otherwise
@@ -1601,12 +1600,12 @@
* @see org.apache.poi.hssf.record.CountryRecord
* @see org.apache.poi.hssf.record.Record
*/
-
+
protected Record createCountry() { // what a novel idea, create your own!
CountryRecord retval = new CountryRecord();
-
+
retval.setDefaultCountry(( short ) 1);
-
+
// from Russia with love ;)
if ( Locale.getDefault().toString().equals( "ru_RU" ) ) {
retval.setCurrentCountry(( short ) 7);
@@ -1614,21 +1613,21 @@
else {
retval.setCurrentCountry(( short ) 1);
}
-
+
return retval;
}
-
+
/**
* Creates the SST record with no strings and the unique/num string set to 0
* @return record containing a SSTRecord
* @see org.apache.poi.hssf.record.SSTRecord
* @see org.apache.poi.hssf.record.Record
*/
-
+
protected Record createSST() {
return new SSTRecord();
}
-
+
/**
* Creates the ExtendedSST record with numstrings per bucket set to 0x8. HSSF
* doesn't yet know what to do with this thing, but we create it with nothing in
@@ -1638,21 +1637,21 @@
* @see org.apache.poi.hssf.record.ExtSSTRecord
* @see org.apache.poi.hssf.record.Record
*/
-
+
protected Record createExtendedSST() {
ExtSSTRecord retval = new ExtSSTRecord();
-
+
retval.setNumStringsPerBucket(( short ) 0x8);
return retval;
}
-
+
/**
* creates the EOF record
* @see org.apache.poi.hssf.record.EOFRecord
* @see org.apache.poi.hssf.record.Record
* @return record containing a EOFRecord
*/
-
+
protected Record createEOF() {
return new EOFRecord();
}
@@ -1668,104 +1667,104 @@
}
return refs;
}
-
+
/** fins the sheet name by his extern sheet index
* @param num extern sheet index
* @return sheet name
*/
public String findSheetNameFromExternSheet(short num){
String result;
-
+
short indexToSheet =
externSheet.getREFRecordAt(num).getIndexToFirstSupBook();
result = getSheetName(indexToSheet);
-
+
return result;
}
-
+
/** returns the extern sheet number for specific sheet number ,
* if this sheet doesn't exist in extern sheet , add it
* @param sheetNumber sheet number
* @return index to extern sheet
*/
public short checkExternSheet(int sheetNumber){
-
+
int i = 0;
boolean flag = false;
short result = 0;
-
+
if (externSheet == null) {
externSheet = createExternSheet();
}
-
+
//Trying to find reference to this sheet
while (i < externSheet.getNumOfREFStructures() && !flag){
ExternSheetSubRecord record = externSheet.getREFRecordAt(i);
-
+
if (record.getIndexToFirstSupBook() == sheetNumber &&
record.getIndexToLastSupBook() == sheetNumber){
flag = true;
result = (short) i;
}
-
+
++i;
}
-
+
//We Havent found reference to this sheet
if (!flag) {
result = addSheetIndexToExternSheet((short) sheetNumber);
}
-
+
return result;
}
-
+
private short addSheetIndexToExternSheet(short sheetNumber){
short result;
-
+
ExternSheetSubRecord record = new ExternSheetSubRecord();
record.setIndexToFirstSupBook(sheetNumber);
record.setIndexToLastSupBook(sheetNumber);
externSheet.addREFRecord(record);
externSheet.setNumOfREFStructures((short)(externSheet.getNumOfREFStructures() + 1));
result = (short)(externSheet.getNumOfREFStructures() - 1);
-
+
return result;
}
-
-
-
+
+
+
/** gets the total number of names
* @return number of names
*/
public int getNumNames(){
int result = names.size();
-
+
return result;
}
-
+
/** gets the name record
* @param index name index
* @return name record
*/
public NameRecord getNameRecord(int index){
NameRecord result = (NameRecord) names.get(index);
-
+
return result;
-
+
}
-
+
/** creates new name
* @return new name record
*/
public NameRecord createName(){
-
+
NameRecord name = new NameRecord();
-
+
records.add(++namepos, name);
names.add(name);
-
+
return name;
}
-
+
/** removes the name
* @param namenum name index
*/
@@ -1775,37 +1774,37 @@
namepos--;
names.remove(namenum);
}
-
+
}
-
+
/** creates a new extern sheet record
* @return the new extern sheet record
*/
protected ExternSheetRecord createExternSheet(){
ExternSheetRecord rec = new ExternSheetRecord();
-
+
records.add(supbookpos + 1 , rec);
-
+
//We also adds the supBook for internal reference
SupBookRecord supbook = new SupBookRecord();
-
+
supbook.setNumberOfSheets((short)getNumSheets());
//supbook.setFlag();
-
+
records.add(supbookpos + 1 , supbook);
-
+
return rec;
}
-
-
+
+
/**
* Returns the first occurance of a record matching a particular sid.
*/
-
+
public Record findFirstRecordBySid(short sid) {
for (Iterator iterator = records.iterator(); iterator.hasNext(); ) {
Record record = ( Record ) iterator.next();
-
+
if (record.getSid() == sid) {
return record;
}
1.3 +1 -1 jakarta-poi/src/java/org/apache/poi/hssf/record/Record.java
Index: Record.java
===================================================================
RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/Record.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Record.java 11 Feb 2002 10:45:50 -0000 1.2
+++ Record.java 29 Jul 2002 13:25:46 -0000 1.3
@@ -182,7 +182,7 @@
public abstract int serialize(int offset, byte [] data);
/**
- * gives the current serialized size of the record.
+ * gives the current serialized size of the record. Should include the sid and
reclength (4 bytes).
*/
public int getRecordSize()
1.11 +8 -8
jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java
Index: RecordFactory.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- RecordFactory.java 25 Jul 2002 05:10:23 -0000 1.10
+++ RecordFactory.java 29 Jul 2002 13:25:46 -0000 1.11
@@ -78,7 +78,7 @@
{
private static int NUM_RECORDS = 10000;
private static final Class[] records;
-
+
static {
if (FormulaRecord.EXPERIMENTAL_FORMULA_SUPPORT_ENABLED) {
records = new Class[]
@@ -107,9 +107,9 @@
LabelRecord.class, BlankRecord.class, ColumnInfoRecord.class,
MulRKRecord.class, MulBlankRecord.class, MergeCellsRecord.class,
FormulaRecord.class, BoolErrRecord.class, ExternSheetRecord.class,
- NameRecord.class, LeftMarginRecord.class, RightMarginRecord.class,
- TopMarginRecord.class, BottomMarginRecord.class,
- PaletteRecord.class
+ NameRecord.class, LeftMarginRecord.class, RightMarginRecord.class,
+ TopMarginRecord.class, BottomMarginRecord.class,
+ PaletteRecord.class, StringRecord.class
};
} else {
records = new Class[]
@@ -138,11 +138,11 @@
LabelRecord.class, BlankRecord.class, ColumnInfoRecord.class,
MulRKRecord.class, MulBlankRecord.class, MergeCellsRecord.class,
BoolErrRecord.class, ExternSheetRecord.class, NameRecord.class,
- LeftMarginRecord.class, RightMarginRecord.class,
- TopMarginRecord.class, BottomMarginRecord.class,
- PaletteRecord.class
+ LeftMarginRecord.class, RightMarginRecord.class,
+ TopMarginRecord.class, BottomMarginRecord.class,
+ PaletteRecord.class, StringRecord.class
};
-
+
}
}
private static Map recordsMap = recordsToMap(records);
1.1
jakarta-poi/src/java/org/apache/poi/hssf/record/StringRecord.java
Index: StringRecord.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache POI" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* "Apache POI", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.poi.hssf.record;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.StringUtil;
/**
* Supports the STRING record structure.
*
* @author Glen Stampoultzis (glens at apache.org)
*/
public class StringRecord
extends Record
{
public final static short sid = 0x207;
private int field_1_string_length;
private byte field_2_unicode_flag;
private String field_3_string;
public StringRecord()
{
}
/**
* Constructs a String 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)
*/
public StringRecord( short id, short size, byte[] data )
{
super( id, size, data );
}
/**
* Constructs an String 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 StringRecord( short id, short size, byte[] data, int offset )
{
super( id, size, data, offset );
}
/**
* Throw a runtime exception in the event of a
* record passed with a differing ID.
*
* @param id alleged id for this record
*/
protected void validateSid( short id )
{
if (id != this.sid)
{
throw new RecordFormatException("Not a valid StringRecord");
}
}
/**
* called by the constructor, should set class level fields. Should throw
* runtime exception for bad/icomplete data.
*
* @param data raw data
* @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_string_length = LittleEndian.getUShort(data, 0 + offset);
field_2_unicode_flag = data[ 2 + offset ];
if (isUnCompressedUnicode())
{
field_3_string = StringUtil.getFromUnicode(data, 3 + offset,
field_1_string_length );
}
else
{
field_3_string = new String(data, 3 + offset, getStringLength());
}
}
private int getStringLength()
{
return field_1_string_length;
}
private int getStringByteLength()
{
return isUnCompressedUnicode() ? field_1_string_length * 2 :
field_1_string_length;
}
/**
* gives the current serialized size of the record. Should include the sid and
reclength (4 bytes).
*/
public int getRecordSize()
{
return 4 + 2 + 1 + getStringByteLength();
}
/**
* is this uncompressed unicode (16bit)? Or just 8-bit compressed?
* @return isUnicode - True for 16bit- false for 8bit
*/
public boolean isUnCompressedUnicode()
{
return (field_2_unicode_flag == 1);
}
/**
* called by the class that is responsible for writing this sucker.
* Subclasses should implement this so that their data is passed back in a
* byte array.
*
* @param offset to begin writing at
* @param data byte array containing instance data
* @return number of bytes written
*/
public int serialize( int offset, byte[] data )
{
LittleEndian.putShort(data, 0 + offset, sid);
LittleEndian.putShort(data, 2 + offset, ( short ) (2 +
getStringByteLength()));
LittleEndian.putUShort(data, 4 + offset, field_1_string_length);
data[6 + offset] = field_2_unicode_flag;
if (isUnCompressedUnicode())
{
StringUtil.putUncompressedUnicode(field_3_string, data, 7 + offset);
}
else
{
StringUtil.putCompressedUnicode(field_3_string, data, 7 + offset);
}
return getRecordSize();
}
/**
* return the non static version of the id for this record.
*/
public short getSid()
{
return sid;
}
/**
* @return The string represented by this record.
*/
public String getString()
{
return field_3_string;
}
/**
* Sets whether the string is compressed or not
* @param unicode_flag 1 = uncompressed, 0 = compressed
*/
public void setCompressedFlag( byte unicode_flag )
{
this.field_2_unicode_flag = unicode_flag;
}
/**
* Sets the string represented by this record.
*/
public void setString( String string )
{
this.field_1_string_length = string.length();
this.field_3_string = string;
}
public String toString()
{
StringBuffer buffer = new StringBuffer();
buffer.append("[STRING]\n");
buffer.append(" .string = ")
.append(field_3_string).append("\n");
buffer.append("[/STRING]\n");
return buffer.toString();
}
}
1.1
jakarta-poi/src/testcases/org/apache/poi/hssf/record/TestStringRecord.java
Index: TestStringRecord.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache POI" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* "Apache POI", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.poi.hssf.record;
import junit.framework.TestCase;
/**
* Tests the serialization and deserialization of the StringRecord
* class works correctly. Test data taken directly from a real
* Excel file.
*
* @author Glen Stampoultzis (glens at apache.org)
*/
public class TestStringRecord
extends TestCase
{
byte[] data = new byte[] {
(byte)0x0B,(byte)0x00, // length
(byte)0x00, // option
// string
(byte)0x46,(byte)0x61,(byte)0x68,(byte)0x72,(byte)0x7A,(byte)0x65,(byte)0x75,(byte)0x67,(byte)0x74,(byte)0x79,(byte)0x70
};
public TestStringRecord(String name)
{
super(name);
}
public void testLoad()
throws Exception
{
StringRecord record = new StringRecord((short)0x207, (short)data.length,
data);
assertEquals( "Fahrzeugtyp", record.getString());
assertEquals( 18, record.getRecordSize() );
record.validateSid((short)0x207);
}
public void testStore()
{
StringRecord record = new StringRecord();
record.setString("Fahrzeugtyp");
byte [] recordBytes = record.serialize();
assertEquals(recordBytes.length - 4, data.length);
for (int i = 0; i < data.length; i++)
assertEquals("At offset " + i, data[i], recordBytes[i+4]);
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>