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]

Reply via email to