1 /
55
56
57 package org.apache.poi.hssf.record;
58
59
60
61 import org.apache.poi.util.*;
62
63
70 public class LinkedDataRecord
71 extends Record
72 {
73 public final static short sid = 0x1051;
74 private byte field_1_linkType;
75 public final static byte LINK_TYPE_TITLE_OR_TEXT = 0;
76 public final static byte LINK_TYPE_VALUES = 1;
77 public final static byte LINK_TYPE_CATEGORIES = 2;
78 private byte field_2_referenceType;
79 public final static byte REFERENCE_TYPE_DEFAULT_CATEGORIES = 0;
80 public final static byte REFERENCE_TYPE_DIRECT = 1;
81 public final static byte REFERENCE_TYPE_WORKSHEET = 2;
82 public final static byte REFERENCE_TYPE_NOT_USED = 3;
83 public final static byte REFERENCE_TYPE_ERROR_REPORTED = 4;
84 private short field_3_options;
85 private BitField customNumberFormat = new BitField(0x1);
86 private short field_4_indexNumberFmtRecord;
87 private LinkedDataFormulaField field_5_formulaOfLink;
88
89
90 public LinkedDataRecord()
91 {
92
93 }
94
95
103
104 public LinkedDataRecord(short id, short size, byte [] data)
105 {
106 super(id, size, data);
107
108 }
109
110
119
120 public LinkedDataRecord(short id, short size, byte [] data, int offset)
121 {
122 super(id, size, data, offset);
123
124 }
125
126
131 protected void validateSid(short id)
132 {
133 if (id != sid)
134 {
135 throw new RecordFormatException("Not a LinkedData record");
136 }
137 }
138
139 protected void fillFields(byte [] data, short size, int offset)
140 {
141
142 int pos = 0;
143 field_1_linkType = data[ pos + 0x0 + offset ];
144 field_2_referenceType = data[ pos + 0x1 + offset ];
145 field_3_options = LittleEndian.getShort(data, pos + 0x2 + offset);
146 field_4_indexNumberFmtRecord = LittleEndian.getShort(data, pos + 0x4 + offset);
147 field_5_formulaOfLink = new org.apache.poi.hssf.record.LinkedDataFormulaField();
148 pos += field_5_formulaOfLink.fillField(data,size,pos + offset + 6);
149
150 }
151
152 public String toString()
153 {
154 StringBuffer buffer = new StringBuffer();
155
156 buffer.append("[AI]\n");
157 buffer.append(" .linkType = ")
158 .append("0x").append(HexDump.toHex( getLinkType ()))
159 .append(" (").append( getLinkType() ).append(" )");
160 buffer.append(System.getProperty("line.separator"));
161 buffer.append(" .referenceType = ")
162 .append("0x").append(HexDump.toHex( getReferenceType ()))
163 .append(" (").append( getReferenceType() ).append(" )");
164 buffer.append(System.getProperty("line.separator"));
165 buffer.append(" .options = ")
166 .append("0x").append(HexDump.toHex( getOptions ()))
167 .append(" (").append( getOptions() ).append(" )");
168 buffer.append(System.getProperty("line.separator"));
169 buffer.append(" .customNumberFormat = ").append(isCustomNumberFormat()).append('\n');
170 buffer.append(" .indexNumberFmtRecord = ")
171 .append("0x").append(HexDump.toHex( getIndexNumberFmtRecord ()))
172 .append(" (").append( getIndexNumberFmtRecord() ).append(" )");
173 buffer.append(System.getProperty("line.separator"));
174 buffer.append(" .formulaOfLink = ")
175 .append(" (").append( getFormulaOfLink() ).append(" )");
176 buffer.append(System.getProperty("line.separator"));
177
178 buffer.append("[/AI]\n");
179 return buffer.toString();
180 }
181
182 public int serialize(int offset, byte[] data)
183 {
184 int pos = 0;
185
186 LittleEndian.putShort(data, 0 + offset, sid);
187 LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4));
188
189 data[ 4 + offset + pos ] = field_1_linkType;
190 data[ 5 + offset + pos ] = field_2_referenceType;
191 LittleEndian.putShort(data, 6 + offset + pos, field_3_options);
192 LittleEndian.putShort(data, 8 + offset + pos, field_4_indexNumberFmtRecord);
193 pos += field_5_formulaOfLink.serializeField( pos + 10 + offset, data );
194
195 return getRecordSize();
196 }
197
198
201 public int getRecordSize()
202 {
203 return 4 + 1 + 1 + 2 + 2 + field_5_formulaOfLink.getSize();
204 }
205
206 public short getSid()
207 {
208 return this.sid;
209 }
210
211 public Object clone() {
212 LinkedDataRecord rec = new LinkedDataRecord();
213
214 rec.field_1_linkType = field_1_linkType;
215 rec.field_2_referenceType = field_2_referenceType;
216 rec.field_3_options = field_3_options;
217 rec.field_4_indexNumberFmtRecord = field_4_indexNumberFmtRecord;
218 rec.field_5_formulaOfLink = ((org.apache.poi.hssf.record.LinkedDataFormulaField)field_5_formulaOfLink.clone());;
219 return rec;
220 }
221
222
223
224
225
233 public byte getLinkType()
234 {
235 return field_1_linkType;
236 }
237
238
247 public void setLinkType(byte field_1_linkType)
248 {
249 this.field_1_linkType = field_1_linkType;
250 }
251
252
262 public byte getReferenceType()
263 {
264 return field_2_referenceType;
265 }
266
267
278 public void setReferenceType(byte field_2_referenceType)
279 {
280 this.field_2_referenceType = field_2_referenceType;
281 }
282
283
286 public short getOptions()
287 {
288 return field_3_options;
289 }
290
291
294 public void setOptions(short field_3_options)
295 {
296 this.field_3_options = field_3_options;
297 }
298
299
302 public short getIndexNumberFmtRecord()
303 {
304 return field_4_indexNumberFmtRecord;
305 }
306
307
310 public void setIndexNumberFmtRecord(short field_4_indexNumberFmtRecord)
311 {
312 this.field_4_indexNumberFmtRecord = field_4_indexNumberFmtRecord;
313 }
314
315
318 public LinkedDataFormulaField getFormulaOfLink()
319 {
320 return field_5_formulaOfLink;
321 }
322
323
326 public void setFormulaOfLink(LinkedDataFormulaField field_5_formulaOfLink)
327 {
328 this.field_5_formulaOfLink = field_5_formulaOfLink;
329 }
330
331
335 public void setCustomNumberFormat(boolean value)
336 {
337 field_3_options = customNumberFormat.setShortBoolean(field_3_options, value);
338 }
339
340
344 public boolean isCustomNumberFormat()
345 {
346 return customNumberFormat.isSet(field_3_options);
347 }
348
349
350 }
351
352
353
354
355