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
75 private int field_1_row_number;
76 private short field_2_first_col;
77 private short field_3_last_col;
78 private short field_4_height;
79 private short field_5_optimize;
80
81
82 private short field_6_reserved;
83 private short field_7_option_flags;
84 private BitField outlineLevel = new BitField(0x07);
85
86
87 private BitField colapsed = new BitField(0x10);
88 private BitField zeroHeight = new BitField(0x20);
89 private BitField badFontHeight = new BitField(0x40);
90 private BitField formatted = new BitField(0x80);
91 private short field_8_xf_index;
92
93 public RowRecord()
94 {
95 }
96
97
104
105 public RowRecord(short id, short size, byte [] data)
106 {
107 super(id, size, data);
108 }
109
110
118
119 public RowRecord(short id, short size, byte [] data, int offset)
120 {
121 super(id, size, data, offset);
122 }
123
124 protected void validateSid(short id)
125 {
126 if (id != sid)
127 {
128 throw new RecordFormatException("NOT A valid ROW RECORD");
129 }
130 }
131
132 protected void fillFields(byte [] data, short size, int offset)
133 {
134
135 field_1_row_number = LittleEndian.getUShort(data, 0 + offset);
136 field_2_first_col = LittleEndian.getShort(data, 2 + offset);
137 field_3_last_col = LittleEndian.getShort(data, 4 + offset);
138 field_4_height = LittleEndian.getShort(data, 6 + offset);
139 field_5_optimize = LittleEndian.getShort(data, 8 + offset);
140 field_6_reserved = LittleEndian.getShort(data, 10 + offset);
141 field_7_option_flags = LittleEndian.getShort(data, 12 + offset);
142 field_8_xf_index = LittleEndian.getShort(data, 14 + offset);
143 }
144
145
149
150
151 public void setRowNumber(int row)
152 {
153 field_1_row_number = row;
154 }
155
156
160
161 public void setFirstCol(short col)
162 {
163 field_2_first_col = col;
164 }
165
166
170
171 public void setLastCol(short col)
172 {
173 field_3_last_col = col;
174 }
175
176
180
181 public void setHeight(short height)
182 {
183 field_4_height = height;
184 }
185
186
190
191 public void setOptimize(short optimize)
192 {
193 field_5_optimize = optimize;
194 }
195
196
201
202 public void setOptionFlags(short options)
203 {
204 field_7_option_flags = options;
205 }
206
207
208
209
214
215 public void setOutlineLevel(short ol)
216 {
217 field_7_option_flags =
218 outlineLevel.setShortValue(field_7_option_flags, ol);
219 }
220
221
226
227 public void setColapsed(boolean c)
228 {
229 field_7_option_flags = colapsed.setShortBoolean(field_7_option_flags,
230 c);
231 }
232
233
238
239 public void setZeroHeight(boolean z)
240 {
241 field_7_option_flags =
242 zeroHeight.setShortBoolean(field_7_option_flags, z);
243 }
244
245
250
251 public void setBadFontHeight(boolean f)
252 {
253 field_7_option_flags =
254 badFontHeight.setShortBoolean(field_7_option_flags, f);
255 }
256
257
262
263 public void setFormatted(boolean f)
264 {
265 field_7_option_flags = formatted.setShortBoolean(field_7_option_flags,
266 f);
267 }
268
269
270
271
276
277 public void setXFIndex(short index)
278 {
279 field_8_xf_index = index;
280 }
281
282
286
287
288 public int getRowNumber()
289 {
290 return field_1_row_number;
291 }
292
293
297
298 public short getFirstCol()
299 {
300 return field_2_first_col;
301 }
302
303
307
308 public short getLastCol()
309 {
310 return field_3_last_col;
311 }
312
313
317
318 public short getHeight()
319 {
320 return field_4_height;
321 }
322
323
327
328 public short getOptimize()
329 {
330 return field_5_optimize;
331 }
332
333
338
339 public short getOptionFlags()
340 {
341 return field_7_option_flags;
342 }
343
344
345
346
351
352 public short getOutlineLevel()
353 {
354 return outlineLevel.getShortValue(field_7_option_flags);
355 }
356
357
362
363 public boolean getColapsed()
364 {
365 return (colapsed.isSet(field_7_option_flags));
366 }
367
368
373
374 public boolean getZeroHeight()
375 {
376 return zeroHeight.isSet(field_7_option_flags);
377 }
378
379
384
385 public boolean getBadFontHeight()
386 {
387 return badFontHeight.isSet(field_7_option_flags);
388 }
389
390
395
396 public boolean getFormatted()
397 {
398 return formatted.isSet(field_7_option_flags);
399 }
400
401
402
403
408
409 public short getXFIndex()
410 {
411 return field_8_xf_index;
412 }
413
414 public boolean isInValueSection()
415 {
416 return true;
417 }
418
419 public String toString()
420 {
421 StringBuffer buffer = new StringBuffer();
422
423 buffer.append("[ROW]\n");
424 buffer.append(" .rownumber = ")
425 .append(Integer.toHexString(getRowNumber())).append("\n");
426 buffer.append(" .firstcol = ")
427 .append(Integer.toHexString(getFirstCol())).append("\n");
428 buffer.append(" .lastcol = ")
429 .append(Integer.toHexString(getLastCol())).append("\n");
430 buffer.append(" .height = ")
431 .append(Integer.toHexString(getHeight())).append("\n");
432 buffer.append(" .optimize = ")
433 .append(Integer.toHexString(getOptimize())).append("\n");
434 buffer.append(" .reserved = ")
435 .append(Integer.toHexString(field_6_reserved)).append("\n");
436 buffer.append(" .optionflags = ")
437 .append(Integer.toHexString(getOptionFlags())).append("\n");
438 buffer.append(" .outlinelvl = ")
439 .append(Integer.toHexString(getOutlineLevel())).append("\n");
440 buffer.append(" .colapsed = ").append(getColapsed())
441 .append("\n");
442 buffer.append(" .zeroheight = ").append(getZeroHeight())
443 .append("\n");
444 buffer.append(" .badfontheig= ").append(getBadFontHeight())
445 .append("\n");
446 buffer.append(" .formatted = ").append(getFormatted())
447 .append("\n");
448 buffer.append(" .xfindex = ")
449 .append(Integer.toHexString(getXFIndex())).append("\n");
450 buffer.append("[/ROW]\n");
451 return buffer.toString();
452 }
453
454 public int serialize(int offset, byte [] data)
455 {
456 LittleEndian.putShort(data, 0 + offset, sid);
457 LittleEndian.putShort(data, 2 + offset, ( short ) 16);
458
459 LittleEndian.putShort(data, 4 + offset, ( short ) getRowNumber());
460 LittleEndian.putShort(data, 6 + offset, getFirstCol() == -1 ? (short)0 : getFirstCol());
461 LittleEndian.putShort(data, 8 + offset, getLastCol() == -1 ? (short)0 : getLastCol());
462 LittleEndian.putShort(data, 10 + offset, getHeight());
463 LittleEndian.putShort(data, 12 + offset, getOptimize());
464 LittleEndian.putShort(data, 14 + offset, field_6_reserved);
465 LittleEndian.putShort(data, 16 + offset, getOptionFlags());
466
467
468 LittleEndian.putShort(data, 18 + offset, getXFIndex());
469 return getRecordSize();
470 }
471
472 public int getRecordSize()
473 {
474 return 20;
475 }
476
477 public short getSid()
478 {
479 return this.sid;
480 }
481
482 public int compareTo(Object obj)
483 {
484 RowRecord loc = ( RowRecord ) obj;
485
486 if (this.getRowNumber() == loc.getRowNumber())
487 {
488 return 0;
489 }
490 if (this.getRowNumber() < loc.getRowNumber())
491 {
492 return -1;
493 }
494 if (this.getRowNumber() > loc.getRowNumber())
495 {
496 return 1;
497 }
498 return -1;
499 }
500
501 public boolean equals(Object obj)
502 {
503 if (!(obj instanceof RowRecord))
504 {
505 return false;
506 }
507 RowRecord loc = ( RowRecord ) obj;
508
509 if (this.getRowNumber() == loc.getRowNumber())
510 {
511 return true;
512 }
513 return false;
514 }
515 }
516