mirror of https://github.com/apache/poi.git
Some fixes to the branch. Lots left to do. Boolean records aren't supported at all. Empty spreadsheets have issues but this is a start on getting things healthy again.
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353549 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4522806d29
commit
7081acbc74
|
@ -10,3 +10,4 @@ log*.*
|
||||||
build
|
build
|
||||||
.classpath
|
.classpath
|
||||||
.project
|
.project
|
||||||
|
workbook.xls
|
||||||
|
|
|
@ -91,6 +91,7 @@
|
||||||
<path id="main.classpath">
|
<path id="main.classpath">
|
||||||
<pathelement location="${main.jar1.dir}"/>
|
<pathelement location="${main.jar1.dir}"/>
|
||||||
<pathelement location="${main.jar2.dir}"/>
|
<pathelement location="${main.jar2.dir}"/>
|
||||||
|
<pathelement location="${main.resource1.dir}"/>
|
||||||
</path>
|
</path>
|
||||||
|
|
||||||
<path id="scratchpad.classpath">
|
<path id="scratchpad.classpath">
|
||||||
|
@ -216,6 +217,9 @@ Main targets:
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="compile-main" depends="init">
|
<target name="compile-main" depends="init">
|
||||||
|
<copy todir="${main.output.dir}">
|
||||||
|
<fileset dir="${main.resource1.dir}"/>
|
||||||
|
</copy>
|
||||||
<javac srcdir="${main.src}" destdir="${main.output.dir}" debug="on">
|
<javac srcdir="${main.src}" destdir="${main.output.dir}" debug="on">
|
||||||
<classpath refid="main.classpath"/>
|
<classpath refid="main.classpath"/>
|
||||||
</javac>
|
</javac>
|
||||||
|
|
|
@ -398,8 +398,8 @@ public class Sheet implements Model
|
||||||
(DefaultColWidthRecord) retval.createDefaultColWidth();
|
(DefaultColWidthRecord) retval.createDefaultColWidth();
|
||||||
records.add( retval.defaultcolwidth);
|
records.add( retval.defaultcolwidth);
|
||||||
retval.dims = ( DimensionsRecord ) retval.createDimensions();
|
retval.dims = ( DimensionsRecord ) retval.createDimensions();
|
||||||
retval.dimsloc = records.size()-1;
|
|
||||||
records.add(retval.dims);
|
records.add(retval.dims);
|
||||||
|
retval.dimsloc = records.size()-1;
|
||||||
records.add(retval.windowTwo = retval.createWindowTwo());
|
records.add(retval.windowTwo = retval.createWindowTwo());
|
||||||
retval.setLoc(records.size() - 1);
|
retval.setLoc(records.size() - 1);
|
||||||
retval.selection =
|
retval.selection =
|
||||||
|
|
|
@ -18,16 +18,16 @@
|
||||||
|
|
||||||
package org.apache.poi.hssf.record.aggregates;
|
package org.apache.poi.hssf.record.aggregates;
|
||||||
|
|
||||||
import org.apache.poi.hssf.usermodel.HSSFCell; //kludge shouldn't refer to this
|
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.*;
|
import org.apache.poi.hssf.record.*;
|
||||||
import org.apache.poi.hssf.record.formula.Ptg;
|
import org.apache.poi.hssf.record.formula.Ptg;
|
||||||
import org.apache.poi.util.DoubleList;
|
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||||
|
import org.apache.poi.util.DoubleList2d;
|
||||||
import org.apache.poi.util.IntList;
|
import org.apache.poi.util.IntList;
|
||||||
|
import org.apache.poi.util.IntList2d;
|
||||||
|
import org.apache.poi.util.List2d;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -42,29 +42,23 @@ public class ValueRecordsAggregate
|
||||||
extends Record
|
extends Record
|
||||||
{
|
{
|
||||||
public final static short sid = -1000;
|
public final static short sid = -1000;
|
||||||
int firstcell = -1;
|
|
||||||
int lastcell = -1;
|
|
||||||
//TreeMap records = null;
|
|
||||||
|
|
||||||
private final static int DEFAULT_ROWS=10000;
|
private final static int DEFAULT_ROWS=10000;
|
||||||
private final static int DEFAULT_COLS=256;
|
private final static int DEFAULT_COLS=256;
|
||||||
|
|
||||||
List celltype = null; //array of HSSFCEll.CELL_TYPE_XXX tells us which arrays to use
|
IntList2d celltype = null;
|
||||||
List xfs = null; // array of style types. Index of XF record
|
IntList2d xfs = null; // array of style types. Index of XF record
|
||||||
List numericcells = null; // numeric and Shared string indicies.
|
DoubleList2d numericcells = null; // numeric and Shared string indicies.
|
||||||
List formulaptgs = null; // array of arrays of PTGS
|
List2d formulaptgs = null; // array of arrays of FormulaRecordAggregate
|
||||||
List stringvals = null; // array of actual string/formula string vals
|
List2d stringvals = null; // array of actual string/formula string vals
|
||||||
IntList populatedRows = null; //indicies of populated rows
|
IntList populatedRows = null; //indicies of populated rows
|
||||||
int physCells; //physical number of cells
|
int physCells; //physical number of cells
|
||||||
|
|
||||||
public CellValueRecordInterface getCell(int row, short col) {
|
public CellValueRecordInterface getCell(int row, short col) {
|
||||||
return constructRecord(row, col);
|
return constructRecord(row, col);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getRecordSize() {
|
public int getRecordSize() {
|
||||||
//throw new RuntimeException("Not Implemented getRecordSize");
|
|
||||||
|
|
||||||
int size = 0;
|
int size = 0;
|
||||||
Iterator irecs = getIterator();
|
Iterator irecs = getIterator();
|
||||||
|
|
||||||
|
@ -73,7 +67,6 @@ public class ValueRecordsAggregate
|
||||||
}
|
}
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
// return size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int serialize(int offset, byte [] data)
|
public int serialize(int offset, byte [] data)
|
||||||
|
@ -82,13 +75,13 @@ public class ValueRecordsAggregate
|
||||||
}
|
}
|
||||||
|
|
||||||
public ValueRecordsAggregate() {
|
public ValueRecordsAggregate() {
|
||||||
celltype = new ArrayList(DEFAULT_ROWS);
|
celltype = new IntList2d();
|
||||||
xfs = new ArrayList(DEFAULT_ROWS);
|
xfs = new IntList2d();
|
||||||
numericcells = new ArrayList(DEFAULT_ROWS);
|
numericcells = new DoubleList2d();
|
||||||
formulaptgs = new ArrayList(DEFAULT_ROWS);
|
formulaptgs = new List2d();
|
||||||
stringvals = new ArrayList(DEFAULT_ROWS);
|
stringvals = new List2d();
|
||||||
populatedRows = new IntList(DEFAULT_ROWS);
|
populatedRows = new IntList();
|
||||||
physCells = 0;
|
physCells = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterator getIterator() {
|
public Iterator getIterator() {
|
||||||
|
@ -119,11 +112,19 @@ public class ValueRecordsAggregate
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns true if the row has cells attached to it */
|
/** Returns true if the row has cells attached to it */
|
||||||
public boolean rowHasCells(int row) {
|
public boolean rowHasCells(int row)
|
||||||
if (row >= celltype.size())
|
{
|
||||||
|
if (row == -1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
int col = 0;
|
||||||
|
while (celltype.isAllocated( col, row))
|
||||||
|
{
|
||||||
|
if (celltype.get( col, row ) != 0)
|
||||||
|
return true;
|
||||||
|
col++;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
IntList ctRow = (IntList) celltype.get(row);
|
|
||||||
return ((ctRow != null) && (ctRow.size() > 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Serializes the cells that are allocated to a certain row range*/
|
/** Serializes the cells that are allocated to a certain row range*/
|
||||||
|
@ -144,7 +145,7 @@ public class ValueRecordsAggregate
|
||||||
|
|
||||||
public int construct(int offset, List records)
|
public int construct(int offset, List records)
|
||||||
{
|
{
|
||||||
int k = 0;
|
int k;
|
||||||
|
|
||||||
FormulaRecordAggregate lastFormulaAggregate = null;
|
FormulaRecordAggregate lastFormulaAggregate = null;
|
||||||
|
|
||||||
|
@ -183,7 +184,6 @@ public class ValueRecordsAggregate
|
||||||
public int getPhysicalNumberOfCellsInRow(int row) {
|
public int getPhysicalNumberOfCellsInRow(int row) {
|
||||||
int count = -1;
|
int count = -1;
|
||||||
int col = -1;
|
int col = -1;
|
||||||
boolean firsttime = true;
|
|
||||||
|
|
||||||
while (col > 0 || count == -1) {
|
while (col > 0 || count == -1) {
|
||||||
col = findNextPopulatedCell(row,col);
|
col = findNextPopulatedCell(row,col);
|
||||||
|
@ -193,11 +193,11 @@ public class ValueRecordsAggregate
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setValue(int row, short cell, double val) {
|
public void setValue(int row, short cell, double val) {
|
||||||
((DoubleList)numericcells.get(row)).set(cell, val);
|
numericcells.set(cell, row, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStyle(int row, short cell, short xf) {
|
public void setStyle(int row, short cell, short xf) {
|
||||||
((IntList)xfs.get(row)).set(cell, xf);
|
xfs.set(cell, row, xf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -214,101 +214,100 @@ public class ValueRecordsAggregate
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeCell(CellValueRecordInterface cell) {
|
public void removeCell(CellValueRecordInterface cell) {
|
||||||
|
if (cell == null)
|
||||||
|
return;
|
||||||
|
|
||||||
int rownum = cell.getRow();
|
int rownum = cell.getRow();
|
||||||
int colnum = cell.getColumn();
|
int colnum = cell.getColumn();
|
||||||
int xf = cell.getXFIndex();
|
|
||||||
int type = determineType(cell);
|
|
||||||
|
|
||||||
if (rownum < celltype.size() && colnum < ((IntList)celltype.get(rownum)).size()) {
|
if (celltype.get( colnum, rownum ) != 0)
|
||||||
IntList ctRow = (IntList)celltype.get(rownum);
|
{
|
||||||
if (ctRow.size()-1 == colnum) {
|
celltype.set( colnum, rownum, 0 );
|
||||||
ctRow.remove(colnum);
|
if (rowHasCells( rownum ))
|
||||||
if (ctRow.size() == 0 && celltype.size()-1 == rownum) {
|
populatedRows.removeValue( populatedRows.indexOf( rownum ) );
|
||||||
celltype.remove(rownum);
|
|
||||||
int remp = populatedRows.indexOf(rownum);
|
|
||||||
System.err.println("remp == "+remp);
|
|
||||||
populatedRows.removeValue(rownum);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ctRow.set(colnum,-1);
|
|
||||||
}
|
|
||||||
physCells--;
|
physCells--;
|
||||||
} else {
|
}
|
||||||
//this cell doesn't exist...
|
else
|
||||||
throw new RuntimeException("Tried to remove a cell that does not exist r,c="+rownum+","+colnum);
|
{
|
||||||
|
//this cell doesn't exist... the old code falls through so lets make this fall through too.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void insertCell(CellValueRecordInterface cell) {
|
public void insertCell( CellValueRecordInterface cell )
|
||||||
|
{
|
||||||
int rownum = cell.getRow();
|
int rownum = cell.getRow();
|
||||||
int colnum = cell.getColumn();
|
int colnum = cell.getColumn();
|
||||||
int xf = cell.getXFIndex();
|
int xf = cell.getXFIndex();
|
||||||
int type = determineType(cell);
|
int type = determineType(cell);
|
||||||
|
|
||||||
if (celltype.size() < rownum+1) {
|
if (!populatedRows.contains( rownum ))
|
||||||
|
{
|
||||||
populatedRows.add(rownum); //this means we must never have had this row inserted
|
populatedRows.add(rownum); //this means we must never have had this row inserted
|
||||||
}
|
}
|
||||||
|
|
||||||
ensureRows(rownum);
|
// ensureRows(rownum);
|
||||||
|
|
||||||
IntList ctRow = (IntList)celltype.get(rownum);
|
// IntList ctRow = (IntList)celltype.get(rownum);
|
||||||
IntList xfRow = (IntList)xfs.get(rownum);
|
// IntList xfRow = (IntList)xfs.get(rownum);
|
||||||
|
|
||||||
|
// adjustIntList(ctRow, colnum+1);
|
||||||
|
// adjustIntList(xfRow, colnum+1);
|
||||||
|
|
||||||
adjustIntList(ctRow, colnum+1);
|
celltype.set(colnum, rownum, type);
|
||||||
adjustIntList(xfRow, colnum+1);
|
xfs.set( colnum, rownum, xf);
|
||||||
|
|
||||||
ctRow.set(colnum, type);
|
|
||||||
xfRow.set(colnum, xf);
|
|
||||||
|
|
||||||
insertCell(cell, type);
|
insertCell(cell, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
CellValueRecordInterface constructRecord(int row, int col) {
|
CellValueRecordInterface constructRecord(int row, int col) {
|
||||||
if (celltype.size() < row || ((IntList)celltype.get(row)).size() < col) {
|
|
||||||
throw new ArrayIndexOutOfBoundsException("constructRecord called with row = "+row+
|
|
||||||
"and col ="+col+" but there are only "+celltype.size()+" rows and "+
|
|
||||||
((IntList)celltype.get(row)).size()+" cols!!");
|
|
||||||
}
|
|
||||||
|
|
||||||
CellValueRecordInterface retval = null;
|
if (celltype.get( col, row) == 0)
|
||||||
int type = ((IntList)celltype.get(row)).get(col);
|
throw new ArrayIndexOutOfBoundsException("No cell at position col" + col + ", row " + row + ".");
|
||||||
|
// if (celltype.size() < row || ((IntList)celltype.get(row)).size() < col) {
|
||||||
|
// throw new ArrayIndexOutOfBoundsException("constructRecord called with row = "+row+
|
||||||
|
// "and col ="+col+" but there are only "+celltype.size()+" rows and "+
|
||||||
|
// ((IntList)celltype.get(row)).size()+" cols!!");
|
||||||
|
// }
|
||||||
|
|
||||||
|
CellValueRecordInterface retval;
|
||||||
|
int type = celltype.get( col, row );
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case HSSFCell.CELL_TYPE_NUMERIC:
|
case HSSFCell.CELL_TYPE_NUMERIC:
|
||||||
NumberRecord nrecord = new NumberRecord();
|
NumberRecord nrecord = new NumberRecord();
|
||||||
nrecord.setColumn((short)col);
|
nrecord.setColumn((short)col);
|
||||||
nrecord.setRow(row);
|
nrecord.setRow(row);
|
||||||
nrecord.setValue(((DoubleList)numericcells.get(row)).get(col));
|
nrecord.setValue( numericcells.get( col, row));
|
||||||
nrecord.setXFIndex((short)((IntList)xfs.get(row)).get(col));
|
nrecord.setXFIndex((short)xfs.get( col, row ));
|
||||||
|
// nrecord.setXFIndex((short)((IntList)xfs.get(row)).get(col));
|
||||||
retval = nrecord;
|
retval = nrecord;
|
||||||
break;
|
break;
|
||||||
case HSSFCell.CELL_TYPE_STRING:
|
case HSSFCell.CELL_TYPE_STRING:
|
||||||
LabelSSTRecord srecord = new LabelSSTRecord();
|
LabelSSTRecord srecord = new LabelSSTRecord();
|
||||||
srecord.setColumn((short)col);
|
srecord.setColumn((short)col);
|
||||||
srecord.setRow(row);
|
srecord.setRow(row);
|
||||||
srecord.setSSTIndex((int)((DoubleList)numericcells.get(row)).get(col));
|
srecord.setSSTIndex((int) numericcells.get( col, row));
|
||||||
srecord.setXFIndex((short)((IntList)xfs.get(row)).get(col));
|
srecord.setXFIndex((short)xfs.get( col, row ));
|
||||||
retval=srecord;
|
retval=srecord;
|
||||||
break;
|
break;
|
||||||
case HSSFCell.CELL_TYPE_BLANK:
|
case HSSFCell.CELL_TYPE_BLANK:
|
||||||
BlankRecord brecord = new BlankRecord();
|
BlankRecord brecord = new BlankRecord();
|
||||||
brecord.setColumn((short)col);
|
brecord.setColumn((short)col);
|
||||||
brecord.setRow(row);
|
brecord.setRow(row);
|
||||||
brecord.setXFIndex((short)((IntList)xfs.get(row)).get(col));
|
brecord.setXFIndex((short)xfs.get( col, row ));
|
||||||
retval=brecord;
|
retval=brecord;
|
||||||
break;
|
break;
|
||||||
case HSSFCell.CELL_TYPE_FORMULA:
|
case HSSFCell.CELL_TYPE_FORMULA:
|
||||||
|
/*
|
||||||
FormulaRecord fr = new FormulaRecord();
|
FormulaRecord fr = new FormulaRecord();
|
||||||
fr.setColumn((short)col);
|
fr.setColumn((short)col);
|
||||||
fr.setOptions((short)2);
|
fr.setOptions((short)2);
|
||||||
|
|
||||||
fr.setRow(row);
|
fr.setRow(row);
|
||||||
fr.setXFIndex((short)((IntList)xfs.get(row)).get(col));
|
fr.setXFIndex((short)xfs.get( col, row ));
|
||||||
StringRecord st = null;
|
StringRecord st = null;
|
||||||
String strval = (String)((List)stringvals.get(row)).get(col);
|
String strval = (String)stringvals.get( col, row );
|
||||||
List expressionlist = (List)((List)formulaptgs.get(row)).get(col);
|
List expressionlist = (List) formulaptgs.get( col, row);
|
||||||
fr.setParsedExpression(expressionlist);
|
fr.setParsedExpression(expressionlist);
|
||||||
fr.setExpressionLength(calculatePtgSize(expressionlist));
|
fr.setExpressionLength(calculatePtgSize(expressionlist));
|
||||||
if (strval != null) {
|
if (strval != null) {
|
||||||
|
@ -319,7 +318,9 @@ public class ValueRecordsAggregate
|
||||||
|
|
||||||
retval= frarecord;
|
retval= frarecord;
|
||||||
break;
|
break;
|
||||||
|
*/
|
||||||
|
retval = (CellValueRecordInterface) formulaptgs.get( col, row );
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("UnImplemented Celltype "+type);
|
throw new RuntimeException("UnImplemented Celltype "+type);
|
||||||
}
|
}
|
||||||
|
@ -327,7 +328,8 @@ public class ValueRecordsAggregate
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
private short calculatePtgSize(List expressionlist) {
|
private short calculatePtgSize(List expressionlist)
|
||||||
|
{
|
||||||
short retval = 0;
|
short retval = 0;
|
||||||
Iterator iter = expressionlist.iterator();
|
Iterator iter = expressionlist.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
|
@ -336,42 +338,49 @@ public class ValueRecordsAggregate
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void insertCell(CellValueRecordInterface cell, int type) {
|
private void insertCell(CellValueRecordInterface cell, int type)
|
||||||
|
{
|
||||||
int rownum = cell.getRow();
|
int rownum = cell.getRow();
|
||||||
int colnum = cell.getColumn();
|
int colnum = cell.getColumn();
|
||||||
|
|
||||||
DoubleList nmRow = (DoubleList)numericcells.get(rownum);
|
// DoubleList nmRow = (DoubleList)numericcells.get(rownum);
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case HSSFCell.CELL_TYPE_NUMERIC:
|
case HSSFCell.CELL_TYPE_NUMERIC:
|
||||||
NumberRecord nrecord = (NumberRecord)cell;
|
NumberRecord nrecord = (NumberRecord)cell;
|
||||||
adjustDoubleList(nmRow, colnum+1);
|
// adjustDoubleList(nmRow, colnum+1);
|
||||||
nmRow.set(colnum,nrecord.getValue());
|
numericcells.set(colnum, rownum, nrecord.getValue());
|
||||||
physCells++;
|
physCells++;
|
||||||
break;
|
break;
|
||||||
case HSSFCell.CELL_TYPE_STRING:
|
case HSSFCell.CELL_TYPE_STRING:
|
||||||
LabelSSTRecord srecord = (LabelSSTRecord)cell;
|
LabelSSTRecord srecord = (LabelSSTRecord)cell;
|
||||||
adjustDoubleList(nmRow, colnum+1);
|
// adjustDoubleList(nmRow, colnum+1);
|
||||||
nmRow.set(colnum,srecord.getSSTIndex());
|
numericcells.set(colnum, rownum, srecord.getSSTIndex());
|
||||||
|
// nmRow.set(colnum,srecord.getSSTIndex());
|
||||||
physCells++;
|
physCells++;
|
||||||
break;
|
break;
|
||||||
case HSSFCell.CELL_TYPE_FORMULA:
|
case HSSFCell.CELL_TYPE_FORMULA:
|
||||||
List ptRow = (List)formulaptgs.get(rownum);
|
|
||||||
List stRow = (List)stringvals.get(rownum);
|
|
||||||
FormulaRecordAggregate frarecord = (FormulaRecordAggregate)cell;
|
FormulaRecordAggregate frarecord = (FormulaRecordAggregate)cell;
|
||||||
adjustDoubleList(nmRow, colnum+1);
|
formulaptgs.set( colnum, rownum, frarecord);
|
||||||
adjustObjectList(ptRow, colnum+1);
|
|
||||||
adjustStringList(stRow, colnum+1);
|
|
||||||
nmRow.set(colnum,frarecord.getFormulaRecord().getValue());
|
|
||||||
ptRow.set(colnum,frarecord.getFormulaRecord().getParsedExpression());
|
|
||||||
StringRecord str = frarecord.getStringRecord();
|
|
||||||
if (str != null) {
|
|
||||||
stRow.set(colnum,str.getString());
|
|
||||||
} else {
|
|
||||||
stRow.set(colnum,null);
|
|
||||||
}
|
|
||||||
physCells++;
|
physCells++;
|
||||||
break;
|
break;
|
||||||
|
/*
|
||||||
|
// List ptRow = (List)formulaptgs.get(rownum);
|
||||||
|
// List stRow = (List)stringvals.get(rownum);
|
||||||
|
FormulaRecordAggregate frarecord = (FormulaRecordAggregate)cell;
|
||||||
|
// adjustDoubleList(nmRow, colnum+1);
|
||||||
|
// adjustObjectList(ptRow, colnum+1);
|
||||||
|
// adjustStringList(stRow, colnum+1);
|
||||||
|
numericcells.set(colnum, rownum, frarecord.getFormulaRecord().getValue());
|
||||||
|
formulaptgs.set( colnum, rownum, frarecord.getFormulaRecord().getParsedExpression() );
|
||||||
|
StringRecord str = frarecord.getStringRecord();
|
||||||
|
if ( str != null )
|
||||||
|
stringvals.set( colnum, rownum, str.getString() );
|
||||||
|
else
|
||||||
|
stringvals.set( colnum, rownum, null );
|
||||||
|
physCells++;
|
||||||
|
break;
|
||||||
|
*/
|
||||||
case HSSFCell.CELL_TYPE_BLANK:
|
case HSSFCell.CELL_TYPE_BLANK:
|
||||||
//BlankRecord brecord = (BlankRecord)cell;
|
//BlankRecord brecord = (BlankRecord)cell;
|
||||||
physCells++;
|
physCells++;
|
||||||
|
@ -418,52 +427,67 @@ public class ValueRecordsAggregate
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ensureRows(int rownum) {
|
// private void ensureRows(int rownum) {
|
||||||
adjustRows(celltype, rownum+1, IntList.class);
|
//adjustRows(celltype, rownum+1, IntList.class);
|
||||||
adjustRows(xfs, rownum+1, IntList.class);
|
// adjustRows(xfs, rownum+1, IntList.class);
|
||||||
adjustRows(numericcells, rownum+1, DoubleList.class);
|
// adjustRows(numericcells, rownum+1, DoubleList.class);
|
||||||
adjustRows(formulaptgs, rownum+1, ArrayList.class);
|
// adjustRows(formulaptgs, rownum+1, ArrayList.class);
|
||||||
adjustRows(stringvals, rownum+1, ArrayList.class);
|
// adjustRows(stringvals, rownum+1, ArrayList.class);
|
||||||
|
|
||||||
}
|
// }
|
||||||
|
|
||||||
private void adjustRows(List list, int size, Class theclass) {
|
// private void adjustRows(List list, int size, Class theclass) {
|
||||||
while (list.size() < size) {
|
// while (list.size() < size) {
|
||||||
try {
|
// try {
|
||||||
list.add(theclass.newInstance());
|
// list.add(theclass.newInstance());
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
throw new RuntimeException("Could Not Instantiate Row in adjustRows");
|
// throw new RuntimeException("Could Not Instantiate Row in adjustRows");
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
private void adjustIntList(IntList list, int size) {
|
// private void adjustIntList(IntList list, int size) {
|
||||||
while (list.size() < size) {
|
// while (list.size() < size) {
|
||||||
list.add(-1);
|
// list.add(-1);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private void adjustDoubleList(DoubleList list, int size) {
|
// private void adjustDoubleList(DoubleList list, int size) {
|
||||||
while (list.size() < size) {
|
// while (list.size() < size) {
|
||||||
list.add(-1);
|
// list.add(-1);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private void adjustObjectList(List list, int size) {
|
// private void adjustObjectList(List list, int size) {
|
||||||
while (list.size() < size) {
|
// while (list.size() < size) {
|
||||||
list.add(new ArrayList());
|
// list.add(new ArrayList());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
private void adjustStringList(List list, int size) {
|
|
||||||
while (list.size() < size) {
|
|
||||||
list.add(new String());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// private void adjustStringList(List list, int size) {
|
||||||
|
// while (list.size() < size) {
|
||||||
|
// list.add(new String());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the next populated cell in the row starting from but not
|
||||||
|
* including the current column
|
||||||
|
*
|
||||||
|
* @return the next valid column number
|
||||||
|
*/
|
||||||
protected int findNextPopulatedCell(int row, int col) {
|
protected int findNextPopulatedCell(int row, int col) {
|
||||||
|
|
||||||
|
int currentCol = col + 1;
|
||||||
|
while (celltype.isAllocated( currentCol, row ))
|
||||||
|
{
|
||||||
|
if (celltype.get( currentCol, row) > 0)
|
||||||
|
return currentCol;
|
||||||
|
currentCol++;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/*
|
||||||
IntList ctRow = (IntList) celltype.get(row);
|
IntList ctRow = (IntList) celltype.get(row);
|
||||||
int retval = -1;
|
int retval = -1;
|
||||||
if (ctRow.size() > col+1) {
|
if (ctRow.size() > col+1) {
|
||||||
|
@ -483,6 +507,7 @@ public class ValueRecordsAggregate
|
||||||
|
|
||||||
} //end if (ctRow.size()...
|
} //end if (ctRow.size()...
|
||||||
return retval;
|
return retval;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -509,7 +534,6 @@ class VRAIterator implements Iterator {
|
||||||
private int popindex;
|
private int popindex;
|
||||||
private int row;
|
private int row;
|
||||||
private int rowlimit;
|
private int rowlimit;
|
||||||
private int col;
|
|
||||||
CellValueRecordInterface current = null;
|
CellValueRecordInterface current = null;
|
||||||
CellValueRecordInterface next = null;
|
CellValueRecordInterface next = null;
|
||||||
|
|
||||||
|
@ -527,7 +551,32 @@ class VRAIterator implements Iterator {
|
||||||
this.rowlimit = endRow;
|
this.rowlimit = endRow;
|
||||||
this.popindex = vra.populatedRows.indexOf(row);
|
this.popindex = vra.populatedRows.indexOf(row);
|
||||||
if (this.popindex == -1) {
|
if (this.popindex == -1) {
|
||||||
hasNext = false;
|
if (vra.populatedRows.size() == 0)
|
||||||
|
hasNext = false;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int lastRow = vra.populatedRows.get(vra.populatedRows.size()-1);
|
||||||
|
if (lastRow == -1)
|
||||||
|
{
|
||||||
|
hasNext = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = row; i <= lastRow; i++)
|
||||||
|
{
|
||||||
|
this.popindex = vra.populatedRows.indexOf(i);
|
||||||
|
if (popindex != -1)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (popindex == -1)
|
||||||
|
hasNext = false;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
next = findNextCell(null);
|
||||||
|
hasNext = (next != null);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (vra.getPhysicalNumberOfCells() > 0) {
|
} else if (vra.getPhysicalNumberOfCells() > 0) {
|
||||||
next = findNextCell(null);
|
next = findNextCell(null);
|
||||||
hasNext = (next != null);
|
hasNext = (next != null);
|
||||||
|
@ -553,7 +602,7 @@ class VRAIterator implements Iterator {
|
||||||
}
|
}
|
||||||
|
|
||||||
private CellValueRecordInterface findNextCell(CellValueRecordInterface current) {
|
private CellValueRecordInterface findNextCell(CellValueRecordInterface current) {
|
||||||
IntList ctRow = null;
|
// IntList ctRow = null;
|
||||||
int rowNum = -1;
|
int rowNum = -1;
|
||||||
int colNum = -1;
|
int colNum = -1;
|
||||||
int newCol = -1;
|
int newCol = -1;
|
||||||
|
@ -563,11 +612,24 @@ class VRAIterator implements Iterator {
|
||||||
wasntFirst = true;
|
wasntFirst = true;
|
||||||
rowNum = current.getRow();
|
rowNum = current.getRow();
|
||||||
colNum = current.getColumn();
|
colNum = current.getColumn();
|
||||||
ctRow = ((IntList)vra.celltype.get(rowNum));
|
// ctRow = ((IntList)vra.celltype.get(rowNum));
|
||||||
}
|
}
|
||||||
|
|
||||||
//if popindex = row iwth no cells, fast forward till we get to one with size > 0
|
//if popindex = row iwth no cells, fast forward till we get to one with size > 0
|
||||||
while ((ctRow == null || ctRow.size() == 0) && vra.populatedRows.size() > popindex) {
|
while (!vra.rowHasCells( rowNum ) && vra.populatedRows.size() > popindex) {
|
||||||
|
if (wasntFirst == true) {
|
||||||
|
throw new RuntimeException("CANT HAPPEN WASNTFIRST BUT WE'RE FASTFORWARDING!");
|
||||||
|
}
|
||||||
|
rowNum = vra.populatedRows.get(popindex);
|
||||||
|
if (!vra.rowHasCells( rowNum )) {
|
||||||
|
if ((rowlimit == -1)||(rowNum<=rowlimit)) {
|
||||||
|
popindex++;
|
||||||
|
} else {
|
||||||
|
this.hasNext = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*while ((ctRow == null || ctRow.size() == 0) && vra.populatedRows.size() > popindex) {
|
||||||
if (wasntFirst == true) {
|
if (wasntFirst == true) {
|
||||||
throw new RuntimeException("CANT HAPPEN WASNTFIRST BUT WE'RE FASTFORWARDING!");
|
throw new RuntimeException("CANT HAPPEN WASNTFIRST BUT WE'RE FASTFORWARDING!");
|
||||||
}
|
}
|
||||||
|
@ -580,7 +642,7 @@ class VRAIterator implements Iterator {
|
||||||
this.hasNext = false;
|
this.hasNext = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
if (rowNum == -1) {
|
if (rowNum == -1) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -71,7 +71,7 @@ public class HSSFCell
|
||||||
* @see #getCellType()
|
* @see #getCellType()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public final static int CELL_TYPE_NUMERIC = 0;
|
public final static int CELL_TYPE_NUMERIC = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* String Cell type (1)
|
* String Cell type (1)
|
||||||
|
@ -79,7 +79,7 @@ public class HSSFCell
|
||||||
* @see #getCellType()
|
* @see #getCellType()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public final static int CELL_TYPE_STRING = 1;
|
public final static int CELL_TYPE_STRING = 2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Formula Cell type (2)
|
* Formula Cell type (2)
|
||||||
|
@ -87,7 +87,7 @@ public class HSSFCell
|
||||||
* @see #getCellType()
|
* @see #getCellType()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public final static int CELL_TYPE_FORMULA = 2;
|
public final static int CELL_TYPE_FORMULA = 3;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Blank Cell type (3)
|
* Blank Cell type (3)
|
||||||
|
@ -95,7 +95,7 @@ public class HSSFCell
|
||||||
* @see #getCellType()
|
* @see #getCellType()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public final static int CELL_TYPE_BLANK = 3;
|
public final static int CELL_TYPE_BLANK = 4;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Boolean Cell type (4)
|
* Boolean Cell type (4)
|
||||||
|
@ -103,7 +103,7 @@ public class HSSFCell
|
||||||
* @see #getCellType()
|
* @see #getCellType()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public final static int CELL_TYPE_BOOLEAN = 4;
|
public final static int CELL_TYPE_BOOLEAN = 5;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Error Cell type (5)
|
* Error Cell type (5)
|
||||||
|
@ -111,9 +111,11 @@ public class HSSFCell
|
||||||
* @see #getCellType()
|
* @see #getCellType()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public final static int CELL_TYPE_ERROR = 5;
|
public final static int CELL_TYPE_ERROR = 6;
|
||||||
|
|
||||||
public final static short ENCODING_COMPRESSED_UNICODE = 0;
|
public final static short ENCODING_COMPRESSED_UNICODE = 0;
|
||||||
public final static short ENCODING_UTF_16 = 1;
|
public final static short ENCODING_UTF_16 = 1;
|
||||||
|
|
||||||
private short cellNum;
|
private short cellNum;
|
||||||
private int cellType;
|
private int cellType;
|
||||||
private HSSFCellStyle cellStyle;
|
private HSSFCellStyle cellStyle;
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
package org.apache.poi.util;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides an interface for interacting with 2d arrays of doubles. This
|
||||||
|
* implementation will return 0 for items not yet allocated and automatically
|
||||||
|
* increase the array size for set operations. You never get an index out of
|
||||||
|
* bounds.
|
||||||
|
*
|
||||||
|
* @author Glen Stampoultzis (glens at apache.org)
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class DoubleList2d
|
||||||
|
{
|
||||||
|
// Implemented using a List of DoubleList's.
|
||||||
|
List rows = new ArrayList();
|
||||||
|
|
||||||
|
public double get(int col, int row)
|
||||||
|
{
|
||||||
|
if (row >= rows.size())
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DoubleList cols = (DoubleList) rows.get(row);
|
||||||
|
if (col >= cols.size())
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return cols.get( col );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set(int col, int row, double value)
|
||||||
|
{
|
||||||
|
resizeRows(row);
|
||||||
|
resizeCols(row,col);
|
||||||
|
DoubleList cols = (DoubleList) rows.get( row );
|
||||||
|
cols.set( col, value );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resizeRows( int row )
|
||||||
|
{
|
||||||
|
while (rows.size() <= row)
|
||||||
|
rows.add( new DoubleList() );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resizeCols( int row, int col )
|
||||||
|
{
|
||||||
|
DoubleList cols = (DoubleList) rows.get( row );
|
||||||
|
while (cols.size() <= col)
|
||||||
|
cols.add(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
package org.apache.poi.util;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides an interface for interacting with 2d arrays of integers. This
|
||||||
|
* implementation will return 0 for items not yet allocated and automatically
|
||||||
|
* increase the array size for set operations. You never get an index out of
|
||||||
|
* bounds.
|
||||||
|
*
|
||||||
|
* @author Glen Stampoultzis (glens at apache.org)
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class IntList2d
|
||||||
|
{
|
||||||
|
// Implemented using a List of IntList's.
|
||||||
|
List rows = new ArrayList();
|
||||||
|
|
||||||
|
public int get(int col, int row)
|
||||||
|
{
|
||||||
|
if (row >= rows.size())
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IntList cols = (IntList) rows.get(row);
|
||||||
|
if (col >= cols.size())
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return cols.get( col );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set(int col, int row, int value)
|
||||||
|
{
|
||||||
|
resizeRows(row);
|
||||||
|
resizeCols(row,col);
|
||||||
|
IntList cols = (IntList) rows.get( row );
|
||||||
|
cols.set( col, value );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resizeRows( int row )
|
||||||
|
{
|
||||||
|
while (rows.size() <= row)
|
||||||
|
rows.add( new IntList() );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resizeCols( int row, int col )
|
||||||
|
{
|
||||||
|
IntList cols = (IntList) rows.get( row );
|
||||||
|
while (cols.size() <= col)
|
||||||
|
cols.add(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAllocated( int col, int row )
|
||||||
|
{
|
||||||
|
if (row < rows.size())
|
||||||
|
{
|
||||||
|
IntList cols = (IntList) rows.get( row );
|
||||||
|
return ( col < cols.size() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
package org.apache.poi.util;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides an interface for interacting with 2d arrays of objects. This
|
||||||
|
* implementation will return null for items not yet allocated and automatically
|
||||||
|
* increase the array size for set operations. You never get an index out of
|
||||||
|
* bounds.
|
||||||
|
*
|
||||||
|
* @author Glen Stampoultzis (glens at apache.org)
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class List2d
|
||||||
|
{
|
||||||
|
// Implemented using a List of List's.
|
||||||
|
List rows = new ArrayList();
|
||||||
|
|
||||||
|
public Object get(int col, int row)
|
||||||
|
{
|
||||||
|
if (row >= rows.size())
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
List cols = (List) rows.get(row);
|
||||||
|
if (col >= cols.size())
|
||||||
|
return null;
|
||||||
|
else
|
||||||
|
return cols.get( col );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set(int col, int row, Object value)
|
||||||
|
{
|
||||||
|
resizeRows(row);
|
||||||
|
resizeCols(row,col);
|
||||||
|
List cols = (List) rows.get( row );
|
||||||
|
cols.set( col, value );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resizeRows( int row )
|
||||||
|
{
|
||||||
|
while (rows.size() <= row)
|
||||||
|
rows.add( new ArrayList() );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resizeCols( int row, int col )
|
||||||
|
{
|
||||||
|
List cols = (List) rows.get( row );
|
||||||
|
while (cols.size() <= col)
|
||||||
|
cols.add(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -144,27 +144,28 @@ public class TestValueRecordsAggregate extends TestCase
|
||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
|
|
||||||
public void testSerialize() throws Exception
|
public void testSerializeCellRow() throws Exception
|
||||||
{
|
{
|
||||||
byte[] actualArray = new byte[36];
|
byte[] actualArray = new byte[36];
|
||||||
byte[] expectedArray = new byte[]
|
byte[] expectedArray = new byte[]
|
||||||
{
|
{
|
||||||
(byte)0x06, (byte)0x00, (byte)0x16, (byte)0x00,
|
(byte)0x06,(byte)0x00,(byte)0x16,(byte)0x00,
|
||||||
(byte)0x01, (byte)0x00, (byte)0x01, (byte)0x00,
|
(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x00,
|
||||||
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
|
(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,
|
||||||
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
|
(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,
|
||||||
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
|
(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,
|
||||||
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
|
(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,
|
||||||
(byte)0x00, (byte)0x00, (byte)0x01, (byte)0x02,
|
(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,
|
||||||
(byte)0x06, (byte)0x00, (byte)0x02, (byte)0x00,
|
(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,
|
||||||
(byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00,
|
(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,
|
||||||
|
|
||||||
};
|
};
|
||||||
List records = testData();
|
List records = testData();
|
||||||
valueRecord.construct( 0, records );
|
valueRecord.construct( 0, records );
|
||||||
int bytesWritten = valueRecord.serialize( 0, actualArray );
|
int bytesWritten = valueRecord.serializeCellRow( 1, 0, actualArray );
|
||||||
assertEquals( 36, bytesWritten );
|
assertEquals( 26, bytesWritten );
|
||||||
for (int i = 0; i < 36; i++)
|
for (int i = 0; i < 36; i++)
|
||||||
assertEquals( expectedArray[i], actualArray[i] );
|
assertEquals( "wrong value at offset " + i, expectedArray[i], actualArray[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main( String[] args )
|
public static void main( String[] args )
|
||||||
|
|
|
@ -169,6 +169,7 @@ public class TestHSSFSheet
|
||||||
FileOutputStream stream = new FileOutputStream(tempFile);
|
FileOutputStream stream = new FileOutputStream(tempFile);
|
||||||
workbook.write(stream);
|
workbook.write(stream);
|
||||||
stream.close();
|
stream.close();
|
||||||
|
System.out.println( "tempFile.getCanonicalPath() = " + tempFile.getCanonicalPath() );
|
||||||
|
|
||||||
FileInputStream readStream = new FileInputStream(tempFile);
|
FileInputStream readStream = new FileInputStream(tempFile);
|
||||||
workbook = new HSSFWorkbook(readStream);
|
workbook = new HSSFWorkbook(readStream);
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package org.apache.poi.util;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class TestDoubleList2d
|
||||||
|
extends TestCase
|
||||||
|
{
|
||||||
|
public void testAccess()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
DoubleList2d array = new DoubleList2d();
|
||||||
|
assertEquals( 0, array.get( 0, 0 ), 0.00001 );
|
||||||
|
assertEquals( 0, array.get( 1, 1 ), 0.00001 );
|
||||||
|
assertEquals( 0, array.get( 100, 100 ), 0.00001 );
|
||||||
|
array.set( 100, 100, 999 );
|
||||||
|
assertEquals( 999, array.get( 100, 100 ), 0.00001 );
|
||||||
|
assertEquals( 0, array.get( 0, 0 ), 0.00001 );
|
||||||
|
array.set( 0, 0, 999 );
|
||||||
|
assertEquals( 999, array.get( 0, 0 ), 0.00001 );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
array.get( -1, -1 );
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch ( ArrayIndexOutOfBoundsException e )
|
||||||
|
{
|
||||||
|
// pass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package org.apache.poi.util;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class TestIntList2d
|
||||||
|
extends TestCase
|
||||||
|
{
|
||||||
|
public void testAccess()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
IntList2d array = new IntList2d();
|
||||||
|
assertEquals( 0, array.get( 0, 0 ) );
|
||||||
|
assertEquals( 0, array.get( 1, 1 ) );
|
||||||
|
assertEquals( 0, array.get( 100, 100 ) );
|
||||||
|
array.set( 100, 100, 999 );
|
||||||
|
assertEquals( 999, array.get( 100, 100 ) );
|
||||||
|
assertEquals( 0, array.get( 0, 0 ) );
|
||||||
|
array.set( 0, 0, 999 );
|
||||||
|
assertEquals( 999, array.get( 0, 0 ) );
|
||||||
|
|
||||||
|
assertTrue(array.isAllocated( 0, 0 ) );
|
||||||
|
assertTrue(array.isAllocated( 100, 100 ) );
|
||||||
|
assertFalse(array.isAllocated( 200, 200 ) );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
assertEquals( 0, array.get( -1, -1 ) );
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch ( ArrayIndexOutOfBoundsException e )
|
||||||
|
{
|
||||||
|
// pass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
package org.apache.poi.util;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class TestList2d
|
||||||
|
extends TestCase
|
||||||
|
{
|
||||||
|
public void testAccess()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
Object objectA = new Object();
|
||||||
|
Object objectB = new Object();
|
||||||
|
|
||||||
|
List2d array = new List2d();
|
||||||
|
assertNull( array.get( 0, 0 ) );
|
||||||
|
assertNull( array.get( 1, 1 ) );
|
||||||
|
assertNull( array.get( 100, 100 ) );
|
||||||
|
array.set( 100, 100, objectA );
|
||||||
|
assertSame( objectA, array.get( 100, 100 ) );
|
||||||
|
assertNull( array.get( 0, 0 ) );
|
||||||
|
array.set( 0, 0, objectB );
|
||||||
|
assertSame( objectB, array.get( 0, 0 ) );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
array.get( -1, -1 );
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch ( ArrayIndexOutOfBoundsException e )
|
||||||
|
{
|
||||||
|
// pass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue