Author: josh
Date: Tue Dec 22 01:41:16 2009
New Revision: 893057
URL: http://svn.apache.org/viewvc?rev=893057&view=rev
Log:
Fixed SharedValueManager to create separate empty instances in anticipation of
instances becoming mutable.
Modified:
poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RowRecordsAggregate.java
poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java
poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestFormulaRecordAggregate.java
poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestRowRecordsAggregate.java
Modified:
poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RowRecordsAggregate.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RowRecordsAggregate.java?rev=893057&r1=893056&r2=893057&view=diff
==============================================================================
---
poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RowRecordsAggregate.java
(original)
+++
poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RowRecordsAggregate.java
Tue Dec 22 01:41:16 2009
@@ -56,9 +56,12 @@
/** Creates a new instance of ValueRecordsAggregate */
public RowRecordsAggregate() {
- this(SharedValueManager.EMPTY);
+ this(SharedValueManager.createEmpty());
}
private RowRecordsAggregate(SharedValueManager svm) {
+ if (svm == null) {
+ throw new IllegalArgumentException("SharedValueManager
must be provided.");
+ }
_rowRecords = new TreeMap<Integer, RowRecord>();
_valuesAgg = new ValueRecordsAggregate();
_unknownRecords = new ArrayList<Record>();
@@ -68,6 +71,8 @@
/**
* @param rs record stream with all {...@link SharedFormulaRecord}
* {...@link ArrayRecord}, {...@link TableRecord} {...@link
MergeCellsRecord} Records removed
+ * @param svm an initialised {...@link SharedValueManager} (from the
shared formula, array
+ * and table records of the current sheet). Never <code>null</code>.
*/
public RowRecordsAggregate(RecordStream rs, SharedValueManager svm) {
this(svm);
Modified:
poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java?rev=893057&r1=893056&r2=893057&view=diff
==============================================================================
---
poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java
(original)
+++
poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java
Tue Dec 22 01:41:16 2009
@@ -109,8 +109,14 @@
}
}
- public static final SharedValueManager EMPTY = new SharedValueManager(
+ /**
+ * @return a new empty {...@link SharedValueManager}.
+ */
+ public static final SharedValueManager createEmpty() {
+ // Note - must create distinct instances because they are
assumed to be mutable.
+ return new SharedValueManager(
new SharedFormulaRecord[0], new CellReference[0], new
ArrayRecord[0], new TableRecord[0]);
+ }
private final ArrayRecord[] _arrayRecords;
private final TableRecord[] _tableRecords;
private final Map<SharedFormulaRecord, SharedFormulaGroup>
_groupsBySharedFormulaRecord;
@@ -144,7 +150,7 @@
public static SharedValueManager create(SharedFormulaRecord[]
sharedFormulaRecords,
CellReference[] firstCells, ArrayRecord[] arrayRecords,
TableRecord[] tableRecords) {
if (sharedFormulaRecords.length + firstCells.length +
arrayRecords.length + tableRecords.length < 1) {
- return EMPTY;
+ return createEmpty();
}
return new SharedValueManager(sharedFormulaRecords, firstCells,
arrayRecords, tableRecords);
}
Modified:
poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestFormulaRecordAggregate.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestFormulaRecordAggregate.java?rev=893057&r1=893056&r2=893057&view=diff
==============================================================================
---
poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestFormulaRecordAggregate.java
(original)
+++
poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestFormulaRecordAggregate.java
Tue Dec 22 01:41:16 2009
@@ -37,7 +37,7 @@
f.setCachedResultTypeString();
StringRecord s = new StringRecord();
s.setString("abc");
- FormulaRecordAggregate fagg = new FormulaRecordAggregate(f, s,
SharedValueManager.EMPTY);
+ FormulaRecordAggregate fagg = new FormulaRecordAggregate(f, s,
SharedValueManager.createEmpty());
assertEquals("abc", fagg.getStringValue());
}
@@ -54,7 +54,7 @@
fr.setValue(2.0);
StringRecord sr = new StringRecord();
sr.setString("NA");
- SharedValueManager svm = SharedValueManager.EMPTY;
+ SharedValueManager svm = SharedValueManager.createEmpty();
FormulaRecordAggregate fra;
try {
Modified:
poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestRowRecordsAggregate.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestRowRecordsAggregate.java?rev=893057&r1=893056&r2=893057&view=diff
==============================================================================
---
poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestRowRecordsAggregate.java
(original)
+++
poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestRowRecordsAggregate.java
Tue Dec 22 01:41:16 2009
@@ -63,24 +63,24 @@
/**
* Prior to Aug 2008, POI would re-serialize spreadsheets with
{...@link ArrayRecord}s or
- * {...@link TableRecord}s with those records out of order. Similar to
+ * {...@link TableRecord}s with those records out of order. Similar to
* {...@link SharedFormulaRecord}s, these records should appear
immediately after the first
* {...@link FormulaRecord}s that they apply to (and only once).<br/>
*/
public void testArraysAndTables() {
HSSFWorkbook wb =
HSSFTestDataSamples.openSampleWorkbook("testArraysAndTables.xls");
Record[] sheetRecs =
RecordInspector.getRecords(wb.getSheetAt(0), 0);
-
+
int countArrayFormulas = verifySharedValues(sheetRecs,
ArrayRecord.class);
assertEquals(5, countArrayFormulas);
int countTableFormulas = verifySharedValues(sheetRecs,
TableRecord.class);
assertEquals(3, countTableFormulas);
// Note - SharedFormulaRecords are currently not re-serialized
by POI (each is extracted
- // into many non-shared formulas), but if they ever were, the
same rules would apply.
+ // into many non-shared formulas), but if they ever were, the
same rules would apply.
int countSharedFormulas = verifySharedValues(sheetRecs,
SharedFormulaRecord.class);
assertEquals(0, countSharedFormulas);
-
+
if (false) { // set true to observe re-serialized file
File f = new File(System.getProperty("java.io.tmpdir")
+ "/testArraysAndTables-out.xls");
@@ -96,7 +96,7 @@
}
private static int verifySharedValues(Record[] recs, Class shfClass) {
-
+
int result =0;
for(int i=0; i<recs.length; i++) {
Record rec = recs[i];
@@ -105,7 +105,7 @@
Record prevRec = recs[i-1];
if (!(prevRec instanceof FormulaRecord)) {
throw new AssertionFailedError("Bad
record order at index "
- + i + ": Formula record
expected but got ("
+ + i + ": Formula record
expected but got ("
+
prevRec.getClass().getName() + ")");
}
verifySharedFormula((FormulaRecord) prevRec,
rec);
@@ -127,7 +127,7 @@
* The functionality change being tested here is actually not critical
to the overall fix
* for bug 46280, since the fix involved making sure the that offending
<i>PivotTable</i>
* records do not get into {...@link RowRecordsAggregate}.<br/>
- * This fix in {...@link RowRecordsAggregate} was implemented anyway
since any {...@link
+ * This fix in {...@link RowRecordsAggregate} was implemented anyway
since any {...@link
* UnknownRecord} has the potential of being 'continued'.
*/
public void testUnknownContinue_bug46280() {
@@ -140,7 +140,7 @@
RecordStream rs = new RecordStream(Arrays.asList(inRecs), 0);
RowRecordsAggregate rra;
try {
- rra = new RowRecordsAggregate(rs,
SharedValueManager.EMPTY);
+ rra = new RowRecordsAggregate(rs,
SharedValueManager.createEmpty());
} catch (RuntimeException e) {
if (e.getMessage().startsWith("Unexpected record
type")) {
throw new AssertionFailedError("Identified bug
46280a");
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]