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 |
}); |