View | Details | Raw Unified | Return to bug 44894
Collapse All | Expand All

(-)C:\josh\client\poi\svn\trunk-h2/src/java/org/apache/poi/hssf/eventmodel/EventRecordFactory.java (-14 / +71 lines)
Lines 19-29 Link Here
19
19
20
import java.io.InputStream;
20
import java.io.InputStream;
21
import java.lang.reflect.Constructor;
21
import java.lang.reflect.Constructor;
22
import java.lang.reflect.Modifier;
22
import java.util.ArrayList;
23
import java.util.ArrayList;
23
import java.util.HashMap;
24
import java.util.HashMap;
25
import java.util.HashSet;
24
import java.util.Iterator;
26
import java.util.Iterator;
25
import java.util.List;
27
import java.util.List;
26
import java.util.Map;
28
import java.util.Map;
29
import java.util.Set;
27
30
28
import org.apache.poi.hssf.record.BOFRecord;
31
import org.apache.poi.hssf.record.BOFRecord;
29
import org.apache.poi.hssf.record.BackupRecord;
32
import org.apache.poi.hssf.record.BackupRecord;
Lines 32-63 Link Here
32
import org.apache.poi.hssf.record.BoolErrRecord;
35
import org.apache.poi.hssf.record.BoolErrRecord;
33
import org.apache.poi.hssf.record.BottomMarginRecord;
36
import org.apache.poi.hssf.record.BottomMarginRecord;
34
import org.apache.poi.hssf.record.BoundSheetRecord;
37
import org.apache.poi.hssf.record.BoundSheetRecord;
38
import org.apache.poi.hssf.record.CFHeaderRecord;
39
import org.apache.poi.hssf.record.CFRuleRecord;
40
import org.apache.poi.hssf.record.CRNCountRecord;
41
import org.apache.poi.hssf.record.CRNRecord;
35
import org.apache.poi.hssf.record.CalcCountRecord;
42
import org.apache.poi.hssf.record.CalcCountRecord;
36
import org.apache.poi.hssf.record.CalcModeRecord;
43
import org.apache.poi.hssf.record.CalcModeRecord;
44
import org.apache.poi.hssf.record.ChartRecord;
45
import org.apache.poi.hssf.record.ChartTitleFormatRecord;
37
import org.apache.poi.hssf.record.CodepageRecord;
46
import org.apache.poi.hssf.record.CodepageRecord;
38
import org.apache.poi.hssf.record.ColumnInfoRecord;
47
import org.apache.poi.hssf.record.ColumnInfoRecord;
39
import org.apache.poi.hssf.record.ContinueRecord;
48
import org.apache.poi.hssf.record.ContinueRecord;
40
import org.apache.poi.hssf.record.CountryRecord;
49
import org.apache.poi.hssf.record.CountryRecord;
41
import org.apache.poi.hssf.record.DBCellRecord;
50
import org.apache.poi.hssf.record.DBCellRecord;
42
import org.apache.poi.hssf.record.DSFRecord;
51
import org.apache.poi.hssf.record.DSFRecord;
52
import org.apache.poi.hssf.record.DVALRecord;
53
import org.apache.poi.hssf.record.DVRecord;
43
import org.apache.poi.hssf.record.DateWindow1904Record;
54
import org.apache.poi.hssf.record.DateWindow1904Record;
44
import org.apache.poi.hssf.record.DefaultColWidthRecord;
55
import org.apache.poi.hssf.record.DefaultColWidthRecord;
45
import org.apache.poi.hssf.record.DefaultRowHeightRecord;
56
import org.apache.poi.hssf.record.DefaultRowHeightRecord;
46
import org.apache.poi.hssf.record.DeltaRecord;
57
import org.apache.poi.hssf.record.DeltaRecord;
47
import org.apache.poi.hssf.record.DimensionsRecord;
58
import org.apache.poi.hssf.record.DimensionsRecord;
59
import org.apache.poi.hssf.record.DrawingGroupRecord;
60
import org.apache.poi.hssf.record.DrawingRecord;
61
import org.apache.poi.hssf.record.DrawingSelectionRecord;
48
import org.apache.poi.hssf.record.EOFRecord;
62
import org.apache.poi.hssf.record.EOFRecord;
49
import org.apache.poi.hssf.record.ExtSSTRecord;
63
import org.apache.poi.hssf.record.ExtSSTRecord;
50
import org.apache.poi.hssf.record.ExtendedFormatRecord;
64
import org.apache.poi.hssf.record.ExtendedFormatRecord;
51
import org.apache.poi.hssf.record.ExternSheetRecord;
65
import org.apache.poi.hssf.record.ExternSheetRecord;
66
import org.apache.poi.hssf.record.ExternalNameRecord;
67
import org.apache.poi.hssf.record.FilePassRecord;
68
import org.apache.poi.hssf.record.FileSharingRecord;
52
import org.apache.poi.hssf.record.FnGroupCountRecord;
69
import org.apache.poi.hssf.record.FnGroupCountRecord;
53
import org.apache.poi.hssf.record.FontRecord;
70
import org.apache.poi.hssf.record.FontRecord;
54
import org.apache.poi.hssf.record.FooterRecord;
71
import org.apache.poi.hssf.record.FooterRecord;
55
import org.apache.poi.hssf.record.FormatRecord;
72
import org.apache.poi.hssf.record.FormatRecord;
73
import org.apache.poi.hssf.record.FormulaRecord;
56
import org.apache.poi.hssf.record.GridsetRecord;
74
import org.apache.poi.hssf.record.GridsetRecord;
57
import org.apache.poi.hssf.record.GutsRecord;
75
import org.apache.poi.hssf.record.GutsRecord;
58
import org.apache.poi.hssf.record.HCenterRecord;
76
import org.apache.poi.hssf.record.HCenterRecord;
59
import org.apache.poi.hssf.record.HeaderRecord;
77
import org.apache.poi.hssf.record.HeaderRecord;
60
import org.apache.poi.hssf.record.HideObjRecord;
78
import org.apache.poi.hssf.record.HideObjRecord;
79
import org.apache.poi.hssf.record.HorizontalPageBreakRecord;
80
import org.apache.poi.hssf.record.HyperlinkRecord;
61
import org.apache.poi.hssf.record.IndexRecord;
81
import org.apache.poi.hssf.record.IndexRecord;
62
import org.apache.poi.hssf.record.InterfaceEndRecord;
82
import org.apache.poi.hssf.record.InterfaceEndRecord;
63
import org.apache.poi.hssf.record.InterfaceHdrRecord;
83
import org.apache.poi.hssf.record.InterfaceHdrRecord;
Lines 65-78 Link Here
65
import org.apache.poi.hssf.record.LabelRecord;
85
import org.apache.poi.hssf.record.LabelRecord;
66
import org.apache.poi.hssf.record.LabelSSTRecord;
86
import org.apache.poi.hssf.record.LabelSSTRecord;
67
import org.apache.poi.hssf.record.LeftMarginRecord;
87
import org.apache.poi.hssf.record.LeftMarginRecord;
88
import org.apache.poi.hssf.record.LegendRecord;
68
import org.apache.poi.hssf.record.MMSRecord;
89
import org.apache.poi.hssf.record.MMSRecord;
69
import org.apache.poi.hssf.record.MergeCellsRecord;
90
import org.apache.poi.hssf.record.MergeCellsRecord;
70
import org.apache.poi.hssf.record.MulBlankRecord;
91
import org.apache.poi.hssf.record.MulBlankRecord;
71
import org.apache.poi.hssf.record.MulRKRecord;
92
import org.apache.poi.hssf.record.MulRKRecord;
72
import org.apache.poi.hssf.record.NameRecord;
93
import org.apache.poi.hssf.record.NameRecord;
94
import org.apache.poi.hssf.record.NoteRecord;
73
import org.apache.poi.hssf.record.NumberRecord;
95
import org.apache.poi.hssf.record.NumberRecord;
96
import org.apache.poi.hssf.record.ObjRecord;
97
import org.apache.poi.hssf.record.ObjectProtectRecord;
98
import org.apache.poi.hssf.record.PaletteRecord;
74
import org.apache.poi.hssf.record.PaneRecord;
99
import org.apache.poi.hssf.record.PaneRecord;
75
import org.apache.poi.hssf.record.PaletteRecord;
76
import org.apache.poi.hssf.record.PasswordRecord;
100
import org.apache.poi.hssf.record.PasswordRecord;
77
import org.apache.poi.hssf.record.PasswordRev4Record;
101
import org.apache.poi.hssf.record.PasswordRev4Record;
78
import org.apache.poi.hssf.record.PrecisionRecord;
102
import org.apache.poi.hssf.record.PrecisionRecord;
Lines 82-87 Link Here
82
import org.apache.poi.hssf.record.ProtectRecord;
106
import org.apache.poi.hssf.record.ProtectRecord;
83
import org.apache.poi.hssf.record.ProtectionRev4Record;
107
import org.apache.poi.hssf.record.ProtectionRev4Record;
84
import org.apache.poi.hssf.record.RKRecord;
108
import org.apache.poi.hssf.record.RKRecord;
109
import org.apache.poi.hssf.record.RecalcIdRecord;
85
import org.apache.poi.hssf.record.Record;
110
import org.apache.poi.hssf.record.Record;
86
import org.apache.poi.hssf.record.RecordFormatException;
111
import org.apache.poi.hssf.record.RecordFormatException;
87
import org.apache.poi.hssf.record.RecordInputStream;
112
import org.apache.poi.hssf.record.RecordInputStream;
Lines 91-119 Link Here
91
import org.apache.poi.hssf.record.RowRecord;
116
import org.apache.poi.hssf.record.RowRecord;
92
import org.apache.poi.hssf.record.SSTRecord;
117
import org.apache.poi.hssf.record.SSTRecord;
93
import org.apache.poi.hssf.record.SaveRecalcRecord;
118
import org.apache.poi.hssf.record.SaveRecalcRecord;
119
import org.apache.poi.hssf.record.ScenarioProtectRecord;
94
import org.apache.poi.hssf.record.SelectionRecord;
120
import org.apache.poi.hssf.record.SelectionRecord;
121
import org.apache.poi.hssf.record.SeriesRecord;
122
import org.apache.poi.hssf.record.SeriesTextRecord;
95
import org.apache.poi.hssf.record.SharedFormulaRecord;
123
import org.apache.poi.hssf.record.SharedFormulaRecord;
96
import org.apache.poi.hssf.record.StringRecord;
124
import org.apache.poi.hssf.record.StringRecord;
97
import org.apache.poi.hssf.record.StyleRecord;
125
import org.apache.poi.hssf.record.StyleRecord;
126
import org.apache.poi.hssf.record.SupBookRecord;
98
import org.apache.poi.hssf.record.TabIdRecord;
127
import org.apache.poi.hssf.record.TabIdRecord;
128
import org.apache.poi.hssf.record.TextObjectRecord;
99
import org.apache.poi.hssf.record.TopMarginRecord;
129
import org.apache.poi.hssf.record.TopMarginRecord;
130
import org.apache.poi.hssf.record.UncalcedRecord;
100
import org.apache.poi.hssf.record.UnknownRecord;
131
import org.apache.poi.hssf.record.UnknownRecord;
101
import org.apache.poi.hssf.record.UseSelFSRecord;
132
import org.apache.poi.hssf.record.UseSelFSRecord;
102
import org.apache.poi.hssf.record.VCenterRecord;
133
import org.apache.poi.hssf.record.VCenterRecord;
134
import org.apache.poi.hssf.record.VerticalPageBreakRecord;
103
import org.apache.poi.hssf.record.WSBoolRecord;
135
import org.apache.poi.hssf.record.WSBoolRecord;
104
import org.apache.poi.hssf.record.WindowOneRecord;
136
import org.apache.poi.hssf.record.WindowOneRecord;
105
import org.apache.poi.hssf.record.WindowProtectRecord;
137
import org.apache.poi.hssf.record.WindowProtectRecord;
106
import org.apache.poi.hssf.record.WindowTwoRecord;
138
import org.apache.poi.hssf.record.WindowTwoRecord;
107
import org.apache.poi.hssf.record.WriteAccessRecord;
139
import org.apache.poi.hssf.record.WriteAccessRecord;
108
import org.apache.poi.hssf.record.WriteProtectRecord;
140
import org.apache.poi.hssf.record.WriteProtectRecord;
109
import org.apache.poi.hssf.record.FilePassRecord;
110
import org.apache.poi.hssf.record.NoteRecord;
111
141
112
142
113
/**
143
/**
114
 * Event-based record factory.  As opposed to RecordFactory
144
 * Event-based record factory.  As opposed to RecordFactory
115
 * this refactored version throws record events as it comes
145
 * this refactored version fires <em>record events</em> as it comes
116
 * accross the records.  I throws the "lazily" one record behind
146
 * across the records.  I throws the "lazily" one record behind
117
 * to ensure that ContinueRecords are processed first.
147
 * to ensure that ContinueRecords are processed first.
118
 * 
148
 * 
119
 * @author Andrew C. Oliver (acoliver@apache.org) - probably to blame for the bugs (so yank his chain on the list)
149
 * @author Andrew C. Oliver (acoliver@apache.org) - probably to blame for the bugs (so yank his chain on the list)
Lines 121-128 Link Here
121
 * @author Glen Stampoultzis (glens at apache.org) - methods taken from RecordFactory
151
 * @author Glen Stampoultzis (glens at apache.org) - methods taken from RecordFactory
122
 * @author Csaba Nagy (ncsaba at yahoo dot com)
152
 * @author Csaba Nagy (ncsaba at yahoo dot com)
123
 */
153
 */
124
public class EventRecordFactory
154
public final class EventRecordFactory {
125
{
126
    
155
    
127
    /**
156
    /**
128
     * contains the classes for all the records we want to parse.
157
     * contains the classes for all the records we want to parse.
Lines 160-166 Link Here
160
                TopMarginRecord.class, BottomMarginRecord.class,
189
                TopMarginRecord.class, BottomMarginRecord.class,
161
                PaletteRecord.class, StringRecord.class, SharedFormulaRecord.class, 
190
                PaletteRecord.class, StringRecord.class, SharedFormulaRecord.class, 
162
                WriteProtectRecord.class, FilePassRecord.class, PaneRecord.class,
191
                WriteProtectRecord.class, FilePassRecord.class, PaneRecord.class,
163
                NoteRecord.class
192
                NoteRecord.class,
193
                
194
                ObjectProtectRecord.class, ScenarioProtectRecord.class, 
195
                FileSharingRecord.class, ChartTitleFormatRecord.class,
196
                DVRecord.class, DVALRecord.class, UncalcedRecord.class,
197
                ChartRecord.class, LegendRecord.class,  
198
                SeriesRecord.class, SeriesTextRecord.class,
199
                HyperlinkRecord.class,
200
                ExternalNameRecord.class,
201
                SupBookRecord.class,
202
                CRNCountRecord.class,
203
                CRNRecord.class,
204
                CFHeaderRecord.class,
205
                CFRuleRecord.class,
206
                
207
                FormulaRecord.class,
208
                HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class,
209
                RecalcIdRecord.class,
210
                ObjRecord.class, TextObjectRecord.class,
211
                DrawingRecord.class, DrawingGroupRecord.class, DrawingSelectionRecord.class,
164
            };
212
            };
165
       
213
       
166
    }
214
    }
Lines 177-183 Link Here
177
    private static short[] sidscache;
225
    private static short[] sidscache;
178
226
179
    /**
227
    /**
180
     * List of the listners that are registred.  should all be ERFListener
228
     * List of the listeners that are registered.  should all be ERFListener
181
     */    
229
     */    
182
    private List listeners;
230
    private List listeners;
183
231
Lines 422-438 Link Here
422
    {
470
    {
423
        Map         result = new HashMap();
471
        Map         result = new HashMap();
424
        Constructor constructor;
472
        Constructor constructor;
473
        Set uniqueRecClasses = new HashSet(records.length * 3 / 2);
425
474
426
        for (int i = 0; i < records.length; i++)
475
        for (int i = 0; i < records.length; i++)
427
        {
476
        {
428
            Class record = null;
477
            short sid;
429
            short sid    = 0;
430
478
431
            record = records[ i ];
479
            Class recClass = records[ i ];
480
            if(!Record.class.isAssignableFrom(recClass)) {
481
                throw new RuntimeException("Invalid record sub-class (" + recClass.getName() + ")");
482
            }
483
            if(Modifier.isAbstract(recClass.getModifiers())) {
484
                throw new RuntimeException("Invalid record class (" + recClass.getName() + ") - must not be abstract");
485
            }
486
            if(!uniqueRecClasses.add(recClass)) {
487
                throw new RuntimeException("duplicate record class (" + recClass.getName() + ")");
488
            }
432
            try
489
            try
433
            {
490
            {
434
                sid         = record.getField("sid").getShort(null);
491
                sid         = recClass.getField("sid").getShort(null);
435
                constructor = record.getConstructor(new Class[]
492
                constructor = recClass.getConstructor(new Class[]
436
                {
493
                {
437
                    RecordInputStream.class
494
                    RecordInputStream.class
438
                });
495
                });
(-)C:\josh\client\poi\svn\trunk-h2/src/java/org/apache/poi/hssf/record/RecordFactory.java (-173 / +7 lines)
Lines 1-4 Link Here
1
2
/* ====================================================================
1
/* ====================================================================
3
   Licensed to the Apache Software Foundation (ASF) under one or more
2
   Licensed to the Apache Software Foundation (ASF) under one or more
4
   contributor license agreements.  See the NOTICE file distributed with
3
   contributor license agreements.  See the NOTICE file distributed with
Lines 15-28 Link Here
15
   See the License for the specific language governing permissions and
14
   See the License for the specific language governing permissions and
16
   limitations under the License.
15
   limitations under the License.
17
==================================================================== */
16
==================================================================== */
18
        
19
17
20
package org.apache.poi.hssf.record;
18
package org.apache.poi.hssf.record;
21
19
22
import java.io.InputStream;
20
import java.io.InputStream;
23
import java.lang.reflect.Constructor;
21
import java.util.ArrayList;
24
import java.util.*;
22
import java.util.List;
25
23
24
import org.apache.poi.hssf.eventmodel.EventRecordFactory;
25
26
/**
26
/**
27
 * Title:  Record Factory<P>
27
 * Title:  Record Factory<P>
28
 * Description:  Takes a stream and outputs an array of Record objects.<P>
28
 * Description:  Takes a stream and outputs an array of Record objects.<P>
Lines 34-95 Link Here
34
 * @author Glen Stampoultzis (glens at apache.org)
34
 * @author Glen Stampoultzis (glens at apache.org)
35
 * @author Csaba Nagy (ncsaba at yahoo dot com)
35
 * @author Csaba Nagy (ncsaba at yahoo dot com)
36
 */
36
 */
37
38
public class RecordFactory
37
public class RecordFactory
39
{
38
{
40
    private static int           NUM_RECORDS = 10000;
39
    private static int           NUM_RECORDS = 10000;
41
    private static final Class[] records;
42
40
43
    static {
44
            records = new Class[]
45
            {
46
                BOFRecord.class, InterfaceHdrRecord.class, MMSRecord.class,
47
                InterfaceEndRecord.class, WriteAccessRecord.class,
48
                CodepageRecord.class, DSFRecord.class, TabIdRecord.class,
49
                FnGroupCountRecord.class, WindowProtectRecord.class,
50
                ProtectRecord.class, PasswordRecord.class, ProtectionRev4Record.class,
51
                PasswordRev4Record.class, WindowOneRecord.class, BackupRecord.class,
52
                HideObjRecord.class, DateWindow1904Record.class,
53
                PrecisionRecord.class, RefreshAllRecord.class, BookBoolRecord.class,
54
                FontRecord.class, FormatRecord.class, ExtendedFormatRecord.class,
55
                StyleRecord.class, UseSelFSRecord.class, BoundSheetRecord.class,
56
                CountryRecord.class, SSTRecord.class, ExtSSTRecord.class,
57
                EOFRecord.class, IndexRecord.class, CalcModeRecord.class,
58
                CalcCountRecord.class, RefModeRecord.class, IterationRecord.class,
59
                DeltaRecord.class, SaveRecalcRecord.class, PrintHeadersRecord.class,
60
                PrintGridlinesRecord.class, GridsetRecord.class, GutsRecord.class,
61
                DefaultRowHeightRecord.class, WSBoolRecord.class, HeaderRecord.class,
62
                FooterRecord.class, HCenterRecord.class, VCenterRecord.class,
63
                PrintSetupRecord.class, DefaultColWidthRecord.class,
64
                DimensionsRecord.class, RowRecord.class, LabelSSTRecord.class,
65
                RKRecord.class, NumberRecord.class, DBCellRecord.class,
66
                WindowTwoRecord.class, SelectionRecord.class, ContinueRecord.class,
67
                LabelRecord.class, BlankRecord.class, ColumnInfoRecord.class,
68
                MulRKRecord.class, MulBlankRecord.class, MergeCellsRecord.class,
69
                FormulaRecord.class, BoolErrRecord.class, ExternSheetRecord.class,
70
                NameRecord.class, LeftMarginRecord.class, RightMarginRecord.class,
71
                TopMarginRecord.class, BottomMarginRecord.class,
72
                DrawingRecord.class, DrawingGroupRecord.class, DrawingSelectionRecord.class,
73
                ObjRecord.class, TextObjectRecord.class,
74
                PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class,
75
                HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class, 
76
                WriteProtectRecord.class, FilePassRecord.class, PaneRecord.class,
77
                NoteRecord.class, ObjectProtectRecord.class, ScenarioProtectRecord.class, 
78
                FileSharingRecord.class, ChartTitleFormatRecord.class,
79
                DVRecord.class, DVALRecord.class, UncalcedRecord.class,
80
                ChartRecord.class, LegendRecord.class, ChartTitleFormatRecord.class, 
81
                SeriesRecord.class, SeriesTextRecord.class,
82
                HyperlinkRecord.class,
83
                ExternalNameRecord.class, // TODO - same changes in non-@deprecated version of this class
84
                SupBookRecord.class,
85
                CRNCountRecord.class,
86
                CRNRecord.class,
87
                CFHeaderRecord.class,
88
                CFRuleRecord.class,
89
            };
90
    }
91
    private static Map           recordsMap  = recordsToMap(records);
92
93
    /**
41
    /**
94
     * changes the default capacity (10000) to handle larger files
42
     * changes the default capacity (10000) to handle larger files
95
     */
43
     */
Lines 150-156 Link Here
150
                          // Drawing records have a very strange continue behaviour.
98
                          // Drawing records have a very strange continue behaviour.
151
                          //There can actually be OBJ records mixed between the continues.
99
                          //There can actually be OBJ records mixed between the continues.
152
                          lastDrawingRecord.processContinueRecord( ((ContinueRecord)record).getData() );
100
                          lastDrawingRecord.processContinueRecord( ((ContinueRecord)record).getData() );
153
                            //we must rememeber the position of the continue record.
101
                            //we must remember the position of the continue record.
154
                            //in the serialization procedure the original structure of records must be preserved
102
                            //in the serialization procedure the original structure of records must be preserved
155
                            records.add(record);
103
                            records.add(record);
156
                        } else if (record.getSid() == ContinueRecord.sid &&
104
                        } else if (record.getSid() == ContinueRecord.sid &&
Lines 183-307 Link Here
183
131
184
    public static Record [] createRecord(RecordInputStream in)
132
    public static Record [] createRecord(RecordInputStream in)
185
    {
133
    {
186
        Record   retval;
134
        return EventRecordFactory.createRecord(in);
187
        Record[] realretval = null;
188
189
        try
190
        {
191
            Constructor constructor =
192
                ( Constructor ) recordsMap.get(new Short(in.getSid()));
193
194
            if (constructor != null)
195
            {
196
                retval = ( Record ) constructor.newInstance(new Object[]
197
                {
198
                    in
199
                });
200
            }
201
            else
202
            {
203
                retval = new UnknownRecord(in);
204
            }
205
        }
206
        catch (Exception introspectionException)
207
        {
208
            throw new RecordFormatException("Unable to construct record instance",introspectionException);
209
        }
210
        if (retval instanceof RKRecord)
211
        {
212
            RKRecord     rk  = ( RKRecord ) retval;
213
            NumberRecord num = new NumberRecord();
214
215
            num.setColumn(rk.getColumn());
216
            num.setRow(rk.getRow());
217
            num.setXFIndex(rk.getXFIndex());
218
            num.setValue(rk.getRKNumber());
219
            retval = num;
220
        }
221
        else if (retval instanceof DBCellRecord)
222
        {
223
            retval = null;
224
        }
225
        else if (retval instanceof MulRKRecord)
226
        {
227
            MulRKRecord mrk = ( MulRKRecord ) retval;
228
229
            realretval = new Record[ mrk.getNumColumns() ];
230
            for (int k = 0; k < mrk.getNumColumns(); k++)
231
            {
232
                NumberRecord nr = new NumberRecord();
233
234
                nr.setColumn(( short ) (k + mrk.getFirstColumn()));
235
                nr.setRow(mrk.getRow());
236
                nr.setXFIndex(mrk.getXFAt(k));
237
                nr.setValue(mrk.getRKNumberAt(k));
238
                realretval[ k ] = nr;
239
            }
240
        }
241
        else if (retval instanceof MulBlankRecord)
242
        {
243
            MulBlankRecord mb = ( MulBlankRecord ) retval;
244
245
            realretval = new Record[ mb.getNumColumns() ];
246
            for (int k = 0; k < mb.getNumColumns(); k++)
247
            {
248
                BlankRecord br = new BlankRecord();
249
250
                br.setColumn(( short ) (k + mb.getFirstColumn()));
251
                br.setRow(mb.getRow());
252
                br.setXFIndex(mb.getXFAt(k));
253
                realretval[ k ] = br;
254
            }
255
        }
256
        if (realretval == null)
257
        {
258
            realretval      = new Record[ 1 ];
259
            realretval[ 0 ] = retval;
260
        }
261
        return realretval;
262
    }
135
    }
263
136
264
    public static short [] getAllKnownRecordSIDs()
137
    public static short [] getAllKnownRecordSIDs()
265
    {
138
    {
266
        short[] results = new short[ recordsMap.size() ];
139
        return EventRecordFactory.getAllKnownRecordSIDs();
267
        int     i       = 0;
268
269
        for (Iterator iterator = recordsMap.keySet().iterator();
270
                iterator.hasNext(); )
271
        {
272
            Short sid = ( Short ) iterator.next();
273
274
            results[ i++ ] = sid.shortValue();
275
        }
276
        return results;
277
    }
140
    }
278
279
    private static Map recordsToMap(Class [] records)
280
    {
281
        Map         result = new HashMap();
282
        Constructor constructor;
283
284
        for (int i = 0; i < records.length; i++)
285
        {
286
            Class record;
287
            short sid;
288
289
            record = records[ i ];
290
            try
291
            {
292
                sid         = record.getField("sid").getShort(null);
293
                constructor = record.getConstructor(new Class[]
294
                {
295
                    RecordInputStream.class
296
                });
297
            }
298
            catch (Exception illegalArgumentException)
299
            {
300
                throw new RecordFormatException(
301
                    "Unable to determine record types", illegalArgumentException);
302
            }
303
            result.put(new Short(sid), constructor);
304
        }
305
        return result;
306
    }
307
}
141
}

Return to bug 44894