1 /
55
56 package org.apache.poi.hssf.record;
57
58 import org.apache.poi.util.BitField;
59 import org.apache.poi.util.LittleEndian;
60
61
68
69 public class RowRecord
70 extends Record
71 implements Comparable
72 {
73 public final static short sid = 0x208;
74 private short field_1_row_number;
75 private short field_2_first_col;
76 private short field_3_last_col;
77 private short field_4_height;
78 private short field_5_optimize;
79
80
81 private short field_6_reserved;
82 private short field_7_option_flags;
83 private BitField outlineLevel = new BitField(0x07);
84
85
86 private BitField colapsed = new BitField(0x10);
87 private BitField zeroHeight = new BitField(0x20);
88 private BitField badFontHeight = new BitField(0x40);
89 private BitField formatted = new BitField(0x80);
90 private short field_8_xf_index;
91
92 public RowRecord()
93 {
94 }
95
96
103
104 public RowRecord(short id, short size, byte [] data)
105 {
106 super(id, size, data);
107 }
108
109
117
118 public RowRecord(short id, short size, byte [] data, int offset)
119 {
120 super(id, size, data, offset);
121 }
122
123 protected void validateSid(short id)
124 {
125 if (id != sid)
126 {
127 throw new RecordFormatException("NOT A valid ROW RECORD");
128 }
129 }
130
131 protected void fillFields(byte [] data, short size, int offset)
132 {
133 field_1_row_number = LittleEndian.getShort(data, 0 + offset);
134 field_2_first_col = LittleEndian.getShort(data, 2 + offset);
135 field_3_last_col = LittleEndian.getShort(data, 4 + offset);
136 field_4_height = LittleEndian.getShort(data, 6 + offset);
137 field_5_optimize = LittleEndian.getShort(data, 8 + offset);
138 field_6_reserved = LittleEndian.getShort(data, 10 + offset);
139 field_7_option_flags = LittleEndian.getShort(data, 12 + offset);
140 field_8_xf_index = LittleEndian.getShort(data, 14 + offset);
141 }
142
143
147
148 public void setRowNumber(short row)
149 {
150 field_1_row_number = row;
151 }
152
153
157
158 public void setFirstCol(short col)
159 {
160 field_2_first_col = col;
161 }
162
163
167
168 public void setLastCol(short col)
169 {
170 field_3_last_col = col;
171 }
172
173
177
178 public void setHeight(short height)
179 {
180 field_4_height = height;
181 }
182
183
187
188 public void setOptimize(short optimize)
189 {
190 field_5_optimize = optimize;
191 }
192
193
198
199 public void setOptionFlags(short options)
200 {
201 field_7_option_flags = options;
202 }
203
204
205
206
211
212 public void setOutlineLevel(short ol)
213 {
214 field_7_option_flags =
215 outlineLevel.setShortValue(field_7_option_flags, ol);
216 }
217
218
223
224 public void setColapsed(boolean c)
225 {
226 field_7_option_flags = colapsed.setShortBoolean(field_7_option_flags,
227 c);
228 }
229
230
235
236 public void setZeroHeight(boolean z)
237 {
238 field_7_option_flags =
239 zeroHeight.setShortBoolean(field_7_option_flags, z);
240 }
241
242
247
248 public void setBadFontHeight(boolean f)
249 {
250 field_7_option_flags =
251 badFontHeight.setShortBoolean(field_7_option_flags, f);
252 }
253
254
259
260 public void setFormatted(boolean f)
261 {
262 field_7_option_flags = formatted.setShortBoolean(field_7_option_flags,
263 f);
264 }
265
266
267
268
273
274 public void setXFIndex(short index)
275 {
276 field_8_xf_index = index;
277 }
278
279
283
284 public short getRowNumber()
285 {
286 return field_1_row_number;
287 }
288
289
293
294 public short getFirstCol()
295 {
296 return field_2_first_col;
297 }
298
299
303
304 public short getLastCol()
305 {
306 return field_3_last_col;
307 }
308
309
313
314 public short getHeight()
315 {
316 return field_4_height;
317 }
318
319
323
324 public short getOptimize()
325 {
326 return field_5_optimize;
327 }
328
329
334
335 public short getOptionFlags()
336 {
337 return field_7_option_flags;
338 }
339
340
341
342
347
348 public short getOutlineLevel()
349 {
350 return outlineLevel.getShortValue(field_7_option_flags);
351 }
352
353
358
359 public boolean getColapsed()
360 {
361 return (colapsed.isSet(field_7_option_flags));
362 }
363
364
369
370 public boolean getZeroHeight()
371 {
372 return zeroHeight.isSet(field_7_option_flags);
373 }
374
375
380
381 public boolean getBadFontHeight()
382 {
383 return badFontHeight.isSet(field_7_option_flags);
384 }
385
386
391
392 public boolean getFormatted()
393 {
394 return formatted.isSet(field_7_option_flags);
395 }
396
397
398
399
404
405 public short getXFIndex()
406 {
407 return field_8_xf_index;
408 }
409
410 public boolean isInValueSection()
411 {
412 return true;
413 }
414
415 public String toString()
416 {
417 StringBuffer buffer = new StringBuffer();
418
419 buffer.append("[ROW]\n");
420 buffer.append(" .rownumber = ")
421 .append(Integer.toHexString(getRowNumber())).append("\n");
422 buffer.append(" .firstcol = ")
423 .append(Integer.toHexString(getFirstCol())).append("\n");
424 buffer.append(" .lastcol = ")
425 .append(Integer.toHexString(getLastCol())).append("\n");
426 buffer.append(" .height = ")
427 .append(Integer.toHexString(getHeight())).append("\n");
428 buffer.append(" .optimize = ")
429 .append(Integer.toHexString(getOptimize())).append("\n");
430 buffer.append(" .reserved = ")
431 .append(Integer.toHexString(field_6_reserved)).append("\n");
432 buffer.append(" .optionflags = ")
433 .append(Integer.toHexString(getOptionFlags())).append("\n");
434 buffer.append(" .outlinelvl = ")
435 .append(Integer.toHexString(getOutlineLevel())).append("\n");
436 buffer.append(" .colapsed = ").append(getColapsed())
437 .append("\n");
438 buffer.append(" .zeroheight = ").append(getZeroHeight())
439 .append("\n");
440 buffer.append(" .badfontheig= ").append(getBadFontHeight())
441 .append("\n");
442 buffer.append(" .formatted = ").append(getFormatted())
443 .append("\n");
444 buffer.append(" .xfindex = ")
445 .append(Integer.toHexString(getXFIndex())).append("\n");
446 buffer.append("[/ROW]\n");
447 return buffer.toString();
448 }
449
450 public int serialize(int offset, byte [] data)
451 {
452 LittleEndian.putShort(data, 0 + offset, sid);
453 LittleEndian.putShort(data, 2 + offset, ( short ) 16);
454 LittleEndian.putShort(data, 4 + offset, getRowNumber());
455 LittleEndian.putShort(data, 6 + offset, getFirstCol() == -1 ? (short)0 : getFirstCol());
456 LittleEndian.putShort(data, 8 + offset, getLastCol() == -1 ? (short)0 : getLastCol());
457 LittleEndian.putShort(data, 10 + offset, getHeight());
458 LittleEndian.putShort(data, 12 + offset, getOptimize());
459 LittleEndian.putShort(data, 14 + offset, field_6_reserved);
460 LittleEndian.putShort(data, 16 + offset, getOptionFlags());
461
462
463 LittleEndian.putShort(data, 18 + offset, getXFIndex());
464 return getRecordSize();
465 }
466
467 public int getRecordSize()
468 {
469 return 20;
470 }
471
472 public short getSid()
473 {
474 return this.sid;
475 }
476
477 public int compareTo(Object obj)
478 {
479 RowRecord loc = ( RowRecord ) obj;
480
481 if (this.getRowNumber() == loc.getRowNumber())
482 {
483 return 0;
484 }
485 if (this.getRowNumber() < loc.getRowNumber())
486 {
487 return -1;
488 }
489 if (this.getRowNumber() > loc.getRowNumber())
490 {
491 return 1;
492 }
493 return -1;
494 }
495
496 public boolean equals(Object obj)
497 {
498 if (!(obj instanceof RowRecord))
499 {
500 return false;
501 }
502 RowRecord loc = ( RowRecord ) obj;
503
504 if (this.getRowNumber() == loc.getRowNumber())
505 {
506 return true;
507 }
508 return false;
509 }
510 }
511