1 */
108
109
110
111 package org.apache.poi.hssf.record;
112
113
114
115 import org.apache.poi.util.LittleEndian;
116
117
118
119 /**
120
121 * Title: A sub Record for Extern Sheet <P>
122
123 * Description: Defines a named range within a workbook. <P>
124
125 * REFERENCE: <P>
126
127 * @author Libin Roman (Vista Portal LDT. Developer)
128
129 * @version 1.0-pre
130
131 */
132
133
134
135 public class ExternSheetSubRecord extends Record {
136
137 public final static short sid = 0xFFF; // only here for conformance, doesn't really have an sid
138
139 private short field_1_index_to_supbook;
140
141 private short field_2_index_to_first_supbook_sheet;
142
143 private short field_3_index_to_last_supbook_sheet;
144
145
146
147
148
149 /** a Constractor for making new sub record
150
151 */
152
153 public ExternSheetSubRecord() {
154
155 }
156
157
158
159 /**
160
161 * Constructs a Extern Sheet Sub Record record and sets its fields appropriately.
162
163 *
164
165 * @param id id must be 0x18 or an exception will be throw upon validation
166
167 * @param size the size of the data area of the record
168
169 * @param data data of the record (should not contain sid/len)
170
171 */
172
173 public ExternSheetSubRecord(short id, short size, byte[] data) {
174
175 super(id, size, data);
176
177 }
178
179
180
181 /**
182
183 * Constructs a Extern Sheet Sub Record record and sets its fields appropriately.
184
185 *
186
187 * @param id id must be 0x18 or an exception will be throw upon validation
188
189 * @param size the size of the data area of the record
190
191 * @param data data of the record (should not contain sid/len)
192
193 * @param offset of the record's data
194
195 */
196
197 public ExternSheetSubRecord(short id, short size, byte[] data, int offset) {
198
199 super(id, size, data, offset);
200
201 }
202
203
204
205 /** Sets the Index to the sup book
206
207 * @param index sup book index
208
209 */
210
211 public void setIndexToSupBook(short index){
212
213 field_1_index_to_supbook = index;
214
215 }
216
217
218
219 /** gets the index to sup book
220
221 * @return sup book index
222
223 */
224
225 public short getIndexToSupBook(){
226
227 return field_1_index_to_supbook;
228
229 }
230
231
232
233 /** sets the index to first sheet in supbook
234
235 * @param index index to first sheet
236
237 */
238
239 public void setIndexToFirstSupBook(short index){
240
241 field_2_index_to_first_supbook_sheet = index;
242
243 }
244
245
246
247 /** gets the index to first sheet from supbook
248
249 * @return index to first supbook
250
251 */
252
253 public short getIndexToFirstSupBook(){
254
255 return field_2_index_to_first_supbook_sheet;
256
257 }
258
259
260
261 /** sets the index to last sheet in supbook
262
263 * @param index index to last sheet
264
265 */
266
267 public void setIndexToLastSupBook(short index){
268
269 field_3_index_to_last_supbook_sheet = index;
270
271 }
272
273
274
275 /** gets the index to last sheet in supbook
276
277 * @return index to last supbook
278
279 */
280
281 public short getIndexToLastSupBook(){
282
283 return field_3_index_to_last_supbook_sheet;
284
285 }
286
287
288
289 /**
290
291 * called by constructor, should throw runtime exception in the event of a
292
293 * record passed with a differing ID.
294
295 *
296
297 * @param id alleged id for this record
298
299 */
300
301 protected void validateSid(short id) {
302
303 // do nothing
304
305 }
306
307
308
309 /**
310
311 * called by the constructor, should set class level fields. Should throw
312
313 * runtime exception for bad/icomplete data.
314
315 *
316
317 * @param data raw data
318
319 * @param size size of data
320
321 * @param offset of the record's data (provided a big array of the file)
322
323 */
324
325 protected void fillFields(byte [] data, short size, int offset) {
326
327 field_1_index_to_supbook = LittleEndian.getShort(data, 0 + offset);
328
329 field_2_index_to_first_supbook_sheet = LittleEndian.getShort(data, 2 + offset);
330
331 field_3_index_to_last_supbook_sheet = LittleEndian.getShort(data, 4 + offset);
332
333 }
334
335
336
337
338
339 public String toString() {
340
341 StringBuffer buffer = new StringBuffer();
342
343 buffer.append(" supbookindex =").append(getIndexToSupBook()).append('\n');
344
345 buffer.append(" 1stsbindex =").append(getIndexToFirstSupBook()).append('\n');
346
347 buffer.append(" lastsbindex =").append(getIndexToLastSupBook()).append('\n');
348
349 return buffer.toString();
350
351 }
352
353
354
355 /**
356
357 * called by the class that is responsible for writing this sucker.
358
359 * Subclasses should implement this so that their data is passed back in a
360
361 * byte array.
362
363 *
364
365 * @param offset to begin writing at
366
367 * @param data byte array containing instance data
368
369 * @return number of bytes written
370
371 */
372
373 public int serialize(int offset, byte [] data) {
374
375 LittleEndian.putShort(data, 0 + offset, getIndexToSupBook());
376
377 LittleEndian.putShort(data, 2 + offset, getIndexToFirstSupBook());
378
379 LittleEndian.putShort(data, 4 + offset, getIndexToLastSupBook());
380
381
382
383 return getRecordSize();
384
385 }
386
387
388
389
390
391 /** returns the record size
392
393 */
394
395 public int getRecordSize() {
396
397 return 6;
398
399 }
400
401
402
403 /**
404
405 * return the non static version of the id for this record.
406
407 */
408
409 public short getSid() {
410
411 return this.sid;
412
413 }
414
415 }
416
417 ???????????????ExternSheetSubRecord???????????????????????????????????????????Record???????????????????????????????sid???????????????????????????????????????????????????????????????????????????field_1_index_to_supbook???????????????????????????????field_2_index_to_first_supbook_sheet???????????????????????????????field_3_index_to_last_supbook_sheet?????????????????ExternSheetSubRecord?????????????????ExternSheetSubRecord???????????????id???????????????????size?????????????????????????data?????????????????ExternSheetSubRecord???????????????id???????????????????size?????????????????????????data???????????????????????????????offset??????????????????????setIndexToSupBook?????????field_1_index_to_supbook????????????????????????????????????index???????????????????????getIndexToSupBook????????????????field_1_index_to_supbook??????????????????????setIndexToFirstSupBook????????????????????????????????????????????????index???????????????????????getIndexToFirstSupBook??????????????????????setIndexToLastSupBook???????????????????????????????????????????????index???????????????????????getIndexToLastSupBook?????????????????????????validateSid??????????????????????????????????fillFields?????????field_1_index_to_supbook????????????????????????????????????????????????LittleEndian?????????????????????????????????????????????????????????????getShort??????????????????????????????????????????????????????????????????????data????????????????????????????????????????????????????????????????????????????????offset?????????field_2_index_to_first_supbook_sheet????????????????????????????????????????????????LittleEndian?????????????????????????????????????????????????????????????getShort??????????????????????????????????????????????????????????????????????data????????????????????????????????????????????????????????????????????????????????offset?????????field_3_index_to_last_supbook_sheet????????????????????????????????????????????????LittleEndian?????????????????????????????????????????????????????????????getShort??????????????????????????????????????????????????????????????????????data????????????????????????????????????????????????????????????????????????????????offset???????????????????toString?????????buffer???????????????????????????????????????????????????getIndexToSupBook?????????buffer???????????????????????????????????????????????????getIndexToFirstSupBook?????????buffer???????????????????????????????????????????????????getIndexToLastSupBook????????????????buffer?????????????????????serialize?????????LittleEndian??????????????????????putShort???????????????????????????????data?????????????????????????????????????????offset?????????????????????????????????????????????????getIndexToSupBook?????????LittleEndian??????????????????????putShort???????????????????????????????data?????????????????????????????????????????offset?????????????????????????????????????????????????getIndexToFirstSupBook?????????LittleEndian??????????????????????putShort???????????????????????????????data?????????????????????????????????????????offset?????????????????????????????????????????????????getIndexToLastSupBook????????????????getRecordSize?????????????????????getRecordSize???????????????????????getSid