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